LocalBusiness Schema for AI Answers: Which Properties Matter
Which LocalBusiness subtype and properties to use, a complete JSON-LD example for a hypothetical bakery, and how to keep the markup in step with your Business Profile.
- 5 AI engines checked
- A score for every page
- The passage an AI would quote
LocalBusiness schema for AI answers is JSON-LD markup that uses the most specific business type, such as Bakery or Plumber, to state your name, address, phone, opening hours and map coordinates. It helps engines attach the right local facts to your business when every value matches your visible pages and your Google Business Profile exactly.
- Google requires 2 properties for LocalBusiness markup, name and address, and recommends more, including geo, opening hours, telephone and url (Google's local business structured data documentation).
- Coordinates in the geo property need at least 5 decimal places, and a priceRange value must be shorter than 100 characters or Google will not show it.
- Google's AI features page lists 1 structured data practice for AI Overviews and AI Mode: markup must match the visible text on the page (Google's AI features documentation).
- Organization markup needs a logo of at least 112 by 112 pixels, and Google says a local business should add the Organization properties to its LocalBusiness subtype (Google's Organization structured data documentation).
Which LocalBusiness type should your business use?
Your business should use the most specific LocalBusiness subtype that describes it, such as Bakery, Dentist, Plumber or Restaurant, rather than the general LocalBusiness type.
Google's documentation asks for the most specific subtype possible and gives Restaurant, DaySpa and HealthClub as examples. A specific type tells an engine what kind of business you are before it reads a word of your text, which matters when someone asks an AI assistant for "a plumber open on Saturday" rather than for a business by name. The general LocalBusiness type is the fallback only when no subtype fits.
Pick the subtype that matches your main category on Google Business Profile. A café that lists itself as a coffee shop on its profile and as a Restaurant in its markup is giving two answers to the same question, while CafeOrCoffeeShop in the markup agrees with the profile. If your business does two things, choose the one customers come for most and describe the rest in your text and service pages.
LocalBusiness sits under Organization in the schema.org vocabulary, so a LocalBusiness block can carry every Organization property as well. Google recommends exactly that for local firms: use the subtype, fill its fields and add the Organization fields such as logo and sameAs. One combined block describes the business once, which is cleaner than a separate Organization block that might drift out of step.
Which properties does Google require and recommend?
Google requires name and address, and recommends geo, openingHoursSpecification, telephone and url; a few more apply only to certain kinds of business.
The table sets out each property, what Google says about it and how to fill it for a typical shop or practice. Food businesses have extra options for cuisine and menu, and larger premises can describe departments separately. Everything else in the block should come from the Organization properties, starting with logo and sameAs.
| Property | Status in Google's documentation | How to fill it |
|---|---|---|
| name | Required | Your real trading name, exactly as on your signage and Business Profile |
| address | Required | A PostalAddress with street, town, postcode and country; include as many parts as possible |
| geo | Recommended | Latitude and longitude with at least 5 decimal places, taken from your map pin |
| openingHoursSpecification | Recommended | One entry per set of days with the same hours, in 24 hour time |
| telephone | Recommended | The main number customers call, with the country code |
| url | Recommended | The full address of the page for this specific location |
| priceRange | Recommended | A short relative indication under 100 characters, or leave it out |
| servesCuisine, menu | Recommended for food businesses | The cuisine type and the full address of your menu page |
| department | Recommended where it applies | A nested item for a separate department, such as a pharmacy inside a shop |
Geo precision is worth getting right. Five decimal places locate a point to within roughly a metre, so take the figures from your own pin rather than from the centre of your town. A map point that lands on the wrong street can send an AI answer's directions, and a customer, to the wrong door.
What does a LocalBusiness JSON-LD block look like?
A LocalBusiness block is one script element with a single object typed as your subtype, holding the local facts and the Organization facts together.
The example below is for a hypothetical bakery in Leeds called Example Street Bakery. The phone number is from a range set aside for drama, the coordinates are illustrative and the addresses are placeholders, so replace every value with your own. The block combines the Bakery subtype's local facts with the Organization facts, logo and sameAs, so the business is described once.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Bakery",
"name": "Example Street Bakery",
"url": "https://www.examplestreetbakery.example/",
"logo": "https://www.examplestreetbakery.example/images/logo-512.png",
"image": "https://www.examplestreetbakery.example/images/shopfront.jpg",
"description": "Example Street Bakery is a family bakery in Leeds city centre. Sourdough is baked on site every morning. Celebration cakes are made to order with a week's notice.",
"telephone": "+44 113 496 0456",
"address": {
"@type": "PostalAddress",
"streetAddress": "14 Example Street",
"addressLocality": "Leeds",
"postalCode": "LS1 6AA",
"addressCountry": "GB"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 53.79648,
"longitude": -1.54785
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "07:00",
"closes": "16:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": "Saturday",
"opens": "08:00",
"closes": "14:00"
}
],
"sameAs": [
"https://www.instagram.com/examplestreetbakery.example",
"https://www.facebook.com/examplestreetbakery.example"
]
}
</script>
Sunday does not appear, which tells engines the shop is not open that day. Google's documentation gives three patterns for unusual hours: opens at 00:00 and closes at 23:59 for a business open all day, opens and closes both at 00:00 for a day closed, and validFrom with validThrough for seasonal hours such as a Christmas closure. Use the last pattern for any holiday change, and remove it once the dates have passed.
Every value in the block should be visible somewhere on the page or the contact page. The hours in the footer, the address on the contact page and the description at the top of the About page are what the markup repeats, which keeps it within Google's rule that structured data must match the visible text. If a fact appears only in the code, add it to the page or take it out of the markup.
How should LocalBusiness markup match your Google Business Profile?
LocalBusiness markup should match your Google Business Profile character for character in name, address, phone and hours, and use the subtype that fits your profile's main category.
AI answers to local questions can draw on several sources at once, including your website, your Business Profile and directory listings. When the profile says the bakery closes at 16:00 and the markup says 17:00, an engine has two conflicting facts and no way of knowing which is current. Owners report AI answers quoting old hours or a previous address, which is what you would expect when sources disagree, and the cure is the same in every case: one set of facts, copied everywhere.
Format differences count as differences. "14 Example St" and "14 Example Street" are the same place to a person, but they are two strings to a machine that compares them, so pick one form and use it on the website, in the markup, on the profile and in directories. The same applies to phone numbers: write them with the country code in the markup and keep the local format consistent on the page.
Change every copy on the same day. When hours change for a season or a move, update the profile, the visible page and the markup together, then Bing Places and the main directories. A dated change log, even a simple note, makes the next update quicker because you know every place the fact lives.
How do service-area and multi-location businesses mark up?
Each physical location gets its own page and its own LocalBusiness block, while a service-area business marks up the base it works from and describes its area in text.
Google describes the url property as the address of the specific business location, which points to one page per location. A dental practice with surgeries in two towns should give each surgery a page with its own address, phone, hours and map point, and a block on that page describing that surgery alone. Putting both addresses in one block on the homepage blurs two locations into one business with two addresses, which is harder for any engine to use.
A service-area business, such as a plumber in Nairobi who visits customers rather than receiving them, still needs an address because Google lists it as required. Use the registered or office address you are prepared to show on your website, and if you hide your address on your Business Profile, think carefully before printing it in markup, since markup must reflect what the page shows. The areas you serve belong in visible text, such as a service area section naming each district, where an AI engine can quote them.
The schema.org vocabulary also offers an areaServed property for listing districts or towns. Google's local business documentation does not list it among the properties it uses, so treat it as an extra description rather than something Google acts on. The visible list of areas does more work, because it is text an engine can lift into an answer.
Which LocalBusiness properties should you leave out or keep generic?
Leave out ratings of your own business and anything not shown on the page, and keep priceRange generic or omit it.
Google recommends aggregateRating and review only for websites that collect reviews about other local businesses. A bakery marking up its own customer reviews in its LocalBusiness block falls outside that recommendation, so keep testimonials as visible text and let review platforms carry the ratings. Engines can still read and quote what customers say on the page.
The priceRange property is recommended but easy to get wrong. Google only says it must be shorter than 100 characters, and a value that names exact prices goes out of date the moment prices change. A short relative description, or no value at all, is safer than figures that contradict your price list next spring.
Hidden or aspirational facts are the third thing to drop. Opening hours you plan to offer, a second location not yet open or services you do not list on the page should wait until they are real and visible. Google's guidelines say not to mark up content readers cannot see, and a false fact in markup is one more conflicting source for an engine to weigh.
How do you test LocalBusiness markup?
You test LocalBusiness markup with Google's Rich Results Test, fix any critical errors, then publish and check the live page with the URL Inspection tool.
Google's local business documentation sets out that order: validate the code, deploy a few pages, inspect them in Search Console and allow several days for crawling. The Rich Results Test accepts a live address or pasted code, so you can check a block before it goes live, and it reports errors such as a missing address or a broken bracket. Fix every error and read each warning, since a warning often points to a recommended property you could fill.
The test confirms that Google can read the markup, not that the page is ready for AI answers. To see that side, scan your website with the AI Search Visibility Checker, which asks for your pages as each engine's search bot, shows which question each location page can win and which passage an AI would quote. A location page that the engines cannot reach, or one with no plain answer about where you are and when you open, gains little from clean markup.
Repeat both checks whenever a fact changes. Holiday hours, a new phone number or a move are the moments when the website, the markup and the profile most often fall out of step. A quick retest after each change takes minutes and catches the mismatch before customers do.
Questions local business owners ask about LocalBusiness schema
Does LocalBusiness schema put my business in Google AI Overviews?
No markup guarantees that. Google says no special structured data is needed for AI Overviews or AI Mode, and that a page must be indexed and eligible to show with a snippet. The markup helps Google read your facts correctly once the page is eligible.
Do I need LocalBusiness schema if I have a Google Business Profile?
It is still worth adding. The profile and the website are separate sources, and the markup states the website's facts clearly so they can be matched with the profile. Engines other than Google may never see your Google profile, so your website may be where they find these facts in structured form.
Should I add opening hours to the markup if they change often?
Yes, but only if you will keep them current. Out-of-date hours in markup are worse than none, because they contradict the profile. Use validFrom and validThrough for seasonal changes and update the regular hours the same day they change.
Can I mark up several locations on one page?
You can, but one page per location works better. Google describes the url property as the address of a specific location, which suggests a page for each. A page per location also gives each one its own visible answer about address and hours.
Which subtype should I choose if none fits exactly?
Choose the closest specific subtype, and fall back to LocalBusiness only when nothing fits. Match it to your main Business Profile category where you can. Describe the rest of what you do in plain text on the page.
Mark up your location this week
Start with your Google Business Profile, because it is the copy most people and engines see, and correct anything out of date in the name, address, phone or hours.
Then make your contact page show the same facts in plain text, write the LocalBusiness block with the subtype that matches your main profile category, and run it through the Rich Results Test until no errors remain. Once it is live, request a recrawl in Search Console and add a reminder to update the profile, the page and the markup together whenever a fact changes. If you want the reasoning behind each step in more depth, the wider guide on structured data for AI search sets out what markup can and cannot do across every engine.
Will ChatGPT, Perplexity, Claude, Google AI and Copilot quote your website? Every page scored out of 100, the passage an AI would quote and what to fix first. No sign-up.
Check your website with the AI Search Visibility Checker →