Local Schema Markup

Local schema markup uses schema.org types to declare a business’s identity, location, services, and operational details to search engines explicitly. For local businesses, well-implemented schema reinforces the entity Google recognises through Google Business Profile and citations.

Be realistic about what it buys you. Google describes the local business rich result as “business details displayed in the Google knowledge panel, including open hours, ratings, directions, and actions”, and notes that businesses may appear in a carousel when users search for a type of business.1 What creates a local knowledge panel in the first place is claiming and verifying the Business Profile, not markup.2 Markup makes your own pages legible and consistent with that entity; it is not the route into the local pack, whose main factors are off-page.

What are the core local schema types?

What Google actually requires. Only two properties are required for eligibility: name and address. Recommended properties include geo, telephone, url, openingHoursSpecification, priceRange, department, menu and servesCuisine.1 Note also that geo.latitude and geo.longitude have a stated precision floor: “the precision must be at least 5 decimal places”.1 Four-decimal coordinates, which are common in copied examples, fall below it.

Since LocalBusiness is a subtype of Organization, Google recommends following the Organization fields as well.1 Organization markup is also what specifies the logo Google uses in a knowledge panel.2

LocalBusiness. The base type for any business with a physical location or service area. Sub-types extend it with industry-specific properties: Restaurant, Plumber, Dentist, LegalService, FinancialService, and many others. Use the most specific sub-type that fits. Where a business genuinely spans types, an array works ("@type": ["Electrician", "Plumber"]); additionalType is not supported.1

PostalAddress. Required nested type for the business’s address. Includes streetAddress, addressLocality, addressRegion, postalCode, addressCountry.

OpeningHoursSpecification. Declares opening hours per day. More precise than the simpler openingHours string property; supports varying hours per day, holiday hours, and seasonal variations.

GeoCoordinates. Latitude and longitude. Useful for ensuring map placement matches your intended location precisely.

Service. For service-based businesses, declares the specific services offered. Worth knowing that Service is not one of Google’s supported structured data features: it does not appear in the search gallery,3 so treat it as entity description rather than as something Google acts on.

AggregateRating and Review. Star rating and review counts, with individual reviews. Google states that aggregateRating “is only recommended for sites that capture reviews about other local businesses”,1 and that where “the entity that’s being reviewed controls the reviews about itself”, pages using LocalBusiness or any other Organization type “are ineligible for star review feature”, including via embedded third-party review widgets.4 So a business marking up its own reviews gets no stars. Stars can appear on third-party sites that review the business.

Google added a further guideline in July 2026: “Don’t include fake or undisclosed incentivized reviews on your page or in your structured data markup”, with examples covering reviews written in exchange for money, discounts, vouchers or free products “that don’t clearly and prominently disclose the incentivization”.4

A worked example

A typical local business schema for a plumbing company:

{
  "@context": "https://schema.org",
  "@type": "Plumber",
  "@id": "https://example-plumber.co.uk/#business",
  "name": "Example Plumbing Services Ltd",
  "image": "https://example-plumber.co.uk/logo.jpg",
  "url": "https://example-plumber.co.uk/",
  "telephone": "+44 117 946 0958",
  "priceRange": "£££",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "12 High Street",
    "addressLocality": "Bristol",
    "addressRegion": "England",
    "postalCode": "BS1 1AA",
    "addressCountry": "GB"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 51.454514,
    "longitude": -2.587910
  },
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
      "opens": "08:00",
      "closes": "18:00"
    },
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": "Saturday",
      "opens": "09:00",
      "closes": "13:00"
    }
  ],
  "areaServed": [
    { "@type": "City", "name": "Bristol" },
    { "@type": "City", "name": "Bath" }
  ],
  "sameAs": [
    "https://www.facebook.com/exampleplumber",
    "https://www.linkedin.com/company/example-plumber"
  ]
}

This schema would typically sit in the <head> of the homepage and the contact page. For multi-location businesses, each location’s landing page would carry its own LocalBusiness schema with that location’s specific details.

NAP consistency between schema and other sources

The address, phone, and name in your schema must match exactly what’s in:

Mismatches confuse Google’s entity matching and dilute the local signal. Audit periodically; updates to GBP or citations should trigger a check on the on-site schema.

Service area vs physical address

For businesses without a customer-facing physical premises (most tradespeople, mobile services, consultants):

  • Use areaServed to describe the cities or regions covered, understanding that it is not a Google-supported property
  • Consider whether LocalBusiness is the right type at all; some service businesses fit better under ProfessionalService or a more specific sub-type

There is a real tension here worth naming rather than glossing. Google’s Business Profile guidance tells service-area businesses to remove the address: “if you’re a plumber and run your business from your residential address, clear the address from your Business Profile.”5 But address is one of only two required properties for the local business rich result,1 so dropping it from your markup forfeits eligibility.

The workable resolution is to keep address present but scoped to what you are willing to publish, using a PostalAddress with addressLocality, addressRegion, postalCode and addressCountry and omitting streetAddress, rather than removing the property. Clear the street address from the Business Profile as Google instructs, and don’t publish a residential street address on the site either.

Multi-location schema

For businesses with multiple physical locations, the standard pattern:

  • A separate LocalBusiness schema block on each location’s landing page
  • Each block has a unique @id (typically the URL of the location page plus #business)
  • The parent organisation can be declared with Organization schema referencing all the locations via branch or subOrganization

This structure lets Google understand both the individual locations and the parent brand without conflating them.

For multiple units at one address, such as departments within a store, Google documents the department property, with properties that differ from the main business defined in each department element.1 More generally, more than one marked-up item on a page is fine: “Google Search understands multiple items on a page, whether you nest the items or specify each item individually.”6

The honest answer is that Google and practitioners disagree, and the disagreement is worth seeing.

Google’s own guidance is blunt: “structured data isn’t required for generative AI search, and there’s no special schema.org markup you need to add.” It goes on to recommend continuing to use it “as part of your overall SEO strategy, as it helps with being eligible for rich results on Google Search”.7 That is Google’s position on Google’s AI features, not an industry-wide verdict; other platforms retrieve and parse pages differently.

Practitioners lean the other way. Whitespark’s 2026 survey ranks website content marked up in schema 44th of 187 factors for AI search visibility, against 161st for local pack and Maps ranking.8 The same survey, note, is expert opinion rather than measurement.

What both positions support is the same modest conclusion: markup is cheap, it makes your facts machine-readable and unambiguous, and consistency between your markup, your Business Profile and your visible page content is worth having regardless of which view proves right. What neither supports is treating schema as an AI visibility lever that substitutes for the off-page work.

Service schema for service-based businesses

For businesses where services are a primary search target, Service schema lets each service be its own entity:

{
  "@type": "Service",
  "name": "Boiler Installation",
  "provider": { "@id": "https://example-plumber.co.uk/#business" },
  "areaServed": { "@type": "City", "name": "Bristol" },
  "description": "Professional gas-safe boiler installation across Bristol, including system design, removal of old units, and full commissioning."
}

This pattern is useful for describing a service-area business’s offering coherently, but be clear about the limit: neither Service nor areaServed is part of Google’s supported LocalBusiness feature,13 so treat both as entity reinforcement with no Google feature attached. Service-area data that Google demonstrably acts on lives in the Business Profile, not in markup. Don’t expect service schema on its own to make a business rank for “[service] in [city]”.

Common local schema mistakes

MistakeEffect
LocalBusiness schema on a non-local businessMisleading; doesn’t help; can confuse entity matching
Schema NAP doesn’t match GBP NAPDiluted entity signal
Wrong country code in PostalAddressGeographic misrouting
Self-serving aggregateRating (your own reviews, on your own site)Ineligible for star review results; markup that misrepresents is a policy breach
Undisclosed incentivised reviews in markupBreaches the review snippet guidelines
Schema for a service area that doesn’t match GBP service areaConflicting signals
geo coordinates with fewer than 5 decimal placesBelow Google’s stated precision requirement
Marking up facts the page doesn’t displayBreaches the “don’t mark up content that is not visible to readers” policy

How do you validate local schema markup?

Use both:

Local rich results (knowledge panel content, map placements, hours displays) require that the schema validates and matches Google’s policies. Both validation steps are necessary.

Frequently asked questions

Does local schema directly improve local pack ranking?
Indirectly at best. Structured data helps Google understand and classify the business as an entity,9 but Google’s stated local ranking factors are relevance, distance and prominence, with prominence resting on off-page signals such as links and reviews.10 Strong schema supports those signals; it doesn’t substitute for them. The practitioner survey ranks schema markup 161st of 187 for local pack ranking, which is consistent with that.8

Should I add LocalBusiness schema to every page?
The full version belongs on the homepage, the contact page, and each location page. Be careful with condensed markup sitewide: Google’s policy is “don’t mark up content that is not visible to readers of the page”,6 so repeating hours and address markup on pages that don’t display them is the pattern that policy targets. Sitewide Organization markup plus page-appropriate LocalBusiness markup is the safer split.

What about hours that vary?
Use multiple openingHoursSpecification entries for different patterns (weekday vs weekend, summer vs winter). For temporary closures or special hours, the specialOpeningHoursSpecification property handles holiday and one-off variations.

Footnotes

  1. Local business (LocalBusiness) structured data — Google Search Central 2 3 4 5 6 7 8 9

  2. Establish your business details with structured data — Google Search Central 2

  3. Structured data markup that Google Search supports — Google Search Central 2

  4. Review snippet structured data — Google Search Central 2

  5. Guidelines for representing your business on Google — Google Business Profile Help

  6. General structured data guidelines — Google Search Central 2

  7. AI features and your website — Google Search Central

  8. Local Search Ranking Factors 2026 — Whitespark 2

  9. Intro to how structured data markup works — Google Search Central

  10. Tips to improve your local ranking on Google — Google Business Profile Help