Foundgrove
← All posts

SEO · 8 min read

Keyword Cannibalization: When Your City Pages Fight

Summary

Four URLs chasing one city query, positions flip-flopping weekly, none of them consolidating. Detect it in Search Console and fix it with the right tool.

By Hyder Shah, Founder & CEO · Published July 13, 2026 · Updated July 13, 2026

Your rankings bounce. Week one you're position 6 for 'emergency plumber austin'. Week three you're 14. Nothing changed on the site, nobody built links against you, and your agency says the algorithm is volatile.

It usually isn't the algorithm. It's that you published four pages about being a plumber in Austin and Google can't decide which one is the real one.

What does keyword cannibalization look like on a service business site?

It looks like three to five of your own URLs each picking up impressions for the same query, with none of them holding a stable position. On a blog, cannibalization means two articles overlap. On a service-business site it is structural, and it costs far more, because the fighting pages are the ones that were supposed to make you money.

The classic pile-up on a trades site targeting one city:

  • /plumber-austin — the location page a past agency built.
  • /austin-plumber — a second location page a different agency built, because nobody checked.
  • /plumbing-services-austin — a 'service + city' page from the programmatic template.
  • /services/emergency-plumbing — the actual service page, which mentions Austin 14 times.
  • /blog/best-emergency-plumber-in-austin — a post written to 'support' the location page.

Five URLs, one query, one intent. Google has to pick one, and its pick is not stable, because the pages are so similar that small crawl-to-crawl differences flip the winner. Meanwhile every link and every internal anchor you earn gets split across five buckets instead of stacking in one.

The other tell: your service page outranks your city page in the city you actually operate in, or your blog post outranks both. That is Google telling you your money page is not distinctly better than the content around it.

How do you detect it in Search Console without a paid tool?

Filter one query in the Performance report and count how many of your pages have impressions for it — if it's more than one, you have a candidate in under 60 seconds, and it costs nothing. No Ahrefs, no Semrush, no crawler.

The exact sequence in Google Search Console:

  • Open Performance → Search results and set the date range to the last 3 months. Turn on Impressions, Clicks, and Average position.
  • Go to the Queries tab and click the query you care about (for example, 'emergency plumber austin'). This adds it as a filter across the whole report.
  • With the query filter still applied, switch to the Pages tab. You are now looking at every URL of yours that has ever picked up an impression for that one query.
  • One URL = healthy. Two or more URLs with meaningful impressions = cannibalization candidate.
  • Now compare date ranges. Set the range to the last 28 days and check 'Compare' against the previous 28 days. If page A's impressions collapsed while page B's rose for the same query, Google is rotating between them.

Do this for your top 20 commercial queries, not your top 500. Cannibalization on 'how to unclog a drain' is not costing you jobs. Cannibalization on 'water heater repair phoenix' is.

Then confirm with the URL Inspection tool. Google's documentation tells you to use it to check which page Google considers canonical, and warns that 'even if you explicitly designate a canonical page, Google might choose a different canonical for various reasons, such as the quality of the content' (Google Search Central). If Inspection reports a Google-selected canonical that is not the URL you submitted, you have your answer in writing.

Why do your city pages keep swapping positions week to week?

Because Google clusters near-duplicate pages together and picks one representative — and when the pages are 90% the same, that pick is a coin flip that gets re-tossed on every recrawl. Google's own canonicalization docs describe pages being 'clustered together' and say the fix 'boils down to ensuring that the pages that are clustered together are sufficiently different.'

That is the whole mechanism. You did not get penalized. You built a set of pages Google reads as one page with five addresses, and it keeps changing its mind about which address to print.

The practical damage is not the position number. It's that authority never compounds. Signals from links to duplicates only consolidate onto one URL when Google knows which URL that is — that's the entire point of specifying a canonical, per Google's duplicate-URL documentation. Leave it ambiguous and you spend two years earning links that land in five separate piles.

One boundary worth naming: this post is about pages that are indexed and are competing. If Search Console says your pages are 'Crawled — currently not indexed', that is a different problem with a different fix, and you should read why Google refuses to index pages instead.

Should you merge, canonicalize, redirect, or differentiate?

Redirect is the strongest signal and the right default when one page is genuinely redundant; canonical is for pages you must keep live; differentiation is for pages that deserve to exist but were written lazily. Google ranks the methods by strength itself: redirects, then rel='canonical', then sitemap inclusion, which it calls only 'a weak signal.'

SituationFixWhyWhat it costs you
Two city pages for the same city (/plumber-austin + /austin-plumber)301 the weaker into the strongerRedirects are the strongest canonicalization signal Google namesThe weaker URL, permanently
Near-duplicate page you must keep live (a PPC landing page, a partner page)rel=canonical to the money pageConsolidates signals without deleting the pageNothing — but Google may still override your choice
Service page vs city page, both legitimateDifferentiate by intent and contentThe pages stop being a duplicate clusterReal writing time
Old blog post outranking your money pageRewrite the post to be informational and link down to the money pageKeeps the traffic, redirects the intentAn afternoon
Thin programmatic city page with no leads in 12 monthsDelete and 301 to the parent service pageRemoves a doorway-shaped pageNothing you were using

Verdict: 301 the weaker page. Most owners reach for the canonical tag because it feels safer — nothing gets deleted. But a canonical is a suggestion Google can ignore, and it leaves the losing URL crawlable, linkable, and confusing forever. If the page has no independent reason to exist, redirect it and be done.

One thing not to do: Google explicitly says it does 'not recommend using noindex to prevent selection of a canonical page within a single site, because it will completely block the page from Search.' Noindexing your second Austin page throws away its links instead of consolidating them.

How do you rewrite two city pages so they stop competing?

You give each page a different job, and at least 60–70% of the body copy has to be information that could not appear on the other page. Swapping the city name in a template is what created the problem; doing it more carefully will not solve it.

What actually differentiates a location page — none of it template-generated:

  • Named neighborhoods, ZIPs, and landmarks you actually serve, plus your real drive time from base.
  • Local specifics that change the job: 1920s cast-iron stacks in one neighborhood, slab foundations in another, hard water in a third, a county permit office with a two-week backlog.
  • Pricing that reflects that market, not a national range copied across 40 pages.
  • Named technicians or crews who cover that area, and the real dispatch hours.
  • Photos of your trucks at jobs in that city — not stock images.

If you cannot write 400 words about a city that could not be pasted onto another city's page, you do not have a location page — you have a doorway page. Google's spam policies name this directly: doorway abuse includes 'having multiple domain names or pages targeted at specific regions or cities that funnel users to one page' (Google Search Central). Our full take on doing this legitimately is in location pages for service-area businesses.

For the service-page-vs-city-page pair, the split is simpler: the service page owns the what ('emergency plumbing: what we do, how fast, what it costs'), the city page owns the where ('emergency plumbing in Austin: our coverage, our response times, our crews'). Then internally link them once, deliberately, in that direction.

Do internal links and anchor text make cannibalization worse?

Yes — inconsistent internal anchors are one of the fastest ways to keep a duplicate cluster alive, and Google says so plainly: 'when linking within your site, link to the canonical URL rather than a duplicate URL. Linking consistently to the URL that you consider to be canonical helps Google understand your preference.'

The common failure on a service site: the footer links 'Austin Plumber' to /austin-plumber on every page, the nav links 'Plumbing in Austin' to /plumber-austin, and the blog links 'emergency plumbing Austin' to a third URL. Your own site is casting three votes for three different pages.

Pick the winner first, then make every internal link — nav, footer, body, breadcrumbs, sitemap — point at it with the same descriptive anchor. That is a two-hour job on most sites and it is the highest-leverage part of this entire fix. A technical SEO audit should surface every conflicting anchor in one crawl.

When are two pages on the same keyword actually correct?

When the two pages serve different search intents, and the SERP proves it by showing both a commercial page and an informational page for that query. That is not cannibalization — that is coverage.

The legitimate cases:

  • Money page + informational post. 'Water heater replacement cost' can support a service page (buy now) and a cost guide (research now). Different intent, different SERP slots.
  • Two genuinely different cities. Austin and Round Rock are different pages because they are different markets, not because they are different words. Keep them if the content is genuinely different — see multi-location SEO without cannibalizing.
  • Comparison vs service. 'Tankless vs tank water heater' and 'water heater installation' overlap in words, not in what the searcher wants.
  • A page that ranks in the map pack and a page that ranks organically. These compete for screen space, not against each other.

The test is simple: search the query, look at what Google is actually ranking on page one, and ask whether both of your pages match something on that page. If both of your pages are trying to be the same result, one of them has to go.

How long after consolidation should rankings recover?

Expect two weeks before Google even re-evaluates the cluster, and 4–8 weeks before the surviving page holds a stable position. Google states that after you fix the content, 'Google might hold pages in a duplicate cluster for up to two weeks,' and that pages 'split out faster if the difference between the new content and the other clustered pages is clear and significant.'

That last clause is the operator lesson: a timid rewrite buys you a slow, partial recovery. A decisive one — redirect the loser, rewrite the winner, fix the anchors on the same day — resolves faster.

Then use URL Inspection's Request Indexing on the surviving URL only. Google notes the feature 'is subject to quotas,' so 'reserve it for your most important URLs.' Don't burn it on 40 city pages.

One warning: rankings can dip before they rise. You just removed pages Google was showing. If your position is worse at week two, that is the cluster being rebuilt, not the fix failing. Judge it at week eight, on leads — not on week-two positions.

What should you do first, this week?

Pull your top 20 commercial queries in Search Console, filter each one, and write down every query where more than one of your URLs shows impressions. That list, ranked by revenue, is your fix order. Everything else in this post is downstream of that list.

If the list is ugly and you'd rather not spend a month untangling a decade of agency URLs, that untangling is exactly what our SEO audit does — we map every query to every competing URL, hand you the merge-or-redirect decision for each pair, and you own the file whether you hire us or not. Get my free audit.

Where does this fit in your stack?

If you're running a US service business, the playbook in this post pairs with our full services lineup and applies cleanly across our supported industries and US locations. If you want help implementing it, book a free strategy call — we'll review your current setup and prioritize the next three moves.

For the deeper engagement details, see our SEO service. New to the terminology here? Our SEO & marketing glossary defines every acronym in this post.

Want this built for your vertical? See SEO for Plumbing Companies, SEO for HVAC Companies, SEO for Roofing Contractors, SEO for Law Firms, SEO for Pest Control Companies.

What are the most common questions about this topic?

Common questions readers send us about this topic.

How do I know if I have keyword cannibalization?

Open Google Search Console, go to Performance, click a commercial query in the Queries tab, then switch to the Pages tab with that query filter still applied. You are now seeing every URL of yours that earns impressions for that query. One URL is healthy. Two or more with real impressions, especially with positions that swap when you compare date ranges, means Google is rotating between your own pages instead of settling on one.

Can two of my pages rank for the same keyword without hurting each other?

Yes, if they serve different intents and the search results page shows both types. A service page and a cost guide can both rank for 'water heater replacement cost' because one is for buyers and one is for researchers. What hurts is two pages trying to be the same result — a location page and a duplicate location page for the same city. Search the query and see what Google is actually ranking. If both of your pages match the same slot, one has to go.

Should I delete or redirect the weaker page?

Redirect it with a 301. Google names redirects as the strongest canonicalization signal it supports, ahead of rel=canonical and well ahead of sitemap inclusion, which it calls a weak signal. A plain deletion throws away every link and every internal anchor that page had accumulated. A 301 hands those signals to the page you kept. Only delete outright if the page has no links, no traffic, and no history worth preserving.

Does a canonical tag fix cannibalization?

Sometimes. A rel=canonical is a strong hint, not a command. Google's documentation says that even when you explicitly designate a canonical page, it might choose a different one — for reasons including content quality. Use a canonical when the duplicate page must stay live, such as a paid-ads landing page. When the page has no independent reason to exist, a 301 redirect is stronger and removes the ambiguity permanently.

Do my service page and my city page compete with each other?

They do if they say the same things. The fix is a job split: the service page owns what you do, how fast, and what it costs; the city page owns where you do it, which neighborhoods, what your response times are there, and which crews cover it. If you cannot write 400 words on the city page that could not be pasted onto another city's page, you don't have a location page, and merging it into the service page is the honest call.

How does internal anchor text cause cannibalization?

By casting votes for different pages. If your footer links 'Austin Plumber' to one URL, your nav links 'Plumbing in Austin' to a second, and your blog links to a third, your own site is telling Google that three different pages are the answer. Google's guidance is to link consistently to the URL you consider canonical, because that consistency is itself a signal. Pick the winner, then repoint every nav, footer, breadcrumb, and body link at it with the same anchor.

How long does it take to recover after consolidating pages?

Google says pages can stay in a duplicate cluster for up to two weeks even after you fix the content, and that they split out faster when the difference between pages is clear and significant. Plan on two weeks before anything moves and 4 to 8 weeks before the surviving page holds a steady position. A half-hearted rewrite drags this out. A decisive one — redirect, rewrite, fix the internal anchors the same day — resolves faster.

Is cannibalization the reason my rankings keep bouncing?

It is one of the most common reasons on service-business sites, and it is the cheapest one to rule out. Spend ten minutes in Search Console checking whether multiple URLs of yours earn impressions for the same query. If they do, that flip-flopping is Google swapping between your pages. If only one URL appears and the position still moves, the cause is elsewhere — competitor movement, a core update, or a technical issue — and you should triage differently.

About the author

Hyder Shah

Founder & CEO, Foundgrove

Hyder Shah is the founder of Foundgrove, an SEO and GEO agency for US service businesses. See our editorial policy for how these guides are researched and reviewed.

Related reading

Other tactical pieces from the Foundgrove blog.

Want help applying this to your business?

Book a free 30-minute call. We'll review your current acquisition stack and show you the three highest-leverage moves for your industry and state. Or read how our SEO service works.

Free SEO & AI visibility auditGet my free audit