Schema Markup for Local Businesses: The Practical GEO Guide

Anthony (Tony) Velte
Founder & Principal · Author of 12+ books
Schema markup is the machine-readable data layer that states what your business does, where it operates, what it offers, and how it relates to the rest of the web. It is published in JSON-LD inside your pages and follows a shared vocabulary maintained at Schema.org. Its job is disambiguation: turning identity, services, hours, and location into typed values that any system can read without inferring them from prose.
In our SignalScore methodology, Schema and Structured Data carries a 10% weight. That weight is our own working judgment rather than an external measurement. We hold it because entity clarity is cheap to produce and useful to more than one consumer: Google uses structured data to generate supported search features, and any other system parsing your page gets an unambiguous statement of who you are instead of a guess. It sits at 10% and not higher because markup is a supporting layer. It describes the answer; it does not supply one.
What Schema Markup Actually Is
Schema.org is a collaborative vocabulary, founded in 2011 by Google, Microsoft, Yahoo, and Yandex, that defines structured types for things on the web: businesses, people, products, services, reviews, FAQs, recipes, events, articles, and hundreds of other entity types. When you mark up a page with schema, you are not adding visible content. You are adding a parallel, machine-readable description of the same content that machines can consume without having to interpret your HTML.
Three serialization formats are valid: Microdata, RDFa, and JSON-LD. Google's structured data documentation recommends JSON-LD, and it is the format we standardize on. The reason is maintenance: JSON-LD lives in a single <code><script></code> block, decoupled from the visible HTML, so it can be generated, validated, and diffed as a discrete data layer instead of a thousand inline attributes scattered through the markup. No AI operator publishes documentation describing which serialization it prefers, or whether it reads structured data at all, so choose JSON-LD on engineering grounds rather than on a claimed parsing preference.
A minimal LocalBusiness JSON-LD block looks like this: { "@context": "https://schema.org", "@type": "LocalBusiness", "name": "Acme Plumbing", "telephone": "+1-555-867-5309", "address": { "@type": "PostalAddress", "streetAddress": "123 Main St", "addressLocality": "St. Paul", "addressRegion": "MN", "postalCode": "55101" }, "url": "https://acmeplumbing.com", "openingHours": "Mo-Fr 08:00-18:00" }. That block states, without ambiguity, who you are, where you are, when you operate, and how to reach you. Every value in it should match what a visitor sees on the page.
Which Schema Types Are Worth Publishing
You do not need the hundreds of types in the vocabulary, and you should not publish a type just because a checklist names it. The governing rule is simple: a type belongs on a page only when matching, visible, truthful content already exists there. Markup that asserts something the page does not show is at best noise and at worst a policy violation. With that constraint, the following types cover most of the useful ground for a local business.
The types worth considering, and the condition each one depends on:
- <strong>Organization</strong>: the legal entity behind the business. Site-wide. Establishes name, logo, founding date, and corporate identity. Publish it everywhere.
- <strong>LocalBusiness</strong> (or its industry subtype: <em>HomeAndConstructionBusiness</em>, <em>LegalService</em>, <em>MedicalBusiness</em>, <em>RealEstateAgent</em>) carries your operational presence: address, hours, service area, phone. It is the type most local sites should get right first, and every value in it must match your visible contact details and your Google Business Profile.
- <strong>Service</strong>: what you actually do, one per distinct service line that has its own page. Connects the business to the verbs customers use ("plumbing repair," "kitchen remodeling," "tax preparation").
- <strong>FAQPage</strong>: reposition your expectations here. Google stopped showing FAQ rich results for most sites in May 2026, so FAQPage markup no longer buys a search feature. It remains harmless, valid structure that states your questions and answers in typed form. Publish it only when a real FAQ with visible questions and answers exists on the page, and expect no rich-result payoff.
- <strong>BreadcrumbList</strong>: site hierarchy. States how a service page relates to your homepage and to broader categories, and it is among the types Google still supports for search features. Quiet but load-bearing.
- <strong>Person</strong>: for owner-operated businesses, the named principal, with credentials and affiliations that are real and verifiable elsewhere. Skip it if the page has no actual named person behind it.
- <strong>Offer</strong> (or <em>AggregateOffer</em>): pricing, packages, availability windows. Only where you publish real prices or real ranges on the page. Do not invent a number to fill the field.
- <strong>Review</strong> and <strong>AggregateRating</strong>: genuine first-party reviews you collected and display on the page, marked up in line with Google's review snippet policies. No self-serving ratings, no numbers borrowed from a third-party platform you do not control, no aggregate you cannot show the reader.
Composition matters as much as the individual types. The correct chain for a service catalog runs LocalBusiness to <code>hasOfferCatalog</code>, which holds an <code>OfferCatalog</code>, whose <code>itemListElement</code> array holds <code>Offer</code> nodes, each of which points through <code>itemOffered</code> to a <code>Service</code>. A common mistake is pointing <code>hasOfferCatalog</code> straight at a <code>Service</code> node: the property expects an <code>OfferCatalog</code>, and skipping the catalog leaves the offers and their prices with nowhere to live. When the chain is right, a consumer has an unambiguous path from your business to your service lines and their prices. Disconnected schema, a LocalBusiness on one page and a Service on another with no <code>@id</code> tying them together, leaves that path to be inferred.
What Schema Is Documented to Do, and What It Is Not
Most schema guidance on the web is written for one purpose: earning rich results in Google search, meaning the star ratings, FAQ accordions, sitelinks, and price boxes that appear in the SERP. That purpose is real and documented. Google publishes a specific list of schema types eligible for supported search features, and markup outside that list will not generate a visual treatment no matter how well formed it is.
Schema is not, however, a generative-search lever. Google's 2026 guidance on optimizing for AI features says this directly: there is no special markup for generative search, and structured data is not required for it. Google's AI features draw on the normal Search index. Meanwhile no other operator, OpenAI, Anthropic, or Perplexity included, publishes documentation stating that its crawlers read JSON-LD, weight it, or lift values such as AggregateRating into an answer. Anyone telling you that AI engines pull your star rating into a summary is describing a hypothesis rather than a documented behavior.
Our working methodology still treats entity clarity as worth the effort, and it is worth being explicit that this is a judgment rather than a finding. Schema is inexpensive to produce and maintain, it has a documented payoff in Google Search features, and it removes ambiguity for any system that parses the page, including the ones whose behavior nobody publishes. That is a defensible reason to do it well. It is not a reason to expect a citation.
The "Schema But Not Cited" Trap
The most common failure mode we see in local-business GEO audits is technically valid schema attached to content that does not earn citation on its merits. A FAQPage block wrapping three thin, generic answers. A LocalBusiness block with accurate NAP but pointing to a homepage that says nothing specific about what the business actually does. A Service block describing "professional service" instead of the concrete verb a customer would search.
Schema describes content. It does not improve it. If the underlying answer is generic, machine-readability only makes the genericness easier to parse. This is why schema sits at 10% in our methodology rather than higher: it earns that weight only when citability, content quality, and technical health are already doing real work. Mark up the right answers. Do not mark up the wrong ones more clearly.
Schema as Data Architecture
Most agencies frame schema as an SEO tactic, and that framing produces the trap above: bolted-on JSON-LD treated as a checklist item. The more useful frame is that schema is a data model. You are publishing a typed, validated description of your business that other systems will consume. The same rigor that goes into modeling a customer record in an enterprise system belongs in your LocalBusiness markup: entities, relationships, identifiers, controlled vocabularies, referential integrity.
Done that way, schema becomes durable infrastructure. It survives redesigns. It stays valid when Google adds or retires a rich result format, because the graph was built to describe the business rather than to chase a display treatment. FAQPage is the recent example: sites that published it because a real FAQ existed lost nothing in May 2026, while sites that published it purely for the accordion lost the entire reason they had it. That is the standard we apply at LocalStar.
How LocalStar Implements Schema
For reference, LocalStar's own site practices what it audits: every page publishes a connected JSON-LD graph rather than isolated blocks. The core types carry most of the load: Organization, LocalBusiness, Service, FAQPage, BreadcrumbList, Person, Offer, WebSite, BlogPosting, and EducationalOccupationalCredential, with page-specific types layering on top. They are connected by <code>@id</code> references so the site reads as a single typed graph, with every page inheriting the Organization and WebSite context. Our SignalScore methodology audits that structure on client sites, going past "is schema present" to "is it connected, consistent, and does it match what the page actually shows."
How to Validate What You Published
Schema is one of the few parts of this work you can verify directly rather than infer. Run each template through Google's Rich Results Test to confirm the markup parses and to see which supported features, if any, the page qualifies for. Run it through the Schema.org validator as well, since that one checks the vocabulary itself rather than only Google's subset, and it will catch a malformed <code>hasOfferCatalog</code> chain that the Rich Results Test ignores. Then read your own JSON-LD against the rendered page and confirm every asserted value, the hours, the phone number, the prices, the ratings, appears somewhere a visitor can see it.
After deployment, the monitoring surface is Search Console. Its structured data and enhancement reports show which items Google detected across your site and which ones it rejected, at real crawl volume rather than one URL at a time. Watch for items dropping out after a template change, which is the usual sign that a redesign broke a field. There is no equivalent report for AI platforms and no way to confirm whether one consumed your markup, so treat validation and visible-content congruence as the whole of what you can actually check.
For local businesses we engage with through our GEO services, schema is one of the first dimensions we move on, because it is concrete and verifiable. Brand Authority is slow and largely outside your direct control; a schema graph is something you can finish, validate, and be done with.
The question worth asking about your markup is whether the types connect into one graph, and whether every value in them is true and visible on the page. Count of types published is the weaker measure. Point us at your site and we'll run the schema audit: what's implemented, what's missing, and what's asserting something the page does not support.
Frequently Asked Questions
No. Each type is conditional on content that already exists and is visible on the page. Organization and LocalBusiness come first because they establish identity site-wide and almost every business has the underlying facts. Service follows once you have real service pages. Offer belongs only where you publish real prices, Person only where a real named principal is behind the page, and Review or AggregateRating only where you display genuine first-party reviews collected in line with Google's review snippet policies. Four types implemented correctly and connected with @id references are worth more than eight published in isolation, and considerably more than eight where three of them assert things the page never shows.
Two documented reasons and one practical one. Google's structured data documentation recommends JSON-LD. It lives in a single script block decoupled from your HTML, which makes it far easier to generate, validate, and update without touching visible content. And it composes, since multiple JSON-LD blocks on a page can reference each other via @id to form a typed graph, which is awkward to do cleanly in inline formats. What is not a reason: no AI operator documents a parsing preference among the three serializations, so ignore anyone who claims one is read preferentially.
Run the page through Google's Rich Results Test to confirm it parses and to see which supported search features it qualifies for, then through the Schema.org validator, which checks the vocabulary itself rather than only Google's subset and will catch structural errors the Rich Results Test passes over. Read the JSON-LD against the rendered page and confirm every asserted value is visible to a human visitor. After deployment, monitor Search Console's structured data and enhancement reports for items Google detected or rejected at crawl volume. There is no way to verify whether an AI platform consumed your markup, and asking a chatbot about your business does not test it, since the answer may come from a live page fetch, from an unrelated source, or from nothing at all.
No, and this is the most common misconception. Schema describes the content that is already there. Mark up a generic, undifferentiated answer and you have published a machine-readable generic answer. The work has to start with substantive content that stands on its merits; schema then makes that content unambiguous and connectable. Content first, structured markup second.
Ready to improve your AI visibility?
Book a strategy call. We will audit your search and AI presence and recommend a plan tailored to your business.