GUIDE / STRUCTURED DATA
Schema markup for a local business: what to add, what to leave out
The straight answer
Schema markup is structured data — JSON-LD in the head of a page — that states in machine-readable form what a page and a business are: the name, address, services, area, hours, the person accountable, the questions the page answers. For a local business it is the difference between an engine guessing what you are and an engine knowing, and it only counts when it matches what the page visibly says.
Key takeaways
- Use JSON-LD, one graph per page, with stable @id values so the nodes reference each other and the same Organization is the same entity on every page.
- A local business page carries Organization or LocalBusiness (with the right subtype), WebSite, WebPage, BreadcrumbList, Service with an OfferCatalog, FAQPage where there is a FAQ, and a Person for who is accountable.
- Self-serving ratings, invented reviews, a category that is not you, and markup that says something the page does not are the ways to be ignored or penalized.
- sameAs is where you connect the site to the profiles that corroborate it — only to profiles that exist.
- Validate every page with Google’s Rich Results Test and the Schema Markup Validator, and watch Search Console’s enhancement reports.
Why it matters more now
Search engines have used structured data for a decade to produce rich results — the stars, the breadcrumbs, the FAQ dropdowns. The AI engines use it for something more basic: to work out what entity a page is about. A model reading a plumber’s home page sees prose; a model reading the same page’s JSON-LD sees a LocalBusiness named X at address Y offering services Z in area W, connected by identifiers to a Google Business Profile and a set of directory listings. The second is what gets resolved into a Knowledge Graph entity and recommended. The first is a guess.
The nodes a local business page should carry
- Organization or LocalBusiness. One node, one @id, identical on every page. Use the most specific subtype that is honestly you — Plumber, Electrician, RoofingContractor, HVACBusiness, GeneralContractor, ProfessionalService — with name, url, logo, address or areaServed, geo, telephone, email, openingHoursSpecification, priceRange, and sameAs to your real profiles.
- WebSite. The site as a whole, with the Organization as publisher.
- WebPage (or AboutPage, ContactPage, CollectionPage). The page, with its name, description, breadcrumb, primary image, dates, author and a speakable specification.
- BreadcrumbList. The path to the page, matching the visible breadcrumb.
- Service with an OfferCatalog on service pages: what is offered, by whom, to what area and audience.
- FAQPage wherever the page has a FAQ, with the same questions and answers that are visible.
- Person. Who is accountable for what is published — the owner or the author — referenced from the Organization and from every WebPage. E-E-A-T is a question about accountability, and this is the answer in machine-readable form.
- ImageObject for the logo and the page’s primary image, with the creator and license stated.
All of it in one JSON-LD graph in the head, with @id values that do not change between pages, so the Organization on the contact page is unmistakably the Organization on the roofing page.
The mistakes that get you ignored or penalized
- Rating yourself. An AggregateRating or Review markup on your own business, sourced from your own site, is “self-serving” under Google’s guidelines and is ignored at best. Reviews live on the platforms that collected them.
- Invented anything. A founding date you are not sure of, a rating, a price range, a number of employees. If it cannot be verified, leave it out.
- The wrong type. Marking a service-area contractor as a Store, or a general contractor as a Plumber because it looks better for a search. The type should match the Business Profile category.
- Markup that says what the page does not. A FAQPage with questions that are not on the page; a Service the page never mentions. Google treats it as spam.
- Someone else’s @id. Copying a template and shipping with another company’s identifiers, or with example.com in the URLs. It happens constantly.
- sameAs to nowhere. Links to social profiles that were never created. Only profiles that exist, and only ones that are yours.
A minimal example
A single node for a roofing contractor, shortened. A real page would carry the WebSite, WebPage, BreadcrumbList, Service and Person nodes alongside it.
{
"@context": "https://schema.org",
"@type": "RoofingContractor",
"@id": "https://example-roofing.com/#organization",
"name": "Example Roofing",
"url": "https://example-roofing.com/",
"email": "[email protected]",
"areaServed": [
{ "@type": "City", "name": "Franklin", "containedInPlace": { "@type": "State", "name": "Tennessee" } },
{ "@type": "AdministrativeArea", "name": "Williamson County, Tennessee" }
],
"sameAs": [ "https://www.google.com/maps?cid=…" ],
"openingHoursSpecification": [ { "@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"], "opens": "07:00", "closes": "18:00" } ],
"founder": { "@type": "Person", "name": "Owner Name", "jobTitle": "Owner" }
}Every value in it is something the page and the Business Profile also say. That is the rule.
Validate it
Google’s Rich Results Test shows what Google can read from a URL and which rich results it is eligible for. The Schema Markup Validator at validator.schema.org checks the markup against the vocabulary regardless of Google. Search Console’s enhancement reports show errors across the whole site as Google crawls it — an ImageObject without a creator, a BreadcrumbList that points at nothing, a FAQPage with an empty answer. Fix what they show; they are the only feedback you get.
The free scan reads a page’s structured data and reports which of these nodes are present and which are missing. Every site we build ships with all of them from the first version — it is the third step of the AI SEO program.
Where this sits in the work
The layer that does this.
FAQ / Answers
Schema markup for a local business — questions
Should I use JSON-LD or microdata?
JSON-LD. Google recommends it, it keeps the structured data in one block in the head rather than scattered through the HTML, and it is far easier to keep consistent across pages. One graph per page with stable @id values is the pattern.
Can I add star ratings to my own site with schema?
Not for your own business. Google’s guidelines treat a rating or review markup that a business publishes about itself as self-serving, and it is ignored or worse. Ratings belong on the platforms that collected the reviews; your site can link to them.
Which LocalBusiness type should I use?
The most specific Schema.org type that honestly describes the business and matches your Google Business Profile primary category — Plumber, Electrician, RoofingContractor, HVACBusiness, GeneralContractor, HousePainter, and so on. When none fits, LocalBusiness or ProfessionalService. Never a type chosen because it looks better.
Does schema markup help with AI search?
Yes, in a specific way: it tells an engine unambiguously what entity a page is about and connects it to the profiles that corroborate it, which is what an engine needs before it will recommend a business. Google has said no special markup is required for its AI features; the ordinary structured data is what helps.
Read next
Related guides.
Guide / llms.txt
llms.txt: what it is, what it is not, and whether your business needs one
A plain guide to llms.txt, the proposed text file that tells language models what a site is: the format, what it does not do, why we ship one, how to write one.
Read the guideGuide / AEO
Answer engine optimization (AEO): how to write pages that get selected as the answer
What answer engine optimization is, how to write answer-first pages, which questions to answer, how FAQ blocks and FAQPage schema work, and a checklist.
Read the guideGuide / The definition
What is AI SEO?
AI SEO explained for a local business: what changed in search, the four disciplines (SEO, AIO, AEO, GEO), what the engines read, and what to do first.
Read the guideThree free checks / One a month each
See what the engines say about you — in a minute.
The same checks we run before quoting a job. Each is free, asks for no email, and the result is yours whether you hire us or not.
Free / Scan your website
85 checks on your site.
Technical SEO, speed on a phone, structured data, AI search readiness and whether the page turns a visitor into a call — every finding with its fix, a PDF and its own link.
Scan a siteFree / Ask Google’s AI
Does the AI name you?
Google’s AI Mode asked for the best business of your kind in your city, live, and read for your name — then the map at your own address and your profile against the pack.
Run the checkFree / Check your links
How many of your links fail the rules?
Every site linking to yours read by the backlink audit’s written rules — how many fail outright, how many are borderline, the reasons, five examples, and a PDF.
Check the linksNEXT STEP
Find out what the AI engines say about you — and whether your market is still open.
Tell us your trade and your city. Before we call, we check what the engines answer and who takes the calls today — so the first call is a straight answer on whether your market still has room.