---
title: "Local Schema Markup"
description: "How to use LocalBusiness and OpeningHoursSpecification schema to reinforce local entity signals, and what local schema realistically does and doesn't achieve."
tldr: "LocalBusiness schema is JSON-LD that tells Google precisely what a business is, where it operates, and how to contact it. Google requires only name and address; geo, telephone, url and OpeningHoursSpecification are recommended, and geo coordinates need at least five decimal places. Schema reinforces the entity Google already recognises through your Google Business Profile, but it is not what puts you in a local knowledge panel or the local pack: claiming and verifying the profile does that, and the pack's main factors are off-page. Google states structured data is not required for its generative AI features, while local SEO specialists rate it higher for AI visibility than for pack ranking."
publishDate: 2026-04-25
updatedDate: 2026-07-25
author: "Liam Hayward"
---
Local schema markup uses schema.org types to declare a business's identity, location, services, and operational details to search engines explicitly. Google says that with LocalBusiness structured data "you can tell Google about business hours, different departments within a business, reviews (if your site captures reviews about other businesses), and more".[^11]

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; the local pack's main factors are off-page.

## What are the core local schema types?

**What Google 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 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. `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] 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:

```json
{
  "@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:

- Your Google Business Profile
- Your major local citations
- The visible NAP on your website

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. 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]

## Does local schema matter for AI search?

Google and local SEOs 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.

Local SEOs 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.

Both positions support 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. Neither supports 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:

```json
{
  "@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,[^1][^3] 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

| Mistake | Effect |
|---|---|
| LocalBusiness schema on a non-local business | Misleading; doesn't help; can confuse entity matching |
| Schema NAP doesn't match GBP NAP | Diluted entity signal |
| Wrong country code in `PostalAddress` | Geographic 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 markup | Breaches the review snippet guidelines |
| Schema for a service area that doesn't match GBP service area | Conflicting signals |
| geo coordinates with fewer than 5 decimal places | Below Google's stated precision requirement |
| Marking up facts the page doesn't display | Breaches the "don't mark up content that is not visible to readers" policy |

## How do you validate local schema markup?

Use both:

- **[Schema Markup Validator](https://validator.schema.org/)** for spec validity
- **[Google Rich Results Test](https://search.google.com/test/rich-results)** for Google-specific eligibility

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. Whitespark's 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.

[^1]: [Local business (LocalBusiness) structured data — Google Search Central](https://developers.google.com/search/docs/appearance/structured-data/local-business)
[^2]: [Establish your business details with structured data — Google Search Central](https://developers.google.com/search/docs/appearance/establish-business-details)
[^3]: [Structured data markup that Google Search supports — Google Search Central](https://developers.google.com/search/docs/appearance/structured-data/search-gallery)
[^4]: [Review snippet structured data — Google Search Central](https://developers.google.com/search/docs/appearance/structured-data/review-snippet)
[^5]: [Guidelines for representing your business on Google — Google Business Profile Help](https://support.google.com/business/answer/3038177)
[^6]: [General structured data guidelines — Google Search Central](https://developers.google.com/search/docs/appearance/structured-data/sd-policies)
[^7]: [Optimizing your website for generative AI features on Google Search — Google Search Central](https://developers.google.com/search/docs/fundamentals/ai-optimization-guide)
[^8]: [Local Search Ranking Factors 2026 — Whitespark](https://whitespark.ca/local-search-ranking-factors/)
[^9]: [Intro to how structured data markup works — Google Search Central](https://developers.google.com/search/docs/appearance/structured-data/intro-structured-data)
[^10]: [Tips to improve your local ranking on Google — Google Business Profile Help](https://support.google.com/business/answer/7091)
[^11]: [Local business (LocalBusiness) structured data — Google Search Central](https://developers.google.com/search/docs/appearance/structured-data/local-business)