In this article, we’ll learn how to create Schema markup in JSON-LD format for a local business with multiple locations.
Schema markup allows you to get rich results in Google Search, and also helps Google to display your business in relevant local search results.
Creating LocalBusiness markup for a business with a single location is not particularly difficult. You need to use an appropriate template and edit or add the necessary attributes.
However, when it comes to a local business with multiple locations, creating markup becomes more difficult. Let’s learn how to implement it correctly.
What you need to pay attention to
First of all, you need to look if the website has separate landing pages for each business location. In this case, Schema markup should be added to the homepage and also to each of the location pages.
If the site does not have separate pages for each business location, then Schema markup should be added only to the homepage.
Let’s consider both cases.
The website has separate landing pages for each business location
In this case, you need to add to the homepage LocalBusiness markup that links to each individual location page using the subOrganization property. You also need to add to all location pages LocalBusiness markup that links back to the homepage using the parentOrganization property.
For example, a local business (car repair service) has three business locations: the main office and two offices in City A and City B. The website also has separate landing pages for offices in City A and City B:
https://www.yourwebsite.com/locations/location-A
https://www.yourwebsite.com/locations/location-B
First, we create the markup for the homepage. Within this Schema, we reference the pages for Location A and Location B as elements within the subOrganization array. The code looks as shown below (we use AutomotiveBusiness type).
Please note: before adding markup to the page, be sure to wrap it with the ‘script’ tag like this:

{
"@context": "https://www.schema.org/",
"@type": "AutomotiveBusiness",
"name": "Your Company Name",
"url": "https://www.yourwebsite.com/",
"@id": "https://www.yourwebsite.com/#AutomotiveBusiness",
"logo": "https://www.yourwebsite.com/images/logo_home.png",
"image": "https://www.yourwebsite.com/images/image_home.png",
"description": "We are...",
"telephone": "111-222-3333",
"sameAs": [
"https://www.linkedin.com/company/your_company_name/",
"https://www.facebook.com/your_company_name/",
"https://x.com/your_company_name"],
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": [
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday"
],
"opens": "08:00",
"closes": "17:00"
}],
"priceRange": "$$$",
"address": {
"@type": "PostalAddress",
"streetAddress": "111 Best Street, #11",
"addressLocality": "City Name",
"addressRegion": "TX",
"postalCode": "012345",
"addressCountry": "US"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": "30.0000",
"longitude": "-130.0000"
},
"areaServed": [{
"@type": "City",
"name": ["City 1", "City 2"]
}],
"subOrganization": [
{
"@id": "https://www.yourwebsite.com/locations/location-A/#AutomotiveBusiness",
"url": "https://www.yourwebsite.com/locations/location-A/",
"name": "Your Company Name - City A"
},
{
"@id": "https://www.yourwebsite.com/locations/location-B/#AutomotiveBusiness",
"url": "https://www.yourwebsite.com/locations/location-B/",
"name": "Your Company Name - City B"
}
]
}
Pay attention to the @id property – it must be unique for each office. We avoid providing excessive detail for the City A and B offices to keep the homepage code clean. Instead, the markup includes links to the specific location pages where Google can find the detailed LocalBusiness Schema for each branch.
The markup for each of the two location pages looks as follows (example for Location A):
{
"@context": "https://www.schema.org/",
"@type": "AutomotiveBusiness",
"name": "Your Company Name - Location A",
"description": "We are...",
"url": "https://www.yourwebsite.com/locations/location-A/",
"@id": "https://www.yourwebsite.com/locations/location-A/#AutomotiveBusiness",
"parentOrganization": {
"@id": "https://www.yourwebsite.com/#AutomotiveBusiness"
},
"image": "https://www.yourwebsite.com/images/image_A.png",
"telephone": "222-333-4444",
"sameAs": [
"https://www.linkedin.com/company/your_company_name/",
"https://www.facebook.com/your_company_name/",
"https://x.com/your_company_name"],
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "08:00",
"closes": "17:00"
}
],
"priceRange": "$$$",
"address": {
"@type": "PostalAddress",
"streetAddress": "222 Main Street",
"addressLocality": "City A",
"addressRegion": "TX",
"postalCode": "77000",
"addressCountry": "US"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": "31.0000",
"longitude": "-131.0000"
},
"areaServed": [{
"@type": "City",
"name": ["City 3", "City 4"]
}]
}
Pay attention that we link back to the main office using the parentOrganization property.
The above code, tested in the Rich Results Test tool, looks as follows (for both the homepage and location A):

The website does not have separate pages for each business location
In this case, we need to add extended LocalBusiness markup (with the subOrganization property) to the homepage.
We use the same example: a local business (car repair service) has three business locations (the main office and two offices in City A and City B). The site does not have separate landing pages for offices in City A and City B. Schema markup for such a business looks as shown below.
Please note: before adding markup to the page, be sure to wrap it with the ‘script’ tag like this:

{
"@context": "https://www.schema.org/",
"@type": "AutomotiveBusiness",
"name": "Your Company Name",
"url": "https://www.yourwebsite.com/",
"@id": "https://www.yourwebsite.com/#AutomotiveBusiness",
"logo": "https://www.yourwebsite.com/images/logo_home.png",
"image": "https://www.yourwebsite.com/images/image_home.png",
"description": "We are...",
"telephone": "111-222-3333",
"sameAs": [
"https://www.linkedin.com/company/your_company_name/",
"https://www.facebook.com/your_company_name/",
"https://x.com/your_company_name"
],
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "08:00",
"closes": "17:00"
}
],
"priceRange": "$$$",
"address": {
"@type": "PostalAddress",
"streetAddress": "111 Best Street, #11",
"addressLocality": "City Name",
"addressRegion": "TX",
"postalCode": "012345",
"addressCountry": "US"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": "30.0000",
"longitude": "-130.0000"
},
"subOrganization": [
{
"@type": "AutomotiveBusiness",
"name": "Your Company Name - Location A",
"@id": "https://www.yourwebsite.com/#AutomotiveBusinessLocationA",
"branchOf": { "@id": "https://www.yourwebsite.com/#AutomotiveBusiness" },
"image": "https://www.yourwebsite.com/images/image_A.png",
"telephone": "222-333-4444",
"priceRange": "$$$",
"address": {
"@type": "PostalAddress",
"streetAddress": "222 Main Street",
"addressLocality": "City A",
"addressRegion": "TX",
"postalCode": "012346",
"addressCountry": "US"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": "31.0000",
"longitude": "-131.0000"
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "08:00",
"closes": "17:00"
}
]
},
{
"@type": "AutomotiveBusiness",
"name": "Your Company Name - Location B",
"@id": "https://www.yourwebsite.com/#AutomotiveBusinessLocationB",
"branchOf": { "@id": "https://www.yourwebsite.com/#AutomotiveBusiness" },
"image": "https://www.yourwebsite.com/images/image_B.png",
"telephone": "333-444-5555",
"priceRange": "$$$",
"address": {
"@type": "PostalAddress",
"streetAddress": "333 Super Street",
"addressLocality": "City B",
"addressRegion": "TX",
"postalCode": "012347",
"addressCountry": "US"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": "32.0000",
"longitude": "-132.0000"
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "08:00",
"closes": "17:00"
}
]
}
]
}
Pay attention to the @id property – it is unique for each office, even though locations A and B don’t have separate landing pages. We also link back to the main office using the branchOf property.
Here is how this code looks in the Rich Results Test tool:

Conclusion
Implementing Schema markup for a multi-location business may seem difficult at first. Remember that each branch should be nested within the subOrganization property, and each location page should link back to the main office using the branchOf or parentOrganization properties.
Finally, always use the Rich Results Test tool to verify your markup and ensure it is free of syntax errors and eligible for enhanced search results.

40 Comments
Abhishek
Hello Andrew
Thank you for answering all comments and article was very insightful
I need suggestion
i have ecommerce in 3 countries
all 3 have different homepage in magento
and in each country i have multiple physical stores,
if possible can you suggest me how i should implement schema for this in my webiste
Andrew Postelniak
it’s a difficult question, not sure what is the correct way to implement Schema in your case. This article is mostly for local businesses with up to ten branches, which covers the vast majority of local businesses. In your case, it appears you have an international business with dozens of branches, I am even not sure if you need this kind of Schema at all. Either way, if your website(s) have a separate landing page for each store, I would probably add a simple LocalBusiness (or its subtype such as “Store”) Schema to each page and wouldn’t add any markup to the homepage(s). Hope this helps.
Ayelen
Would this apply to a business that teaches karate and holds classes in churches and schools across the US? I want search engines to know that people can find a class in different locations but these steps don’t allow me to add an address for a adepartment.
Andrew Postelniak
No, as far as I know LocalBusiness Schema can only be used for businesses with a permanent physical location where visitors can receive services or products.
log
and how would you configure for a business that sell a service in multiple location? (Like Ayelen example)?
Andrew Postelniak
please read the comments below. As far as I know, you can add Local Business Schema only if your business has a physical location that people can visit since the “address” attribute is mandatory in the markup. If you don’t have a physical address, I think you can specify your legal address if it makes sense.
Michael
Hi Andrew, thank you for the article. I have a website that has separate location page for each city I cover. The homepage does not have any city specific information. I have a few questions if you don’t mind.
How should I set up the schema for the homepage if it is not associated with any physical location? Just Organization with departments pointing to the corresponding location pages??
For the schema for the location pages, I have ‘address’ that points to the office address, ‘geo’ that points to the coordinates, and ‘areaserved’ that points to a Wikipedia article about the city. Is adding the link to Wikipedia article useful?
And I only have one main social media account for the business. Individual locations do not have their own social media account. In that case, for each location page, should I use ‘sameAs’ to add the social media accounts, or am I better off not adding them as they are not location specific social media accounts?
Thank you for your help.
Andrew Postelniak
Michael, as for Schema markup for the homepage: if your homepage is not associated with any physical location, I think you can choose not to add any markup to the homepage. In this case, not the homepage, but the location pages should rank in Google for relevant local search queries.
As for linking to Wikipedia – I can’t tell if that’s good or bad, I’ve never used Wiki links in Schema markup. I usually just add a list of cities. But I assume that is not a problem – you can do it if you want.
As for ‘sameAs’ – you can use the same social media link(s) on different location pages. Many businesses with numerous offices have only one page on one social media, that’s totally fine.
Luk
Hello, Andrew
This artical is very helpful. But I have some question.
In your example. This main shema code Should I use in all pages on site( I think about not only main page but on contact page or galerry)?
And on pages where I have another locaction I add this additional code?
Andrew Postelniak
I usually add markup only to the homepage and locations pages as described in the article.
manoj
Good question. Exactly the issue i was facing. For small businesses, there is usually no head office.. multiple branches with 1 branch being most important.
Khan Ibrahim
Great Article and in-depth explanation.
I have one simple question, after implementing the schema for homepage and individual location pages.
What would be best? Linking homepage from GMB profile or individual location page from GMB profile.
Andrew Postelniak
Thank you. I would link Google Business Profiles of departments with the corresponding location pages, and the profile of the main office with the homepage.
Nimit Kumar
Great article on how to create local business schema for multiple locations.
What if we are in the used car business? We sell cars in 30 cities and have a physical presence in each of those locations. How should we can add schema in that case.
Andrew Postelniak
Thank you. Your case is not unique, just follow the instructions in the article. If you have 30 landing pages for each city, you need to add simple LocalBusiness markup (or its subtype such as AutomotiveBusiness) to each of the location pages, and also extended markup (with the subOrganization attribute) to the homepage. If not – add extended markup only to the homepage. Other details are described in the article.
kevin
Why not a georadius for area served? I’m wondering if it makes sense to do that or if it’s better to list all of the cities.
Also, what are your thoughts on individual service area pages without physical locations…what would the specific schema type for those pages be?
Andrew Postelniak
GeoRadius is another possible option for the “areaServed” attribute. I used text (list of cities) as a more simple example.
As for adding Schema to service pages without physical locations – as far as I know, it is against Google guidelines, so I wouldn’t recommend it. In addition, the “address” attribute is mandatory in LocalBusiness markup, so if you add it without an address, the markup will throw an error when validated in the Rich Results Tool.
Andrew
Hi Andrew,
quick question no physical address but a large number of cities covered
– can you add multiple services areas to this instead of actual locations, and would it also be the best place to add services offered as well?
Thanks
AP
Andrew Postelniak
as I already answered in the comments below, I am not sure that you can use LocalBusiness markup for a service-area company that doesn’t have an office. According to Google documentation, the “address” is a required attribute for this markup.
I don’t want to give the wrong advice but you can try using the Service schema. As for adding multiple service areas instead of actual locations – I haven’t made such markup, so I don’t have the necessary template (if such a template can be created at all).
However, you still can create a Google Business Profile page for a service-area business.
Sarathy
Hi Andrew Postelniak,
Thanks a lot for your awesome help.
I have a small question. How to alter this for an “Organization” (Not a local business) that sells funds/insurance online as well as have many local branch offices.
Thanks a lot
Andrew Postelniak
I know that Schema type “Organization” also has the “subOrganization” attribute, just like “LocalBusiness”. So you may try simply replacing the “type” attribute. Some “LocalBusiness” attributes may not apply to “Organization” (such as “priceRange”), but you can test it in Rich Results Test.
Del
Hi Andrew,
Great read, really helped me out.
If I have a business that offers different activities each activity has a part:
….com/Activity-1
….com/Activity-2
….com/Activity-3
We also have multiple locations each location has a page
….com/Location-1
….com/Location-2
….com/Location-3
Not all locations offer the same activates so how do I best convey this information through Schema?
1. List the location that offer the activates on the activates page
OR
2. List the activities in the schema on the Location page?
Thanks for your help in advance
Andrew Postelniak
LocalBusiness schema (or its subtypes) is intended for location pages, so I think the second option is correct. But this is not an exact science: on activities pages, you can also probably add a link to the corresponding location pages (using the “URL” attribute) if the chosen schema type for activity pages supports the “URL” attribute.
Wyn
Amazing, thank you.
Wix won’t accept multiple @type fields. You will need to add:
“@graph”: [
{
Do this directly below @context.
Sandra
I have a business with multiple locations and each location has a separate landing page. My homepage is not specific to a location, as in it does not represent the “main location.” – it is just generic. So I would add json codes on each landing page but how would i do the json for the homepage?
Andrew Postelniak
If your homepage does not represent the main location (head office), I think you can choose not to add any markup to the homepage. Another possible option – you can select one of the locations as the main one, and mark up the rest as branches. This way, the homepage will contain info about all locations.
Mike Abbort
Hi, Andrew Postelniak I have 4 locations in Canada and they have different working hours. What should I do about this?
Andrew Postelniak
you need to use the “openingHoursSpecification” property within every “subOrganization”, just like any other properties that are different for different locations (address, telephone, etc.)
ali arshad
Hi Andrew!
I have Different Location page with city name like allen, houston, etc this all pages under location page: Like yourwebsite.com/location/houston What i have to do for add a schema?
Andrew Postelniak
It is hard to say. Maybe you can create separate location pages for each city or use the markup intended for the homepage, on the page that contains info about several offices/locations.
Gabriela
This is great, thank you! Question – Could you use this markup on the contact page that includes both addresses on it? Or do you still recommend implementing it on the homepage?
Andrew Postelniak
I’ve never used LocalBusiness markup on a contact page – only on the homepage or location pages. If you want to add a markup to the contact page, I think you can use Organization with multiple ContactPoint attributes (without address).
Vishal
Thanks, Mr. Andrew! This post is very helpful for me. Because I used to create different Schema Markups scripts for each location before. But this method is very easy & clear. Exactly what I was looking for a long time.
Thanks a lot!!
Vishal
Just a little confusion — What are City 3, City 4, City 5 & City 6? while we have only 2 other locations…
Andrew Postelniak
In this example, each of the locations (offices) serves two cities: main office serves City 1 and City 2, location A – City 3 and 4, location B – City 5 and 6.
If in your case each office serves only one city, you can use only one city in the “areaServed” attribute.
Rick
Great article Andrew. Just a question around structured data for the “main location”. What if you also have a location page for your main location? Would you place the homepage structured data on the location page for the main location too, or just leave it without structured data?
Thanks!
Andrew Postelniak
Thanks, Rick. For the location page of the main office, I assume you need to create separate markup, just like for all other location pages. However, in the homepage markup, I would indicate a specific URL of the main location (not the homepage URL). Hope this helps.
Tricia
This is very helpful, Andrew.
I am new at adding schema and have even figured out how to add this with Google Tag Manager. I do have a question.
I had originally put in for the type “Local Business” and it would show up like in your screenshot. However when I instead add “Professional Service” as the Local Business Type, it doesn’t include the “Local Business” at the top, it only has “Professional Service”.
This would be where you have Automotive in your example. Is this correct, or should it also show Local Business?
Thank you!
Andrew Postelniak
Hi Tricia,
The “Professional Service” type has been deprecated so I haven’t used it for a long time.
I think you need to use “Local Business” or choose another subtype of “Local Business” that is currently valid.
If everything is correct, the Rich Results Test tool should display “LocalBusiness” (the tool can detect all valid subtypes such as “AutomotiveBusiness”, “Restaurant”, “Dentist”, etc.)
Hope this helps.
Alex Zagoumenov
Thanks, Andrew! Exactly what I was looking for. Very clear and to the point.