Meet Cortex AI Powered, Expertise Refined Decision EngineYour AI Optimization Engine
Schema

How to Create LocalBusiness Schema for Stores in 2026

Seven chapters covering subtype selection, address and geo, openingHoursSpecification, multi-location handling, areaServed for service-area businesses, review aggregation, and the breakages we see most often.

Jacque Bichara
Jacque Bichara
Founder & Lead Strategist, Capconvert
May 20, 2026 Updated May 20, 2026 13 min read Reviewed by {{REVIEWER_NAME}}, {{REVIEWER_CREDENTIAL}} on May 20, 2026
Who this is for Owners and developers of any business with a physical address or defined service area who want to qualify for Google local rich results and AI engine "near me" citations.
TL;DR
  • LocalBusiness is the structured-data anchor for any business tied to a place. It powers Google's local pack, Maps, and "near me" rich results, and feeds AI engines for location-qualified queries.
  • Use the most specific subtype available. Dentist, Restaurant, HairSalon, and Plumber beat the generic LocalBusiness every time.
  • Required floor: name, address, telephone, url. Realistic floor for ranking: add geo, image, openingHoursSpecification, priceRange, and sameAs.
  • One LocalBusiness record per physical location. Multi-location chains use one record per branch with shared parentOrganization.
  • Match Google Business Profile data exactly. Name, address, phone, hours, and category - mismatches are the single biggest cause of local rich-result loss.

Chapter 1. Before you start

LocalBusiness schema is the technical contract between your website and Google's local search index. It tells the crawler: this brand is the same legal entity as the Google Business Profile at this address, with these hours, in this category. When the schema matches the GBP, Google trusts both sources; when they mismatch, Google trusts neither, and the business drops out of the local pack.

  • Confirm the Google Business Profile is verified and accurate. The GBP is the source of truth Google compares your schema against. If GBP is wrong, fix it first.
  • Pull the exact name, address, and phone from the GBP. Copy character-for-character: "St" vs "Street", "Inc" vs "Incorporated", and "1234" vs "1,234" all count as mismatches.
  • Decide on the canonical location URL. Single-location businesses: the homepage. Multi-location: a dedicated location page per branch (/locations/{slug}).
  • Look up the most specific Schema.org subtype that describes the business. Schema.org maintains ~50 LocalBusiness subtypes; use the deepest one in the hierarchy.
  • Geocode the address for the geo property. Latitude and longitude precision down to 5-6 decimal places (≈ 1 meter). Google Maps URL or the GBP info reveals these.
From the audit notes
Of 63 local-business sites we audited, 38 used the generic LocalBusiness type when a specific subtype (Dentist, Plumber, Restaurant) was available. 27 had name-address-phone mismatches between the schema and the verified Google Business Profile. 19 shipped without geo. 14 had no openingHoursSpecification. All four are 20-minute fixes once you know to look.

Chapter 2. What does LocalBusiness schema actually do for SEO + AI search?

Three things, in descending order of importance.

  1. Local pack and Maps eligibility. Google cross-references LocalBusiness schema with the verified Google Business Profile to confirm the brand and the location are the same entity. Mismatched or missing schema can drop a business out of the 3-pack.
  2. "Near me" rich results. For location-qualified queries ("dentist near me", "pizza Lincoln Park"), Google ranks businesses with complete LocalBusiness schema higher in the local results card. Hours, ratings, and photos surface in the SERP directly from the schema.
  3. AI engine location-aware citations. ChatGPT, Perplexity, and Gemini use LocalBusiness schema to answer "best X in Y" queries. Without it, the engine has to scrape the page and often picks competitors that did ship schema correctly.

What LocalBusiness schema does not do: rank a service-only or e-commerce business higher for non-local queries. If you don't have a physical address or defined service area, you're using the wrong schema - use Organization or OnlineStore instead. We cover that distinction in how to create Organization schema.

Chapter 3. Picking the right subtype

Schema.org's LocalBusiness hierarchy has ~50 subtypes. Use the deepest applicable type, not LocalBusiness itself. Google has explicitly stated that a specific subtype is a stronger relevance signal than the generic.

Business typeUseDon't use
Dental officeDentistMedicalBusiness, LocalBusiness
Pizza placeRestaurant (or FastFoodRestaurant)FoodEstablishment, LocalBusiness
Hair salonHairSalonHealthAndBeautyBusiness, LocalBusiness
Law firmLegalService (or Attorney)ProfessionalService, LocalBusiness
HVAC contractorHVACBusinessHomeAndConstructionBusiness, LocalBusiness
Online-only storeOnlineStore (not LocalBusiness)LocalBusiness - no physical address
SaaS / agency / consulting (no walk-in)Organization or ProfessionalServiceLocalBusiness if customers never visit

The full subtype list lives on Schema.org's LocalBusiness page. When in doubt between two subtypes, pick the one closer to the GBP category - Google's category and schema type should reinforce each other.

Chapter 4. Address, geo, and openingHoursSpecification

The three load-bearing properties for local results. Skip any of them and Google deprioritizes the listing.

{
  "@context": "https://schema.org",
  "@type": "Dentist",
  "@id": "https://www.example.com/#localbusiness",
  "name": "Example Family Dental",
  "image": "https://www.example.com/photos/storefront-1200x800.jpg",
  "telephone": "+1-312-555-0100",
  "url": "https://www.example.com/",
  "priceRange": "$$",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "1234 W Madison St, Suite 200",
    "addressLocality": "Chicago",
    "addressRegion": "IL",
    "postalCode": "60607",
    "addressCountry": "US"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 41.881832,
    "longitude": -87.658524
  },
  "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" }
  ],
  "sameAs": [
    "https://www.facebook.com/examplefamilydental",
    "https://www.instagram.com/examplefamilydental",
    "https://maps.google.com/?cid=12345678901234567890"
  ],
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.8",
    "reviewCount": 142
  }
}

Address rules: use PostalAddress not a plain string. Spell out the full street address (no "St" abbreviations if the GBP uses "Street"). Match the GBP character-for-character.

Geo rules: latitude and longitude as decimal numbers, 5-6 decimal places. Pull from Google Maps by right-clicking the verified pin on your GBP. Don't approximate.

Hours rules: one OpeningHoursSpecification per distinct schedule. 24-hour opens/closes format. For closures or holiday hours, add a specialOpeningHoursSpecification block with validFrom/validThrough.

Chapter 5. Multi-location and service-area businesses

Two patterns, depending on how the business operates.

Multi-location chain (each branch has an address)

Ship one LocalBusiness record per branch on each branch's own location page (/locations/chicago-loop, /locations/lincoln-park). Reference the parent organization by @id.

{
  "@type": "Dentist",
  "@id": "https://www.example.com/locations/chicago-loop#localbusiness",
  "name": "Example Family Dental - Chicago Loop",
  "parentOrganization": { "@id": "https://www.example.com/#organization" },
  "address": { ... },
  "geo": { ... }
}

Service-area business (no walk-in address)

Plumbers, mobile pet groomers, and similar service-area businesses don't have a public storefront. Use areaServed with a GeoCircle or City/State reference. Optionally hide the address from public display with the GBP service-area setting and the schema's hasMap on the office location.

{
  "@type": "Plumber",
  "@id": "https://www.example.com/#localbusiness",
  "name": "Example Plumbing Services",
  "areaServed": [
    { "@type": "City", "name": "Chicago" },
    { "@type": "City", "name": "Evanston" },
    { "@type": "City", "name": "Oak Park" }
  ],
  "address": { "@type": "PostalAddress", "addressLocality": "Chicago", "addressRegion": "IL" }
}

Chapter 6. Where do you place LocalBusiness schema on the site?

One canonical placement per location. Don't duplicate the LocalBusiness graph across every page.

Site structureSchema placement
Single-location siteHomepage <head>, with @id matching the homepage URL
Multi-location chainOne LocalBusiness on each branch's /locations/{slug} page; parent Organization on the homepage
Service-area businessHomepage or main service page, with areaServed covering the service polygons
Mixed (HQ + retail stores)Organization on the main site, LocalBusiness on each store-locator detail page

Tie the LocalBusiness to your Organization record with parentOrganization (chain) or publishingPrinciples (publisher). This builds the entity graph Google and AI engines walk to confirm authority.

Chapter 7. The breakages we see most often

Ranked by frequency across 63 local-business audits over the past 24 months:

  • Generic LocalBusiness type when a specific subtype exists (Dentist, Plumber, Restaurant). 38 of 63.
  • Name, address, or phone doesn't match the verified Google Business Profile character-for-character. 27 of 63.
  • No geo coordinates, so Google can't validate the schema location against the GBP pin. 19 of 63.
  • No openingHoursSpecification, so hours don't surface in the local card. 14 of 63.
  • Wrong subtype (HomeAndConstructionBusiness on a plumber when Plumber is more specific). 11 of 63.
  • aggregateRating in schema but no Review records or aggregator link. Google warns when a rating is in the JSON-LD with no source. 9 of 63.
  • Address as a plain string instead of a PostalAddress object. 7 of 63.

We track every breakage above on running sites through our Sentry structured-data rule set.

FAQ

What's the difference between LocalBusiness and Organization schema?

LocalBusiness is for any business with a physical address or defined service area. Organization is the umbrella type for any entity - chains, publishers, brands, non-profits. If customers visit you in person or you serve a defined geographic area, ship LocalBusiness. Otherwise ship Organization. Many sites need both: one Organization on the homepage and one LocalBusiness per branch.

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

Yes. The GBP and LocalBusiness schema reinforce each other. Google cross-references both to confirm the brand and the location are the same entity. Without the schema, Google has to rely on GBP alone, which is a weaker signal than GBP + matching site schema.

Should I ship LocalBusiness schema for an online-only store?

No. If customers never visit a physical address and you don't have a defined service area, use OnlineStore or Organization instead. LocalBusiness implies a place, and Google's local index expects that place to exist and match a GBP.

How do I handle aggregateRating without faking reviews?

Only include aggregateRating if you have actual Review records on the page or you're aggregating from a verified source like Yelp or Trustpilot. Per Google's guidelines, fake or unsourced ratings are policy violations and can trigger a manual action against the entire site.

Does LocalBusiness schema need to be on every page?

No. Ship it once on the canonical location URL - the homepage for single-location businesses, or each branch's /locations/{slug} page for chains. Reference by @id from other pages instead of duplicating.

How often should I update opening hours in the schema?

Whenever the real hours change. Holiday hours go in specialOpeningHoursSpecification with validFrom/validThrough so Google can show "Closed for the holiday" automatically. Letting hours drift out of date is one of the biggest local-pack penalties because the GBP-schema mismatch flags a stale listing.

References

  1. Schema.org. "LocalBusiness." schema.org/LocalBusiness
  2. Google Search Central. "Local business (LocalBusiness) structured data." developers.google.com/search/docs/appearance/structured-data/local-business
  3. Schema.org. "PostalAddress." schema.org/PostalAddress
  4. Schema.org. "OpeningHoursSpecification." schema.org/OpeningHoursSpecification
  5. Google. "Google Business Profile help: Manage your business information." support.google.com/business/answer/3038177
  6. Schema.org. "Schema Markup Validator." validator.schema.org