In the local business schema post, I walked through schema markup for a single local business: pick the right type, add a LocalBusiness block to your homepage, contact page, and about page, and you’re in good shape. Clean and simple. (Brand new to all this? Start with the beginner’s guide to schema markup, then come back here.)
Then you open a second location, and that tidy little setup quietly stops working.
Schema markup for multiple locations plays by different rules, and the advice that’s perfect for one location can actually work against you once you have two or more. The good news is that this is still something you can handle yourself, without writing a line of code. This post picks up where the single-location setup left off and walks through the whole multi-location setup: what changes, what goes where, and copy-paste prompts to generate it all.
I’ll use a real example throughout. Crownsville & Millersville Automotive is a client of mine in Anne Arundel County. (Full disclosure: my agency built their site.) It’s a great illustration because it has just about every wrinkle a multi-location business runs into, including a couple of genuinely confusing ones.
Before we go any further, a quick reminder of something I mentioned in the other posts: LocalBusiness schema markup probably won’t affect your search engine results page ranking. However, a recent study showed that it might be a factor for ChatGPT, so it’s probably worth adding if you want to get a piece of that visibility, which, of course, you do!
Why Multiple Locations Change the Rules
When you have a local business, each location has a separate address, so for local search purposes, each location is treated as a separate entity.
You’ve probably already bumped into this with your Google Business Profile. When you have more than one location, you don’t get a single profile that covers them all. Each one needs its own profile, with its own address, phone number, hours, and reviews. Crownsville & Millersville Automotive has a separate profile for each of its shops. Your schema markup follows the same logic, for the same reason: Google treats each location as its own thing.
Think about how someone searches. A person in Crownsville looking for an oil change and a person in Millersville looking for the same thing should see different results, each with the right address, phone number, and hours for the shop near them. That only works if Google understands each location separately.
So you can’t just reuse one LocalBusiness block across your whole site the way a single-location business does. If you did, you’d be telling Google that your shops are actually one business at a single address, the same mistake as trying to run every location off one Google Business Profile. The goal for the rest of this post is to send a clearer message: you’re one brand, with several branches.
The Model: One Brand, Many Branches
The cleanest way to picture this is a hub with spokes.
The hub is your brand. In schema terms, that’s the Organization type. It’s the constant that never changes: your business name, your logo, your social profiles. For Crownsville & Millersville Automotive, the hub is the brand itself.
The spokes are your individual locations. Each one is its own LocalBusiness (or a more specific subtype), with its own address, phone number, and hours. Crownsville & Millersville Automotive has three spokes: the Crownsville shop, the Millersville repair shop, and a body shop that shares the Millersville building. (That last one is a little tricky, and we’ll get to why.)
Then you connect each spoke back to the hub, so search engines know they belong together. You do that with a property called branchOf, which literally means “this location is a branch of that brand,” and you tie everything together with stable IDs so nothing gets confused for a separate business.
This hub-and-spoke approach is the recommended setup for multi-location businesses. (The structured data specialists at Schema App lay it out the same way, if you want a second source.) I’ll say “recommended” rather than “Google requires it,” because Google’s own documentation doesn’t spell this out step by step. It’s best practice built on how the schema types are designed.
What Goes on Your Homepage
This is the spot where the single-location advice flips, so pay attention here if you’re coming from that post. For a single-location business, LocalBusiness goes on your homepage, because the homepage basically was the business. With multiple locations, your homepage gets Organization schema, not a LocalBusiness block. If you put one location’s LocalBusiness on the homepage, you’d either crown one shop as “the” location or make Google think your whole company lives at a single address. Neither is true.
There’s one exception. If your homepage is genuinely built around a single headquarters or flagship that has its own address, you can use LocalBusiness there. But for most multi-location brands, Organization on the homepage is the clean, unambiguous choice.
Step 1: Give Every Location Its Own Page
Before any code, you need a home for each location’s information. Every location should have its own page, with a unique URL, its own content, and its own name, address, phone, and hours.
Crownsville & Millersville Automotive does this exactly right, with a separate page for each shop, including that location’s own details:
Search engines prefer one location per page. Cramming several shops onto a single URL muddies which details belong to which, and it weakens how relevant each location looks for its own service area.
You can also have a “locations” page that lists all your shops and links out to the individual pages. That’s a helpful navigation hub for visitors. More on what that page needs in a minute.
Step 2: Set Up Your Brand With Organization Schema
Now the code. Start with the hub, your Organization, because your locations are going to point back to it.
Organization schema describes your brand: name, logo, website, social profiles, and a main contact point. While it’s also completely valid to include an address for an Organization, you won’t do that for this one, because there isn’t one physical address for the whole business. The addresses will go into the LocalBusiness schema markup blocks you’ll create for each location after you create the Organization block.
Paste this into ChatGPT, Claude, or Gemini:
You are an SEO specialist who writes valid schema.org structured data as JSON-LD for local businesses.
I run a business with more than one location, and I want Organization schema markup for my brand to put on my homepage. My website is: [YOUR WEBSITE URL]
Step 1: Review my website (homepage and about page) and gather the brand-level details: business or brand name, logo, website URL, main phone number, and links to my social profiles. If you cannot open my website, tell me and I will paste in those pages.
Step 2: Before writing any code, show me what you found and ask me to confirm the brand name and fill in anything missing.
Step 3: After I reply, generate the schema using these rules:
- Use the Organization type for the brand. Give it a stable @id using my domain plus "#organization" (for example, https://mybusiness.com/#organization). I will reuse this exact @id on my location pages, so keep it consistent.
- Include these properties wherever I have real information: name, url, logo, sameAs (my social links), and a contactPoint with my main phone number.
- Do not include a single street address, since this represents the whole brand, not one location.
- Never guess, invent, or use placeholder values. Leave out anything I did not provide.
- Output the schema as valid JSON-LD in one <script type="application/ld+json"> block for my homepage.
- After the code, list anything you left out and anything I should double-check.
Step 3: Add LocalBusiness Schema to Each Location
Now the spokes. Each location page gets its own LocalBusiness block with that location’s real details, connected back to the brand you just created.
This is also where you choose the most specific, accurate type for each location. Crownsville & Millersville Automotive would use AutoRepair for its repair shops and AutoBodyShop for the body shop (both real LocalBusiness subtypes). If you need a refresher on choosing the right type, the local business post covers it in detail.
Run this in the same chat, right after the Organization prompt:
Now create LocalBusiness schema markup for each of my locations. Each block goes on that location's own page.
Step 1: Review each of my location pages and pull the location name, address, phone, hours, and the page URL. If you cannot open my website, tell me and I will paste them in.
Step 2: Show me the locations you found and ask me to confirm the list and the most specific business type that accurately fits each one. Also ask me whether any building houses more than one business. For each of those, ask whether it is a separate business with its own name, staff, and Google Business Profile, or a section that is part of the same business and shares its name and listing.
Step 3: After I confirm, generate the schema using these rules:
- Create one block per location, anchored to that location's own page.
- Use the most specific business type that accurately fits (for example, AutoRepair or AutoBodyShop), and confirm it is a real schema.org type.
- Give each location a stable @id using its page URL plus "#location".
- Connect each location to my brand with the branchOf property, referencing my Organization @id from earlier.
- Include that location's own name, address, telephone, opening hours, geo coordinates, and areaServed.
- If a building houses a separate business with its own name and Google Business Profile, give it its own location block with its own page and its own branchOf link, even when it shares a street address with another location. Make the addresses as specific as possible, including suite or unit numbers, so they stay distinct.
- Only use the department property for a section that is part of the same business at the same address and shares its name and listing, such as a fuel station inside a repair shop with its own hours. Nest it inside that location's block with its own name, type, and hours.
- Never guess, invent, or use placeholder values. Use each location's real details exactly.
- Output each block as its own valid JSON-LD <script type="application/ld+json"> block, labeled with the page it belongs on.
- After the code, list anything I should double-check before publishing.
Two Special Cases Worth Knowing
A couple of situations come up often enough that they’re worth a quick word.
You Have No Storefront (Service-Area Businesses)
If you travel to your customers instead of having them come to you, like a mobile mechanic or a home cleaner, you don’t want to publish a street address you don’t actually serve people at. Use the areaServed property to spell out the cities or regions you cover, and skip the public street address. Your brand still sits at the top as an Organization, and each service area can be described from there.
When a Separate Business Shares Your Building
Millersville Auto Body runs out of the same building as the Millersville repair shop. Same street address. So it feels like it should be a department, tucked inside the repair shop’s schema. But it isn’t, and here’s how you can tell: it has its own entrance, its own staff, its own services, and its own booking. It runs as its own business that happens to share a building.
When that’s the case, it’s a separate location, not a department. It gets its own page, its own type (AutoBodyShop here), its own address, and its own branchOf link back to the brand. It’s another spoke on the wheel, handled just like the others.
The cleanest gut check is the Google Business Profile. If a thing has, or should have, its own profile with its own name and reviews, it’s a separate location. When two businesses share a street address, make the addresses as specific as you can, with a suite or unit number, so search engines can keep them straight.
When It’s Truly a Department
A real department is different. It’s a section that’s part of one business, sharing that business’s name, staff, and single listing, not a separate company.
Crownsville & Millersville Automotive has one of these, too. The Crownsville shop has a gas station and convenience store on-site. It’s all one business, one name, one Google Business Profile, with the same operation running it all. The gas station just keeps different hours from the repair side, and that difference is exactly the kind of detail the department property is built to capture. So the gas station is nested within the Crownsville location’s schema as a department with its own hours.
Google’s own example is the same shape: a department store with a pharmacy inside it, one company running both, the pharmacy nested under the department property.
One warning, since this is where bad advice spreads: you’ll see guides tell you to use department to connect your separate location pages back to your main brand. That’s not what it’s for. Separate businesses, even ones that share a building, connect with branchOf. The department property is only for a section inside one business.
Here’s the quick way to settle which is which:
- Separate business with its own name and its own Google Business Profile? That’s a separate location. Give it its own page and connect it with
branchOf. - A section of your own business that shares your name and your listing? That’s a department. Nest it inside that location with the
departmentproperty.
Where It All Goes
Here’s the quick map for a multi-location business:
Your homepage gets the Organization block, your brand. Each location page gets that location’s own LocalBusiness block, connected back to the brand. And any departments nest inside the location they belong to.
That leaves the “locations” landing page, the one that lists all your shops. It does not need its own Organization block. Your brand is already fully defined on the homepage, and you don’t need a second copy floating around. The location page is a hub. Its job is to link to your individual location pages, and that’s enough.
Getting the code onto your site is the same as what I covered in the introductory post: an SEO plugin or your website builder should have a spot to drop schema into the head of the right page. Just make sure each location’s block lands on that location’s page, and the Organization block lands on your homepage.
Validate Before You Publish
Same drill as the rest of the schema markup, just repeated for each page. Run each location page through the Schema.org validator and test your live pages with Google’s Rich Results Test. Check each location page on its own, since each one carries different details.
Frequently Asked Questions
Organization. The homepage is about your brand as a whole, not one location. The only exception is if your homepage is built around a single headquarters with its own address, in which case LocalBusiness is fine there.
Yes, and it’s worth it. Search engines want one location per page, with that location’s own address, phone, and hours. A single page trying to cover every location waters down how relevant each one looks for its own area.
Usually no. A department is a section that’s part of one business and shares its name and listing, like a fuel station inside a repair shop with its own hours. A separate business is its own location, even when it shares a building with another one. The test isn’t the address, it’s whether it’s its own business with its own Google Business Profile. Separate businesses connect to your brand with branchOf; departments nest inside their location with department.
If you travel to customers, use the areaServed property to list the areas you cover and skip the public street address. Your brand still sits at the top as an Organization.
Each location’s LocalBusiness block points back to your Organization using the branchOf property and the brand’s ID. That’s the link that tells Google all these locations belong to one business.
Your Next Small Step
The whole thing comes down to a shape you can hold in your head: one brand at the hub (Organization on your homepage), a spoke for each location (LocalBusiness on each location page), and a branchOf link tying every spoke back to the hub. Departments nest inside their location, and your locations landing page stays a simple hub.
Start this week by running the Organization prompt for your brand, then do one location. Once you see how the pieces connect, the rest of your locations are just copy, paste, and swap in the details.
If you want a guided path through this with people who’ll help when you get stuck, come join us in the SEO Success Club. And if you’re just getting started, read the beginner’s guide to schema markup and the local business post first to get your foundation in place. You’ve got this!
