The short answer: one Google Business Profile per location with a real address and real staff, one page on your site per profile, and enough genuinely different content on each page that a person could tell them apart with the city names removed. Everything else in multi-location local SEO is a variation on those three things.
Most multi-location programmes stall because a single-location structure was copied and multiplied, so the same page now competes with itself in fourteen towns.
One profile per location, and what counts as a location
Google's rule is enforced by suspension rather than by a ranking penalty: a profile needs a physical address where you are staffed during your stated hours, or it needs to be a service area business with the address hidden.
- Staffed premises customers can visit. Full profile, address shown, real hours — the only setup where proximity works fully in your favour on the map.
- Staffed premises customers do not visit — a depot, a dispatch office. Address hidden, service area set. Still a legitimate profile.
- No premises at all. A mailbox, a rented coworking desk, a relative's house. This is where suspensions come from, and reinstatement is a slow argument through a form.
Trades over-create profiles because the radius is wide and the vans are everywhere. A single HVAC or plumbing business with one yard and eight vans has one location, not eight. The vans get a service area on the one profile, and the towns they cover get pages on the website.
Each profile needs its own primary category, hours, local phone number and photos taken at that site. One photo set duplicated across twelve profiles is the clearest tell of a copy-pasted rollout. A call tracking number as the primary, with the real line as an additional number, is accepted practice as long as the tracking number is stable — dynamic number insertion belongs on the website, not the profile.
Location page architecture
Two patterns, chosen mostly by how many services you sell.
- A location folder. One page per site, all services on it, at a path like
/locations/texas/el-paso. Clean, shallow, maintainable. - A service-by-location matrix. One page per service per city. Many more pages, much more upkeep, justified only when the services are genuinely distinct queries with distinct competitors.
Sell one thing in twelve towns and the folder wins. Sell six things people search for by name and the matrix earns its keep — but only for the services carrying the revenue. Nobody needs a city page for the service that books twice a year.
What belongs on a location page, roughly in this order: address and map, hours, local phone number, the person who runs the site, services offered there, areas covered, reviews from that branch's customers, photos of that building and team, and access notes only somebody who has been there would know. Make those required fields in the page template — a required field is the only reliable way to stop a location going live with three sentences on it.
Add LocalBusiness schema per page with a distinct @id for each location, matching name, address and phone exactly as on the profile. Point the profile's website field at that specific page, not the homepage.
Why your near-identical pages are not indexed
Duplicate content across location pages rarely earns a penalty. It earns something more boring and more damaging: Google indexes four of your thirty pages, canonicalises the rest into each other, and the branches you paid for sit outside the index.
Check before arguing about it. The page indexing report in Google Search Console states it plainly under "Duplicate, Google chose a different canonical" and "Crawled — currently not indexed". Then crawl the site in Screaming Frog and read the near-duplicates report at a 90% threshold; the cluster shows up in about two minutes.
The fix is not spun text. Rewriting "the best plumber in Houston" as "the finest plumber in Dallas" reads as filler to a human and clusters identically to a machine. What separates pages is information that could only be true of that branch:
- The manager's name, their trade licence number, how long they have run it
- The neighbourhoods and ZIP codes served, and the ones deliberately not served
- Reviews pulled from that branch's own profile rather than a sitewide carousel
- Equipment, stock or capability that site has and another does not
- Local particulars: permit rules in that city, hard water, hurricane season, HOA filings
A useful test: cover the city name and read the page. If you cannot tell which branch it is, those towns are better merged into one strong page. Fewer, thicker pages beat more, thinner ones — at three locations and at fifty.
Budget for it honestly. A location page with real research takes 60 to 120 minutes to write. At an $80 hourly rate that is $80 to $160 a page, so fifty locations is a one-off content bill around $4,000 to $8,000.
Internal linking a crawler can actually follow
The common failure is a footer carrying fifty city links on every page. It passes very little and sits where nobody scrolls on mobile. What works instead:
- A real locations hub in the main navigation, listing every site with its address. This is the page that gets crawled, and the one that ranks for "brand + locations".
- State or region pages between hub and cities past roughly fifteen locations, so no location page sits more than three clicks from the homepage.
- Breadcrumbs with schema on every location page: home, region, city.
- A "nearby branches" block linking to the three or four closest sites — geographic proximity, not alphabetical order.
- Links from service pages down into the locations offering that service, and back up again — on a matrix build, that is where most of the internal linking value moves.
Then verify rather than assume: crawl the site and check crawl depth per URL. A location page at depth five is effectively invisible, and the fix is structural rather than editorial. Our SEO audit tool surfaces the obvious depth and duplication problems.
Three, ten and fifty: three different builds
Three locations
Do it by hand. Three profiles managed directly in Google Business Profile, three location pages written properly, a locations hub, reviews requested per branch. No listings software, no bulk tooling. The cheap option is genuinely the right one here — a per-location listings platform at this size buys an invoice rather than an outcome.
Ten locations
Process starts to matter more than tactics. One owner account with every location in a single group, a naming convention nobody deviates from, and a spreadsheet that is the source of truth for name, address, phone, hours and categories. Review handling also stops being something a branch manager does between jobs and needs a system — ten branches produce enough volume that unanswered reviews become conspicuous, which is where reputation management earns its fee.
Rank tracking changes too. Sitewide keyword positions tell you nothing useful; you need per-location grid tracking, and Local Falcon or BrightLocal show how far each profile's radius genuinely reaches. Watch the credit cost as combinations multiply.
Fifty locations
Now it is a data problem. Location pages should come from a CMS collection so a template change does not mean fifty edits, while each record still carries its own required unique fields. A custom post type in WordPress or a collection in Webflow both handle this; the platform matters far less than whether unique fields are enforced at entry.
Listings syndication such as Yext or Uberall becomes worth pricing here. It is sold per location per year, commonly in the low-to-mid hundreds at list and discounted at volume, and the trade-off is that it is a rental: stop paying and syndicated listings can revert. Manual citation building at that scale has its own cost, so run the arithmetic both ways before signing a three-year term.
What this should cost
| Scope | Typical monthly band | What moves it |
|---|---|---|
| 1 location | $300 – $1,500 | Metro competitiveness; written vs templated content |
| 3 – 10 locations | $150 – $600 per location | Review volume; whether staff on site supply photos |
| 25 – 50+ locations | $40 – $150 per location, plus a central retainer | Software licensing; how much branch autonomy you allow |
| Location page build (one-off) | $150 – $600 per page | Depth of research; whether the template exists |
| Listings software | $2 – $40 per location per month | Directory network size; contract length |
Star Force Solutions works from $200 a month, a minimum rather than a package price — a two-location home services brand and a forty-location dental group are not the same job. Full detail is on the pricing page.
Where to start
In order: verify and complete every profile; point each one at its own page; fix the pages that are not indexed; build the internal linking; set up reporting per location, because a blended report across fifty branches hides the ten that are failing. Software comes last. Local search moves at the pace of crawling and review accumulation, so this is slow work, and nobody can honestly say which month a given branch turns.
If the map side is sound and the phone still is not ringing, the constraint is usually the enquiry form, the call handling, or the metros proximity will never reach: conversion work and paid search, not local SEO.
We are a web development and digital marketing agency in El Paso, Texas, working with multi-location brands across the USA. If you want a view on your structure before spending anything, our local SEO team will look at it — get in touch and bring the locations spreadsheet.

