Make each page genuinely unique and useful — different content, different examples, different local context, different testimonials. Google's doorway penalty targets boilerplate pages with city names swapped in. Genuine local content with local depth is fine; templated city-spam is not.
Doorway pages are Google's specific term for "low-value pages created mainly to funnel visitors to a more useful page" — most often, near-identical pages with a city name find-and-replaced. Google's doorway page algorithm update (originally 2015, refined in every major core update since) has gotten increasingly good at detecting this pattern.
**What gets penalized:**
- 50 city pages with identical content except for the city name and zip code - Templated headers like "Welcome to [Service] in [City]! We are the best [service] in [City]!" - City pages with no local references beyond the city name in the title - Auto-generated pages from a database without human review - Pages that exist only to capture search traffic and immediately funnel to a single conversion page
**What's fine and ranks well:**
- City pages where each one mentions specific local landmarks, neighborhoods, or context - Pages with city-specific testimonials or case studies - Pages that include local information genuinely useful to a searcher (e.g., for an HVAC business: Ottawa-specific average winter heating costs, common Ottawa-area furnace types based on housing stock from different eras) - Pages with location-specific FAQs - Pages that include city-specific photos (your van in front of recognizable local landmarks, your team at a local event)
**The "20% local, 80% service" rule:**
A well-crafted city/service-area page is roughly 20% locally-specific content and 80% high-quality service content. The 80% can be similar across pages (your services don't actually change between Ottawa and Kanata), but the 20% must be genuinely different.
**Concrete examples of what "20% local" content looks like:**
**For an Ottawa plumber's "Plumbing services in Kanata" page:**
- Reference Kanata-specific housing stock: "Most homes in Kanata North were built between 1995–2010 and have copper supply lines but PEX in newer renovations — we routinely diagnose corrosion-related leaks at copper-PEX transition fittings." - Mention specific neighborhoods: "We service Kanata Lakes, Beaverbrook, Bridlewood, Morgan's Grant, and the Hazeldean Industrial Park." - Include local rebate or municipal info: "Kanata residents qualify for Ottawa's water-efficient toilet rebate program — we'll apply your rebate to your invoice." - One specific case study with the customer's permission: "Last spring we replaced a failing 1998-era hot water tank for the Patel family in Kanata Lakes — full installation in 4 hours, before-and-after photos below." - A locally-specific testimonial: "Sarah from Bridlewood Trail wrote: '[testimonial text].' (4.9 / 5 stars on Google)"
None of this fits a templated swap-in-city-name approach. All of it is genuinely useful to a Kanata homeowner deciding whether to call you.
**The volume question:**
How many city/service-area pages can you create before Google flags it? Two factors govern this:
1. **Domain authority.** A 10-year-old domain with 200 referring domains can sustain hundreds of city pages. A 6-month-old domain with 5 referring domains will get flagged at 30+. 2. **Content uniqueness per page.** If every page is genuinely 20% locally-specific, you can scale higher than if pages are 5% specific.
A reasonable rule of thumb: a small business with normal authority can sustain **3–5 pages per service × 8–12 cities** = roughly 30–60 city/service pages. Beyond that, the marginal new page contributes less, and you risk crossing the doorway-page threshold.
**The "service first, location second" structure:**
Which URL structure ranks better — `/services/plumbing/ottawa/` or `/locations/ottawa/plumbing/`?
In most tested cases, **the "service first" structure** ranks slightly better because it groups your strongest authority signal (the service category) at the top of the URL hierarchy. But the difference is small (5–10% rank difference) and a well-built "location first" structure with strong internal linking will outperform a poorly-built "service first" structure.
**Cross-linking strategy:**
Each city/service page should:
- Link back to the parent service page ("All plumbing services") - Link to other cities you serve (with descriptive anchor text) - Link to 2–3 related service pages ("Need drain cleaning instead? Our drain services in Kanata.") - Link to your contact and booking pages
No orphan city pages. Each one needs to feel like part of a coherent location ecosystem.
**The honest truth about scaling:**
Programmatic SEO (generating large numbers of city × service pages from templates + data) absolutely can work in 2026 — but only if each generated page has substantive uniqueness driven by real underlying data, not just text variations. The "doorway page" penalty is really a "low-value content" penalty applied to scaled content. If your pages have actual value at scale, you're fine. If they're just SEO surface area without value, you'll get hit eventually.
- **How long does it take to rank in the Google local pack in Canada?** — 4–8 weeks for low-competition niches in suburban Canadian markets. 6–12 months for mid-competition urban categories. 12–24 months for top-3 in the local pack for a major metro head term (e.g., 'plumber Toronto'). New domains take roughly 50% longer than established ones. - **What citation sources actually move the needle for Canadian local SEO?** — The 12 highest-impact Canadian citations: Google Business Profile, Apple Maps, Bing Places, Yelp Canada, Facebook, YellowPages.ca, Canada411, Foursquare, BBB.org, Cylex.ca, Ourbis, and your industry-specific top directory. After these 12, you're in diminishing-returns territory. - **How do I do local SEO in Quebec or for a bilingual Canadian audience?** — Build separate French and English landing pages with proper hreflang tags, register a French-language GBP listing for Quebec locations (or set primary language to French), and prioritize French-Canadian directories (PagesJaunes, Carte.qc, Quebec industry directories). Translation alone is not enough — you need French-native content. - **What's the difference between local SEO and Google Business Profile optimization?** — GBP optimization is a subset of local SEO. Local SEO covers your whole digital footprint (GBP + website SEO + citations + reviews + local link building); GBP is just the profile itself. Doing GBP without the rest leaves you with a polished profile that doesn't rank.