Schema Markup for a Local Business with Multiple Locations

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

What you need to pay attention to

First of all, Google recommends using the department property for business with departments.

Google LocalBusiness markup with departmentsGoogle LocalBusiness markup with departments

Then you need to look if the website has separate landing pages for each business location.

If so, then 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 markup should be added only to the homepage.

Let’s consider both cases.

The website has separate landing pages for each business location

In such a case, you need to add extended LocalBusiness markup with the department property to the homepage, and also simple LocalBusiness markup (without the department property) to all location pages.

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 site 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

We first need to create the markup for the homepage. In this markup, locations A and B are marked up as a separate department.

Pay attention to the id property – it should be unique for each office.

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:

code wrapped with script tagcode wrapped with script tag

{
 "@context": "https://www.schema.org/",
 "@type": "AutomotiveBusiness",
 "name": "Your Business Name - Main Office",
 "url": "https://www.yourwebsite.com/",
 "@id": "https://www.yourwebsite.com/#AutomotiveBusiness",
 "logo": "https://www.yourwebsite.com/wp-content/themes/epc/images/logo_home.png",
 "image": "https://www.yourwebsite.com/wp-content/themes/epc/images/image_home.png",
 "description": "We are...",
 "telephone": "111-222-3333",
 "sameAs": [
   "https://www.linkedin.com/company/111/",
   "https://www.facebook.com/111/"],
 "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": "78000",
	"addressCountry": "USA"
		},
 "location": {
	"@type": "Place",
	"geo": {
	   "@type": "GeoCoordinates",
	        "latitude": "30.0000",
		"longitude": "-130.0000"
			}
		},
 "areaServed": [{
	  "@type": "City",
	  "name": ["City 1", "City 2"]
		}],
 "department": [
  {
	"@type": "AutomotiveBusiness",
	"name": "Your Business Name - Location A",
	"description": "We are...",
	"url": "https://www.yourwebsite.com/locations/location-A/",
	"@id": "https://www.yourwebsite.com/locations/location-A/#AutomotiveBusiness",
        "image": "https://www.yourwebsite.com/wp-content/themes/epc/images/image_A.png",
	"telephone": "222-333-4444",
        "priceRange": "$$$",
	"address": {
	        "@type": "PostalAddress",
		"streetAddress": "222 Main Street",
		"addressLocality": "City A",
		"addressRegion": "TX",
		"postalCode": "77000",
		"addressCountry": "USA"
		},
	"location": {
		"@type": "Place",
		"geo": {
			"@type": "GeoCoordinates",
			"latitude": "31.0000",
			"longitude": "-131.0000"
			}
		},
	"areaServed": [{
		"@type": "City",
		"name": ["City 3", "City 4"]			
		}]
  },
  {
	"@type": "AutomotiveBusiness",
	"name": "Your Business Name - Location B",
	"description": "We are...",
	"url": "https://www.yourwebsite.com/locations/location-B/",
	"@id": "https://www.yourwebsite.com/locations/location-B/#AutomotiveBusiness",
        "image": "https://www.yourwebsite.com/wp-content/themes/epc/images/image_B.png",
	"telephone": "333-444-5555",
        "priceRange": "$$$",
	"address": {
		"@type": "PostalAddress",
		"streetAddress": "333 Super Street",
		"addressLocality": "City B",
		"addressRegion": "TX",
		"postalCode": "79000",
		"addressCountry": "USA"
		},
	"location": {
		"@type": "Place",
		"geo": {
			"@type": "GeoCoordinates",
			"latitude": "32.0000",
			"longitude": "-132.0000"
			}
		},
	"areaServed": [{
		"@type": "City",
		"name": ["City 5", "City 6"]			
		}]
	}]
}

For locations A and B, we marked up only distinct properties, assuming that the working hours are the same for all offices.

The markup for each of the two location pages will look as follows (example for location A):

{
    "@context": "https://www.schema.org/",
    "@type": "AutomotiveBusiness",
    "name": "Your Business Name - Location A",
    "description": "We are...",
    "url": "https://www.yourwebsite.com/locations/location-A/",
    "@id": "https://www.yourwebsite.com/locations/location-A/#AutomotiveBusiness",
    "image": "https://www.yourwebsite.com/wp-content/themes/epc/images/image_A.png",
    "telephone": "222-333-4444",
    "sameAs": [
       "https://www.linkedin.com/company/111/",
       "https://www.facebook.com/111/"],
    "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": "USA"
		},
	"location": {
	 "@type": "Place",
	 "geo": {
	        "@type": "GeoCoordinates",
		"latitude": "31.0000",
		"longitude": "-131.0000"
			}
		},
	"areaServed": [{
	  "@type": "City",
	  "name": ["City 3", "City 4"]
		}]	
}

If we test the code in the Rich Results Test tool, it will look as in the images below.

For the homepage:

Schema local business multiple locationsSchema local business multiple locations

For location pages (example for location A):

Rich Results Test tool - Local BusinessRich Results Test tool - Local Business

The website does not have separate pages for each business location

In this case, we need to add extended LocalBusiness markup (with the department property) to the homepage.

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 site does not have separate landing pages for offices in City A and City B.

Schema markup for such business looks as shown below.

Please note: before adding markup to the page, be sure to wrap it with the ‘script’ tag like this:

code wrapped with script tagcode wrapped with script tag

{
  "@context": "https://www.schema.org/",
  "@type": "AutomotiveBusiness",
  "name": "Your Business Name - Main Office",
  "url": "https://www.yourwebsite.com/",
  "@id": "https://www.yourwebsite.com/#AutomotiveBusiness",
  "logo": "https://www.yourwebsite.com/wp-content/themes/epc/images/logo_home.png",
  "image": "https://www.yourwebsite.com/wp-content/themes/epc/images/image_home.png",
  "description": "We are...",
  "telephone": "111-222-3333",
  "sameAs": [
	"https://www.linkedin.com/company/111/",
        "https://www.facebook.com/111/"],
  "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": "78000",
	"addressCountry": "USA"
		},
  "location": {
	"@type": "Place",
	"geo": {
	"@type": "GeoCoordinates",
		"latitude": "30.0000",
		"longitude": "-130.0000"
			}
		},
  "areaServed": [{
	"@type": "City",
	"name": ["City 1", "City 2"]
		}],
"department": [
	{
	"@type": "AutomotiveBusiness",
	"name": "Your Business Name - Location A",
	"description": "We are...",
	"image": "https://www.yourwebsite.com/wp-content/themes/epc/images/image_A.png",
	"telephone": "222-333-4444",
        "priceRange": "$$$",
	"address": {
		"@type": "PostalAddress",
		"streetAddress": "222 Main Street",
		"addressLocality": "City A",
		"addressRegion": "TX",
		"postalCode": "77000",
		"addressCountry": "USA"
		},
	"location": {
		"@type": "Place",
		"geo": {
			"@type": "GeoCoordinates",
			"latitude": "31.0000",
			"longitude": "-131.0000"
			}
		},
	"areaServed": [{
		"@type": "City",
		"name": ["City 3", "City 4"]			
		}]
	},
	{
	"@type": "AutomotiveBusiness",
	"name": "Your Business Name - Location B",
	"description": "We are...",
	"image": "https://www.yourwebsite.com/wp-content/themes/epc/images/image_B.png",
	"telephone": "333-444-5555",
        "priceRange": "$$$",
	"address": {
		"@type": "PostalAddress",
		"streetAddress": "333 Super Street",
		"addressLocality": "City B",
		"addressRegion": "TX",
		"postalCode": "79000",
		"addressCountry": "USA"
		},
	"location": {
		"@type": "Place",
		"geo": {
			"@type": "GeoCoordinates",
			"latitude": "32.0000",
			"longitude": "-132.0000"
			}
		},
	"areaServed": [{
		"@type": "City",
		"name": ["City 5", "City 6"]			
		}]
	}]
}

The code is almost the same as in the previous example, the only difference is that the URL and id properties are missing for the departments.

Here is how this code looks in the Rich Results Test tool:

Schema three locations testing toolSchema three locations testing tool

Conclusion

Creating Schema markup for a local business with multiple locations may seem confusing at first glance.

Remember that each business location should be marked up using the department property.

And don’t forget to use the Rich Results Test tool to make sure your markup is semantically correct and free from compilation errors.