Schema markup for local businesses: a practical guide for AI search
Schema markup states your business details in a format machines can read. Here's what Toronto businesses need, with one simple example to work from.

Key takeaways
- Schema markup is a small block of code that states your business details, like name, address, hours and services, in a standard format machines can read.
- Most local businesses need a LocalBusiness subtype, clear service information, and sameAs links to their official profiles.
- The details in your markup must match what’s on your page and your Google Business Profile.
- Always validate your markup with Google’s Rich Results Test and the Schema.org validator before and after publishing.
What structured data actually is
When a person reads your website, they understand that “416-555-0100” is your phone number and “Mon–Fri 8–7” means your hours. Software has to work that out, and it doesn’t always get it right.
Structured data, often called schema markup, removes the guesswork. It’s a short block of code, usually in a format called JSON-LD, that sits in your page and labels the facts: this is the business name, this is the address, these are the opening hours. The labels come from Schema.org, a shared vocabulary supported by Google, Microsoft and others.
Visitors never see it. It’s there for search engines and any other system that reads your pages.
Why it matters for AI search
We want to be careful here. Google documents how it uses structured data for search features and to understand page content. How each AI assistant uses it, if at all, isn’t always made public, and it changes. So we won’t tell you schema markup is a secret switch for getting recommended by ChatGPT. It isn’t.
What we can say is this: AI tools build answers from what they can read and confirm about you. Clear, consistent, machine-readable facts on your own site make it easier for any system to get your details right, and harder to get them wrong. Think of it as removing ambiguity, not as a trick. It works best alongside the basics we cover in what AI search optimization is and our Google Business Profile checklist.
The types most local businesses need
LocalBusiness, or a more specific subtype
Schema.org has a general LocalBusiness type and many more specific ones. Use the most specific one that fits. Some common examples:
- Clinics:
Physiotherapy,Dentist,MedicalClinic - Trades:
Plumber,Electrician,HVACBusiness,RoofingContractor - Food:
Restaurant,CafeOrCoffeeShop,Bakery - Professional services:
LegalService,RealEstateAgent,AccountingService - Personal care:
HairSalon,BeautySalon,NailSalon,DaySpa
The core properties are name, URL, phone, address, opening hours, and geo-coordinates if you have a storefront. If you serve customers at their location, like a Scarborough plumber covering the east end, add areaServed.
Service
If your services are distinct and important, such as “sports injury physiotherapy” or “real estate closings,” you can describe them with the Service type, including a description, the area served and who provides it. Keep it to the services you actually feature on your site.
sameAs
The sameAs property lists the official profiles that belong to your business: your Google Business Profile, Instagram, LinkedIn, Yelp, HomeStars, RateMDs and so on. It’s a simple way of saying “these are all us,” which helps connect your website to the other places you appear. That matters because, as we explain in our post on the sources AI assistants lean on, much of what assistants know about a local business comes from those other places.
A short example
Here’s a simplified example for a made-up clinic, Example Physio Leslieville. Every detail is fictional, and real markup would usually include a little more, but this shows the shape.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Physiotherapy",
"name": "Example Physio Leslieville",
"url": "https://www.example.com/",
"telephone": "+1-416-555-0100",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Example Street",
"addressLocality": "Toronto",
"addressRegion": "ON",
"postalCode": "M0M 0M0",
"addressCountry": "CA"
},
"openingHoursSpecification": [{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "08:00",
"closes": "19:00"
}],
"areaServed": "Leslieville, Toronto",
"sameAs": [
"https://www.example.com/profiles/google",
"https://www.example.com/profiles/instagram"
]
}
</script>
Notice what’s there: a specific type, the same name, phone and address that appear on the page, real hours, and links to official profiles. Nothing invented, nothing exaggerated.
Practical tip: if your site runs on WordPress, an SEO plugin like Yoast or Rank Math may already output some schema. Check what it produces before adding more, so you don’t end up with two conflicting versions of your business details.
FAQ content and consistency
You may have heard that FAQ schema puts expandable questions under your Google result. Since 2023, Google shows FAQ rich results only for a small set of well-known government and health websites, so most businesses won’t see them. Adding FAQ markup is fine, but don’t expect a visual change in search.
The questions and answers themselves are still worth writing. A clear FAQ page that answers what customers actually ask, like “Do you direct-bill insurance?” or “Is there parking near the Queen East location?”, helps people decide, and gives any assistant reading your site a plain, quotable answer. Write it for humans first.
A few consistency rules matter more than any single property:
- Match what’s visible. Markup should describe what’s on the page. Don’t add services, hours or claims that aren’t there.
- Match your other listings. Your name, address, phone and hours should be identical in your schema, on your site and on your Google Business Profile.
- Don’t mark up your own reviews to get stars. Google doesn’t show review stars for businesses marking up reviews about themselves on their own site, and inventing ratings breaks its guidelines.
- Update it when things change. New hours or a move to North York means updating the markup too.
How to check your markup
Before and after publishing, run your page through two free tools:
- Google’s Rich Results Test shows whether Google can read your markup and flags errors and warnings.
- The Schema.org validator (validator.schema.org) checks your markup against the full Schema.org vocabulary, including types Google doesn’t use for rich results.
Fix errors first. Warnings are often optional properties, so add them if the information is true and useful. If you use Google Search Console, its enhancement reports will also flag problems over time.
Keeping it in proportion
Schema markup is one useful layer, not the whole job. It won’t make up for an incomplete profile, missing reviews or a website that doesn’t explain what you do. But for a small amount of effort, it makes your key facts unambiguous, and that’s worth having.
If you’d rather not touch code, adding and checking structured data is part of our content and structured data work. Book a free 20-minute call and we can take a quick look at what your site currently says to machines.




