- Schema markup doesn't change what visitors see — it adds a hidden layer of meaning that search engines and AI tools read directly.
- LocalBusiness schema is the foundation; layer in Review, FAQ, and OpeningHoursSpecification on top for maximum rich-result coverage.
- JSON-LD is the implementation format Google recommends — paste it into a script tag in your page's <head> and you're done.
- Mismatched NAP (name, address, phone) between your schema and your Google Business Profile actively hurts your local rankings.
- AI search tools like Perplexity and ChatGPT Search increasingly pull structured data to answer 'best [service] near me' queries — schema is no longer just a Google play.
- Validate every schema block with Google's Rich Results Test before publishing — syntax errors silently prevent eligibility.
What Schema Markup Actually Does (and Doesn't Do)
Schema markup is code you add to your website that describes your content in a language search engines understand natively. It doesn't change anything a visitor sees. It adds a hidden annotation layer — think of it as a label on the back of a product that a warehouse scanner reads, not the customer.
When Google's crawler hits your page, it reads two things: the human-readable content and any structured data you've embedded. The structured data tells it, with precision, that your business is a dental practice, that it's open Monday through Saturday, that it has a 4.8-star rating from 312 reviews, and that it accepts new patients. Without schema, Google has to infer all of that from your text — and it often gets it wrong, or doesn't surface it at all.
For local businesses specifically, getting schema right is what separates a plain blue-link listing from a rich result with stars, hours, and a knowledge panel. In 2026, it also feeds the AI-powered answer engines — Perplexity, ChatGPT Search, Google's AI Overviews — that are increasingly answering "best [service] near me" queries before a user ever clicks a result.
The Schema Types That Actually Matter for Local Businesses
There are hundreds of schema types on Schema.org. Most of them are irrelevant to a local business. Here are the five that move the needle:
1. LocalBusiness (and its subtypes)
This is your foundation. LocalBusiness tells search engines your business name, address, phone number, URL, and business category. More importantly, Schema.org has over 150 subtypes of LocalBusiness — DentalClinic, AutoRepair, HairSalon, Restaurant, LegalService — and using the most specific one that fits your business signals relevance far more strongly than the generic parent type.
If you run a plumbing company, use Plumber, not LocalBusiness. If you run a yoga studio, use SportsActivityLocation or HealthClub. The specificity matters because it maps directly to the categories Google uses to rank local results.
Key properties to include:
name— exactly as it appears on your Google Business Profileaddress(withstreetAddress,addressLocality,addressRegion,postalCode,addressCountry)telephoneurlpriceRange(use$,$$,$$$notation)imagesameAs— an array of your social profile URLs and your Google Business Profile URL
2. OpeningHoursSpecification
Don't bury your hours in a paragraph. Use OpeningHoursSpecification to declare them in structured form. This is what populates the "Open now" / "Closes at 6 PM" line in local search results and map packs. If your hours vary by day or you have holiday hours, this schema handles it cleanly.
3. Review / AggregateRating
If you have reviews on your own site (not just on Google or Yelp), AggregateRating schema lets you surface a star rating directly in your search result. Important caveat: Google's policy prohibits self-serving ratings — you can't just add this schema with made-up numbers. It must reflect real reviews hosted on your page. But if you embed a review widget or display customer testimonials, this schema makes those ratings machine-readable.
4. FAQPage
If your site has a FAQ section — and it should — FAQPage schema can generate an expandable FAQ block directly in the search result, taking up significantly more SERP real estate. Each question and answer pair gets its own Question and acceptedAnswer entity. This is also one of the schema types that AI search tools pull from most aggressively when constructing answers.
5. BreadcrumbList
If your site has multiple pages (service pages, location pages, blog posts), BreadcrumbList schema helps Google understand your site structure and can display a breadcrumb trail in the search result instead of just your URL. It's a small signal with a visible payoff.
JSON-LD: The Only Format Worth Using
Schema can be implemented three ways: Microdata, RDFa, and JSON-LD. Use JSON-LD. Google has recommended it since 2016 because it's self-contained — you paste it into a `
This goes in your `<head>`. On WordPress, you can paste it into a Custom HTML widget or use a plugin like [Yoast SEO](https://yoast.com) or [Rank Math](https://rankmath.com) to manage it through a UI. On Shopify, it goes into your `theme.liquid` file. On Squarespace or Wix, use a code injection block.
## The NAP Consistency Problem
This is where most local businesses quietly sabotage themselves. **NAP** stands for Name, Address, Phone — the three core identifiers that every local SEO signal references. If your schema says your business is at "412 Oak St" but your Google Business Profile says "412 Oak Street" and your Yelp listing says "412 Oak St., Suite A", search engines see three different entities and reduce confidence in all of them.
Before you implement any schema, audit your NAP across every surface:
- Your website (header, footer, contact page)
- Google Business Profile
- Yelp, Bing Places, Apple Maps
- Industry directories (Healthgrades, Avvo, Houzz — whatever applies to your vertical)
- Social profiles
Your schema should match your GBP exactly, character for character. That consistency is what allows Google to confidently merge signals from multiple sources into a single authoritative entity.
> Schema markup isn't just for Google anymore — it's the structured layer that AI search tools read when deciding whose business to recommend in a conversational answer.
## Common Mistakes That Silently Break Your Schema
**Syntax errors.** A missing comma or unclosed bracket in your JSON-LD means the entire block is ignored. Always validate with [Google's Rich Results Test](https://search.google.com/test/rich-results) before publishing.
**Using the wrong `@type`.** Marking a restaurant as `LocalBusiness` instead of `Restaurant` means you're ineligible for restaurant-specific rich results like menus and reservation links.
**Duplicating schema blocks.** If your CMS or theme already generates LocalBusiness schema automatically (many WordPress themes do), adding your own creates conflicts. Check what's already on the page before adding anything.
**Marking up content that isn't on the page.** Schema must describe content that actually exists on the page it's embedded in. You can't add `FAQPage` schema to your homepage if the questions and answers aren't actually visible there.
**Ignoring schema on inner pages.** Most businesses add schema to their homepage and stop. Service pages, location pages, and blog posts all benefit from appropriate schema — and those are often the pages ranking for high-intent queries.
## How AI Search Changes the Schema Equation
In 2026, schema markup has a second audience beyond Google's crawler: the large language models powering AI search. Tools like Perplexity, ChatGPT Search, and Google's AI Overviews pull structured data when constructing responses to conversational queries. When someone asks "what's the best HVAC company in Denver that's open on weekends," the AI tools that answer that query are pulling from structured data sources — business listings, schema blocks, and citation databases — not just reading prose.
`FAQPage` schema is particularly powerful here. The question-and-answer format maps directly to how AI models retrieve and present information. A well-structured FAQ on your service pages, marked up correctly, can get your business's own words quoted back in an AI answer.
For a deeper look at which schema types are gaining traction specifically with AI search tools, the [new schema types post](https://koira.ai/blog/new-schema-types-small-business-visibility-2026) covers what's changed in the last 12 months.
## Prioritizing What to Implement First
If you're starting from zero, do this in order:
1. **LocalBusiness (specific subtype) on your homepage** — covers the baseline entity signals
2. **OpeningHoursSpecification** — immediate visible payoff in map pack results
3. **FAQPage on your top service pages** — expands SERP real estate and feeds AI search
4. **BreadcrumbList on all inner pages** — improves site structure signals
5. **AggregateRating if you host real reviews on your site** — adds stars to your result
Don't try to implement everything at once. Get the foundation validated and indexed before layering in more complex types. Google typically picks up new schema within a few crawl cycles — you can monitor eligibility in [Google Search Console](https://search.google.com/search-console) under the Enhancements section.
## Keeping Schema Current
Schema isn't a one-time task. Your hours change for holidays. You add new services. You move locations. Every time your business information changes, your schema needs to update to match — otherwise you're actively misleading search engines with stale data.
For owner-operators managing this manually, the most common failure mode is updating the website content but forgetting the JSON-LD block. Building a simple checklist into your business-change process — "when hours change, update GBP + schema + contact page" — prevents the drift that quietly erodes your local rankings over time. This is exactly the kind of recurring operational task that self-driving software handles well, but even a sticky note on your monitor beats letting it slip.
“Schema markup isn't just for Google anymore — it's the structured layer that AI search tools read when deciding whose business to recommend in a conversational answer.”
| Area | No Schema / Ad Hoc | Proper Schema Implementation |
|---|---|---|
| Business hours in search | Google infers from page text — often wrong or missing | OpeningHoursSpecification surfaces exact hours in map pack and knowledge panel |
| Star ratings in results | No stars visible; listing looks identical to unreviewed competitors | AggregateRating schema displays star count directly in the SERP listing |
| FAQ visibility | FAQ content buried on page; competes for clicks like any other result | FAQPage schema generates expandable Q&A block in the result, doubling SERP footprint |
| AI search inclusion | AI tools reconstruct business info from prose — often incomplete or attributed to a competitor | Structured data gives AI tools precise, quotable facts to pull into conversational answers |
| NAP consistency | Address and phone scattered across pages in inconsistent formats | Single authoritative schema block matches GBP exactly; all signals reinforce one entity |
| Implementation maintenance | Business info updated on visible pages; schema block forgotten and goes stale | Schema treated as part of business-change checklist; updated alongside GBP and contact page |
How to Implement Schema Markup for Your Local Business
- 01Audit what schema your site already has. Before adding anything, paste your homepage URL into Google's Rich Results Test to see if your CMS or theme is already generating schema. Many WordPress themes and Shopify templates output LocalBusiness or Organization schema automatically — adding a duplicate block creates conflicts that can suppress both.
- 02Choose the most specific LocalBusiness subtype for your business. Go to Schema.org/LocalBusiness and browse the subtype hierarchy to find the most precise category that fits your business — `Plumber`, `HairSalon`, `DentalClinic`, `AutoRepair`, etc. Using a specific subtype over the generic `LocalBusiness` parent signals stronger relevance to Google's local ranking systems.
- 03Generate your JSON-LD block using a free tool. Use a free schema generator like [Merkle's Schema Markup Generator](https://technicalseo.com/tools/schema-markup-generator/) or [Schema.dev](https://schema.dev) to build your JSON-LD without writing code. Fill in your business name, address, phone, hours, and price range — exactly as they appear on your Google Business Profile.
- 04Paste the script block into your page's <head>. Copy the generated `<script type="application/ld+json">` block and add it to your homepage's HTML head section. On WordPress, use a plugin like Yoast or Rank Math, or add it via a Custom HTML widget. On Shopify, edit your `theme.liquid` file. On Wix or Squarespace, use the platform's code injection settings.
- 05Validate with Google's Rich Results Test. Run your updated page URL through [Google's Rich Results Test](https://search.google.com/test/rich-results) to confirm the schema is valid and your page is eligible for rich results. Fix any errors flagged — even a single syntax mistake silently disqualifies the entire block.
- 06Add FAQPage schema to your top service pages. Identify the two or three service pages that drive the most traffic or target your highest-value queries. Add a visible FAQ section to each page, then mark it up with `FAQPage` schema. This expands your SERP footprint and feeds AI search tools the structured Q&A they prefer to cite.
- 07Monitor eligibility in Google Search Console. After a few weeks, check the Enhancements section of Google Search Console to see how many pages have valid structured data and whether any errors have been flagged during crawling. Set a recurring reminder to review this quarterly and update your schema whenever your business hours, address, or services change.