Schema markup for local businesses
Schema markup for local businesses in plain English: what structured data does, which types matter for a local company, an example you can adapt, and how to test it.

Schema markup for local businesses is a small block of code on your website that tells search engines, in a standard format, the facts about your business: its name, type, address, phone, hours, service area, prices and more. Visitors don't see it. Google, Bing and AI assistants read it to understand your business without guessing from the page layout.
It won't lift a weak site to the top on its own. What it does is remove ambiguity, keep your details consistent with your Google Business Profile, and make some pages eligible for richer search results, like breadcrumbs, product prices or event dates. For a few hours of work on a typical small business site, that's a good trade.
What structured data is, in practice
Schema.org is a shared vocabulary supported by the major search engines. You describe things on your page using its types (LocalBusiness, Service, Product, Article) and properties (name, address, telephone, openingHours). Google recommends the JSON-LD format: a script block in the page that holds the data, separate from the visible HTML.
The main rule: structured data must describe what's actually on the page. Marking up reviews, prices or services that visitors can't see breaks Google's guidelines and can lead to a manual action.
The types that matter for a local business
| Type | Where it goes | What it does |
|---|---|---|
| LocalBusiness (or a specific subtype) | Homepage or contact page; each location page | Name, address, phone, hours, area, links to profiles |
| Organization | Homepage | Brand name, logo, social profiles |
| Service | Service pages | Describes each service and who provides it |
| BreadcrumbList | All pages with breadcrumbs | Can show the page path in results |
| Product with Offer | Online store product pages | Price and availability, eligible for product rich results |
| Event | Event pages | Dates and venue, eligible for event features |
| Article | Blog posts | Headline, author, dates |
Use the most specific LocalBusiness subtype that fits: Dentist, Plumber, Electrician, HVACBusiness, AutoRepair, Restaurant, BeautySalon, LegalService, RealEstateAgent and many more. If none fits, LocalBusiness itself is fine.
A basic example
Here's a simplified example for a fictional plumbing company. You'd adapt the values to your business:
{
"@context": "https://schema.org",
"@type": "Plumber",
"name": "Example Plumbing",
"url": "https://www.exampleplumbing.ca/",
"telephone": "+1-204-555-0100",
"address": {
"@type": "PostalAddress",
"streetAddress": "4-120 Main St",
"addressLocality": "Winnipeg",
"addressRegion": "MB",
"postalCode": "R3C 1A1",
"addressCountry": "CA"
},
"openingHoursSpecification": [{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
"opens": "08:00",
"closes": "18:00"
}],
"areaServed": ["Winnipeg", "Steinbach", "Selkirk"],
"priceRange": "$$",
"sameAs": ["https://www.facebook.com/exampleplumbing"]
}
For a service-area business that hides its address on Google, you can leave out the street address and keep the locality, region and service areas. Your details should match your Google Business Profile exactly; see the Google Business Profile setup guide.
Properties worth filling in
Beyond the basics in the example, a few properties add useful detail with little effort:
- geo: latitude and longitude of your location, which removes any doubt about where the pin belongs.
- logo and image: links to your logo and a representative photo of the business.
- sameAs: links to your official profiles, such as Facebook, Instagram, LinkedIn, Yelp or YellowPages.ca. This connects your website to the listings that describe the same business.
- hasMap: a link to your map listing.
- makesOffer or separate Service blocks: the services you provide, matching your service pages.
Leave out anything you can't keep accurate. Wrong data is worse than missing data.
What rich results can you still get?
Google has narrowed which structured data produces visual extras in search, so it's worth knowing what's realistic:
- Review stars for your own business are not shown when a business marks up reviews about itself on its own site. Google stopped showing these "self-serving" review snippets for LocalBusiness and Organization years ago. Stars can still appear for products and some other content types.
- FAQ rich results are now limited to well-known government and health sites. FAQ markup on a small business page is unlikely to produce the expandable questions in results.
- HowTo rich results have been removed.
- Breadcrumbs, products, events, and articles still work as described in Google's documentation.
So for most local businesses, the value of schema is less about visual extras and more about clarity: telling machines exactly who you are, where and what you do.
Why it matters more with AI search
AI Overviews and assistants like ChatGPT and Copilot summarize businesses from many sources. Clear, consistent structured data is one of the easiest things for them to read correctly. It won't guarantee a mention, but it reduces the chance that an assistant states the wrong hours or service area. More on that in Google AI Overviews for small businesses.
How to add it
- Custom-built or hand-coded sites: your developer adds JSON-LD to the page templates, ideally generated from the same data that shows your address and hours on the page, so the two never drift apart. That's how I do it on sites built on my custom CMS.
- WordPress: SEO plugins add basic Organization and Article markup; LocalBusiness often needs a dedicated plugin or manual code.
- Page builders: options vary; some allow custom code in the page header.
For bilingual sites, add structured data on both language versions, with text fields in the right language. See bilingual SEO.
How to test it
- Rich Results Test (from Google): shows which rich results a page is eligible for and flags errors.
- Schema Markup Validator (schema.org): checks general validity, including types Google doesn't use for rich results.
- Search Console: after Google crawls the pages, enhancement reports show detected structured data and errors across the site.
Six mistakes to avoid
- Marking up information not visible on the page.
- Adding fake or copied reviews to markup. Beyond Google's rules, fake reviews raise problems under Canada's Competition Act.
- Using the wrong type, for example Organization when you have a physical clinic customers visit.
- Details in the markup that differ from your Google profile and website.
- One LocalBusiness block on every page for a multi-location business, instead of one per location page.
- Setting it once and forgetting it when hours, phone or address change.
Structured data is one of the checks in technical SEO basics. If you want it audited or added, it's part of my technical SEO work.
Let’s talk
about your business
Before the call I review your website and ads. After the call you get an action plan and a price range in writing.
Schema markup
questions
Does schema markup improve rankings?
Not directly in a way you can measure. Google says structured data helps it understand pages and makes them eligible for rich results, but it isn't a general ranking boost. The practical benefits are clearer information for search engines and assistants, consistent business details and, for products and events, more attractive results that can earn more clicks.
Can I add review stars to my Google results with schema?
For your own business, generally no. Google doesn't show star snippets for reviews a local business marks up about itself on its own site. Stars in the map pack come from your Google reviews, not from markup. Product pages on online stores can still show ratings when reviews are genuine and visible on the page.
Is schema markup necessary for a small website?
Not strictly, but it's cheap to add and helpful. A basic LocalBusiness block on your homepage or contact page, BreadcrumbList if you use breadcrumbs, and Article on blog posts cover most small business needs. On a well-built site it takes a few hours and needs updating only when your details change.
Should each location have its own schema?
Yes. Each location page should carry its own LocalBusiness markup with that location's address, phone, hours and link to its own map listing. Putting one combined block on every page muddles the information. Pair this with a separate Google Business Profile for each staffed location so everything lines up.
Want structured data
set up correctly?
Send me your website address. I'll check what structured data you have now, what's missing or wrong, and what it would take to fix. Reply within one business day.
