Quick Answer: Local business schema is LocalBusiness JSON-LD markup that tells Google and AI engines your business name, address, hours, and service area in machine-readable form. Pages with correct LocalBusiness markup feed the Knowledge Graph directly, which is how map packs, AI Overviews, and chat assistants confirm that your business actually exists.

Your website tells humans what you do. Schema markup tells machines. And in 2026 the machines are the gatekeepers: Google's local pack, AI Overviews, ChatGPT, Perplexity, and voice assistants all decide whether to recommend you based on structured facts they can verify, not on how nice your homepage looks. Local business schema is the block of JSON-LD code that publishes those facts in the vocabulary the machines were built to read.

This guide covers the whole discipline for a business owner or the person they delegate it to: what the markup is, which subtype to pick, every property worth including, a complete example you can copy and adapt, the errors that quietly break everything, and why this feeds systems far bigger than one search snippet. In FD's methodology this work is Vector 6: Structure, the schema layer of the service stack.

What local business schema actually is

Local business schema is structured data written against the Schema.org vocabulary, usually as JSON-LD inside a <script type="application/ld+json"> tag in your page's head. The LocalBusiness type is defined by Schema.org as a physical business or branch of an organization, and it inherits from both Organization and Place. That dual inheritance is the point: a local business is simultaneously a company (with a legal name, logo, and phone number) and a location (with an address, coordinates, and opening hours), and the markup lets you state both halves in one object.

Google's own documentation confirms what this buys you: LocalBusiness structured data makes your business eligible for the knowledge panel treatment, feeds hours and location details into search features, and helps Google match your website to your Google Business Profile. The markup does not rank you by itself. It removes ambiguity, and ambiguity is what keeps good businesses out of local results.

One distinction worth fixing early: your Google Business Profile is a listing you maintain inside Google's walled garden. Schema markup is a public statement on your own property that every crawler can read, including the AI engines Google does not control. You want both, and you want them to agree. That agreement is the core of what FD calls entity validation on local SEO engagements.

Pick the most specific subtype, not plain LocalBusiness

Schema.org defines well over a hundred subtypes under LocalBusiness, and using the most specific one that fits is the cheapest accuracy win in structured data. Declaring a dental clinic as Dentist rather than generic LocalBusiness is the markup equivalent of choosing the right category on Google Maps: the engine no longer has to guess your industry from your page copy.

Commonly used LocalBusiness subtypes

  • Trades and home services: Plumber, Electrician, RoofingContractor, HVACBusiness, HousePainter, Locksmith, MovingCompany, GeneralContractor
  • Health and personal care: Dentist, Physician, Optician, Pharmacy, HealthClub, BeautySalon, HairSalon, DaySpa
  • Food and hospitality: Restaurant, CafeOrCoffeeShop, Bakery, BarOrPub, Hotel, BedAndBreakfast
  • Retail and automotive: Store (and its children such as FurnitureStore, ClothingStore, HardwareStore), AutoRepair, AutoDealer, TireShop
  • Professional services: AccountingService, Attorney, InsuranceAgency, RealEstateAgent, TravelAgency, VeterinaryCare

Two practical rules. First, if no subtype fits, plain LocalBusiness is fine; never force a wrong subtype for the sake of specificity. Second, a business that is genuinely two things can declare both with an array, for example "@type": ["Bakery", "CafeOrCoffeeShop"]. The full subtype tree lives on Schema.org, and the structured data cheatsheet in our research library lists the ones Ontario service businesses reach for most.

The properties that matter, and how to fill each one

Schema.org permits hundreds of properties. In practice a short list does nearly all the work, and Google's local business documentation names name and address as the required core. Here is the working set, in rough order of importance.

PropertyWhat it doesRules that trip people up
nameYour legal or trading nameMust match your Google Business Profile exactly; no keywords bolted on
addressPostalAddress object: street, locality, region, postal code, countryEvery field spelled identically to your other citations; "St." vs "Street" mismatches count
geoGeoCoordinates: latitude and longitudeUse at least five decimal places, taken from your actual entrance, not the city centroid
telephonePrimary contact numberInclude country code (+1 in Canada); use the same number your profile shows
openingHoursSpecificationStructured hours per weekdayUse 24-hour times; "00:00 to 23:59" means open all day, omitting a day means closed
url and @idCanonical web address and a stable entity identifierThe @id should never change once published; other schema on your site references it
areaServedCities or regions you serveEssential for service-area businesses without walk-in traffic; list real coverage, not wishes
sameAsArray of your other profiles: GBP, Facebook, LinkedIn, directoriesEach URL must be yours and live; this is how engines cross-verify the entity
priceRangeRough cost signal, e.g. "$$"Keep it honest and short; "$$" or "$50-$200" both work
image and logoPhotos of the business and your brand markAbsolute URLs, real photos; Google may surface them in the panel

Notice what is not on the list: keyword-stuffed descriptions, dozens of service pages jammed into one object, and review stars. Restraint reads as trustworthy to a parser. Bloat reads as manipulation.

The aggregateRating rule most guides get wrong

Owners ask for review stars more than any other rich result, so be clear about the constraint. Since 2019, Google has excluded what it calls self-serving reviews from review snippets: ratings a business publishes about itself, on its own site, using LocalBusiness or Organization markup, do not earn stars in Google results. That includes ratings piped in from a third-party widget you embedded. Google's review snippet documentation spells this out, and BrightLocal's testing confirms the stars simply do not render for those types.

So should you include aggregateRating at all? Our position: yes, when the rating is real, sourced from a named platform, and displayed visibly on the same page. Google will not show stars, but Google is not the only reader anymore; AI engines ingest the field as an entity fact. What you must never do is mark up a rating that appears nowhere on the visible page, invent a review count, or inflate the score. Schema that contradicts the visible page is the fastest way to lose Google's trust in all your markup, not just the one field.

A complete, valid example you can copy

The block below is a full LocalBusiness JSON-LD object for a fictional Brantford plumbing company, used here purely to illustrate the shape. Swap every value for your own, then validate before publishing. It goes inside <script type="application/ld+json"> tags in your page head; our companion guide on how to add schema markup walks through the placement step by step for WordPress, Shopify, and static sites.

{
  "@context": "https://schema.org",
  "@type": "Plumber",
  "@id": "https://www.examplebrantfordplumbing.ca/#business",
  "name": "Example Brantford Plumbing",
  "url": "https://www.examplebrantfordplumbing.ca/",
  "image": "https://www.examplebrantfordplumbing.ca/images/storefront.jpg",
  "logo": "https://www.examplebrantfordplumbing.ca/images/logo.png",
  "telephone": "+15195550142",
  "email": "office@examplebrantfordplumbing.ca",
  "priceRange": "$$",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "123 Colborne Street",
    "addressLocality": "Brantford",
    "addressRegion": "ON",
    "postalCode": "N3T 2G8",
    "addressCountry": "CA"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 43.13894,
    "longitude": -80.26636
  },
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
      "opens": "08:00",
      "closes": "17:00"
    },
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": "Saturday",
      "opens": "09:00",
      "closes": "13:00"
    }
  ],
  "areaServed": [
    { "@type": "City", "name": "Brantford" },
    { "@type": "City", "name": "Paris" },
    { "@type": "City", "name": "Cambridge" }
  ],
  "sameAs": [
    "https://www.facebook.com/examplebrantfordplumbing",
    "https://maps.google.com/?cid=1234567890"
  ]
}

If hand-editing JSON is not your idea of a good Tuesday, our no-charge schema generator builds this block from a form and picks the right subtype for you.

The errors that quietly break your markup

In Matt's audits of Ontario service businesses, the recurring finding is not missing schema; it is schema that damages trust because it disagrees with something. The pattern he sees most: a site launched with correct markup, then the business moved, changed phone numbers, or rebranded, and nobody updated the code. The schema kept broadcasting a stale address for years while the Google Business Profile said something else, and the two signals cancelled each other out.

The six failure modes to check for

  • NAP mismatch: name, address, or phone differs between schema, Google Business Profile, and directory citations. Even punctuation-level differences add doubt. Pick one canonical format and enforce it everywhere.
  • Fake or invisible review markup: aggregateRating with no visible rating on the page, invented counts, or self-published stars expected to render in Google. Covered above; do not do any of it.
  • Orphan @id references: schema on one page points to an @id that no other block defines, or the @id changed after a redesign. The graph breaks silently and engines fall back to guessing.
  • Wrong or generic subtype: a restaurant marked up as Organization, or a lawyer marked up as Store from a copied template. The engine believes what you declare.
  • Markup on the wrong pages: the identical full LocalBusiness block pasted into every page, or location data on a blog post. Declare the entity once on its home page and reference it elsewhere.
  • JS-injected schema: markup added by a script after page load that some crawlers never execute. Server-rendered JSON-LD in the head is the only version we deploy.

How LocalBusiness markup feeds the Knowledge Graph and AI engines

Here is the part most schema tutorials skip, and it is the reason the work pays off beyond one rich snippet. Search engines and AI assistants do not store the web as pages; they store it as entities and relationships. Hogan and colleagues, in their 2021 survey of knowledge graphs (arXiv:2003.02320), describe a knowledge graph as a graph of data whose nodes represent real-world entities and whose edges represent the relations between them, and they trace how Google's 2012 Knowledge Graph announcement pushed the model into mainstream industry use at Google, Bing, Amazon, LinkedIn, and beyond.

Two findings from that survey matter directly to a business owner. First, the authors emphasise that knowledge graphs are assembled from many diverse sources, which makes identity a central problem: the system must work out which mentions across the web refer to the same real-world thing. Your LocalBusiness markup, with its stable @id, exact NAP, and sameAs links to your other profiles, is precisely the identity evidence that resolution process consumes. Second, they note that schema plays the structural role, defining how the accumulated facts fit together; Schema.org is the shared vocabulary that lets your little block of JSON slot into a graph holding billions of entities.

The AI layer sits on top of the same substrate. When someone asks ChatGPT or an AI Overview for "a plumber in Brantford that does weekend calls," the engine is retrieving entity facts: category, service area, hours. A business whose facts exist in structured, corroborated form is a low-risk answer for the machine to give. A business whose facts must be inferred from prose is a hallucination waiting to happen. This is what we mean by Digital Fingerprints: the machine-verifiable evidence that you exist, do what you say, and are where you claim to be.

Matt Griffin, Formative Digital: "The audit finding that surprises owners most is when I show them what an AI assistant currently says about their business. I have watched an assistant confidently give a Brantford shop's old address from two moves ago, because no structured signal ever corrected it. The markup is not decoration. It is your side of the record."

Service-area businesses: schema without a storefront

Plumbers, electricians, mobile groomers, and anyone who drives to the customer face a specific problem: local relevance without walk-in premises. The markup answer has three parts. Keep the address property pointing at your real base of operations, even if it is a home office you hide on Google Maps; engines still need a grounding location. Carry the local weight with areaServed, listing the actual cities and regions you cover as typed City or AdministrativeArea objects rather than a comma string. And resist inflating the list: claiming forty municipalities you have never invoiced dilutes the signal for the ten you genuinely serve, and it will not survive cross-checking against your reviews and citations.

Multi-location businesses invert the pattern: one Organization entity for the brand, plus a separate LocalBusiness block on each location's own page, each with its own @id, address, geo, and hours, all pointing back to the parent via parentOrganization. One block trying to describe five locations describes none of them.

Find out what the machines currently believe about your business

The no-charge audit checks your existing markup, your NAP consistency, and what Google, ChatGPT, Perplexity, and Gemini actually say when asked about your business. Reply within one business day.

Validate before you publish, then re-validate on a schedule

Three checks, in order. First, syntax: paste the JSON into any JSON validator or the Schema.org validator at validator.schema.org, which confirms the markup parses and the properties exist in the vocabulary. Second, eligibility: run the live URL through Google's Rich Results Test, which applies Google's stricter rules on top of the vocabulary and previews what rich features the page qualifies for. Markup can pass the first test and fail the second; both are necessary. Third, monitoring: Google Search Console's enhancement reports flag structured data errors across the whole site as Google recrawls, which is where you catch the regression a theme update introduced eight months after launch.

Then put a recurring reminder on the calendar. Every change to hours, phone, address, or ownership is a schema edit, the same day. Stale markup is worse than none, because it is confidently wrong.

Where LocalBusiness fits in your wider schema graph

LocalBusiness markup is one node, not the whole graph. A well-structured local site typically connects it to Article schema on its guides (with a Person author), FAQPage where genuine questions get answered, Service objects describing what you sell, and BreadcrumbList for hierarchy. Each block references the others by @id, so the crawler sees one coherent entity rather than scattered fragments. Building and maintaining that graph is the substance of our schema markup service, and the free cheatsheet maps which types belong on which page templates if you would rather build it yourself.

Either path is fine with us. The owners who copy the example above and validate it carefully are doing real Vector 6 work, and the ones who want the whole graph engineered and monitored know where to find us.

Local business schema: the questions owners ask

Do I need LocalBusiness schema if I already have a Google Business Profile?

Yes. A Google Business Profile is data you hand to one platform; LocalBusiness schema is data any crawler can read from your own site, including ChatGPT, Perplexity, and Bing. The two also corroborate each other. When your on-site markup matches your profile field for field, Google can connect your website to your listing with higher confidence.

Which page should LocalBusiness schema go on?

Put it on the page that represents the physical location: the homepage for a single-location business, or each location page for multi-location businesses. Do not repeat the full LocalBusiness block on every page of the site; reference the entity by its @id from other pages instead.

Can LocalBusiness schema get me star ratings in Google results?

Generally no. Since 2019, Google has treated ratings a business publishes about itself as self-serving and stopped showing review stars for LocalBusiness and Organization markup on that business's own site. You can still include aggregateRating for other engines to read, but do not expect Google stars from it.

What is the difference between LocalBusiness and Organization schema?

LocalBusiness is a subtype of Organization that adds physical-location properties such as address, geo coordinates, opening hours, and price range. Use LocalBusiness or one of its specific subtypes when customers visit or are served from a real location. Use plain Organization for online-only companies with no local service area.

How long does it take for local business schema to show results?

Google typically re-reads updated markup within days to a few weeks of recrawling the page, and you can request indexing in Search Console to speed that up. Visible effects such as richer knowledge panels or better local rankings depend on your overall entity signals, so treat schema as a foundation, not a switch.

Will schema markup help my business appear in ChatGPT and AI Overviews?

It raises your odds. AI engines answer local questions by retrieving structured facts about entities, and clean LocalBusiness markup is the most machine-readable statement of those facts your site can publish. In Matt's testing across Ontario service businesses, sites with consistent entity markup get described more accurately by AI assistants than sites without it.

Sources

  1. Google Search Central: "Local Business (LocalBusiness) Structured Data." developers.google.com
  2. Schema.org: "LocalBusiness" type definition and subtype hierarchy. schema.org
  3. Hogan, A., Blomqvist, E., Cochez, M., et al. (2021). "Knowledge Graphs." arXiv preprint arXiv:2003.02320. arxiv.org
  4. Google Search Central: "Review Snippet (Review, AggregateRating) Structured Data" (self-serving review restrictions). developers.google.com
  5. BrightLocal: "Can local businesses use review schema? Google's rules explained." brightlocal.com

Get the Free AI Visibility Audit

Formative Digital, Brantford, Ontario

If your markup is stale, missing, or contradicting your Google Business Profile, the machines are already drawing the wrong conclusions. The audit shows you exactly where, in plain language, before you spend a dollar fixing it.

Request Your Free AI Visibility Audit