City Pages Without the Doorway-Spam Smell

October 8, 2026 · local SEO · programmatic SEO · city pages

City pages have a bad reputation, and they earned it. For years the playbook was: write one page about your service, then clone it thirty times, swapping the town name each time. "Serving Foley." "Serving Fairhope." "Serving Daphne." Same words, different noun. Google named that pattern doorway pages, and it's been a demotion trigger for over a decade. So when someone hears "I want city pages for my service area," the reflex — including from honest SEOs — is to wince.

They're wincing at the clone, not the concept. Because there's a version of city pages that isn't spam at all. It's the opposite of spam: it's the most locally relevant content on the internet for each of those towns. The line between the two is exactly one thing — whether each page says something true and specific about its city that no template could generate.

The clone smells because it has nothing to say

A doorway page smells because it's empty. Strip the town name and every page is identical, which tells Google — and any human — that the page isn't about the town at all. The town is a variable, not a subject. There's no reason for thirty of these to exist except to catch thirty searches, and Google's whole job is to notice when pages exist for the crawler instead of the reader.

The fix isn't better writing. It's real data.

You can't spin your way out of this. Rewording the same paragraph thirty different ways doesn't make thirty different pages — it makes thirty paraphrases, which is still one page wearing costumes. The cure is having genuinely different facts per city, and the good news is that the government publishes most of them for free.

  • Housing age and value come from the Census and the American Community Survey. A town of 1950s housing stock has different service realities than a subdivision built in 2015, and that's a real thing to say about each place.
  • Flood zone comes from FEMA's flood maps. Whether a neighborhood sits in a flood zone is a fact that matters to a roofer, a plumber, an HVAC installer — and it's specific to the address, not the template.
  • Climate normals come from open weather data. What a coastal town's summers actually do to an air conditioner is different from what an inland town's do.
  • Drive time from your shop comes from a routing engine. "14 minutes from downtown Fairhope" is true, checkable, and impossible to fake across thirty towns without actually being local.

Every one of those facts carries a source you can link to. That's the discipline: not just having the number, but being able to show where it came from. A page built from sourced, per-city facts is about its city in a way no clone can imitate, because imitating it would require gathering the same real data — at which point you're not spamming, you're doing the work.

Why this is a moat, not a hack

Here's why I'll happily explain the whole method in public: knowing about it doesn't make it easy. The moat isn't the idea, it's the discipline of sourcing real data for every city, keeping every fact traceable, and writing prose that genuinely hinges on the numbers instead of decorating around them. It's the same reason sizing a site correctly and building city pages well are the same problem — the size only becomes an asset when each page is real. When I built Air Solutions' service-area coverage, the city pages weren't clones with the town swapped; they were built on per-city facts, each one sourced, because that's the only version that ranks and the only version that isn't spam.

The data is free. The discipline is the product. If your city pages have the clone smell, that's fixable — but the fix is data, not adjectives. Explore the local-services approach →

Call (251) 370-0292Start a project