Local business schema explained: required and recommended properties, a full JSON-LD example, opening hours, multiple locations, validation and AI visibility.

In short
local business schema is a block of structured data, usually in JSON-LD, that describes a physical business to search engines: its type, name, address, phone number, coordinates, opening hours and website. Google only requires name and address, but recommends geo coordinates, hours, phone, URL and price range. The markup helps Google and AI assistants connect your website to the business they know from Google Business Profile and directories; it does not replace the profile and does not guarantee a rich result.
Want to go further? Ask
Local business schema is the schema markup type that turns the contact block of a shop, restaurant, clinic or agency into machine-readable data. Google documents it in its local business structured data guide, and the vocabulary comes from schema.org/LocalBusiness. This guide gives you a complete example you can adapt, the rules that matter, and the mistakes that make the markup useless.
LocalBusiness is a schema.org type for "a particular physical business or branch of an organization". It inherits from two parent types, Organization and Place, so it accepts both company properties (logo, phone, social profiles) and place properties (address, coordinates, map, opening hours).
Schema.org lists 30 direct subtypes, and many of them have their own children. Google asks you to use the most specific subtype available. A dentist should be Dentist, a bakery Bakery, a law firm LegalService or Attorney. The most common choices:
| Business | Recommended type | Parent type |
|---|---|---|
| Restaurant, café, bar | Restaurant, CafeOrCoffeeShop, BarOrPub | FoodEstablishment |
| Shop | ClothingStore, HardwareStore, Florist... | Store |
| Dentist, physician, pharmacy | Dentist, Physician, Pharmacy | MedicalBusiness |
| Hair salon, spa, nail salon | HairSalon, DaySpa, NailSalon | HealthAndBeautyBusiness |
| Plumber, electrician, roofer | Plumber, Electrician, RoofingContractor | HomeAndConstructionBusiness |
| Lawyer, notary | Attorney, Notary | LegalService |
| Hotel, bed and breakfast | Hotel, BedAndBreakfast | LodgingBusiness |
| Garage, car dealer | AutoRepair, AutoDealer | AutomotiveBusiness |
| Accountant, bank branch | AccountingService, BankOrCreditUnion | FinancialService |
| Agency, consultant, other professional office | ProfessionalService | LocalBusiness |
If the business fits several types, Google accepts an array, for example ["Store", "AutoRepair"]. It does not support additionalType for this purpose.
Google's documentation splits the properties in two groups. Only two are required; the recommended ones are what makes the markup useful.
| Property | Status at Google | What to put in it |
|---|---|---|
name | Required | The business name exactly as on the storefront and the Business Profile |
address | Required | A PostalAddress with street, city, region, postal code and country code |
geo | Recommended | Latitude and longitude with at least 5 decimal places |
openingHoursSpecification | Recommended | Days, opening and closing times, seasonal exceptions |
telephone | Recommended | The main number, with country and area code |
url | Recommended | The working page of this specific location |
priceRange | Recommended | A relative range such as "$$" or "$20-50", under 100 characters |
menu, servesCuisine | Recommended (food) | Menu URL and cuisine type |
department | Recommended | Distinct units with their own hours or phone (pharmacy inside a supermarket) |
aggregateRating, review | Recommended only for review sites | Ratings of other businesses collected by your site, never your own |
image, logo, sameAs, areaServed, hasMap | Not listed by Google, valid on schema.org | Photos, logo, profile URLs, service area, map link: useful for entity understanding |
The last row matters for AI visibility. sameAs links your page to your Business Profile, social accounts and directory listings, which helps any system confirm that these profiles describe the same entity.
JSON-LD is the format Google recommends: a script tag of type application/ld+json, placed in the head or the body of the location page. Here is a complete example for a fictional dental practice, to adapt with your own data:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Dentist",
"@id": "https://www.example-dental.com/lyon/#business",
"name": "Example Dental Lyon",
"url": "https://www.example-dental.com/lyon/",
"image": "https://www.example-dental.com/images/lyon-front.jpg",
"logo": "https://www.example-dental.com/images/logo.png",
"telephone": "+33 4 00 00 00 00",
"priceRange": "$$",
"address": {
"@type": "PostalAddress",
"streetAddress": "12 Rue de la République",
"addressLocality": "Lyon",
"postalCode": "69002",
"addressRegion": "Auvergne-Rhône-Alpes",
"addressCountry": "FR"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 45.76012,
"longitude": 4.83584
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "08:30",
"closes": "19:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": "Saturday",
"opens": "09:00",
"closes": "12:30"
}
],
"sameAs": [
"https://www.facebook.com/exampledentallyon",
"https://www.linkedin.com/company/example-dental"
]
}
</script>Three details make this example robust: the @id gives the business a stable identifier that other blocks on your site (an Organization, a Service, a Review) can reference; the coordinates have 5 decimals as Google asks; and the url points to the location page, not the home page. If you prefer not to write the code by hand, our free schema generator builds the block from a form.
Use one OpeningHoursSpecification object per group of days with the same hours. Google's documentation covers the special cases:
opens "00:00" and closes "23:59".opens and closes both "00:00".validFrom and validThrough dates (YYYY-MM-DD) to the object.Update the markup when the hours change, at the same time as your Business Profile. Hours that disagree between the two are a common source of wrong information in Google and in AI answers.
Each location needs its own page with its own LocalBusiness block, its own address, phone and hours. Do not stack ten addresses in one block on the home page. The home page carries an Organization block for the brand, and each location page references it with parentOrganization. Our guides to multi-location SEO and local landing pages explain how to build those pages.
A pharmacy inside a supermarket or a service center inside a car dealership goes in the department array, with only the properties that differ from the main business. Google suggests naming it "{store name} {department name}", unless the department has its own brand.
A plumber who works at customers' homes can still use LocalBusiness with the address of the registered office, and describe the covered zone with areaServed. Google does not list areaServed among its properties, but schema.org accepts it, and it keeps your page consistent with a service-area Business Profile.
No. The Google Business Profile remains the main source for the local pack and Google Maps. Google's help center states that local results depend mainly on relevance, distance and prominence, and that "businesses with complete and accurate info are more likely to show up". Schema markup works on the other side: it makes your website say the same thing as your profile, in a format machines read without guessing.
| Criterion | Google Business Profile | LocalBusiness schema |
|---|---|---|
| Where it lives | In Google's systems, managed by the verified owner | In the code of your website |
| Main effect | Local pack, Maps, knowledge panel, reviews | Clear entity data for Google, Bing and AI assistants |
| Who can read it | Google products | Any crawler that reads your page |
| Verification | Required (postcard, video, phone...) | None, but it must match visible content |
| Priority | First | Second, as a consistency layer |
The link between the two is NAP consistency: name, address and phone written the same way on your profile, your site, your markup and directories. Our definition of NAP details the rules, and the local SEO page places schema among the other local signals.
Test every location template with two tools: Google's Rich Results Test, which checks eligibility for Google features, and the Schema Markup Validator, which checks the syntax against schema.org. Our structured data validator runs a quick check on any URL. After deployment, the Search Console enhancement reports show errors at scale.
Google's structured data policies set the frame: "Don't mark up content that is not visible to readers of the page." A violation can lead to a manual action that removes rich result eligibility. The mistakes we see most often:
| Mistake | Consequence | Fix |
|---|---|---|
Generic LocalBusiness type | Less precise understanding of the activity | Most specific subtype |
| Address or phone different from the Business Profile | Conflicting signals, wrong data in answers | Same NAP everywhere |
Self-written aggregateRating on your own business | No review stars, possible manual action | Remove it; display reviews without self-serving markup |
| Every location in one block on the home page | Locations mixed up, none matched to its page | One page and one block per location |
| Hours in the markup not shown on the page | Markup ignored or flagged | Display the hours in the page text |
| Coordinates with 2 or 3 decimals | Imprecise pin | At least 5 decimals |
| Outdated hours after a change | Customers sent to a closed shop | Update the profile and the markup together |
The review mistake deserves attention: since 2019, Google no longer shows review stars for "self-serving" reviews that a LocalBusiness or Organization publishes about itself. Our guide to review schema covers the details, and the same logic applies to the FAQ schema: mark up only what the page shows.
When someone asks ChatGPT, Gemini or Perplexity for "a dentist open on Saturday in Lyon", the answer is built from sources the assistant can read and cross-check: Business Profile data, directories, review platforms and the businesses' own websites. Our study of directories in AI answers shows how often these third-party listings are cited.
Structured data helps in two ways. It gives crawlers unambiguous facts (hours, address, type) that do not depend on parsing a footer, and it ties your site to the same entity as your other profiles through sameAs and consistent NAP. Our guide to structured data for AI search explains the broader picture, and the structured data audit for LLMs shows what a language model extracts from your page. Markup is never enough alone: the facts must also be written in the visible text, because most assistants read the page, not only its JSON-LD.
To see whether the effort pays off, Sorank's AI mention tracking follows the local questions your customers ask and shows whether your business is cited, while GEO optimization helps you publish the location and service content assistants quote. Our page for local businesses sums up the approach.
The rule to remember: one location, one page, one LocalBusiness block, with the same name, address, phone and hours as your Business Profile. Add it, validate it, and update it every time the business changes.
Put it on the page that describes the location: the home page for a single-location business, and each location page for a business with several addresses. Place the JSON-LD script in the head or body of that page. The brand itself is better described with an Organization block on the home page.
Google does not present structured data as a ranking factor, and local pack rankings depend mainly on relevance, distance and prominence of the Business Profile. The markup helps Google understand and display your business information correctly, and keeps your site consistent with your profile. Its value is clarity and eligibility for features, not a direct ranking boost.
Yes. A business that serves customers at their location can use LocalBusiness, or a more specific subtype such as Plumber, with the address of its registered office. The zone covered can be described with the areaServed property, which schema.org accepts even though Google does not list it. Keep the information consistent with the service area set in the Business Profile.
THEY TRIED SORANK BEFORE YOU
