← All field notes

Playbook · Technical

The JSON-LD schema every local business should ship this week

Code diagram showing JSON-LD schema blocks for LocalBusiness, Service, FAQPage, and HowTo — the four schema types that drive AI citation rates for local service businesses

The short answer

Every local business should ship four JSON-LD schemas to get cited by AI: LocalBusiness (identity and location), Service (what you offer), FAQPage (common questions), and HowTo (step-by-step processes). FAQPage produces the highest citation rate in ChatGPT and Perplexity answers. All four fit in under 200 lines of JSON-LD.

Twenty minutes of work. Outsized returns. Here's the exact JSON-LD markup we put on every client homepage and the five vertical-specific variants we customize underneath it.

Structured data is the part of AI visibility that's easiest to ship and hardest to get wrong, and somehow 80% of the local-business sites we audit don't have it. So let's fix that, together, in 20 minutes.

This post assumes you have access to your site's HTML — or know someone who does. If you're on WordPress, there's a plugin that'll inject this for you. If you're on Webflow or Shopify, paste it into the custom-head section of your homepage.

What schema actually does

JSON-LD is a tiny block of JSON that sits in your page's <head> and tells AI (and Google) exactly what your business is. Not "figure it out from our homepage copy" — literally: here's our name, here's our address, here's our phone number, here are the services we offer, here's our price range.

When ChatGPT or Perplexity crawl your page, they read the schema first. If it's there and it's clean, they're much more willing to name you in an answer, because they can defend that answer to themselves. No schema = your page becomes a coin flip.

The models don't just use schema to find you. They use it to be confident enough to name you.

The universal LocalBusiness block

This goes on every local business homepage. Customize the bits in green. Everything else stays as-is.

<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "LocalBusiness", "name": "Your Business Name", "image": "https://yourdomain.ca/logo.png", "@id": "https://yourdomain.ca", "url": "https://yourdomain.ca", "telephone": "+1-905-555-0100", "priceRange": "$$", "address": { "@type": "PostalAddress", "streetAddress": "123 Brant St", "addressLocality": "Burlington", "addressRegion": "ON", "postalCode": "L7R 2G5", "addressCountry": "CA" }, "areaServed": ["Burlington", "Oakville", "Hamilton"], "openingHours": "Mo-Fr 08:00-18:00", "sameAs": [ "https://www.facebook.com/yourbiz", "https://www.instagram.com/yourbiz" ] } </script>

That's the floor. Ship just this and you'll move the needle. Now let's add the trade-specific variants.

HVAC / Plumbing / Electrical — Service schema

Swap "@type": "LocalBusiness" for one of the more specific types, and add a hasOfferCatalog block listing your services. Use HVACBusiness, Plumber, or Electrician.

"@type": "HVACBusiness", // ...same LocalBusiness fields as above... "hasOfferCatalog": { "@type": "OfferCatalog", "name": "HVAC Services", "itemListElement": [ { "@type": "Offer", "itemOffered": { "@type": "Service", "name": "Furnace Installation" } }, { "@type": "Offer", "itemOffered": { "@type": "Service", "name": "AC Repair" } }, { "@type": "Offer", "itemOffered": { "@type": "Service", "name": "Heat Pump Installation" } } ] }

Dental — MedicalBusiness + DentistService

Dental clinics get their own schema type that signals "regulated healthcare provider" to AI — which matters because ChatGPT is more cautious about health recommendations.

"@type": ["Dentist", "MedicalBusiness"], "medicalSpecialty": ["FamilyDentistry", "CosmeticDentistry"], "acceptedInsurance": ["Sunlife", "Manulife", "Canada Life"]

Legal — LegalService + practiceArea

Use Attorney or LegalService, plus an array of knowsAbout for your practice areas. This is the signal that ends up in "best personal injury lawyer in [city]" answers.

"@type": "Attorney", "knowsAbout": [ "Personal Injury Law", "Motor Vehicle Accidents", "Slip and Fall", "Long-Term Disability" ]

Real estate — RealEstateAgent

Agents and brokerages both benefit. The key fields here are areaServed (neighbourhood-level, not just city) and knowsAbout (buyer, seller, investor specialties).

"@type": "RealEstateAgent", "areaServed": [ "Aldershot", "Tyandaga", "Alton Village", "Millcroft" ], "knowsAbout": [ "First-time home buyers", "Downsizing", "Investment properties" ]

Bonus: FAQ schema

If your homepage has a FAQ section (it should), wrap it in FAQPage schema. This is the thing that gets you lifted verbatim into AI answers — the "according to [your business]" quotes ChatGPT loves.

{ "@type": "FAQPage", "mainEntity": [ { "@type": "Question", "name": "Do you offer emergency HVAC service in Burlington?", "acceptedAnswer": { "@type": "Answer", "text": "Yes. We offer 24/7 emergency HVAC service across Burlington, Oakville, and Hamilton, with a 60-minute response time for no-heat calls during winter." } } ] }
Validator

After you ship, paste your URL into Google's Schema Markup Validator to catch typos. AI models are less picky than Google, but there's no excuse for broken JSON when a free tool tells you exactly what's wrong.

What not to do

Ship this week

Put 20 minutes on the calendar. Grab the universal block above, customize it for your trade, validate it, paste it into your homepage <head>. You're already ahead of 80% of your local competitors.

If this is too deep in the weeds and you'd rather someone do it — along with nine other things that get you cited in 90 days — that's what we do. Founding spots at $997/mo.

Keep reading

How ChatGPT picks who to recommend →

Schema is #2. Here's the full ranked list of signals that decide who gets cited.