How to Add LocalBusiness Schema Markup
LocalBusiness schema is structured data built specifically for businesses with a real, physical location: a street address, set hours, and a way to call you. It extends Organization schema with the details a nearby customer, or a model answering a nearby search, actually needs.
LocalBusiness schema extends Organization schema with an address, hours, and phone number, using the most specific subtype available (Bakery, Restaurant, Dentist, and so on) rather than the generic LocalBusiness type. If you run a dental practice, our AI search guide for dentists shows how this fits the bigger visibility picture. It matters most for anything close to a nearby search, since an estimated 76% of voice searches carry local intent and a model needs your hours and address in a format it can parse instantly.
- Use the most specific subtype schema.org defines rather than the generic LocalBusiness type, it costs nothing extra and gives a model more accurate information.
- If you operate more than one location, give each one its own LocalBusiness block with its own address and hours rather than combining them.
- Schema showing the wrong hours is worse than no schema at all, since it tells a model something false with full confidence, update it whenever hours change.
What LocalBusiness Schema Actually Does
Plain Organization schema tells a model who you are. LocalBusiness schema tells it where you are and when you are open, which matters enormously for anything close to a nearby search. An estimated 76% of voice searches carry local intent, and a model answering a question like “bakery open now near me” needs your hours and address in a format it can parse instantly, not buried in a sentence on your contact page. See the full local and voice numbers in our AI Search Statistics 2026 roundup.
The Code: A Working Example
Here is a working example for a bakery with a single storefront:
{
"@context": "https://schema.org",
"@type": "Bakery",
"name": "Riverside Bakery",
"image": "https://riversidebakery.example/storefront.jpg",
"telephone": "+1 503 555 0142",
"address": {
"@type": "PostalAddress",
"streetAddress": "128 River Street",
"addressLocality": "Portland",
"addressRegion": "OR",
"postalCode": "97201",
"addressCountry": "US"
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "07:00",
"closes": "18:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Saturday", "Sunday"],
"opens": "08:00",
"closes": "15:00"
}
],
"priceRange": "$$"
}
Required vs. Recommended Properties
Google’s own guidance for LocalBusiness structured data separates what’s strictly required from what’s strongly recommended. Skipping a required field means you won’t qualify for the rich result at all; skipping a recommended one just means a weaker, less complete listing.
| Property | Status |
|---|---|
| name, address | Required |
| image | Required |
| telephone, openingHoursSpecification, priceRange | Recommended |
| geo, servesCuisine (where applicable), aggregateRating | Recommended, only if genuinely applicable |
Based on Google’s published LocalBusiness structured data guidelines. Requirements can vary slightly by the specific subtype used, always confirm against Google’s Rich Results Test for your actual page.
Choosing the Right Business Type
LocalBusiness itself is rarely the type you actually want to use. Schema.org defines dozens of more specific subtypes: Bakery, Restaurant, Dentist, Attorney, HairSalon, and many more, each still valid wherever LocalBusiness is expected. Google’s own documentation makes the same recommendation: use the most specific LocalBusiness subtype possible. Use the most specific type that genuinely describes you. A model reading Bakery understands more about what you do than one reading the generic LocalBusiness, and the added specificity costs you nothing.
Where to Add It on Your Site
Add LocalBusiness schema to your homepage and your contact or location page, not scattered across every blog post. If you operate more than one location, give each one its own LocalBusiness block with its own address and hours rather than combining them into a single entry.
Common LocalBusiness Schema Errors
- Schema hours don’t match the visible page or your Google Business Profile. This is the single most common error, and Google’s own guidance is explicit that structured data must reflect the actual content on the page, not an aspirational or outdated version of it.
- Using the generic LocalBusiness type when a more specific one exists. Costs nothing to fix and gives a model more accurate information.
- Address formatted as a single string instead of the structured PostalAddress fields. Breaks parsing even when it looks correct to a human reader.
- Multiple locations combined into one schema block. Each physical location needs its own LocalBusiness entry with its own address and hours.
- Schema present but never updated after a move, a rebrand, or a hours change. Stale schema is worse than none, since it states something false with full confidence.
How to Validate It
Run the page through Google’s Rich Results Test, which confirms your hours and address parse correctly and shows exactly which rich result types you qualify for. Then check the raw JSON-LD in Schema.org’s Validator to catch anything the first tool does not flag. Hours are one of the fields most commonly formatted wrong, so double check the time values match the 24 hour format shown above.
This is the same schema block behind our own client builds, including the St. Pete Marathon site, where accurate location data needed to surface correctly across AI search from day one. It’s part of the baseline we set up on every local SEO engagement.
FAQ
What is the difference between LocalBusiness and Organization schema?
LocalBusiness extends Organization with the fields a physical location needs: address, hours, and phone. Use LocalBusiness if customers visit you in person, Organization if you do not have a public location.
Do I need a specific subtype like Bakery or Restaurant?
It is not required, but it helps. A more specific subtype gives a model more accurate information about what you do at no extra cost, so use the closest match schema.org defines.
What happens if my hours change seasonally?
Update the openingHoursSpecification block whenever your hours change. Schema that shows the wrong hours is worse than no schema at all, since it tells a model something false with full confidence.
Which businesses actually need LocalBusiness schema?
Any business a customer can physically visit or that serves a defined geographic area: retail stores, restaurants, clinics, contractors, salons, and similar. A business operating entirely online with no address customers interact with should use Organization schema instead.
Related Reading
Go deeper on structured data and local entity signals:
Want to Be the Brand AI Recommends?
Book a call and we’ll map what it takes to get there for your business.
