A dental practice in Swansea has a homepage any patient can read: the name in the logo, the address in the footer, the phone in the header, the hours on a photo of the door. A crawler reads none of that with certainty. LocalBusiness structured data is a short, machine-readable statement of what the business is, where it is and when it opens, placed in the page code where Google reads it without guessing.
What structured data does, and what it doesn't
Structured data is a block of code on a page, written in Schema.org, a vocabulary the search engines share, that describes what the page is about. The format Google recommends is JSON-LD: a script tag in the page's HTML holding labelled values, invisible to visitors. A LocalBusiness block says, in effect, "this page represents a business called X, of type Y, at this address, on this number, open at these times".
Google lists Local business in its search gallery of types that can produce a rich result, and its guide says results may display a Knowledge Graph card with a business's details, such as hours. The limit matters as much: valid markup makes a page eligible for that treatment; it does not entitle it to one, and Google nowhere describes the markup as something that lifts a page's position. Treat it as removing ambiguity rather than as a lever.
Nor does it replace your Business Profile. The map pack ranks the profile; structured data makes your site's description of the business agree with the profile in a form that can't be misread.
The properties Google requires and the ones worth adding
Google's LocalBusiness documentation requires only two properties: the business name and a postal address. It recommends the telephone, the website URL, geographic coordinates, opening hours as an openingHoursSpecification, a price range, and for restaurants the menu URL and cuisine. Add every recommended property you can state truthfully and keep current; an hours block a year out of date is worse than none.
Two recommended properties carry a restriction. Google's guide marks aggregateRating and review as recommended only for sites that capture reviews about other local businesses. A business rating itself on its own page is self-serving review markup, which Google's review snippet guidelines rule ineligible, so leave both out unless you are a directory or a review platform.
Choose the most specific type Schema.org offers. LocalBusiness is the parent; under it sit Dentist, Plumber, Restaurant, HairSalon and many more, listed on the Schema.org LocalBusiness page. A specific type tells Google what you are as well as where. Here is a complete block for a fictional plumber:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Plumber",
"name": "Harbour Plumbing",
"url": "https://www.harbourplumbing.example/",
"telephone": "+44 113 496 0123",
"address": {
"@type": "PostalAddress",
"streetAddress": "12 Quay Street",
"addressLocality": "Leeds",
"postalCode": "LS1 0AA",
"addressCountry": "GB"
},
"openingHoursSpecification": [{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "08:00",
"closes": "17:30"
}]
}
</script>
Every value should be copied from your Business Profile, because a block that disagrees with the profile is a mismatch Google reads on every crawl.
Where to put it and how to validate it
Put the block on the page that represents the business: the homepage for a single location. A business with several branches gives each branch its own page and its own block describing that branch only; one stacked block listing every branch tells Google less than one clear page per location. A service-area business with no public storefront shouldn't invent a street address to satisfy the required property; describe the areas served with areaServed and keep the address out, as the profile does.
The block belongs in the HTML the server sends, not injected by a script after the page loads. Google renders JavaScript, but a late or conditional script can be missed, and the block is small enough that there is no reason to risk it. Most platforms have a theme setting or plugin that writes it; check what it actually emits, because defaults tend to produce a bare LocalBusiness with the site title and nothing else.
Validate again after every change to the details and after any theme or plugin update, which is when blocks silently disappear.
The mistakes that make it worthless
Most broken LocalBusiness markup fails in one of a few predictable ways.
- A generic LocalBusiness with the site title as the name and no address, which satisfies nothing.
- A phone or address updated on the page and never in the block. Google's general structured data guidelines require markup to describe content visible on the page, so a contradiction is a policy problem as well as a consistency one.
- The same block, with the same city, copied onto every location page, so each page claims to be the head office.
- An aggregateRating added "for the stars", which is self-serving and ineligible.
- FAQPage blocks added by a plugin hoping for a rich result; Google ended FAQ rich results in May 2026 according to its search updates log, so there is no result to expect.
Each is a five-minute fix once seen, and the validator shows all of them.
What to take away
- LocalBusiness structured data is a JSON-LD statement of your name, address, phone, hours and type that removes ambiguity for Google; it does not by itself lift rankings or replace your Business Profile.
- Google requires only name and address, recommends telephone, URL, coordinates, hours and price range, and treats rating yourself through aggregateRating as ineligible.
- Use the most specific Schema.org type, copy every value from the profile, and give each location its own page and block in the server-rendered HTML.
- Validate after every change to the details or the theme, because blocks drift and disappear silently.
Next
With your business details consistent and machine-readable, make the page itself usable where local searches happen: Speed and mobile for local sites.