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.
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.
Required and recommended properties
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:
addressCountrytakes the two-letter ISO code. For the United Kingdom it'sGB, notUK.addressRegionis optional for UK addresses but harmless. Use the county or area people recognise.postalCodeshould 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 asCA) inaddressRegionand the ZIP code inpostalCode. telephoneworks best in international format with+44and 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
sameAspointing 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:
- One page per location, each with its own unique content, address, phone number and hours.
- One LocalBusiness block on each location page, with
urlpointing to that page. - Organization markup on the home page or about page, describing the company as a whole, with your logo and
sameAslinks. 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:
- 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.
- 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.
- Use URL Inspection in Search Console. Confirm Google can access the page and that it isn't blocked by
robots.txt, anoindextag or a login. - 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.
- 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
aggregateRatingout 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
LocalBusinesswhen a subtype fits. UseDentist,PlumberorRestaurantwhere 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.
Related reading
- FAQ Schema in 2026: Is It Still Worth Adding?: Google stopped showing FAQ rich results in May 2026. What changed since 2023, whether FAQ schema is still worth adding, and how FAQs fit into AI search.
- SaaS SEO Checklist: 12 Fixes for Software Company Websites: A practical SaaS SEO checklist: docs on subdomains, JavaScript rendering, pricing and comparison pages, SoftwareApplication schema and a changelog that ranks.
More guides for your industry
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.
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
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.