Local Business Schema: A JSON-LD Guide for Small Businesses

How to add local business schema to your website: a JSON-LD example, opening hours, sameAs links, multiple locations, and how to test it before publishing.

By the MakeItFlow team Updated 10 min read
Share LinkedIn X Facebook WhatsApp
Local Business Schema: A JSON-LD Guide for Small Businesses

Local business schema is structured data, usually written in JSON-LD, that tells search engines your business name, address, phone number, opening hours and other details in a format they can read reliably. Google only requires name and address, but adding hours, phone, coordinates and the right business type makes the markup far more useful.

This guide focuses on the LocalBusiness type for small businesses: a complete example, how to handle opening hours (including bank holidays and seasonal closures), what sameAs is for, how to mark up several branches, and how to test it. For a broader introduction to structured data and the other types Google supports, see our structured data guide.

If you'd rather not write JSON-LD by hand, our free schema generator builds a LocalBusiness block from a simple form, with address fields, opening hours and social profiles. For subtypes, holiday hours and service areas, use the dedicated local business schema generator.

Key takeaways

  • Google only requires name and address for LocalBusiness markup, but telephone, url, geo and openingHoursSpecification make it far more useful.
  • Use the most specific subtype you can, such as Dentist, Plumber or Restaurant, rather than plain LocalBusiness.
  • Give every branch its own page and its own LocalBusiness block, and make the details match your Google Business Profile exactly.
  • Schema helps Google understand your business but doesn't replace a complete Business Profile, which drives the local map results.
Watch the explainer
AI Automation for Dental Practices: A Calmer Front Desk, Explained · 2:57 Subscribe

What local business schema does, and what it doesn't

Google's LocalBusiness structured data documentation says the markup can help Google show business details such as hours, departments and reviews. In practice, it does three jobs:

  • Confirms your details. It gives Google an unambiguous version of your name, address and phone number, in a fixed format.
  • Connects your website to your business. Together with your Google Business Profile and other listings, it helps Google tie your site to a real place.
  • Supplies structured hours and attributes. Opening hours, price range, menus and coordinates are easier to read from markup than from a footer.

What it doesn't do is put you in the local map pack on its own. Google's help page on improving your local ranking says local results are mainly based on relevance, distance and prominence, and the advice there centres on your Business Profile. Schema supports that work. It doesn't replace it. Our UK local SEO guide covers the Business Profile side.

Google lists two required properties and a handful of recommended ones:

Property Required? Notes
name Required Your business name, as customers know it and as it appears on your Business Profile
address Required A PostalAddress. Google says to include as many properties as possible
telephone Recommended Include the country code, e.g. +44 113 496 0000
url Recommended The fully qualified URL of this specific location's page
geo Recommended Latitude and longitude. Google says "the precision must be at least 5 decimal places"
openingHoursSpecification Recommended Days and times, with optional seasonal dates
priceRange Recommended e.g. $$, ££ or £50-£150. Google says it must be shorter than 100 characters
image Recommended A photo of the business, such as the shopfront
menu, servesCuisine Recommended Food businesses only
department Recommended Distinct departments inside one location
aggregateRating, review Recommended Only for sites that capture reviews about other local businesses

That last row catches many small businesses out. Google's documentation says review and rating properties apply to sites that collect reviews about other local businesses. Marking up reviews of your own business on your own site won't produce review stars for a local business, so leave them out of your LocalBusiness block.

Choose the most specific business type

LocalBusiness is the parent type. Schema.org has many more specific subtypes, and Google recommends using the most specific one that fits. A few common examples:

Business Schema type
Dental practice Dentist
GP surgery or private clinic MedicalClinic or Physician
Solicitor LegalService or Attorney
Accountant AccountingService
Plumber, electrician, heating engineer Plumber, Electrician, HVACBusiness
Estate agent RealEstateAgent
Restaurant or café Restaurant, CafeOrCoffeeShop
Hotel or B&B Hotel, BedAndBreakfast
Gym ExerciseGym
Hair salon HairSalon

If more than one type fits, Google's documentation says you can use an array, for example "@type": ["Electrician", "Plumber"]. It also notes that additionalType isn't supported for this purpose.

A complete JSON-LD example for a UK business

Here's a full example for a fictional heating engineer in Leeds. The phone number is from Ofcom's range reserved for drama and examples.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "HVACBusiness",
  "name": "Example Heating Leeds",
  "url": "https://www.example.com/leeds/",
  "telephone": "+44 113 496 0000",
  "email": "hello@example.com",
  "image": "https://www.example.com/images/leeds-van.jpg",
  "priceRange": "££",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "12 Example Street",
    "addressLocality": "Leeds",
    "addressRegion": "West Yorkshire",
    "postalCode": "LS1 1AA",
    "addressCountry": "GB"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 53.79970,
    "longitude": -1.54920
  },
  "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"
    }
  ],
  "sameAs": [
    "https://www.facebook.com/examplepage",
    "https://www.linkedin.com/company/example"
  ]
}
</script>

A few address details, using the UK as the example:

  • addressCountry takes the two-letter ISO code. For the United Kingdom it's GB, not UK.
  • addressRegion is optional for UK addresses but harmless. Use the county or area people recognise.
  • postalCode should be the full postcode with its space.
  • Other countries follow the same pattern. For the United States, use US, put the two-letter state code (such as CA) in addressRegion and the ZIP code in postalCode.
  • telephone works best in international format with +44 and no leading zero on the area code.

Paste the script anywhere in the page's HTML. The <head> is common, but Google reads JSON-LD in the body too.

Opening hours: the common cases

Google's documentation covers several patterns. Here's how they apply to typical small businesses.

Same hours on several days

Group the days in one object with a dayOfWeek array, as in the example above.

Open late, past midnight

Use a single object where closes is earlier than opens. A bar open from 6pm to 3am on Saturday is "opens": "18:00", "closes": "03:00" with "dayOfWeek": "Saturday".

Open 24 hours

Google says to set opens to 00:00 and closes to 23:59.

Closed all day

Set both opens and closes to 00:00. You can also simply leave the day out of your hours.

Bank holidays and seasonal closures

Add validFrom and validThrough (both in YYYY-MM-DD format) to an hours object that only applies for a date range. For example, a shop closed over Christmas:

{
  "@type": "OpeningHoursSpecification",
  "opens": "00:00",
  "closes": "00:00",
  "validFrom": "2026-12-25",
  "validThrough": "2026-12-26"
}

Remember to update your Google Business Profile special hours too. Customers will see those first, and conflicting details between your site and your profile don't help anyone.

What sameAs is for

sameAs lists URLs of pages elsewhere that represent the same business: your Facebook page, LinkedIn company page, Instagram profile, Companies House entry or a trade body listing. Google's organisation markup documentation describes it as "the URL of a page on another website with additional information about your organization" and confirms you can provide several.

Good practice:

  • Only include profiles you control or that are clearly about your business.
  • Use the canonical profile URL, not a tracking link.
  • Remove dead profiles. A sameAs pointing to an abandoned Twitter account adds nothing.

Marking up multiple locations

If you have several branches, Google's guidance is to mark up each location as its own LocalBusiness. The cleanest structure is:

  1. One page per location, each with its own unique content, address, phone number and hours.
  2. One LocalBusiness block on each location page, with url pointing to that page.
  3. Organization markup on the home page or about page, describing the company as a whole, with your logo and sameAs links. Google's organisation documentation suggests placing this "on your home page, or a single page that describes your organization."

Avoid putting every branch's LocalBusiness block on the home page. It makes it harder to connect each branch with the page about it.

Departments within one location

For a location with distinct departments, such as a car dealership with separate sales and service hours, Google says to nest them under the department property and only define what differs. Name each department as "{store name} {department name}", or by its own brand name if it's branded separately.

Service-area businesses

If you visit customers rather than having them visit you, you can still use LocalBusiness with your registered or base address. Make sure it matches how your Business Profile is set up. If you hide your address on Google, don't publish it prominently in markup that contradicts that choice. Schema.org also has an areaServed property you can use to list the towns or regions you cover.

Testing your local business schema

Test before you publish and again after any template change:

  1. Check the JSON is valid. A single missing comma or curly quote breaks the whole block. Our schema markup validator checks the markup on a live URL.
  2. Run Google's Rich Results Test. Google recommends it for finding critical errors. It checks syntax and required fields, not whether you follow the guidelines.
  3. Use URL Inspection in Search Console. Confirm Google can access the page and that it isn't blocked by robots.txt, a noindex tag or a login.
  4. Compare with your Business Profile. Name, address, phone and hours should match exactly. "St" in one and "Street" in another isn't a crisis, but a different phone number is.
  5. Re-check after redesigns. Theme changes and plugin updates are the most common reason markup disappears.

Google's general structured data guidelines also apply: the markup must describe content that's visible to users on the page. If your hours are in the schema, show them on the page too.

Common mistakes

  • Marking up a business you aren't. Directory sites should not wrap every listing in their own company's details, and businesses shouldn't use LocalBusiness on pages about unrelated topics.
  • Self-serving review stars. Covered above. Leave aggregateRating out unless you genuinely collect reviews about other businesses.
  • Hours that don't match reality. Out-of-date hours in markup are worse than none.
  • Generic LocalBusiness when a subtype fits. Use Dentist, Plumber or Restaurant where you can.
  • Coordinates with too little precision. Google asks for at least five decimal places.
  • Duplicate, conflicting blocks. SEO plugins often add their own LocalBusiness markup. If you add a second by hand, you may end up with two versions of your address. Check the page source.

If you run a multi-site group, such as a dental chain or estate agency with several branches, keeping all of this consistent across the website, Business Profiles and directories is a good candidate for a checked, repeatable process. Make It Flow maps that kind of workflow before automating anything. See how we work with dental practices and estate agents, or browse our free tools for local services.

FAQ

What is local business schema?

Local business schema is structured data using the schema.org LocalBusiness type, or a subtype such as Dentist or Plumber. It describes your business name, address, phone number, opening hours, coordinates and other details in a machine-readable format, usually JSON-LD, so search engines can read them reliably and connect your website to your physical business.

Does local business schema improve local rankings?

It isn't a shortcut to the map pack. Google says local results are mainly based on relevance, distance and prominence, and most of that comes from your Business Profile, reviews and wider reputation. Schema helps Google understand and confirm your details, which supports your local SEO, but a complete Business Profile matters more.

Where should I put LocalBusiness JSON-LD?

Put it on the page that represents the location, usually your contact page for a single-site business or each branch's own page for a multi-site one. The script can go in the head or body of the HTML. Organisation-level markup with your logo and social profiles belongs on the home page or about page.

Can I add review stars with LocalBusiness schema?

Not for reviews of your own business on your own site. Google's documentation says the rating and review properties are for sites that capture reviews about other local businesses. Self-serving review markup won't earn stars. Focus on collecting genuine reviews on your Google Business Profile instead.

How do I mark up bank holiday opening hours?

Add an extra OpeningHoursSpecification with validFrom and validThrough dates in YYYY-MM-DD format covering the holiday. Set opens and closes to 00:00 for a full closure, or give the special hours. Update your Google Business Profile special hours at the same time so both sources agree.

Should I use LocalBusiness or Organization schema?

If customers can visit you or you serve a local area, use the most specific LocalBusiness subtype on your location pages. Google's organisation documentation recommends that approach for local businesses. Organization markup still works well on your home page to describe the company as a whole, especially if you have several branches.

#local business schema #structured data #json-ld #local seo

Free checklist (PDF)

Free dental practices website checklist

30 practical checks for dental practices: website speed and mobile, Google Business Profile and reviews, email security, booking and enquiry handling, and AI search visibility. Each one says why it matters, and many link to a free tool that checks it.

We email you the PDF and nothing else unless you tick the box. See the privacy policy.

Written by the MakeItFlow team

We build the website audit these guides are based on. Every fact is checked against the primary sources listed above and this guide was last reviewed on 30 October 2026 . How we research and check

Share LinkedIn X Facebook WhatsApp

Check your own site in 30 seconds

Run a free audit covering speed, SEO, DNS, email authentication and security headers — and get a prioritised fix list.

Weekly newsletter

One practical website fix, every week

New guides on speed, SEO, email deliverability and security — straight to your inbox. No spam, unsubscribe in one click.

Keep reading