LocalBusiness Schema

How to implement LocalBusiness schema, why Google supports far less than the full schema.org spec, choosing the right subtype, NAP consistency, and how it differs from a Google Business Profile.

First published: Jul 1, 2026 · Last updated: Jul 18, 2026 · Advanced
demand #13 in Structured Data#39 in On-Page#165 in Technical SEO#213 on the site
1 evidence signal on this page

LocalBusiness schema (schema.org/LocalBusiness) describes a physical business to search engines. It's a subtype of Organization and Place, so the full spec inherits dozens of properties — but Google requires only two (name, address) and consumes about a dozen recommended ones. The wins come from using the most specific subtype (Restaurant, LegalService, DaySpa — not generic LocalBusiness), keeping NAP consistent across markup, your Google Business Profile, and directory citations, and getting the fiddly details right: geo coordinates need at least 5 decimal places, priceRange must stay under 100 characters. The two biggest traps: marking up your own star rating with aggregateRating/review (that's for sites reviewing OTHER businesses — self-serving reviews break Google's guidelines), and treating schema as a substitute for a Google Business Profile. They're separate systems, reconciled separately, and valid markup only makes you eligible — Google never guarantees a rich result.

TL;DR — LocalBusiness is a subtype of Organization and Place, so the full schema.org spec inherits dozens of properties — but Google requires only name + address and consumes ~12 recommended ones. The wins: use the most specific subtype (multiple types go in an array; additionalType isn’t supported), keep NAP consistent across your markup, Google Business Profile, and citations, and get the details right — geo needs ≥5 decimal places, priceRange must stay under 100 characters. Don’t mark up your own aggregateRating/review (that’s for sites reviewing other businesses; self-serving reviews break the guidelines), and don’t treat schema as a Google Business Profile substitute — they’re separate, reconciled separately, and valid markup only makes you eligible.

Where it sits: a subtype of Organization and Place

The single most useful thing to understand about LocalBusiness is its position in the schema.org hierarchy. It’s a subtype of both Organization and Place, which is exactly why it can carry general company properties (name, logo, sameAs) and location-specific ones (address, geo, openingHoursSpecification). That dual inheritance is also why the full spec is so large — it pulls properties from two big parent types.

That matters for how you think about the wider Entity & Identity schema picture. A company-wide Organization entity (sitewide, on the homepage) and a per-location LocalBusiness entity are related but distinct: one describes the company, the other describes a place you can walk into. For the company-level entity, see Organization schema; for the people behind it, Person schema.

The full spec vs. what Google actually consumes

This is the distinction most guides blur. schema.org/LocalBusiness inherits dozens of properties from Organization and Place. Google consumes a small subset. Don’t confuse “schema.org supports X” with “Google will do something with X.”

Evidence for this claim Schema.org exposes many LocalBusiness properties, while Google's search feature uses a narrower documented set. Scope: Schema.org validity compared with Google Search feature support. Confidence: high · Verified: Google: LocalBusiness structured data

Required (only two):

  • address (PostalAddress) — the physical location. Google’s advice: include as many address sub-properties as possible; the more you provide, the higher the quality of the result.
  • name — the name of the business.

Recommended (the properties that actually enrich the result): aggregateRating, department, geo (with geo.latitude / geo.longitude), menu, openingHoursSpecification (with .opens, .closes, .dayOfWeek, .validFrom, .validThrough), priceRange, review, servesCuisine, telephone, and url.

The takeaway for prioritizing dev effort: nail the required pair, then add the recommended properties that make your listing more complete (hours and geo for a storefront; servesCuisine and menu for a restaurant). Filling in obscure inherited properties that Google ignores is wasted effort.

Choosing the right subtype

Google is explicit: use the most specific LocalBusiness sub-type possible — for example Restaurant, DaySpa, HealthClub. Generic LocalBusiness works, but a specific subtype gives engines more to work with.

A few practical mappings:

  • Restaurant / café → Restaurant, CafeOrCoffeeShop, BarOrPub (under FoodEstablishment)
  • Law firm → LegalService (or Attorney)
  • Dentist / doctor → Dentist, Physician (under MedicalBusiness)
  • Plumber / electrician / general contractor → HomeAndConstructionBusiness subtypes (Plumber, Electrician, GeneralContractor)
  • Consultancy / agency with no better fit → ProfessionalService

If your business genuinely spans two types, specify them as an array — Google supports multiple @type values that way. Note that additionalType is not supported for this purpose, so don’t reach for it.

NAP consistency — schema, GBP, and citations

“NAP” (Name, Address, Phone) consistency is longstanding local-SEO best practice: the same name, address, and phone should appear identically across your on-page schema, your Google Business Profile, and directory citations (Yelp, BBB, industry directories). Mismatches — an old suite number here, a tracking phone number there — muddy the signals engines use to identify and trust a location.

One honest caveat: “NAP” is industry shorthand, not a Google spec term. Google’s LocalBusiness documentation doesn’t use the word. Frame it as well-established local-SEO consensus, not a quoted Google ranking factor. It still matters — arguably more than any single individual property — because it’s about the coherence of your entity across the web, not one field on one page.

The implementation details that trip people up

  • Geo coordinates need at least 5 decimal places. Google states the precision must be at least 5 decimal places for both latitude and longitude. A common slip is a CMS or geocoding tool rounding coordinates to 2–3 places — enough to put your pin in the wrong block.
  • priceRange has a 100-character ceiling. It must be shorter than 100 characters; at 100 or more, Google won’t show a price range at all. Keep it short ($$, or $10–30), not a paragraph.
  • openingHoursSpecification syntax and edge cases. dayOfWeek accepts full schema.org URLs (https://schema.org/Monday) or the short name (Monday). Google’s own examples use 24-hour opens/closes times without seconds (hh:mm); schema.org’s broader Time type also accepts hh:mm:ss if your generator adds it. Four patterns cover almost every case, straight from Google’s documentation: a normal day ("opens": "09:00", "closes": "17:00"), hours that cross midnight ("opens": "18:00", "closes": "03:00" for an overnight Saturday), open all day ("opens": "00:00", "closes": "23:59"), and closed all day ("opens": "00:00", "closes": "00:00"). For seasonal or holiday closures, add validFrom / validThrough in YYYY-MM-DD (Google’s own example uses "validFrom": "2015-12-23", "validThrough": "2016-01-05") — a nuance most basic implementations skip entirely.
  • Department naming convention. When you nest a department, include the store name with the department name (e.g., “gMart” and “gMart Pharmacy”) — unless the department is its own independent brand (e.g., “Best Buy” and “Geek Squad”), in which case name it standalone.

Reviews and ratings: the self-serving-rating trap

This one wastes a lot of implementation effort. Google’s docs are clear that aggregateRating and review are recommended only for sites that capture reviews about other local businesses — a directory or review platform, not the business rating itself. A business marking up its own star average on its own page is doing a “self-serving review,” which violates Google’s review-snippet guidelines; Google stopped showing self-serving review stars for LocalBusiness/Organization years ago. Evidence for this claim Google's review snippet rules make self-serving reviews for LocalBusiness and Organization ineligible for the star review feature. Scope: Google Search review snippet eligibility policy; genuine third-party review contexts are treated differently. Confidence: high · Verified: Google: Review snippet structured data

So if you were planning to sprinkle your homepage testimonials into an aggregateRating: don’t. It won’t earn the stars you’re picturing, and it can cross the line from “no benefit” into “guideline violation.”

Multi-location businesses: one page vs. many

Competitors give hand-wavy advice here, so let me be concrete. The correct pattern depends on your architecture:

  • One LocalBusiness per location page. The cleanest approach for a chain: each location gets its own page with its own LocalBusiness markup describing that address. You can tie them to the parent with parentOrganization / branchOf.
  • Nesting under Organization. At the company level, you can express the brand as an Organization with locations as subOrganization.

What not to do: stack five unrelated LocalBusiness blocks flatly on your homepage. If a page has one address in the footer but five different LocalBusiness addresses in the markup, you’ve made it ambiguous which address the page is actually about. Mark up the location the page represents.

LocalBusiness schema vs. Google Business Profile

Say this plainly because most guides bury it: schema markup ≠ Google Business Profile. They are different systems that Google reconciles separately.

  • Your Google Business Profile feeds Maps and the local pack directly through Google’s own systems. It’s the primary driver of “near me” and local-pack visibility.
  • On-page LocalBusiness schema is a corroborating on-site signal Google may use for Knowledge Panels and enriched results. It is not a substitute for a Business Profile — and a Business Profile is not a substitute for on-page schema.

You want both, kept consistent (that’s the NAP point again). Neither one alone does the other’s job.

What it does — and doesn’t — guarantee

Valid, guideline-compliant markup makes a page eligible for a local Knowledge Panel or a business carousel — though “eligible” scopes differently per feature. Google’s restaurant carousel, for instance, is currently limited to a small set of participating restaurant providers, so valid Restaurant markup alone doesn’t get an arbitrary site into it. Beyond that scoping, eligibility still doesn’t guarantee display — Google says outright that it doesn’t guarantee that features consuming structured data will show up in results. And a note on the stats floating around competitor blogs: numbers like “30–50% more often in the local pack” or “20–35% CTR lift” circulate widely with no primary source. Treat them as unverified marketing claims, not Google-confirmed outcomes.

Validate before you ship

  1. Add the required properties (name, address), then the recommended ones that fit your business.
  2. Validate with the Rich Results Test and the Schema Markup Validator.
  3. Deploy, then check with URL Inspection in Search Console and request a recrawl.
  4. Monitor the structured-data reports in Search Console over time.

Validate, then deploy — not the reverse.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin an expert quote first.