Schema

Local Business Schema: A Practical Implementation Guide

Local Business Schema describes a physical or locally operating business in a machine-readable format. It can connect a location's name, address, phone number, opening hours, coordinates and business type. Accurate markup can help search engines and AI-powered systems understand which business operates where, but it does not replace a Google Business Profile or guarantee local rankings. This guide explains how to model storefronts, service areas and multi-location organisations correctly.

SchemaIntermediate10 min readPublished

What is Local Business Schema?

Local Business Schema is structured data using the Schema.org LocalBusiness type or one of its more specific subtypes. It describes a business that serves customers from a physical location, within a local area or through a hybrid of the two.

Examples include:

  • shops and restaurants;
  • hotels and leisure venues;
  • dentists, solicitors and accountants;
  • plumbers, electricians and cleaning services;
  • garages and repair businesses;
  • salons, gyms and healthcare practices;
  • branches of a larger company.

LocalBusiness is a subtype of Organization and Place. It can therefore describe both the business entity and the place where it operates.

Common properties include:

  • name, url and image;
  • telephone and address;
  • geo coordinates;
  • openingHoursSpecification and priceRange;
  • areaServed where relevant;
  • department and sameAs for official profiles.

The markup should describe a genuine operation represented on the page. It should not be used to manufacture virtual locations or make a nationwide website appear local to every town.

What does LocalBusiness structured data help with?

It identifies the business and location

A company can have several branches with the same brand name. LocalBusiness structured data associates one branch with its own address, phone number, URL, hours and coordinates.

It clarifies practical customer information

Opening hours, telephone numbers and location details are facts people may need before visiting or contacting the business. Structured data expresses them in a consistent form machines can process.

It can support eligible search experiences

Google can use Local Business structured data when understanding local businesses and may show business information in Search or Maps experiences. The page and markup must meet the applicable requirements, and a particular presentation is never guaranteed.

It improves consistency at scale

A multi-location template can generate accurate markup for hundreds of branches from one location database. A crawler can then find missing or inconsistent records across the estate.

It supports machine-readable local identity

AI-powered search and discovery systems need to distinguish locations, service areas and opening times. Accurate structured data can reduce ambiguity, particularly when the same brand operates in several places.

LocalBusiness, Organization and Google Business Profile

These components are related but perform different jobs.

Organization describes the wider entity

Organization can represent the parent company, charity, institution or online business behind the website. Its full object normally belongs on the homepage or About page.

LocalBusiness describes a local operation

LocalBusiness represents the storefront, office, practice or locally operating service. A multi-location company can have one Organization object and a distinct LocalBusiness object for each branch.

The objects can be connected with a stable relationship such as parentOrganization when appropriate.

Google Business Profile manages the listing

A verified Google Business Profile lets an eligible local business manage its appearance in Google Search and Maps, including its address or service area, category, hours, phone number, photographs and reviews.

Website markup does not create, verify or control that profile. Local Business Schema complements it by publishing structured facts on the business's own website.

Keep all three aligned

The website, structured data and Business Profile should agree about material facts:

  • business name and branch URL;
  • phone number;
  • customer-facing address or service area;
  • ordinary opening hours;
  • whether the location is open, moved or permanently closed.

Minor formatting differences are normal. Conflicting businesses, locations or hours create a real customer problem and make machine interpretation less reliable.

How to choose a LocalBusiness subtype

Use the most specific Schema.org subtype that accurately describes the business. Examples include Restaurant, Store, Dentist, LegalService, AccountingService, Electrician, Plumber, AutoRepair, HairSalon, HealthClub and Hotel.

A restaurant should normally use Restaurant rather than the broad LocalBusiness. A dental practice can use Dentist where that accurately represents the location.

Do not choose a subtype solely because it contains a valuable keyword. The type describes what the entity is, not every service it would like to rank for.

When one business genuinely belongs to several supported types, Google's guidance allows an array of types. It does not support using additionalType as a substitute for that purpose in Local Business rich-result markup:

"@type": ["Electrician", "Plumber", "Locksmith"]

Use several types only when each one is factually true of the same operation. A long list of loosely related categories weakens clarity.

Which local business details should you include?

name

Use the real-world business or branch name. Do not append services, towns or promotional text unless they are genuinely part of the public name.

url

Use the canonical URL for the location or business page. For a multi-location site, this is normally the specific branch page rather than the generic homepage.

address

Use a nested PostalAddress containing the applicable parts of the real customer-facing address: streetAddress, addressLocality, addressRegion where applicable, postalCode and addressCountry. The information should match the visible page and the way the business represents the location publicly.

telephone and geo

Use a number that reaches that individual business or location, including the international country and area code. GeoCoordinates can supply latitude and longitude; check that the pin represents the real entrance or location, not the centre of a postcode or the head office of the chain.

openingHoursSpecification

Use structured opening and closing times for each applicable day. Represent seasonal or exceptional periods carefully.

image, priceRange and sameAs

Use a representative image that can be crawled and viewed. A short relative range such as ££ can indicate general pricing where it is meaningful. Link only official profiles for that same business or location; do not mix the parent company's profile with a branch-specific entity without considering the relationship.

A Local Business Schema JSON-LD example

This example describes a fictional London dental practice:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Dentist",
  "@id": "https://example.com/locations/london/#business",
  "name": "Example Dental London",
  "url": "https://example.com/locations/london/",
  "image": "https://example.com/images/example-dental-london.jpg",
  "telephone": "+44-20-7946-0123",
  "priceRange": "££",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "10 Example Street",
    "addressLocality": "London",
    "postalCode": "EC1A 1AA",
    "addressCountry": "GB"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 51.51561,
    "longitude": -0.09193
  },
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
      "opens": "08:30",
      "closes": "17:30"
    },
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": "Saturday",
      "opens": "09:00",
      "closes": "13:00"
    }
  ],
  "parentOrganization": {
    "@id": "https://example.com/#organization"
  }
}
</script>

Replace every example detail with verified information. Coordinates, phone numbers and opening times need particular care because customers may rely on them directly.

The @id gives the branch a stable identity within the structured-data graph. It is separate from the parent organisation's identifier.

How to mark up opening hours

Opening hours are easy to publish and easy to let become stale.

Standard hours

Group days with identical hours into one OpeningHoursSpecification object:

{
  "@type": "OpeningHoursSpecification",
  "dayOfWeek": ["Monday", "Tuesday", "Wednesday"],
  "opens": "09:00",
  "closes": "17:00"
}

Google accepts full Schema.org day URLs and shorter day names. Keep one consistent style across the implementation.

Overnight hours, closures and seasonal changes

For a period running past midnight, the closing time can be earlier than the opening time within the same specification. Google's example represents Saturday 18:00 until Sunday 03:00 as one Saturday opening period.

Google documents 00:00 to 23:59 for an all-day opening and 00:00 to 00:00 for a full-day closure. Use these values only when they accurately describe the business.

validFrom and validThrough can define a period for seasonal hours or a closure. Update temporary schedules after the period ends.

Coordinate exceptional hours with the visible page and Google Business Profile. A customer should not see three different answers for a bank holiday.

Appointment-only operations

Do not invent normal opening hours for a business that only works by appointment. Represent the visible operating model accurately and use the applicable type-specific guidance.

How to handle multiple locations and departments

Give each location its own page

A useful branch page should contain location-specific information such as:

  • name and address;
  • local telephone number and opening hours;
  • services or facilities;
  • travel, parking and accessibility information;
  • photographs, map and directions;
  • the relevant LocalBusiness object.

A list of town names with nearly identical copy is a weak substitute for genuine location pages.

Give each location a unique identity

Use a stable location URL and @id. Do not reuse the head-office identifier for every branch.

Connect the parent organisation

Use a relationship such as parentOrganization when the branch belongs to the wider company. Keep the brand and branch name consistent with how customers recognise the location.

Mark up departments separately when needed

Some businesses contain departments with their own hours or phone numbers, such as a pharmacy within a department store. Google's guidance supports the department property. Provide the department's distinct details and use an appropriate subtype.

Avoid doorway-style location pages

Structured data cannot make a low-value doorway page useful. Each indexable location page should help someone visit, contact or choose that actual operation. Represent each location consistently with the parent entity in Organization Schema, then verify the output using a schema validator.

How to handle service-area businesses

A service-area business visits or delivers to customers and does not necessarily receive them at its operating address. Examples include plumbers, cleaners and mobile repair services.

Protect private addresses

Google Business Profile guidance says a business that does not serve customers at its address should remove that address from the public profile and use a service area instead.

Do not expose a private home address in Schema markup simply to fill an address property. Structured data should agree with visible, appropriate public information.

Describe the real service area

Schema.org provides areaServed for the geographic area where a service is available. Use real towns, regions or defined areas that the business genuinely serves.

Do not list dozens of distant cities merely to create local relevance. The service-area description should agree with the website and Business Profile.

Distinguish hybrid businesses

A hybrid business receives customers at a staffed storefront and also travels or delivers to them. It can publish the real address and describe the service area when both are accurate.

Treat Business Profile and Schema rules separately

Business Profile eligibility and service-area settings are controlled in Google Business Profile. Schema.org markup on the website cannot create an eligible storefront or verify a service area.

For a business without a public address, review the current requirements for any desired Local Business search feature before assuming that general Schema.org validity means rich-result eligibility.

Can a local business add review Schema?

A business may show genuine reviews to visitors, but Google does not display self-serving review snippets for LocalBusiness, Organization or their subtypes when the reviewed entity controls the page.

This restriction also applies when a business embeds reviews about itself through a third-party widget. The widget does not make the markup independent.

Do not add an AggregateRating to the business homepage or location page merely to show stars for the business's own reviews in organic results.

The rule differs for sites that collect reviews about other local businesses. Those publishers need to follow Google's review-snippet guidelines and ensure the review content and markup are genuine, visible and about the correct entity.

Review markup on the website is also separate from reviews in Google Business Profile. Removing self-serving Schema does not remove legitimate Business Profile reviews.

Local Business Schema for LLMs and AI visibility

Local questions often require precise entity and location information:

  • Is the business open now?
  • Which branch is closest?
  • Does the company serve this postcode?
  • What number reaches the local office?
  • Is this location a shop, clinic or service-area operator?

Local Business Schema can state those facts explicitly. It can connect one branch with its address, coordinates, hours, subtype and parent organisation.

For stronger AI and local entity clarity:

  • use the real-world business and branch name;
  • give each location a stable URL and @id;
  • publish current phone numbers and hours;
  • keep the website and Business Profile aligned;
  • use accurate coordinates and public address information;
  • describe real service areas without keyword-driven expansion;
  • connect branches to the correct parent organisation;
  • remove closed, moved or duplicate locations promptly.

The content still needs to be crawlable, indexable and useful. Structured data cannot guarantee that an LLM will mention the business, that an AI assistant will recommend it or that it will rank in the local pack.

How to test Local Business Schema

Test the code during development

Use the Rich Results Test for Google's supported Local Business feature requirements and the Schema Markup Validator for the broader object.

Test the live location page

Confirm that the rendered page contains the correct branch object and that Google can fetch it. Check the response code, canonical and robots directives.

Verify the real-world facts

Compare the name, address, phone number, coordinates and opening hours with the visible location page, contact or store-finder information, current Google Business Profile and internal location database.

Test edge cases

Include a normal storefront, a branch with different weekend hours, a temporarily closed location, a department with separate contact details, a service-area or hybrid business, and a moved or recently rebranded branch.

Follow every URL

Check the location URL, images, menu where applicable and official profile links. A validator can accept a URL that leads to an error or the wrong branch.

How to audit LocalBusiness markup across a website

Build the expected location list

Start with the current operational location database. Identify the canonical page and Business Profile for each site, branch or service area.

Compare locations with detected markup

Find live location pages without LocalBusiness markup, closed locations still publishing active markup, the same @id reused across branches, one head-office address copied onto every page, missing or default telephone numbers, hours that differ between the visible page and JSON-LD, and pages using the broad type where a useful subtype exists.

Check technical eligibility

Review response codes, redirects, canonical targets, indexability and crawl depth. A branch hidden behind broken store-finder links may have valid markup but poor discovery.

Audit linked resources

Find broken images, menus, maps and official profiles. Check whether old domains or redirected URLs remain inside the objects after a migration.

Group issues by template or region

One regional template may format postcodes incorrectly. One franchise feed may omit weekend hours. Segment the errors so the responsible source can be fixed.

Sample real-world accuracy

Automated crawling finds structural patterns. Human review confirms that a branch exists, receives customers at the published address and keeps the displayed hours.

Audit local business details with Clearcrawl

Clearcrawl shows the location information published by the live site, including old pages and conflicting templates that may not appear in the current CMS list.

Use the crawl to discover the full affected set. Use the Business Profile, source records and a human review to confirm that each real-world fact is current.

How to fix and verify Local Business Schema

  1. 01
    Establish the active location record

    Confirm the operation's name, subtype, URL, phone, public address or service area, coordinates and hours.

  2. 02
    Separate the parent and branches

    Give the wider organisation and each local operation distinct identities. Connect them deliberately rather than copying one object everywhere.

  3. 03
    Correct the source data

    Update the location database, CMS and Business Profile. Resolve moved, merged and permanently closed branches before editing the JSON-LD.

  4. 04
    Repair the template

    Generate the correct subtype, @id, NAP details and hours for each location. Handle departments, exceptional hours and absent optional data deliberately.

  5. 05
    Test representative cases

    Validate a normal storefront, special-hours branch, department and service-area example where applicable.

  6. 06
    Publish and inspect the live output

    Check the rendered JSON-LD and visible page. Follow the image and profile links and verify the map coordinates.

  7. 07
    Recrawl the location section

    Compare coverage and issue counts with the baseline. Confirm that closed or duplicate pages have been handled appropriately.

  8. 08
    Monitor operational changes

    Repeat the check after holiday schedules, office moves, new branches, closures, rebrands or store-finder migrations.

Common mistakes

01Using LocalBusiness for every company

Online-only companies and general organisations do not become local businesses simply because they publish an address. Choose the type that reflects the operation.

02Copying one address onto every branch

Each real location needs its own identity and details. Repeated head-office data misdescribes the local pages.

03Publishing a private service address

Do not expose a home or non-customer address simply to complete the markup. Represent service-area businesses accurately and protect private information.

04Letting opening hours become stale

Keep visible hours, structured data and Business Profile information aligned, including seasonal and holiday changes.

05Adding self-serving review markup

Google does not show review snippets for a business marking up reviews about itself, including reviews embedded through a third-party widget.

06Treating Schema as a local ranking switch

LocalBusiness markup can clarify facts and support eligibility. It does not guarantee map rankings, rich results, LLM citations or AI recommendations.

Frequently asked questions

What is Local Business Schema?

Local Business Schema is structured data using LocalBusiness or a more specific subtype. It describes a local operation through details such as its name, URL, telephone number, address, coordinates and opening hours.

Does Local Business Schema improve local rankings?

It can help search engines understand the business and its location, but it is not a guaranteed ranking factor or shortcut into the local pack. Accurate pages, a verified Business Profile and wider local-search signals still matter.

Should every business location have separate Schema markup?

Yes, each genuine location represented on the website should have its own accurate identity and location-specific details. A dedicated, useful branch page is normally the clearest implementation for a multi-location site.

Can a service-area business use LocalBusiness Schema?

It can describe a genuine local service operation, but it should not expose a private address or invent storefront details. Keep the visible service area and Google Business Profile accurate, and check current feature requirements for the intended use.

Does Local Business Schema help AI visibility?

It can provide AI-powered systems with clearer machine-readable location, contact and opening-hours information. That can reduce entity ambiguity, but it does not guarantee an LLM mention, citation or recommendation.

Clearcrawl logoClearcrawl
A clearer next step

Crawl the branch network behind the store finder

Find missing local markup, copied addresses, stale hours and location pages pointing to the wrong canonical URL. Fix the source, validate representative branches and crawl again to confirm the complete location set.

7 free days. See what Clearcrawl can find, then choose the plan that fits your site.

Try Clearcrawl free for 7 daysStart a 7-day free trial Start with Clearcrawl. Subscribe when you’re ready.

Learn more about Local Business Schema