Guide
Local business schema: the complete guide with examples and a generator
Local business schema tells search engines, in code, exactly what your business is, where it is and when it is open. Here is what to include, what Google actually uses, and examples you can copy.
Key takeaways
- Local business schema is structured data (usually JSON-LD) that describes your business: type, name, address, phone, hours, location and links.
- Google requires only name and address, and recommends properties such as geo, telephone, url, openingHoursSpecification and priceRange.
- Use the most specific LocalBusiness subtype you can, such as Dentist, Restaurant or Plumber.
- Do not mark up reviews of your own business to get stars: Google says those pages are ineligible for review stars.
- Schema supports your listings; it does not replace your Google Business Profile, and Google does not guarantee any rich result.
What is local business schema?
Local business schema is structured data added to a web page, usually as a JSON-LD script, that describes a business using the schema.org LocalBusiness type: its name, address, phone, opening hours, coordinates and website. It helps search engines read those facts reliably instead of guessing them from the page text.
It is one kind of schema markup. Schema markup for local business goes on the page that represents the location, which is usually a location page or, for a single-location business, the home or contact page.
- 01Your pageVisible details plus a JSON-LD script
- 02CrawlGooglebot fetches the page and the script
- 03ParseReads type, name, address, hours, geo
- 04Cross-checkCompares with the page, your listing and other sources
- 05UseMay use it for business details in Search features
Schema is a clear statement of facts. It is used when it matches everything else.
Turn your Google listing into LocalBusiness JSON-LD you can paste into your page, with the right subtype and hours.
What Google does and does not use
Google's LocalBusiness documentation lists two required properties, name and address, and a set of recommended ones. It says LocalBusiness data can feed the business details Google shows, such as in a knowledge panel when someone searches for a specific business (Google Search Central).
| Property | Google status | Notes from Google's docs |
|---|---|---|
| name | Required | The name of the business |
| address | Required | A PostalAddress with as many fields as apply |
| geo | Recommended | Latitude and longitude with at least 5 decimal places |
| telephone | Recommended | Include country and area code |
| url | Recommended | A working link to the specific location's page |
| openingHoursSpecification | Recommended | dayOfWeek, opens, closes; validFrom and validThrough for seasonal hours |
| priceRange | Recommended | Must be under 100 characters or Google will not show it |
| servesCuisine, menu | Recommended (food) | For restaurants and other food businesses |
| department | Recommended | Nested LocalBusiness for each department |
| aggregateRating, review | Recommended only for review sites | Only for sites that capture reviews about other local businesses |
Source: Google Search Central LocalBusiness documentation, checked November 2026.
Google's review snippet guidelines say that if the business being reviewed controls the reviews about itself, its pages using LocalBusiness or Organization markup are ineligible for the star review feature (Google Search Central). Show your reviews on the page for visitors, but do not expect stars in Search from them.
- Google does not guarantee that any feature using structured data will appear.
- Schema does not replace your Google Business Profile. Maps and the local pack are driven by your profile; schema helps Google understand your website.
- A manual action for spammy markup causes Google to ignore a page's structured data.
- additionalType is not supported by Google for LocalBusiness; to give two types, use an array in @type.
Choose the right LocalBusiness subtype
Google asks you to use the most specific LocalBusiness subtype possible. schema.org lists many under LocalBusiness. A few common ones:
| Business | Subtype | Parent type |
|---|---|---|
| Restaurant, cafe, bakery | Restaurant, CafeOrCoffeeShop, Bakery | FoodEstablishment |
| Dental practice | Dentist | MedicalBusiness |
| Physician or clinic | Physician, MedicalClinic | MedicalBusiness |
| Plumber, electrician, roofer | Plumber, Electrician, RoofingContractor | HomeAndConstructionBusiness |
| Car repair, dealer | AutoRepair, AutoDealer | AutomotiveBusiness |
| Law firm | LegalService | LocalBusiness |
| Salon, spa | HairSalon, BeautySalon, DaySpa | HealthAndBeautyBusiness |
| Hotel | Hotel | LodgingBusiness |
| Shop | ClothingStore, HardwareStore, and other Store types | Store |
Local business schema examples you can copy
All examples use invented businesses. Replace every value with yours and make sure each one matches your page and your listings exactly.
Restaurant
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Restaurant",
"@id": "https://www.example.com/#restaurant",
"name": "Juniper Table",
"url": "https://www.example.com/",
"telephone": "+1-503-555-0123",
"image": "https://www.example.com/images/dining-room.jpg",
"priceRange": "$$",
"servesCuisine": ["Italian", "Pizza"],
"menu": "https://www.example.com/menu/",
"acceptsReservations": true,
"address": {
"@type": "PostalAddress",
"streetAddress": "418 SE Division St",
"addressLocality": "Portland",
"addressRegion": "OR",
"postalCode": "97202",
"addressCountry": "US"
},
"geo": { "@type": "GeoCoordinates", "latitude": 45.50487, "longitude": -122.66021 },
"openingHoursSpecification": [
{ "@type": "OpeningHoursSpecification", "dayOfWeek": ["Tuesday","Wednesday","Thursday","Sunday"], "opens": "17:00", "closes": "22:00" },
{ "@type": "OpeningHoursSpecification", "dayOfWeek": ["Friday","Saturday"], "opens": "17:00", "closes": "01:00" }
],
"sameAs": ["https://www.facebook.com/example", "https://www.instagram.com/example"]
}
</script>Friday and Saturday close after midnight: Google says to use one entry with a closing time after midnight. Monday is omitted, so it reads as closed.
Dental practice with special hours
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Dentist",
"@id": "https://www.example.com/locations/westfield/#dentist",
"name": "Maple Grove Dental Westfield",
"url": "https://www.example.com/locations/westfield/",
"telephone": "+1-908-555-0187",
"address": {
"@type": "PostalAddress",
"streetAddress": "75 Elm St, Suite 200",
"addressLocality": "Westfield",
"addressRegion": "NJ",
"postalCode": "07090",
"addressCountry": "US"
},
"geo": { "@type": "GeoCoordinates", "latitude": 40.65012, "longitude": -74.34765 },
"openingHoursSpecification": [
{ "@type": "OpeningHoursSpecification", "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday"], "opens": "08:00", "closes": "18:00" },
{ "@type": "OpeningHoursSpecification", "dayOfWeek": "Friday", "opens": "08:00", "closes": "14:00" },
{ "@type": "OpeningHoursSpecification", "opens": "00:00", "closes": "00:00", "validFrom": "2026-12-25", "validThrough": "2026-12-25" }
],
"parentOrganization": { "@type": "Organization", "name": "Maple Grove Dental", "url": "https://www.example.com/" }
}
</script>Opens and closes both 00:00 means closed all day; validFrom and validThrough limit it to that date, as Google's docs describe.
Service-area business
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Plumber",
"@id": "https://www.example.com/#plumber",
"name": "Riverbend Plumbing",
"url": "https://www.example.com/",
"telephone": "+1-520-555-0144",
"address": {
"@type": "PostalAddress",
"addressLocality": "Tucson",
"addressRegion": "AZ",
"postalCode": "85705",
"addressCountry": "US"
},
"areaServed": [
{ "@type": "City", "name": "Tucson" },
{ "@type": "City", "name": "Marana" },
{ "@type": "City", "name": "Oro Valley" }
],
"openingHoursSpecification": {
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],
"opens": "00:00", "closes": "23:59"
}
}
</script>If you hide your address on Google, leave the street out here too and keep city, region and ZIP. 00:00 to 23:59 means open 24 hours.
Multiple locations and departments
For several locations, put one LocalBusiness block on each location page, not a list of all locations on the home page. Link them to the brand with parentOrganization, and put Organization markup on the home page (Google Search Central).
For a store with departments (a car dealer with a service center, a supermarket with a pharmacy), Google recommends nesting each as a department, defining only the properties that differ, and naming it "{store name} {department name}" unless it has its own brand name.
{
"@context": "https://schema.org",
"@type": "AutoDealer",
"name": "Summit Motors Boise",
"url": "https://www.example.com/",
"telephone": "+1-208-555-0110",
"address": { "@type": "PostalAddress", "streetAddress": "900 Fairview Ave", "addressLocality": "Boise", "addressRegion": "ID", "postalCode": "83702", "addressCountry": "US" },
"department": [
{
"@type": "AutoRepair",
"name": "Summit Motors Boise Service Center",
"telephone": "+1-208-555-0111",
"openingHoursSpecification": { "@type": "OpeningHoursSpecification", "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"], "opens": "07:00", "closes": "18:00" }
}
]
}Wrap this in a script tag of type application/ld+json. Invented business.
How to add and test local business schema
- Generate or write the JSON-LD
Use the local business schema generator or copy an example above.
- Check it against the page
Every value must be visible on the page and match your Google Business Profile and other listings. The location consistency checker helps.
- Add it to the page
Paste the script in the page head or body. In WordPress, use your SEO plugin's schema settings or a code snippet; in a CMS template, generate it from the same data as the visible details.
- Test it
Run the page through Google's Rich Results Test and the Schema Markup Validator. Fix errors first, then warnings that apply.
- Ask Google to recrawl
Use URL Inspection in Search Console, and keep the page in your sitemap.
- Keep it in step
When hours or phone change, the schema must change the same day as your listings.
Schema pre-publish check
Mistakes to avoid
- Marking up your own reviews to get stars
Instead: Show reviews for visitors, but expect no star rich result. Google calls these self-serving and ineligible.
- Listing every location on the home page
Instead: Put one LocalBusiness block on each location page and link it to the parent Organization.
- Hours in schema that differ from the listing
Instead: Generate both from one source and update them together.
- Using additionalType for a second type
Instead: Google does not support it for LocalBusiness. Use an array in @type.
- Generic LocalBusiness when a subtype fits
Instead: Use the most specific subtype, such as Dentist or Plumber.
Keep your schema and listings saying the same thingReach by Locus Intelligence checks your listings on Google, Apple Maps, Bing, Facebook, Yelp and more every week and drafts fixes for your approval, so the details your schema states stay true. Free for one location, no card.
Free. You get a profile score, your Maps rank against the top 3, and the fixes that matter most.
Your next steps
Today
- Run your main page through the Rich Results Test to see what schema you already have.
- Generate LocalBusiness JSON-LD with the schema generator.
This week
- Pick the most specific subtype and add hours, geo and telephone.
- Add the schema to each location page and test it.
- Remove any review markup about your own business meant to produce stars.
This month
- Add Organization markup on the home page and link locations with parentOrganization.
- Make schema updates part of your listings management routine.
- Run a local SEO audit to find what else to fix.
Frequently asked questions
What is local business schema?
Structured data, usually JSON-LD, that describes a business with the schema.org LocalBusiness type: name, address, phone, hours, coordinates and website.
Does local business schema help rankings?
Google does not list it as a ranking factor for Maps. It helps Google read your business details accurately and can support how they appear. Your Google Business Profile, reviews and website content matter more for local rank.
What properties are required?
Google requires name and address. It recommends geo, telephone, url, openingHoursSpecification, priceRange and, for food businesses, servesCuisine and menu.
Can I get review stars with LocalBusiness schema?
Not for reviews about your own business that you control. Google says those pages are ineligible for the star review feature.
Where should I put the schema?
On the page for that location: a location page, or the home or contact page for a single-location business. One block per location page.
How do I test my schema?
Use Google's Rich Results Test and the Schema Markup Validator, then URL Inspection in Search Console to request a recrawl.
Never miss another customer.
Start with a free audit. See what each location is losing, and where.
Profile score, Maps rank against the top 3, and the fixes that matter most.
Or book a demo- Role-based access by region and brand
- Every action logged and reversible
- Nothing customer-facing goes live without approval