LocalBusiness structured data is a block of schema.org markup, written as JSON-LD, that tells search engines your business name, address, phone number, opening hours and map coordinates in a fixed format. It gives Google a clean copy of the facts that already sit on the page.
What is LocalBusiness structured data?
It is a <script type="application/ld+json"> block in the page’s HTML. The type LocalBusiness is a subtype of Organization, and it has dozens of more specific subtypes: Dentist, Restaurant, Plumber, HairSalon, BikeStore and so on. Google’s documentation says to use the most specific subtype that fits.
Does it help rankings?
Be honest about the effect. Google’s help page on local ranking lists relevance, distance and prominence, and does not name structured data. The markup does not create a ranking boost. It helps Google read and confirm facts: it is one more place that states the same name, address, phone and hours as your Google Business Profile and your citations. That is why impact is rated Low, and why it still belongs on every location page: it costs under an hour and removes ambiguity.
Google also reads Organization-level details from it, since LocalBusiness is a subtype of Organization. Eligibility for any rich result stays Google’s decision. See structured data for the general rules.
Which properties does Google want?
| Property | Status in Google’s documentation | Notes |
|---|---|---|
name |
Required | Real business name, as on your signage |
address (PostalAddress) |
Required | Give as many sub-properties as you can |
geo (GeoCoordinates) |
Recommended | Latitude and longitude with at least 5 decimal places |
openingHoursSpecification |
Recommended | dayOfWeek, opens, closes |
telephone |
Recommended | Include country and area code |
url |
Recommended | The working URL of this specific location |
priceRange |
Recommended | Under 100 characters, or Google ignores it |
aggregateRating, review |
Only for sites that collect reviews about other local businesses | Do not add reviews of your own business |
How do you add it, step by step?
- Pick the most specific type. Look up your trade on schema.org/LocalBusiness. Use an array if two types fit.
- Collect the facts from your Business Profile. Name, address, phone, hours. Copy them exactly.
- Write the JSON-LD. Here is a template:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Dentist",
"name": "Smile Studio Utrecht",
"url": "https://example.com/locations/utrecht/",
"telephone": "+31301234567",
"address": {
"@type": "PostalAddress",
"streetAddress": "Oudegracht 100",
"addressLocality": "Utrecht",
"postalCode": "3511 AE",
"addressCountry": "NL"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 52.09074,
"longitude": 5.12142
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "08:30",
"closes": "17:30"
}
]
}
</script>
- Place it on the page about that business. Google allows LocalBusiness markup on any page, but it fits best on the homepage of a single-location business or on each location page of a chain. One block per location, never one block listing all branches on one page.
- Handle special hours correctly. Leave out
validFromandvalidThroughfor year-round hours. For hours past midnight, use a closing time earlier than the opening time. For a day closed all day, set bothopensandclosesto 00:00 (Google’s rule). - Test it. Run the page through the Rich Results Test and the Schema Markup Validator. Fix errors first, then warnings.
- Update it whenever the profile changes. A new phone number needs changing in three places: site text, markup, profile.
- Monitor in Search Console. Check enhancement reports for new errors after template changes.
If you use WordPress, a plugin such as Yoast or Rank Math writes this for you from a form. Check the output, because some defaults pick a generic LocalBusiness type.
How do you measure the result?
Validity is the first check: zero errors in the Rich Results Test and no new issues in Search Console. The business result is indirect, so track what the whole local setup produces: calls, direction requests and website clicks in the Business Profile Performance section, and impressions for town-name queries in Search Console. Compare before and after only for facts that were wrong earlier, such as a mismatched phone number you fixed.
What mistakes should you avoid?
- Marking up facts that do not appear on the page. Google’s general guidelines require markup to represent the visible content. Violations can lead to a manual action.
- Using
aggregateRatingfor your own business. Google’s documentation limits it to sites that collect reviews about other local businesses. - Using plain
LocalBusinessfor everything when a subtype exists. - Putting a P.O. box or virtual office in
address. Use the real location. - Copy-pasting one block to every location without changing the address, phone and URL.
- Letting the markup go stale after a move or an hours change.
For the wider picture of getting found locally, Fe/male Switch’s free digital marketing module is a good start.