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.

How search engines read your schema
  1. 01Your pageVisible details plus a JSON-LD script
  2. 02CrawlGooglebot fetches the page and the script
  3. 03ParseReads type, name, address, hours, geo
  4. 04Cross-checkCompares with the page, your listing and other sources
  5. 05UseMay use it for business details in Search features

Schema is a clear statement of facts. It is used when it matches everything else.

Free tool
Generate your schema in a minute

Turn your Google listing into LocalBusiness JSON-LD you can paste into your page, with the right subtype and hours.

Generate my schema

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).

PropertyGoogle statusNotes from Google's docs
nameRequiredThe name of the business
addressRequiredA PostalAddress with as many fields as apply
geoRecommendedLatitude and longitude with at least 5 decimal places
telephoneRecommendedInclude country and area code
urlRecommendedA working link to the specific location's page
openingHoursSpecificationRecommendeddayOfWeek, opens, closes; validFrom and validThrough for seasonal hours
priceRangeRecommendedMust be under 100 characters or Google will not show it
servesCuisine, menuRecommended (food)For restaurants and other food businesses
departmentRecommendedNested LocalBusiness for each department
aggregateRating, reviewRecommended only for review sitesOnly for sites that capture reviews about other local businesses

Source: Google Search Central LocalBusiness documentation, checked November 2026.

No stars for your own reviews

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:

BusinessSubtypeParent type
Restaurant, cafe, bakeryRestaurant, CafeOrCoffeeShop, BakeryFoodEstablishment
Dental practiceDentistMedicalBusiness
Physician or clinicPhysician, MedicalClinicMedicalBusiness
Plumber, electrician, rooferPlumber, Electrician, RoofingContractorHomeAndConstructionBusiness
Car repair, dealerAutoRepair, AutoDealerAutomotiveBusiness
Law firmLegalServiceLocalBusiness
Salon, spaHairSalon, BeautySalon, DaySpaHealthAndBeautyBusiness
HotelHotelLodgingBusiness
ShopClothingStore, HardwareStore, and other Store typesStore

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

TemplateRestaurant JSON-LD
<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

TemplateDentist JSON-LD with a holiday closure
<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

TemplatePlumber JSON-LD with areas served
<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.

TemplateDealer with a service department
{
  "@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

  1. Generate or write the JSON-LD

    Use the local business schema generator or copy an example above.

  2. 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.

  3. 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.

  4. Test it

    Run the page through Google's Rich Results Test and the Schema Markup Validator. Fix errors first, then warnings that apply.

  5. Ask Google to recrawl

    Use URL Inspection in Search Console, and keep the page in your sitemap.

  6. Keep it in step

    When hours or phone change, the schema must change the same day as your listings.

Schema pre-publish check

Values
Hours
Policy

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.

Reach by Locus IntelligenceKeep your schema and listings saying the same thing

Reach 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.

Start free
Google Business Profile audit

Free. You get a profile score, your Maps rank against the top 3, and the fixes that matter most.

Your next steps

Today

  1. Run your main page through the Rich Results Test to see what schema you already have.
  2. Generate LocalBusiness JSON-LD with the schema generator.

This week

  1. Pick the most specific subtype and add hours, geo and telephone.
  2. Add the schema to each location page and test it.
  3. Remove any review markup about your own business meant to produce stars.

This month

  1. Add Organization markup on the home page and link locations with parentOrganization.
  2. Make schema updates part of your listings management routine.
  3. 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