# Schema for local AI SEO | AI SEO course, lesson 4

> 5 steps to local business schema for AI search: the LocalBusiness fields that matter, Service, FAQPage and sameAs, a copy-paste JSON-LD block, validation.

URL: https://aiseocourse.net/lessons/schema-and-structured-data-for-local-ai-seo/
Last-Modified: 2026-09-21
Author: Adam Yong

would turn main into a scroll container and break every \`position: sticky\` inside it. --> 

Skip to main content

[#main-content →](#main-content)

Lesson 4 of 8

# Schema for local AI SEO

Published 21 September 2026 · Last reviewed 21 September 2026

LocalBusiness, Service, FAQPage and sameAs markup so AI engines can resolve your business as one entity, plus how to validate it and what not to mark up.

schedule 8 min read lock\_open Free, no signup person Written by Adam Yong

Next: lesson 5 arrow\_forward

[/lessons/build-a-local-site-ai-can-find/ →](/lessons/build-a-local-site-ai-can-find/)

 

All 8 lessons

[/lessons/ →](/lessons/)

![JSON-LD block connecting a business entity to address, hours, areaServed and external profile nodes](/images/misc/flat-editorial-illustration-of-a-json-ld-block-con.webp)

verified 100% Free, no signup, no paywall

group 1,100+ readers

schedule 8 lessons · ~80 minutes

What it fixes

[#what-it-fixes →](#what-it-fixes)

 

The lesson

[#lesson →](#lesson)

 

Key takeaways

[#takeaways →](#takeaways)

 

Figures

[#figures →](#figures)

 

Steps

[#steps →](#steps)

 

Guides

[#guides →](#guides)

 

FAQ

[#faq →](#faq)

What it fixes

## Entity problems LocalBusiness schema solves

fingerprint

### Another business shares your name

Two plumbers called Halvorsen in the same state is enough for an engine to hedge or merge them. Structured data is often what lets it tell you apart.

local\_shipping

### You trade without a public address

Mobile and service-area businesses lose one of the strongest verification signals by default. Markup with areaServed puts a machine-readable version of your coverage back on the table.

help\_center

### You were told to add schema, not which fields matter

Most templates ship dozens of properties and a handful do the work. This lesson names the ones worth filling and the ones you can leave empty.

## What this lesson covers

check

What structured data does, and what Google says it does not do for AI features

check

The LocalBusiness fields that actually matter

check

Service, FAQPage and sameAs, and when to use each

check

A copy-paste JSON-LD block for the plumber example

check

How to validate, and what not to mark up

## Structured data is your facts, stated so they cannot be misread

Lesson 3

[/lessons/local-site-content-ai-can-cite/ →](/lessons/local-site-content-ai-can-cite/)

 was about writing facts a human can read and an assistant can lift. This lesson is about stating the same facts a second time, in a format built for machines.

Schema.org is a shared vocabulary for describing things on the web. 

JSON-LD

[/glossary/#schema-and-json-ld →](/glossary/#schema-and-json-ld)

 is the format used to write that vocabulary into a page: a small script block that says, in effect, this page is about a business, here is its name, here is its address, here are its hours. Engines read it directly rather than inferring it from your layout.

The honest framing first. Google states that there is no special schema.org structured data you need to add to appear in AI Overviews or AI Mode (Google Search Central, page updated 10 December 2025, checked 17 September 2026). So for a business whose facts are already clean and unambiguous, schema is a marginal gain. For a business that is hard to pin down, a service-area operator with no public address, a name shared with another business in the region, a recent move, it can be the thing that lets an engine resolve you as one entity at all. The 

guide on whether you need schema for AI Overviews

[/guide/do-you-need-schema-to-appear-in-ai-overviews/ →](/guide/do-you-need-schema-to-appear-in-ai-overviews/)

 gives the direct answer on where your site sits.

## The fields that earn their place

Google's LocalBusiness documentation requires only two properties, name and address, and recommends geo, openingHoursSpecification, priceRange, telephone and url among others (Google Search Central, checked 21 September 2026). In practice these are the ones that consistently matter:

-   `name` and `url`, your trading name and canonical site URL.
-   `telephone`, matching your profile exactly, including format.
-   `address` as a PostalAddress, or `areaServed` if you hide your address.
-   `openingHoursSpecification`, matching the profile again.
-   `geo` as GeoCoordinates, useful for proximity understanding.
-   `sameAs`, an array of the external profiles you own.
-   `image` and `logo`, so the entity has a visual reference.
-   `priceRange`, a rough band rather than a precise figure.

Then there are the fields people add that change nothing. `slogan`: nobody retrieves a slogan. `foundingDate` on its own: fine to include, not worth debating. Elaborate `makesOffer` structures for a business with three services: the complexity outruns the benefit. And two blocks from two plugins, a common WordPress problem where the theme and an SEO plugin each emit their own LocalBusiness block and disagree about the hours. One block, one source of truth.

## The block for Halvorsen Plumbing

Here is the block for the fictional Boise plumber this course follows. Schema.org has a Plumber type under LocalBusiness (via HomeAndConstructionBusiness), so it uses that. Use the most specific subtype that honestly fits you: Plumber, Electrician, HVACBusiness, Dentist, AccountingService, Attorney or LegalService, CafeOrCoffeeShop, AutoRepair. A cleaning business has no exact subtype, so it uses LocalBusiness and lets the services list carry the specifics. A wrong specific type misinforms; a correct general type plus clear content does not. The `@id` gives the business a stable identifier, so a Service or FAQPage block elsewhere on the site can point at the same entity instead of describing a second one. Replace the values, delete what does not apply, and validate before you ship it.

```
{
  "@context": "https://schema.org",
  "@type": "Plumber",
  "@id": "https://halvorsenplumbing.example/#business",
  "name": "Halvorsen Plumbing",
  "url": "https://halvorsenplumbing.example/",
  "telephone": "+1-208-555-0147",
  "email": "office@halvorsenplumbing.example",
  "image": "https://halvorsenplumbing.example/images/shop-front.jpg",
  "priceRange": "$$",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "1420 W Main Street, Suite B",
    "addressLocality": "Boise",
    "addressRegion": "ID",
    "postalCode": "83702",
    "addressCountry": "US"
  },
  "geo": { "@type": "GeoCoordinates", "latitude": 43.6166, "longitude": -116.2079 },
  "areaServed": [
    { "@type": "City", "name": "Boise" },
    { "@type": "City", "name": "Meridian" },
    { "@type": "City", "name": "Nampa" },
    { "@type": "City", "name": "Eagle" }
  ],
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
      "opens": "07:00",
      "closes": "18:00"
    },
    { "@type": "OpeningHoursSpecification", "dayOfWeek": "Saturday", "opens": "08:00", "closes": "14:00" }
  ],
  "sameAs": [
    "https://www.facebook.com/halvorsenplumbing",
    "https://www.yelp.com/biz/halvorsen-plumbing-boise"
  ]
}
```

Two rules that matter more than the syntax. Everything in that block must match your visible page, and everything must match your Google Business Profile. Google's general guidelines say not to mark up content that is not visible to readers of the page (Google Search Central, checked 21 September 2026), and markup that disagrees with the page it sits on creates exactly the contradiction 

Lesson 2

[/lessons/google-business-profile-for-ai-search/ →](/lessons/google-business-profile-for-ai-search/)

 told you to eliminate. Note the hours block says nothing about 24-hour emergency service, because the shop is not open 24 hours. That fact lives in the visible text and in the Service markup below.

## Service and FAQPage, and when to add them

Two more types are worth a few minutes each.

**Service** describes one thing you do. On Halvorsen's water heater page, a Service node with `name` "Water heater replacement", `provider` pointing at the business `@id`, `areaServed` the same four cities, and an `offers` node with a `priceSpecification` of $1,600 to $2,900 restates the page's own table in machine form. One Service node per service page, never a list of twenty on the homepage.

**FAQPage** wraps the question-and-answer pairs you wrote in Lesson 3. Each `Question` carries the heading text and each `acceptedAnswer` carries the paragraph under it, word for word. If the visible answer changes, the markup changes.

Neither type will get you named on its own. They make an engine's job of matching a page to a query slightly easier, and they cost about ten minutes once the LocalBusiness block exists.

## Installing it

Wrap the JSON in a script tag with `type="application/ld+json"` and put it in the page. Head or body both work, despite the confident advice you will read elsewhere. What matters is that it renders in the served HTML and that the page it sits on is the page it describes.

On WordPress, a schema plugin or a snippet in the theme header both work, though a plugin that also generates its own competing block is a common source of duplication. On a hosted builder, look for a custom code or head-injection setting. On a hand-coded or static site, add it to the layout template. The 

guide on adding JSON-LD to a local business site

[/guide/how-to-add-json-ld-to-a-local-business-site/ →](/guide/how-to-add-json-ld-to-a-local-business-site/)

 walks each path and lists the mistakes that silently invalidate a block.

## Validate, then check it is actually live

Two checks, both free, both quick.

**Google Rich Results Test.** Paste the live URL. It tells you whether Google can parse the markup and whether the page is eligible for any rich result (checked 21 September 2026).

**Schema Markup Validator.** The validator at validator.schema.org reports structural problems that the Google tool skips, because it checks the vocabulary rather than one search product's requirements (checked 21 September 2026).

Then view the rendered page source and confirm the block is present on every page it should be. Markup that only exists in a plugin preview helps nobody. Re-run both checks any time you change a fact.

## sameAs and entity resolution

The `sameAs` array is how you tell an engine that the business on your site, the one on your Google profile, the one on Facebook and the one on Yelp are all the same organisation. For a local business it is the highest-value part of the block after the basics.

List only profiles you genuinely own and maintain, typically three to eight. Dead or abandoned profiles are weak signals worth cleaning up. Almost no local business needs a Wikidata item, despite what you may have been told. The 

guide on using sameAs

[/guide/using-sameas-to-link-your-business-to-wikidata/ →](/guide/using-sameas-to-link-your-business-to-wikidata/)

 explains when it is worth the effort and when it is not.

> **Going deeper.** Entity work past sameAs, building and reconciling a Knowledge Graph presence across many sources, is where AI SEO Rainmakers picks up; it covers this with weekly tested playbooks at 
> 
> seo.stream
> 
> [https://seo.stream/ →](https://seo.stream/)
> 
> .

## What not to mark up

It will not make a thin page quotable. It will not rescue a business whose listings contradict each other. And it cannot invent authority. Google's review snippet guidelines say ratings must be sourced directly from users, and that when the entity being reviewed controls the reviews about itself, pages using LocalBusiness or Organization markup are ineligible for the star feature (Google Search Central, checked 21 September 2026). Marking up your Google rating on your own site is the most common version of this mistake.

| Problem | Does schema fix it? | What actually fixes it |
| --- | --- | --- |
| Facts are correct but ambiguous to a machine | Yes, this is its job | A validated LocalBusiness block |
| Listings contradict each other | No | The NAP audit in Lesson 2 |
| Pages contain nothing specific to quote | No | Rewriting passages, per Lesson 3 |
| You want stars in search results | No, not from your own reviews | Reviews on Google itself, per Lesson 6 |

Treat schema as what it is: the cheapest way to remove ambiguity about facts you have already made true elsewhere.

## Exercise

Get one valid block live on your homepage.

1.  Copy the Halvorsen block above into a text editor. Change `@type` to the most specific subtype that fits you, or `LocalBusiness` if none does.
2.  Replace every value with yours, copied character for character from your Google Business Profile. Delete `address` and keep `areaServed` if you hide your address.
3.  Delete `sameAs` entries you do not own. Add the ones you do.
4.  Install it through whichever route your site uses, then load the live page and confirm the block is in the served source.
5.  Run the Rich Results Test and the Schema Markup Validator. Fix every error. Warnings about optional fields can wait.

## Check your work

-   `@type` is a real Schema.org type and the most specific one that honestly describes you.
-   Name, phone, address or areaServed, and hours match your profile and your visible page exactly.
-   The block appears in the served HTML of the live page, not only in a plugin preview.
-   Both validators pass with zero errors.
-   No `aggregateRating` or `review` markup unless the reviews are collected on your own site.
-   `sameAs` lists only profiles you own and keep current.
-   If you added Service or FAQPage, the marked-up text matches the visible text word for word.

## Sources

-   Google Search Central, "AI features and your website", page updated 10 December 2025: 
    
    https://developers.google.com/search/docs/appearance/ai-features
    
    [https://developers.google.com/search/docs/appearance/ai-features →](https://developers.google.com/search/docs/appearance/ai-features)
    
     (checked 17 September 2026)
-   Google Search Central, "Local business (LocalBusiness) structured data": 
    
    https://developers.google.com/search/docs/appearance/structured-data/local-business
    
    [https://developers.google.com/search/docs/appearance/structured-data/local-business →](https://developers.google.com/search/docs/appearance/structured-data/local-business)
    
     (checked 21 September 2026)
-   Google Search Central, "General structured data guidelines": 
    
    https://developers.google.com/search/docs/appearance/structured-data/sd-policies
    
    [https://developers.google.com/search/docs/appearance/structured-data/sd-policies →](https://developers.google.com/search/docs/appearance/structured-data/sd-policies)
    
     (checked 21 September 2026)
-   Google Search Central, "Review snippet structured data": 
    
    https://developers.google.com/search/docs/appearance/structured-data/review-snippet
    
    [https://developers.google.com/search/docs/appearance/structured-data/review-snippet →](https://developers.google.com/search/docs/appearance/structured-data/review-snippet)
    
     (checked 21 September 2026)
-   Schema.org, LocalBusiness type: 
    
    https://schema.org/LocalBusiness
    
    [https://schema.org/LocalBusiness →](https://schema.org/LocalBusiness)
    
     and Plumber type: 
    
    https://schema.org/Plumber
    
    [https://schema.org/Plumber →](https://schema.org/Plumber)
    
     (both checked 21 September 2026)
-   Google Rich Results Test: 
    
    https://search.google.com/test/rich-results
    
    [https://search.google.com/test/rich-results →](https://search.google.com/test/rich-results)
    
     (checked 21 September 2026)
-   Schema Markup Validator: 
    
    https://validator.schema.org/
    
    [https://validator.schema.org/ →](https://validator.schema.org/)
    
     (checked 21 September 2026)
-   SEO.Stream, public description of AI SEO Rainmakers: 
    
    https://seo.stream/
    
    [https://seo.stream/ →](https://seo.stream/)
    
     (checked 17 September 2026)

![Annotated LocalBusiness JSON-LD code panel with high-value fields highlighted](/images/content/annotated-localbusiness-json-ld-code-panel-in-mono.webp)

Annotated LocalBusiness JSON-LD code panel with high-value fields highlighted

Ask AI about this lesson:

travel\_explorePerplexity

[https://www.perplexity.ai/search?q=Read%20https%3A%2F%2Faiseocourse.net%2Flessons%2Fschema-and-structured-data-for-local-ai-seo%2F%20and%20summarise%20what%20it%20says%20about%20Schema%20for%20local%20AI%20SEO%20for%20a%20local%20business%20owner%2C%20then%20list%20the%20three%20actions%20it%20recommends%20first. →](https://www.perplexity.ai/search?q=Read%20https%3A%2F%2Faiseocourse.net%2Flessons%2Fschema-and-structured-data-for-local-ai-seo%2F%20and%20summarise%20what%20it%20says%20about%20Schema%20for%20local%20AI%20SEO%20for%20a%20local%20business%20owner%2C%20then%20list%20the%20three%20actions%20it%20recommends%20first.)

chatChatGPT

[https://chatgpt.com/?q=Read%20https%3A%2F%2Faiseocourse.net%2Flessons%2Fschema-and-structured-data-for-local-ai-seo%2F%20and%20summarise%20what%20it%20says%20about%20Schema%20for%20local%20AI%20SEO%20for%20a%20local%20business%20owner%2C%20then%20list%20the%20three%20actions%20it%20recommends%20first. →](https://chatgpt.com/?q=Read%20https%3A%2F%2Faiseocourse.net%2Flessons%2Fschema-and-structured-data-for-local-ai-seo%2F%20and%20summarise%20what%20it%20says%20about%20Schema%20for%20local%20AI%20SEO%20for%20a%20local%20business%20owner%2C%20then%20list%20the%20three%20actions%20it%20recommends%20first.)

auto\_awesomeGemini

[https://gemini.google.com/app?q=Read%20https%3A%2F%2Faiseocourse.net%2Flessons%2Fschema-and-structured-data-for-local-ai-seo%2F%20and%20summarise%20what%20it%20says%20about%20Schema%20for%20local%20AI%20SEO%20for%20a%20local%20business%20owner%2C%20then%20list%20the%20three%20actions%20it%20recommends%20first. →](https://gemini.google.com/app?q=Read%20https%3A%2F%2Faiseocourse.net%2Flessons%2Fschema-and-structured-data-for-local-ai-seo%2F%20and%20summarise%20what%20it%20says%20about%20Schema%20for%20local%20AI%20SEO%20for%20a%20local%20business%20owner%2C%20then%20list%20the%20three%20actions%20it%20recommends%20first.)

Visual reference

## Figures from this lesson

Diagrams you can screenshot and keep beside you while you work through the steps.

 

Why it matters

## Why structured data earns its place for a local business

fingerprint

### It removes ambiguity

If two businesses in your region share a name, or you trade without a public address, structured data is often what lets an engine tell you apart.

task\_alt

### It is a one-time job

Written once, validated once, then touched only when a fact changes. Few things in this course have that profile.

sync

### It keeps your facts in sync

Markup that mirrors your profile gives engines a second, machine-readable copy of the same story. Agreement is the signal.

balance

### It is honest about its limits

This lesson quotes Google on what schema does not do for AI features, which saves you an afternoon if content work should come first.

Steps

## How to add LocalBusiness JSON-LD and validate it

1.  1 category
    
    ### Pick the right type
    
    Use the most specific LocalBusiness subtype that genuinely describes you, such as Plumber, and fall back to LocalBusiness when none fits.
    
2.  2 edit\_note
    
    ### Fill the high-value fields
    
    Name, address or areaServed, telephone, openingHoursSpecification, url and geo. Match your profile exactly.
    
3.  3 hub
    
    ### Add sameAs links
    
    List the external profiles you actually own and maintain, so an engine can resolve them all to one entity.
    
4.  4 code
    
    ### Install it
    
    Drop the JSON-LD script into the page. Head or body both work, sitewide on the homepage plus per-page where the facts differ.
    
5.  5 verified
    
    ### Validate and re-check
    
    Run the Rich Results Test and the Schema.org validator. Fix errors, then confirm the block is live on every page it should be.
    

## Markup live? Now build the site around it.

Lesson 5 covers the structure, crawler permissions and llms.txt basics, then builds the plumber site in one afternoon.

play\_arrow Continue to lesson 5

[/lessons/build-a-local-site-ai-can-find/ →](/lessons/build-a-local-site-ai-can-find/)

 

Open the 90-day checklist

[/checklist/ →](/checklist/)

## Guides that go deeper on schema and structured data

Short, evergreen answers that go deeper than the lesson itself.

decision-stage

### Do you need schema to appear in AI Overviews?

A direct answer: what schema demonstrably helps with, what it doesn't, and who should skip it and do content work first.

[Do you need schema to appear in AI Overviews? →](/guide/do-you-need-schema-to-appear-in-ai-overviews/)

process

### Where to paste JSON-LD on WordPress, Wix, Squarespace and a static site

Where the script tag goes on each platform, how to validate it, and the mistakes that silently break a block.

[Where to paste JSON-LD on WordPress, Wix, Squarespace and a static site →](/guide/how-to-add-json-ld-to-a-local-business-site/)

scenario

### Marking up areaServed when you serve several towns

areaServed shapes, how many places to list before it stops helping, and keeping schema consistent with your profile service areas.

[Marking up areaServed when you serve several towns →](/guide/marking-up-areaserved-when-you-serve-several-towns/)

process

### Using sameAs to link your business to Wikidata and your real profiles

What sameAs does, which profiles to list and in what order, whether you need a Wikidata item, and how to check the links resolve.

[Using sameAs to link your business to Wikidata and your real profiles →](/guide/using-sameas-to-link-your-business-to-wikidata/)

Reader feedback

## What readers said about the schema lesson

Feedback from owners and SEOs working through the lessons. These are reader comments, not Google Business Profile reviews.

> "I am not technical and I still got the block live in an hour. The part that saved me was the list of what to leave out, because our old plugin had marked up a rating we never collected."

Priya S.

Manager, mobile detailing business

Common questions

## LocalBusiness schema for AI SEO: common questions

Do I need schema to appear in AI Overviews? expand\_more

No. Google states there is no special schema.org structured data you need to add to appear in AI Overviews or AI Mode. Schema helps at the margin and helps most when your entity is ambiguous. The guide on whether you need schema for AI Overviews gives the direct answer.

Should I use LocalBusiness or a more specific subtype? expand\_more

Use the most specific subtype that genuinely fits, such as Plumber, Dentist or HVACBusiness, and fall back to LocalBusiness when none does. A wrong specific type is worse than a correct general one.

Where does the JSON-LD script go? expand\_more

Head or body both work. What matters more is that it is present on the pages it describes, that it is valid, and that it does not contradict the visible content.

Do I need aggregateRating markup? expand\_more

Only if the reviews are genuinely collected on your own site. Google's review snippet guidelines say pages using LocalBusiness or Organization markup are ineligible for star features when the business controls the reviews about itself.

Can I have more than one schema block on a page? expand\_more

Yes, as long as each describes a distinct entity and they do not contradict each other. A LocalBusiness block plus an FAQPage block on the same page is normal.

My markup validates but nothing changed. Why? expand\_more

Validation confirms syntax, not eligibility or impact. If your pages have nothing specific to quote, correct markup will not create something. Go back to Lesson 3 first.

I serve several towns. How do I mark that up? expand\_more

Use areaServed with named places rather than inventing a page per town. The guide on marking up areaServed covers named places versus a geo radius and how many to list.

Does schema need to be on every page? expand\_more

The business block belongs on the pages that describe the business, the homepage and contact page at minimum, and often sitewide through a shared template. Service pages can carry a Service block that references the same entity by its @id rather than repeating a second full business description.

## Related lessons

Lesson 3

### Write local pages AI can quote

What on-page content AI assistants are willing to quote, and how to write it: answer-first structure, one service per page, facts instead of adjectives.

[Write local pages AI can quote →](/lessons/local-site-content-ai-can-cite/)

Lesson 5

### Build a local site AI can find

The method (structure, pages, the profile link, llms.txt, crawler permissions), then a walkthrough building the plumber site with LocusPilot. Disclosure included.

[Build a local site AI can find →](/lessons/build-a-local-site-ai-can-find/)

![Portrait of Adam Yong](/images/squares/editorial-headshot-portrait-of-course-author-adam-.webp)

Adam Yong

Founder, LocusPilot

Founder of LocusPilot and Agility Writer; leads GEO strategy at ADE Marketing.

verified Founder, LocusPilot (AI website builder for local businesses)

More about the author

[/author/adam-yong/ →](/author/adam-yong/)

Open access · immediate start

## Ready for Lesson 5?

Build a local site AI can find. It picks up exactly where this lesson stops.

Read lesson 5 arrow\_forward

[/lessons/build-a-local-site-ai-can-find/ →](/lessons/build-a-local-site-ai-can-find/)

 

View the 90-day checklist

[/checklist/ →](/checklist/)

No signup. No paywall. 8 lessons, ~80 minutes.
