Local business schema
- Schema type
LocalBusinessPostalAddressGeoCoordinatesOpeningHoursSpecification- Checked against
- Google Search Central and schema.org documentation, read November 2026
- Author
- The wprichsnippets.com editors
- Published
- Updated
Local business schema is LocalBusiness structured data, or a more specific subtype, that states a business's name, postal address, coordinates, phone and opening hours. Google requires the name and address. It can support business details in Search, but a business cannot earn review stars by marking up reviews of itself on its own site.

01What is local business schema?
schema.org defines LocalBusiness as a particular physical business or branch of an organization, and gives a restaurant, a branch of a bank, a medical practice and a bowling alley as examples. Local business schema is that type, or one of its subtypes, written as JSON-LD on the page that describes the location.
Google's local business documentation says the markup can tell it about business hours, departments within a business, reviews (if the site captures reviews about other businesses) and more. Business details can appear in a knowledge panel, and searches for a type of business can show a carousel of businesses related to the query.
Like every type in our guide to schema types, the markup makes a page eligible; it does not guarantee a result. If you want the basics before the details, read what is structured data? on the handbook home.
02Which LocalBusiness subtype should you pick?
Google asks you to define each location as a LocalBusiness and to use the most specific subtype available, such as Restaurant, DaySpa or HealthClub. The schema.org type tree groups dozens of subtypes under parents such as FoodEstablishment, HealthAndBeautyBusiness, HomeAndConstructionBusiness, LegalService and LodgingBusiness.
Use the most specific LocalBusiness sub-type possible
| Business | Subtype | Parent in schema.org |
|---|---|---|
| A bakery with a shop counter | Bakery | FoodEstablishment |
| A hair salon | HairSalon | HealthAndBeautyBusiness |
| A plumber with a workshop | Plumber | HomeAndConstructionBusiness |
| A law office | Attorney or LegalService | LegalService, under LocalBusiness |
| A hotel | Hotel | LodgingBusiness |
| A dental practice | Dentist | LocalBusiness and MedicalBusiness |
If one location offers several services, the same documentation accepts an array of types, for example an electrician that is also a plumber and a locksmith, and notes that additionalType is not supported for this. Pick the subtypes a customer would use to describe you, not the broadest one available.
03Address, geo and hours: what goes where?
Google requires two properties: name and address. The address is a PostalAddress, and Google asks for as many of its fields as possible, because more fields give users a higher quality result: street address, locality, region, postal code and country.
| Property | Status | Notes |
|---|---|---|
name | Required | The business name as customers see it |
address | Required | A PostalAddress with every field you can fill |
geo | Recommended | Latitude and longitude with at least 5 decimal places |
openingHoursSpecification | Recommended | One object per pattern of days and hours |
telephone | Recommended | The main customer number, with country and area code |
url | Recommended | The working URL of this specific location |
priceRange | Recommended | For example $$; under 100 characters |
department | Recommended | A nested LocalBusiness for each department |
aggregateRating, review | Recommended only for review sites | Only for sites that capture reviews about other local businesses |
Opening hours use OpeningHoursSpecification with dayOfWeek, opens and closes. Google's examples cover the awkward cases.
Hours past midnight go in a single specification, for example opening at 18:00 on Saturday and closing at 03:00. A 24-hour day opens at 00:00 and closes at 23:59. A closed day sets both values to 00:00. Seasonal hours add validFrom and validThrough dates.
Departments with their own hours or phone numbers, such as a pharmacy inside a supermarket, go in the department property as nested LocalBusiness items. Google's department guidelines ask you to name each one as the store name followed by the department name, for example a store called gMart and its gMart Pharmacy, unless the department has its own brand.
Coordinates need at least five decimal places for both latitude and longitude, according to Google. Take them from the map pin for the entrance, not from the middle of the postal code area.
04Can a local business page show review stars?
Not for reviews of itself. Since Google's 2019 change to review rich results, reviews about a business placed on that business's own site, directly in the markup or through an embedded third-party widget, count as self-serving and do not show stars. The same post noted that Business Profile was not affected, because the change applied only to organic search.
Google's current local business guidelines point to the review snippet rules, which add that ratings for local businesses must come directly from users rather than from editors. You can keep a testimonials section for readers. Leave aggregateRating out of your own LocalBusiness markup, or accept that it will not produce stars.
Directories and review sites that cover businesses they do not control are the case Google still supports. The rules for their reviews and ratings are in review schema and review snippets and AggregateRating schema for user reviews.
05Business Profile or on-page markup?
Many local businesses also have a Google Business Profile, managed outside the website. On-page markup does not replace it. Google's guidance on AI features in Search lists, among the basics, making sure structured data matches the visible text on the page and checking that Business Profile information is up to date.
Treat the profile, the visible page and the JSON-LD as three copies of one record. The name, address, phone number and hours should be identical in all three, and a change to one is a change to all three on the same day.
For a brand with several branches, describe the brand once as an Organization and each branch as its own LocalBusiness on its own location page. Our guide to Organization schema and entity markup covers the brand side and the @id pattern that ties the branches back to it.
06Local business JSON-LD example
The example describes one fictional bakery location with weekday and Saturday hours and a closed Sunday. It has no aggregateRating, for the self-serving reason above. All values are examples.
1{2 "@context": "https://schema.org",3 "@type": "Bakery",14 "@id": "https://example.com/locations/main-street/#bakery",5 "name": "Example Bakery Main Street",6 "url": "https://example.com/locations/main-street/",7 "image": "https://example.com/images/main-street-shop.jpg",8 "telephone": "+1-555-0100",9 "priceRange": "$$",10 "address": {11 "@type": "PostalAddress",12 "streetAddress": "100 Example Street",13 "addressLocality": "Springfield",14 "addressRegion": "IL",15 "postalCode": "62701",16 "addressCountry": "US"17 },18 "geo": {19 "@type": "GeoCoordinates",20 "latitude": 39.80172,221 "longitude": -89.6437122 },23 "openingHoursSpecification": [24 {25 "@type": "OpeningHoursSpecification",26 "dayOfWeek": [27 "Monday",28 "Tuesday",29 "Wednesday",30 "Thursday",31 "Friday"32 ],33 "opens": "07:00",34 "closes": "18:00"35 },36 {37 "@type": "OpeningHoursSpecification",38 "dayOfWeek": "Saturday",39 "opens": "08:00",40 "closes": "14:00"41 },42 {43 "@type": "OpeningHoursSpecification",44 "dayOfWeek": "Sunday",345 "opens": "00:00",46 "closes": "00:00"47 }48 ]49}Put this block on the location's own page, the one whose URL appears in the url property. A business with one location can carry it on the contact or about page; a business with ten locations needs ten pages and ten blocks.
07How do you test local business markup?
Testing has two halves: whether the markup parses, and whether it says the same as everything else. Run both after every change to hours or contact details.
- Paste the URL into the Rich Results Test and fix errors on required properties first.
- Compare every value with the visible page: name, address, phone and hours.
- Compare the same values with your Business Profile.
- Use URL Inspection in Search Console to see the page as Google fetched it, then request indexing.
- Check again after seasonal hours start and end.
The mismatches that turn up most often are small. Each is easy to fix once you look for it.
- Holiday or seasonal hours changed on the page and in the profile, but not in the JSON-LD.
- A suite or unit number missing from streetAddress, so the markup points to the wrong door.
- The head office address and phone number repeated on every branch page.
- A telephone number without the country code, which Google asks you to include.
- A url property pointing to the home page instead of the location's own page.
A page that passes every test can still show nothing extra in Search. Google decides when business details appear, and a clean test result is a precondition for that decision, not a promise.
08Questions
Q1Do I need local business schema if I have a Business Profile?
They do different jobs. The profile is managed with Google directly; the markup describes your own page in a form any crawler can read. Google's guidance asks that structured data match the visible page and that Business Profile details stay up to date, so keep both and keep them identical.
Q2Should every page on my site carry LocalBusiness markup?
Google says you can add it to any page, but that it makes more sense on a page with information about the business. In practice, put each location's block on that location's page, and describe the brand as a whole with Organization markup rather than repeating a LocalBusiness block site-wide.
Q3Can a business without a storefront use LocalBusiness?
Google's documentation lists address as required and describes it as the physical location of the business. It does not set out a separate pattern for businesses that only travel to their customers. If you cannot publish a physical address, the markup will not meet Google's stated requirements for this feature.
Q4How do I mark up a holiday closure?
Add an OpeningHoursSpecification with opens and closes both set to 00:00, and set validFrom and validThrough to the first and last dates of the closure, in YYYY-MM-DD format. Leaving out the two dates means the hours apply all year, so only include them for the seasonal entry.
09Sources
- Local business (LocalBusiness) structured dataGoogle Search Central
- LocalBusinessschema.org
- Making Review Rich Results more helpfulGoogle Search Central Blog
- AI features and your websiteGoogle Search Central


