Local business schema: the properties that actually matter
Google requires two properties. The other eight are where local markup quietly breaks — and opening hours break most.
What local business schema actually is
It is a block of JSON-LD code that labels a page as one real place a customer can walk into.
LocalBusiness is a subtype of Organization. Organization describes the company as an entity — one block, usually sitewide. LocalBusiness describes an address with a door, a phone number and opening hours. If a location cannot be visited, it is not a LocalBusiness. That distinction is the whole scope boundary, and we leave Organization properties to their own guide.
For the wider map of schema types and how they fit together, start with our schema markup guide.
One thing worth saying plainly: Local business is one of the 25 structured data types Google Search currently supports (Search Central gallery, last updated 16 Oct 2026). Unlike FAQ and HowTo, which are gone, this one is live and still earns a result.
What it earns, in Google's own words, is that Search or Maps "may display a prominent Google knowledge panel with details about a business".
Every LocalBusiness property, and what breaks without it
Two properties are required. Miss either and the page is not eligible for a Local Business rich result at all.
| Property | Google's status | What it does — and what breaks without it |
|---|---|---|
| name | Required | The business name. Missing it invalidates the whole block. |
| address | Required | Must be a nested PostalAddress object, not a single text string. A flat string is the most common hard error we see. |
| telephone | Recommended | The public number for that branch. Without it, Google has no phone value from your site to corroborate. |
| openingHoursSpecification | Recommended | Hours, day by day. Bad syntax here is silently dropped rather than flagged — see the next section. |
| geo | Recommended | latitude and longitude. Google asks for at least five decimal places; three decimals can place a shop a street away. |
| url | Recommended | The canonical URL of that location's own page. Pointing every branch at the homepage makes the branches indistinguishable. |
| priceRange | Recommended | Text like "₹₹" or "₹500–₹1,500". Must be under 100 characters or it will not display. |
| image | Not in Google's LocalBusiness property table | Valid schema.org and present in Google's own examples. It is a required property only for the restaurant carousel, not for ordinary local markup. |
| areaServed | Not listed by Google for LocalBusiness | Valid schema.org context for a service radius. Useful machine-readable detail; do not expect it to change anything in the rich result. |
| department | Recommended | Nested LocalBusiness blocks for in-store departments with their own hours or number. Without it, a pharmacy counter inside a store has no separate hours. |
Google also lists aggregateRating and review as recommended — but only for sites that capture reviews about other local businesses. More on that below, because it is the trap on this type.
Source for the statuses above: Google's Local business structured data documentation, last updated 8 Sep 2026.
openingHoursSpecification: the property that breaks most often
Hours are the only property on this type with real syntax rules, and they fail quietly. The block stays valid; the hours just do not get used.
Each specification is an OpeningHoursSpecification object with dayOfWeek, opens and closes. Google accepts an array of them or a single object. Times go in 24-hour clock. dayOfWeek takes either a short name or the full schema.org URL.
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
"opens": "10:00",
"closes": "19:30"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": "Saturday",
"opens": "10:00",
"closes": "14:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": "Sunday",
"opens": "00:00",
"closes": "00:00"
}
]
That last block is a closed day. It is not an omission — the edge cases all have exact forms:
| Situation | How Google says to write it |
|---|---|
| Open 24 hours | opens "00:00" and closes "23:59" |
| Closed all day | opens "00:00" and closes "00:00" |
| Shift runs past midnight | One block, Saturday 18:00 to 03:00. Do not split it across two days. |
| Afternoon break | Two blocks for the same day, 10:00–14:00 and 17:00–21:00. |
| Seasonal or festival hours | Add validFrom and validThrough in YYYY-MM-DD. Leave them out and the hours read as year-round. |
The failures we correct most: hours written as the plain text "10am–7:30pm", a closed day left out entirely instead of marked 00:00 to 00:00, and a 24-hour shop given "00:00" to "00:00" — which says closed, not open.
Address, phone and geo for an Indian business
PostalAddress has to be nested, and the field names are fixed. For India, addressRegion is the state code and addressCountry is the two-letter "IN".
"name": "Sunbeam Dental Studio — Bandra West",
"address": {
"@type": "PostalAddress",
"streetAddress": "302, 16th Road, Bandra West",
"addressLocality": "Mumbai",
"addressRegion": "MH",
"postalCode": "400050",
"addressCountry": "IN"
},
"telephone": "+91-22-2640-1234",
"geo": {
"@type": "GeoCoordinates",
"latitude": 19.06011,
"longitude": 72.83015
}
Sunbeam Dental Studio is a made-up example, not a client.
- Write the phone number in full international form, +91 and all. A bare 10-digit number is ambiguous outside India.
- Keep locality and region as separate fields. Pushing "Mumbai, Maharashtra 400050" into streetAddress is the second-commonest error on this type.
- Latitude and longitude are numbers, not quoted strings, and need five decimal places or more.
- The name, address and phone in your markup should match what is on the page and in your listings. Our guide to NAP consistency across citations covers why mismatches cost you.
Multi-location sites need one block per location
Every branch gets its own page, and every page gets its own LocalBusiness block describing only that branch. Google's documentation is direct about it: each location is marked up as its own LocalBusiness, using the most specific subtype available.
Departments inside one location are different — those nest under the department property on that location's block, named "{store name} {department name}" unless the department carries its own brand.
What we see on multi-location Indian sites (first-hand, from our own audits): when a branch page template is built once and cloned, the same four things go wrong, in this order.
- Hard-coded geo. All eighteen branches carry the head-office latitude and longitude, because the coordinates were typed into the template instead of pulled from a field.
- One shared url. Every block points at the homepage, so each page claims to be the same business at a different address.
- Head-office hours everywhere. The Mumbai 10:00–19:30 block is repeated on a Kochi branch that actually shuts for lunch, and on a 24-hour outlet.
- One phone number. A single central line in all blocks, while the page itself shows the branch number — so the markup and the visible page disagree.
None of that throws an error in testing. It validates perfectly and describes the wrong business. The fix is dull and it works: make geo, url, telephone and hours template variables, then spot-check three branches by hand against their pages.
What local business schema does not do
Three honest limits, because this type attracts more wishful thinking than most.
It does not feed or override your Google Business Profile. The map pack and the Maps listing are driven by your Business Profile data, not by markup on your site. If your profile says Sunday closed and your schema says open, the profile is what shows in the map pack. Fix the profile first — our guides to optimising a Business Profile and ranking in Google Maps cover that work. Schema is the corroborating signal on your own pages, not a back door into the map pack.
It does not let you star-rate yourself. Local business is one of the item types Google lists as eligible for review snippets, alongside Book, Course list, Event, Movie, Product, Recipe and Software App. So the eligibility is real. But Google's review snippet guidelines, updated 24 Jul 2026, state that when the entity being reviewed controls the reviews about itself, pages using LocalBusiness or any Organization type are ineligible for the star review feature. Your own testimonials are self-serving reviews. Do not mark them up. We do not put Review or AggregateRating markup on our own testimonials either.
It is not an AI visibility tactic. Google's AI features guidance, last updated 10 Jul 2026, says you do not need to create new machine readable files, AI text files, or markup to appear in AI Overviews and AI Mode. Structured data governs rich-result eligibility in Search. That is the honest claim, and it is enough of one.
How to ship it without breaking your post body
On WordPress, where the block goes matters as much as what is in it.
- Build the block. Our schema markup generator will produce a valid LocalBusiness object you can edit.
- Pick the most specific subtype. Dentist, Restaurant, DaySpa and HealthClub are all LocalBusiness subtypes. Use the narrow one.
- Paste it into AIOSEO > Schema > Custom Schema, or into your theme's head. Many WordPress sites — this one included — run a snippet that strips JSON-LD out of post bodies, so a block pasted into the editor simply vanishes on the front end.
- Validate, then look at the values. Passing the test only proves the syntax is legal. Read the hours and coordinates back as a customer would.
- Re-check after any redesign. Template changes are how correct markup becomes wrong markup.
Once the markup is right, the rest of the local work is what moves the needle. The local SEO checklist is the order we run it in.
Frequently asked questions
What are the required properties for local business schema?
Two: name and address. Address must be a nested PostalAddress object with streetAddress, addressLocality, addressRegion, postalCode and addressCountry as separate fields. Telephone, openingHoursSpecification, geo, url, priceRange and department are all recommended rather than required, per Google's documentation last updated 8 Sep 2026.
Does LocalBusiness markup help me rank in the Google map pack?
No. The map pack and Maps listings are powered by your Google Business Profile, not by markup on your website. Schema corroborates the same facts on your own pages and can support a knowledge panel in Search. If the two disagree, the Business Profile is what the map pack shows.
Can I use LocalBusiness and Organization schema on the same site?
Yes, and most sites should. Organization describes the company as an entity, usually once sitewide. LocalBusiness describes a specific physical location a customer can visit, on that location's own page. LocalBusiness is a subtype of Organization, so the two do not conflict.
Will adding review markup to my LocalBusiness block get me star ratings?
Not for your own testimonials. Google's review snippet guidelines, updated 24 Jul 2026, make pages ineligible for the star review feature when the reviewed entity controls the reviews about itself. Review and aggregateRating on LocalBusiness are intended for sites that collect reviews about other businesses.
How do I mark up a business that is open 24 hours?
Set opens to "00:00" and closes to "23:59" in the openingHoursSpecification block. Do not use "00:00" for both values — that is Google's syntax for a day the business is closed, so a 24-hour outlet marked that way reads as shut all week.
Markup, listings and map pack — handled together
Correct schema on branch pages is one part of it. We run the profile, the citations and the content alongside it.
Make Digital Hangover a preferred source
One tap tells Google to show more of our SEO and marketing coverage in your Top Stories.
