LocalBusiness structured data, done right
Local business sites tend to have one of two problems with structured data. Either they have none at all, or they have a block of JSON-LD a plugin generated years ago that now contradicts the page: old hours, a moved address, and a five-star rating sourced from nowhere.
I build UOVA, an AI website builder, where structured data is generated from the same content as the visible page, so I spend a lot of time in Google's documentation on this. Disclosure: that gives me a stake in the website-builder market. What follows is that documentation boiled down to what a developer needs, as I read it on October 1, 2026.
What LocalBusiness is
Schema.org defines LocalBusiness as "a particular physical business or branch of an organization." It inherits from both Organization and Place, and has many subtypes, including FoodEstablishment, HomeAndConstructionBusiness, HealthAndBeautyBusiness, ProfessionalService, Store, Dentist and AutomotiveBusiness, with deeper subtypes beneath several of those.
Google's guidance: "Use the most specific LocalBusiness sub-type possible." If more than one applies, use an array of types. Google also notes that "additionalType isn't supported."
The required and recommended properties
Google's LocalBusiness documentation requires exactly two properties:
-
name: "The name of the business." -
address: aPostalAddress.
It recommends: aggregateRating, department, geo, menu, openingHoursSpecification, priceRange, review, servesCuisine, telephone and url.
The details on a few of these are easy to miss:
-
geo: for latitude and longitude, "the precision must be at least 5 decimal places." -
priceRange: "This field must be shorter than 100 characters." -
telephone: include the country and area code. -
url: "The URL must be a working link."
A complete example
Here is markup for a fictional bakery. The business, address and phone number are invented for illustration.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Bakery",
"name": "Example Street Bakery",
"url": "https://www.example-bakery.ca/",
"telephone": "+1-416-555-0100",
"priceRange": "$$",
"image": "https://www.example-bakery.ca/images/storefront.jpg",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Example Street",
"addressLocality": "Toronto",
"addressRegion": "ON",
"postalCode": "M4M 0A0",
"addressCountry": "CA"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 43.66123,
"longitude": -79.33456
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "08:00",
"closes": "18:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Saturday", "Sunday"],
"opens": "09:00",
"closes": "15:00"
}
]
}
</script>
Bakery is a subtype of FoodEstablishment, which is more specific than LocalBusiness. The coordinates carry five decimal places. Monday is omitted because the fictional shop is closed that day.
Google lists JSON-LD as its recommended format, and it keeps the markup separate from your HTML, which makes it easy to generate from the same data as the page.
The rules that disqualify markup
Correct syntax is not enough. Google's general structured data guidelines contain the rules that quietly make markup ineligible.
It must match the page. "Your structured data must be a true representation of the page content." And: "Don't mark up content that is not visible to readers of the page." If your JSON-LD says you open at 8:00 and your page says 9:00, fix one of them. The easiest way to keep them in sync is to render both from a single source of data.
Required means required. "Items that are missing required properties are not eligible for rich results."
Nothing is guaranteed. "Google does not guarantee that your structured data will show up in search results," even when it is valid.
The review rule that catches most small businesses
This is the rule most likely to catch a small-business site. A common pattern is adding aggregateRating to a business's own LocalBusiness markup, often from a reviews widget.
Google's review snippet documentation says that when "the entity that's being reviewed controls the reviews about itself," pages using LocalBusiness or other Organization markup "are ineligible for star review feature." That applies whether the reviews are typed into the structured data or added "through an embedded third-party widget (for example, Google Business reviews or Facebook reviews widget)." It also says: "Don't aggregate reviews or ratings from other websites."
The LocalBusiness page makes the same point from the other side: aggregateRating "is only recommended for sites that capture reviews about other local businesses." That means directories and review sites, not a business marking up its own stars.
So for your own business: leave aggregateRating and review out of your LocalBusiness markup. Show testimonials on the page for humans, if you like. Just do not mark them up for stars.
Test it
Two free tools:
- Google's Rich Results Test, which tests "your publicly accessible page to see which rich results can be generated by the structured data it contains." Google's LocalBusiness page says: "Validate your code using the Rich Results Test and fix any critical errors."
- The Schema Markup Validator at validator.schema.org, which checks your markup against the schema.org vocabulary in general, not just the parts Google uses.
Run both after every change to hours, address or phone number, not just at launch.
A short checklist
- [ ] Most specific subtype used; no
additionalType. - [ ]
nameandaddresspresent. - [ ]
geoto at least five decimal places. - [ ]
telephonewith country and area code;urlresolves. - [ ] Hours in markup match hours on the page.
- [ ] No
aggregateRatingorreviewon your own business. - [ ] Rich Results Test passes with no critical errors.
Structured data is one of the few SEO tasks with a clear specification and a free test. The hard part is keeping it true over time. I'm Sal Talash, and I write about the engineering behind small-business websites at saltalash.vercel.app.
Sources
- Google Search Central, "Local Business (LocalBusiness) structured data"
- Google Search Central, "General structured data guidelines"
- Google Search Central, "Review snippet structured data"
- Google, Rich Results Test
- Schema.org, "LocalBusiness" and "Bakery"
- Schema Markup Validator
Drafted with AI assistance.
More from Sal Talash: saltalash.vercel.app · UOVA · YouTube
Top comments (0)