Most local businesses work across five or six cities and rank in exactly one. If you want to rank in multiple cities, the instinct is to duplicate your best page, swap the city name, and repeat. That is the one approach that reliably does not work, and this post covers what does: pages that are genuinely different, and honest structured data for everywhere else.
Key Takeaways
- LocalBusiness JSON-LD appeared on just 3.97% of mobile pages in the 2024 HTTP Archive crawl (HTTP Archive Web Almanac, 2024), up from 2.8% of mobile pages in 2022 (Web Almanac, 2022). Rare enough that getting it right is still a cheap edge.
- The vocabulary already separates the two ideas for you:
addressis defined as the physical address of the item, whileareaServedis the geographic area where a service or offered item is provided (schema.org, vocabulary release 29.0). One says where you are, the other says where you work.- Build a separate page only for a city you can write something genuinely different about. Declare the rest with
areaServedand a service area list.
Most web-wide figures below come from the HTTP Archive Web Almanac, an annual crawl of millions of real websites that publishes its methodology. It samples the crawlable web, not Ontario local businesses specifically, so treat those percentages as background rather than as a picture of your competitors. Vocabulary definitions are cited to schema.org and MDN, and the Google Business Profile definitions to Google’s own published API documents.
Can One Business Rank in More Than One City?
Yes, in the organic results, because those results rank pages rather than businesses. A page about the work you do in Vaughan can rank for Vaughan searches whether or not you hold an address there. The map pack is a different surface with different rules, and conflating the two is what sends owners looking for fake addresses.
You can watch the split happen yourself. Search your own service on your phone, drive twenty minutes, and search again: the three map results will often change while the blue links below them barely move. That is the practical difference between a surface driven by where the searcher is standing and a surface driven by which page best answers the query.
- Map pack, proximity led: driven mainly by your verified Google Business Profile and how close the searcher is. Your pages support it, but they cannot outrun distance.
- Organic results, page led: ten links that respond to what is actually on a URL. This is the surface a multi-city strategy can genuinely win.
- Different jobs, different fixes: profile work for the map, page work for organic. Spending months on one while expecting the other to move is the most common wasted effort here.
If the map pack is what you are chasing, that is its own project and showing up on Google Maps covers it properly. Everything below is about the organic half, which is the half you can actually expand city by city.
Why Do Copy and Paste City Pages Fail?
Because find and replace produces nine versions of one page, and Google only needs one of them. When the only difference between your Mississauga page and your Vaughan page is the city name, you have not published nine pages worth of information. You have published one page nine times and asked a search engine to pick a favourite.
The web already runs on canonical tags for exactly this problem. The share of crawled pages carrying one rose from 65% on both desktop and mobile in 2024 to 68% on desktop and 67% on mobile in 2025 (HTTP Archive Web Almanac, 2025), and in that same crawl 7% of desktop pages and 9% of mobile pages pointed their canonical at a different URL entirely. Duplicate handling is routine, and near-identical city pages walk straight into it.
MDN describes the tag plainly: it defines the preferred URL for the current document, which helps search engines reduce duplicate content (MDN). That is the machinery quietly deciding which of your city pages counts.
- The real cost is not a penalty: it is that eight of your nine pages do nothing while you maintain all nine.
- Thin plus duplicated is the worst pairing: a short page with nothing local in it has no reason to win and nothing to distinguish it.
- A different problem from being missing: if Google has no copy of your pages at all, that is an indexing fault, and checking whether your site is indexed comes first.
What Makes a City Page Genuinely Different?
Specifics that could only have been written by someone who works there. Neighbourhood names, the roads you actually take, the kind of building stock in that city, the jobs you get called for there rather than somewhere else. If a sentence would survive swapping the city name, it is not doing any work.

That is the Peel Excavation build, and the hero does the whole job in two lines: the three cities are named above the fold, and the headline claims the region rather than a single town. A visitor from any of those three sees their own city before they scroll.
The city pages on this site are built the same way and the difference is measurable. Each of the nine geographic pages renders between roughly 1,170 and 1,250 words of body copy with the header and footer stripped out, against a median inner page, header and footer included, of 339 rendered visible words on desktop in 2025 (HTTP Archive Web Almanac, 2025). More to the point, they name different places: the Brampton SEO page references Bramalea, Springdale, Castlemore, Mount Pleasant and Highway 410, while the Mississauga SEO page references Streetsville, Port Credit, Meadowvale, Erin Mills, Dixie and Heartland.
A service page is the sibling of a city page and answers a different question, which is what you do rather than where you do it. That structure is covered in full in what to put on a service page.
| Element | Copy and paste city page | A page worth publishing |
|---|---|---|
| Word count | 300 to 500, mostly boilerplate | 1,000+, most of it city specific |
| Places named | The city, repeated | Neighbourhoods, roads, local landmarks |
| Proof | The same testimonial everywhere | Work done in or near that city |
| Title tag | One word swapped | Written for how that city searches |
| Services | Identical list | Weighted to what that city calls you for |
| Reason to exist | The city has search volume | You actually work there |
- Write the page after the work, not before: the easiest genuinely local page is one about jobs you have already done in that city.
- Name streets and neighbourhoods you know: these are the details a competitor cannot generate and a local reader recognizes instantly.
- Vary the service emphasis: the work that pays in one city is rarely the work that pays in the next one, and the page should say so.
- Give each page its own proof: a photo, a job, or a detail tied to that city beats the same quote pasted nine times.
Do You Need an Address in Every City You Serve?
No, and you do not have to invent one either, because Google already has a category for exactly your situation. Its Business Profile API defines the term directly: service area businesses provide their service at the customer’s location, for example a locksmith or plumber (Google My Business Business Information API, revision 20260826). That is a supported way to operate, not a workaround.
So the honest setup is also the documented one. You keep one verified profile where you actually operate, set your service area to the cities you travel to, and let your pages carry the rest. The Google Business Profile side of this is its own piece of work and worth doing properly.
Renting a mailbox to claim a second city plays against the profile you already have. What counts as a valid location is set by the Google Business Profile guidelines, and the verification API documents where a listing lands when it goes wrong: it carries a state for a location that fails to comply with those guidelines, and another for a location that duplicates a location already in good standing (Google My Business Verifications API, revision 20260527). Your reviews and your map position ride on that listing.
This site takes the same position in its own markup. The business address declares a region and a country and stops there, with no locality claimed, because a service area business covering the GTA and working with clients anywhere in Canada does not need to plant a flag in one town to be findable.
- Never invent a location: the downside is losing a verified profile, which is far worse than not ranking yet.
- One profile, honestly placed: where you actually operate, with a service area listing the cities you travel to.
- Let pages do the travelling: the organic surface is where you legitimately expand, city by city.
How Do You Tell Google Which Cities You Serve?
With areaServed, and the vocabulary is unusually clear about it. Schema.org defines address as the physical address of the item and areaServed as the geographic area where a service or offered item is provided (schema.org, vocabulary release 29.0). Those are two different properties answering two different questions, which is the whole point.
The types line up with how a service area business actually works. areaServed accepts AdministrativeArea, GeoShape, Place or plain text, and AdministrativeArea has City among its subtypes (schema.org, vocabulary release 29.0). LocalBusiness inherits from both Organization and Place, and areaServed comes from the Organization side, so a local business can name a list of cities while holding exactly one address.
Worth saying plainly: this is a description of your coverage, not a ranking lever. Schema.org defines vocabulary, it does not decide rankings, and no markup will put you in a map pack you have not earned. It is still worth getting right, because almost nobody does.
LocalBusiness JSON-LD appeared on 3.97% of mobile pages in the 2024 Web Almanac crawl (HTTP Archive Web Almanac, 2024), up from 2.8% of mobile pages in 2022 (Web Almanac, 2022). That crawl covers the whole web rather than business sites specifically, so it does not tell you what share of local businesses bother. It does tell you the markup is rare enough to still be a cheap edge.
Here is the shape this site ships, trimmed to the two properties that matter for a service area business:
"address": {
"@type": "PostalAddress",
"addressRegion": "ON",
"addressCountry": "CA"
},
"areaServed": [
{ "@type": "Place", "name": "Brampton" },
{ "@type": "Place", "name": "Mississauga" },
{ "@type": "Place", "name": "Oakville" },
{ "@type": "Place", "name": "Vaughan" },
{ "@type": "Place", "name": "Milton" },
{ "@type": "Place", "name": "Caledon" },
{ "@type": "Place", "name": "Bolton" },
{ "@type": "Place", "name": "Peel Region" },
{ "@type": "Place", "name": "Greater Toronto Area" },
{ "@type": "Country", "name": "Canada" }
]
Each individual city page then carries a narrower statement of its own, scoped to that one place. Both types are valid: Place is the safe general choice for a mixed list that also holds a region and a country, while a single city page can use the narrower City because it says more.
"areaServed": { "@type": "City", "name": "Brampton" }
- Region on the business, cities in the list: the address says where you are,
areaServedsays where you work, and they are allowed to differ. - Scope the page schema to the page: a city page should claim its city, not the whole list, or every page says the same thing again.
- Keep it true: structured data describes the business, so a city in that list you have never worked in is a claim you cannot back.
Which Cities Should You Build Pages For?
Only the ones you can write a genuinely different page about. That test is more useful than search volume, because a city you cannot describe is a city where you have no proof, no photos and no local detail to write with. Volume tells you what a page could be worth; the test tells you whether you can build one worth ranking.
Look at how two real builds handle it. Peel Excavation names three cities and claims the region around them, which matches how an excavation contractor actually books work. World Food Equipment runs a Service Areas section in its main navigation and a headline covering Ontario and Canada, because commercial refrigeration travels much further than a driveway job.
- Start with where the work already is: the cities on your last twenty invoices, in order.
- Check you can fill a page: if you cannot get to 1,000 specific words, the city belongs on a service area list instead.
- Add cities one at a time: three strong city pages beat nine thin ones, and you can always build the fourth next month.
- Match the shape to the work: a trade that travels an hour needs a different footprint than one that works a single region.
If deciding which pages to build is the part you are stuck on, that is the shape of a local SEO engagement rather than a weekend project.
How Do You Know If Your City Pages Are Working?
Search Console, at the page level, comparing sibling city pages against each other. Sitewide traffic will not tell you which city is landing. The comparison you want is two pages built to the same template for two different cities, because anything that differs between them is down to the city and the page rather than the site.
Here is that comparison from this site, and it is not flattering. The window is the 68 days to August 8, 2026, running from the first day this property recorded any data to the last.
The Brampton web design page took 5 impressions at an average position of 8.0, while the Mississauga web design page took 5 impressions at an average position of 40.8. The SEO pages lean the same direction but nowhere near as far: Brampton at 4 impressions and position 8.0, Mississauga at 7 impressions and position 11.29.
Those are tiny numbers on a young site and nobody should draw a law from them. What they point at is a coverage gap rather than a competition gap: across the whole site, the same export lists 27 distinct Brampton queries drawing 104 impressions against 2 Mississauga queries drawing 3, so Brampton is simply being shown for more things. If your city pages all report the same position, that is usually a sign they are all being treated as the same page.
- Compare pages, not the site: the Pages report is where city strategy is visible.
- Watch average position before clicks: on a new page, position moves months before clicks do.
- Expect uneven results: a page ranking in one city and stalling in the next is normal, not a defect.
- Read zero clicks as a message: impressions with no clicks means you are being seen and skipped, which is a title and description problem rather than a ranking one.
A page that is indexed and simply not ranking looks a lot like a page Google never found, and the two need opposite fixes. Telling an indexing problem from a ranking problem is worth doing before you build another city page.
Frequently Asked Questions
Can I rank in a city where I do not have an office?
In the organic results, yes. Those results rank pages, so a page that covers the work you do in that city can rank there without you holding an address in it. The map pack is harder, because it leans on where the searcher is and where your verified location sits, and your site supports that profile rather than moving the pin.
How many city pages should a small business have?
As many cities as you can write a genuinely different page about, and no more. For most local businesses that is three to six. If you cannot name the neighbourhoods, the road you take to get there, and the kind of work you actually do in that city, the page is not ready to exist yet.
Will duplicate city pages hurt my rankings?
Near-identical city pages mostly waste your time rather than trigger a penalty. Google picks one version it considers the best and largely ignores the rest, so you carry the cost of nine pages and get the value of one. The fix is not deleting them, it is making each one carry information the others do not.
Is it safe to use a virtual office address to rank in another city?
No, and it is the one shortcut here that can actually cost you something. A mailbox or a rented desk you do not staff is not a business location, and a Google Business Profile removed for a fake address takes your reviews and your map ranking with it. The organic route is slower and it does not put your profile at risk.
Should I list every city I serve on one page instead?
A service area list on one page is the right home for the long tail of places you will travel to. It will not rank you in those cities on its own, but it is honest, it is useful to a customer deciding whether to call, and it belongs in your structured data. Build separate pages only for the cities you genuinely compete in.
What is areaServed in schema markup?
It is the schema.org property that states which places a business or a service covers, and it sits alongside your address rather than replacing it. It lets you say you are in one region while serving a list of cities and a country, which is exactly the situation most local businesses are in. It is a description of your coverage, not a ranking lever.
Wrapping Up
Ranking in multiple cities is not a trick. It is a page per city you genuinely work in, each carrying detail the others cannot, plus honest structured data for the wider area you travel to.
The shortcut everyone reaches for first is the one with a real downside attached. Duplicated city pages cost you maintenance and return almost nothing, and an invented address risks the profile you already have. Neither is faster than writing three good pages.
Start with the cities on your last twenty invoices, build one properly, and check it in Search Console against the page you already rank with.
Want to know which cities you could realistically rank in? Get a free website audit and I will look at your current city pages, your service area setup, and where the winnable gaps are, then send you the specific list.
Further reading:
- How to Show Up on Google Maps in Brampton covers the map pack half of local visibility.
- Why Is My Website Not Showing Up on Google? separates an indexing problem from a ranking problem.
- Local SEO for Contractors in Brampton is the ground level version for trades businesses.