Key takeaways
- Use the most specific LocalBusiness sub-type you can (Dentist, Plumber, HVACBusiness) and keep name, address, phone and hours identical everywhere they appear.
- Google restricts review and aggregateRating markup on a business's own site. Self-serving reviews do not earn stars, so do not build your strategy around them.
- Nobody has published first-party data proving ChatGPT, Gemini or Perplexity read JSON-LD directly. Treat schema as a clean, consistent fact record, not a citation switch.
- For local-intent prompts, third-party listings and review profiles collect more ChatGPT citations than the business's own site. Fix those profiles too.
- Validate, monitor, and recheck after every site or hours change.
What schema can and can't do for local AI search
Let me be upfront about something most schema guides skip. I can't point you to a study showing that adding LocalBusiness markup makes ChatGPT cite you more. The data I trust doesn't say that. Promptwatch Data on ChatGPT citation types (Sep 28 to Oct 4, 2026) never mentions schema at all. It shows product pages at 22.4% of citations and landing pages at 16.8%.
What schema does do is remove ambiguity. Search engines, and the crawlers feeding AI systems, have to decide which phone number is current, which address is canonical, and which pages belong to which location. A machine-readable record settles that. Cleaner input usually means fewer wrong answers about you.
So think of this checklist as hygiene with an upside, not a growth hack. Do it because wrong hours in an AI answer cost you customers.

Google's LocalBusiness documentation is the reference to check against. Everything below that's about Google behavior comes from there or from clearly flagged secondary sources.
Step 1: pick the right type
Don't default to the generic LocalBusiness when a specific child type exists. It is a small change, and it tells machines what you actually are.
| Business | Use this type |
|---|---|
| Dentist | Dentist |
| Restaurant or cafe | Restaurant, CafeOrCoffeeShop, FastFoodRestaurant |
| Law firm | Attorney |
| Real estate | RealEstateAgent |
| HVAC | HVACBusiness |
| Auto repair | AutoRepair |
| Hair salon | HairSalon |
| Gym | HealthClub |
| Vet | VeterinaryCare |
| Electrician | Electrician |
| Plumber | Plumber |
| Doctor | Physician |
| Pharmacy | Pharmacy |
| Hotel | Hotel |
If nothing fits, LocalBusiness is fine. Don't invent types.
Step 2: the core LocalBusiness checklist
Go through these properties for every location page. Google's example for a restaurant includes name, address, geo, url, telephone, priceRange, openingHoursSpecification and image, and that is a sensible baseline for any business.
- name: your real trading name, exactly as it appears on your Google Business Profile
- address: a full PostalAddress with street, locality, region, postal code and country
- telephone: one primary number, in international format
- url: the specific location page, not just the homepage, if you have several locations
- geo: latitude and longitude
- openingHoursSpecification: every day, including split shifts and closed days
- image and logo: absolute URLs that actually load
- priceRange: only if you can give an honest indicator
- description: one or two plain sentences saying what you do and where
- sameAs: your real profiles on Facebook, Instagram, Yelp and similar
Here is a compact example for a dentist.
{
"@context": "https://schema.org",
"@type": "Dentist",
"name": "Downtown Dental Care",
"description": "Family dentistry in Austin, TX. Cleanings, crowns, implants and emergency care.",
"url": "https://www.downtowndentalcare.com",
"telephone": "+1-512-555-0123",
"image": "https://www.downtowndentalcare.com/office-photo.jpg",
"logo": "https://www.downtowndentalcare.com/logo.png",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Main Street, Suite 200",
"addressLocality": "Austin",
"addressRegion": "TX",
"postalCode": "78701",
"addressCountry": "US"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 30.2672,
"longitude": -97.7431
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "08:00",
"closes": "17:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": "Saturday",
"opens": "09:00",
"closes": "13:00"
}
],
"sameAs": [
"https://www.facebook.com/downtowndentalcare",
"https://www.yelp.com/biz/downtown-dental-care-austin"
]
}
Consistency matters more than completeness
The most common failure I see isn't missing properties. It's disagreement. The footer says one phone number, the schema says another, and the Google Business Profile says a third. Pick one source of truth and generate everything from it. A five-point audit from MD Tech Team starts with exactly this: check that business name, phone, URL and address match across the site and profiles.

Step 3: add Service markup
A LocalBusiness record says who you are. Services say what you do, and AI answers to "emergency plumber in Austin" are about services. I haven't verified current schema.org guidance on Service and areaServed against live docs for this guide, so check schema.org before shipping, but the pattern is straightforward.
- Give each major service its own page and its own Service entity.
- Link the service to your business with
provider. - Use
areaServedto name cities or regions you actually cover. - Describe the service in plain language. No keyword stuffing.
{
"@context": "https://schema.org",
"@type": "Service",
"name": "Emergency dental care",
"serviceType": "Emergency dentistry",
"description": "Same-day appointments for broken teeth, severe pain and lost fillings.",
"provider": {
"@type": "Dentist",
"name": "Downtown Dental Care",
"url": "https://www.downtowndentalcare.com"
},
"areaServed": {
"@type": "City",
"name": "Austin"
}
}
Separate service pages also fit how ChatGPT searches. Promptwatch's query fanout data shows average query length dropping to about 53 characters from April 2026, with exactly 1.0 searches per response. Short queries reward focused pages with headings like "Emergency plumber Austin TX" over one sprawling services page.
Step 4: handle review markup carefully
This is where a lot of 2026 guides are wrong, so slow down.
Google's LocalBusiness documentation says review and aggregateRating are recommended only for sites that capture reviews about other local businesses. Google's review snippet rules, announced in September 2019, treat a review as self-serving when it is about entity A and sits on entity A's own site. Pages using LocalBusiness or another Organization type are not eligible for star rich results when the business controls its own reviews. BrightLocal's summary is blunt: these reviews are "allowed but ignored." Cloutly adds that self-serving markup alone doesn't trigger a manual action. It just earns nothing.
Some popular guides still claim aggregateRating gives you stars in the SERP and a 20-30% CTR lift. The CTR number is unsourced and the star claim conflicts with Google's own rule, so I wouldn't repeat either one.
So should you mark up reviews at all?
| Situation | Review markup |
|---|---|
| Your own business, reviews on your own site | Optional. No star snippet expected |
| A directory or review site covering other businesses | Yes, follow the review snippet guidelines |
| Reviews pulled from Google or Yelp into a widget | Don't mark up as if first-party |
| Fake, copied or cherry-picked reviews | Never |
If you do include a Review, keep it honest and complete: author, rating, bestRating, datePublished and the real review text. Wikipedia-style neutrality applies. Markup must match what visitors can see on the page.
The better use of your time is getting reviews onto trusted third-party sites. In Promptwatch's branded-prompt data for ChatGPT (Sep 28 to Oct 4, 2026), review content rises to 5.6% of citations, more than three times its overall 1.7% share. Prompts that name a specific business are the closest proxy for "is [local business] any good?" People ask that constantly.
Step 5: don't ignore the off-site half
Here is the finding that should change your priorities. In Promptwatch's automotive citation data for August 2026, marketplaces and listings took 14.65% of ChatGPT citations and review and research sites took 12.62%. Manufacturer sites took 7.92%. Community, news, dealership and service sites combined got just 2.12%.
Autotrader led at 5%, Cars.com followed at 4.6%, and only one individual dealer group cracked the top 31, at 0.28%. Automotive is one industry, so don't stretch this too far. But it is the closest local-intent dataset available, and the lesson is clear: for local queries, third-party profiles outrank the business's own website.
That means your checklist has a second column.
- Claim and complete profiles on the sites AI cites in your industry (for cars, DealerRater, Birdeye and BBB were Promptwatch's suggestions).
- Keep name, address, phone and hours identical across all of them.
- Add a plain-language FAQ page. FAQ pages earn 4.8% of branded-prompt citations in the same ChatGPT data.
- Make sure the homepage and service pages answer pricing and who the service is for.
Listing management platforms can handle the syndication side. Options in this space include Yext, BrightLocal, Moz Local and Whitespark.


Step 6: speakable and extras
Some guides recommend SpeakableSpecification for voice and AI. It's cheap to add with CSS selectors pointing at your description and hours summary, but Google has historically limited speakable support, and I found no evidence that AI assistants use it. Add it if it costs nothing. Don't expect much.
Skip anything that's decoration. Every property should describe something visible on the page.
Step 7: validate, deploy and recheck
- Write the JSON-LD in a single
<script type="application/ld+json">block per entity. - Test with Google's Rich Results Test and the schema.org validator. Note that neither catches spammy or non-compliant usage, as Google's own troubleshooting section warns.
- Allow several days for re-crawling.
- Crawl the site periodically to catch broken markup after template changes. Screaming Frog and Sitebulb both extract structured data at scale.
- Watch Search Console for structured data errors.

On WordPress, plugins such as Yoast SEO and Rank Math can output LocalBusiness markup. Check their output against your own source of truth rather than trusting defaults. If you want entity-level structured data at scale, WordLift is built for that.
Multi-location businesses
One location, one page, one LocalBusiness entity. Don't stack five addresses into a single block on the homepage. Each location page needs its own address, phone, hours and geo, and the url should point at that page. Link locations back to a parent Organization if you have one. Franchises with hundreds of units should generate markup from a central database, not hand-edit it. The platforms mentioned earlier handle this, and so does a decent headless CMS.
Pre-launch checklist
| Check | Done when |
|---|---|
| Specific sub-type chosen | Not generic if a child type exists |
| NAP matches everywhere | Site, schema, GBP, listings identical |
| Hours complete | All days, holidays handled |
| Service pages and markup | One per major service, with areaServed |
| Reviews handled per Google rules | No self-serving star expectations |
| sameAs links real | Every URL resolves |
| Third-party profiles complete | Industry-relevant sites claimed |
| FAQ page published | Plain language, answers real questions |
| Validated and monitored | Rich Results Test passes, recrawl scheduled |
Measure whether any of it shows up in AI answers
Schema won't tell you whether ChatGPT actually recommends you. You have to ask the models. Tools like Promptwatch can track how your business appears in AI answers across ChatGPT, Google AI Overviews and Perplexity, and which pages and third-party profiles get cited. That lets you see whether the listing cleanup above moves anything.

If you want to compare options, the directories at bestgeosoftware.com and ai-rank-tools.com list GEO and AI rank tracking tools. Local grid trackers like Local Falcon cover the map pack side.

Bottom line
Write accurate, specific LocalBusiness and Service markup, keep every fact consistent, and don't chase review stars you aren't eligible for. Then spend the saved effort on the profiles AI actually cites. The schema takes an afternoon. The listings and reviews are the ongoing job.





