Your 14 City Landing Pages Are Fighting Each Other for the Same Ranking — And Losing
An HVAC company in Gardena hires an agency, and the agency's big idea is scale: build a page for Torrance, one for Redondo Beach, one for Hermosa, one for Manhattan Beach, one for Lawndale, one for El Segundo — fourteen pages total, each targeting "HVAC repair [city name]." The template is identical. Same 280 words. Same three bullet points about "fast, reliable, affordable service." Same stock photo of a technician holding a wrench. The only thing that changes is the city name, dropped into the H1, a couple of paragraphs, and the meta title.
Eight months later, none of the fourteen pages rank in the top twenty for their target city. Not one. The owner is paying for fourteen URLs and getting zero incremental traffic from any of them — and in a lot of cases, the company's original single-location page, the one that used to rank fine for "HVAC repair Torrance," has quietly slipped too.
This isn't bad luck. It's a predictable, well-documented failure mode, and it's one of the most common things we find when we audit a trades site that's been "SEO'd" by someone selling volume instead of relevance.
Fourteen Weak Pages Don't Beat One Strong Page — They Actively Undermine It
The instinct behind city-page templating makes surface-level sense: more pages targeting more city names should mean more chances to rank. But Google doesn't evaluate pages in isolation. It evaluates them in the context of the whole domain, and it evaluates near-duplicate content as a liability, not an asset.
When fourteen pages share 90% of their sentence structure and differ only in a proper noun, Google's algorithms — the same lineage of systems that started with Panda and now live inside the Helpful Content and site-quality signals — read that as a scaled content pattern built for search engines, not for people. It's the same signature as a directory site or a doorway page network, and Google has spent over a decade specifically training its systems to discount that pattern. The pages don't just fail to rank on their own. They act as a drag on the perceived quality of the entire domain, including the pages that would otherwise rank fine.
There's a second, more mechanical problem underneath that: keyword cannibalization. When a searcher in Redondo Beach types "AC repair near me," Google isn't choosing between your Redondo Beach page and your competitor's Redondo Beach page. It's choosing between all fifteen of your pages that mention "AC repair" plus Redondo Beach in some form, deciding which one is most relevant, and often landing on none of them with enough confidence to rank it above page two. You've split your own relevance signal fourteen ways instead of consolidating it into one page strong enough to win.
The System-Level Reason This Keeps Happening
This pattern survives because it looks productive. Fourteen live URLs feels like fourteen times the SEO effort. It's easy to report on ("we built pages for every city you service!") and easy to sell, because it mimics what actually works for large multi-location brands — a national HVAC franchise with forty physical branches legitimately needs forty location pages, because each one represents a distinct address, a distinct local team, and distinct local citations.
A single-location contractor who drives to fourteen cities from one shop in Torrance doesn't have that. There's no second office in Manhattan Beach. There's no separate crew, separate reviews, separate service history unique to Hermosa. So when the page gets built anyway, there's nothing real to put on it — which is exactly why it defaults to the templated 280 words. The content isn't thin because the writer was lazy. It's thin because there was never enough distinct, defensible information to justify a unique page in the first place.
This same shallow-content problem is now getting punished twice. Google's classic ranking systems discount it the way they always have — but AI answer engines (the systems behind AI Overviews, Perplexity, and ChatGPT's browsing mode) are even less forgiving. Those systems are looking for a specific, extractable fact to cite: a service radius, a response time, a code requirement, a named neighborhood. A page that says "we proudly serve Hermosa Beach with fast, friendly service" gives an AI engine nothing to quote. It gets skipped in favor of a competitor's page that says something an AI can actually lift and attribute.
What a Page Built to Actually Win Looks Like
The fix isn't fewer city mentions — it's fewer city pages and dramatically more substance on the ones that stay. A contractor covering the South Bay from a single location generally needs one strong, deep, entity-rich hub, not fourteen thin outposts. That page should carry the kind of detail a templated page never will: which specific neighborhoods within each city you actually run jobs in, how permit and inspection requirements differ between Torrance and Manhattan Beach for the work you do, what your average response window looks like by zone, and photos or write-ups of specific completed jobs tied to real streets or developments (with the homeowner's permission, obviously) rather than stock photography.
For a general contractor, that might mean a real project narrative — a kitchen remodel in a specific Hollywood Riviera-adjacent neighborhood, the permitting quirks of that jurisdiction, the timeline, the outcome — instead of a generic "we serve Torrance and surrounding areas" paragraph. For an electrician, it might mean naming the specific panel brands common in older Torrance and Lomita housing stock and how that affects a service call. Specificity is the thing a template structurally cannot produce, and it's the exact thing both Google's quality systems and AI citation engines are now built to reward.
Where multiple cities genuinely warrant separate pages — because there's a real, distinct story to tell for each — internal linking has to reinforce hierarchy instead of competing flatness. A strong page like our own South Bay service area page works because it functions as a hub that distributes authority downward and outward, rather than fourteen disconnected leaves all claiming to be the trunk. The same logic applies whether you're structuring this for home services broadly or for a narrower vertical like plumbing, roofing, or HVAC — the architecture has to reflect where the real service depth actually lives, not where a template happened to insert a city name.
The Page Count Was Never the Metric
Somewhere in the last decade, "how many pages do you have targeting local keywords" got mistaken for a strategy instead of a symptom. It isn't. The real question is narrower and harder to fake: does this specific page contain something true, specific, and useful that no other page on the internet says in exactly this way, about this exact place? If the honest answer is no, the page shouldn't exist — it should be a paragraph inside a stronger page instead.
If your site has more city pages than your crew has trucks, that's not coverage. That's dilution, and it's costing you the rankings you'd have if all that content lived in one place worth linking to. If you want a second opinion on whether your service-area structure is helping you or quietly working against you, that's a conversation worth having before you build page fifteen.