← all articles

Two pages competing for the same query: how keyword cannibalization actually plays out

I run a handful of sites, and every one of them has gone through a stretch where two pages started fighting each other for the same query. It’s not dramatic. Nothing crashes. Rankings just get muddy, and it takes longer than it should to notice because the symptom looks like a dozen other things.

What cannibalization actually is

Keyword cannibalization is when two or more pages on the same site are relevant enough to the same query that a search engine can’t settle on which one to rank, so it alternates, or it picks one and buries the other, or it ranks both somewhere mediocre instead of one page ranking well. The pages aren’t competing with someone else’s site. They’re competing with each other.

This isn’t a penalty. Nobody is being punished. It’s closer to a routing problem. You’ve given the search engine two plausible answers to the same question and it has to pick, and its pick can change from week to week as it re-evaluates.

How it shows up in Search Console

The clearest signal is in the Search Console Performance report, filtered by a single query. Look at the pages tab under that filter. If you see two URLs both pulling meaningful impressions for the same query, and their position numbers are both mediocre (say both hovering in the teens or twenties instead of one being in the top five), that’s the pattern.

Another tell: position for a query jumps around a lot week to week, and when you check which URL was credited each time, it’s not the same URL. Google swapped which page it decided to show. A single strong page ranking for a query usually holds a fairly stable position with normal week-to-week noise. Alternating between two different URLs for the same query is a different kind of instability.

A third tell, more subtle: impressions are decent but average position is worse than the content quality would suggest. You read the page, it’s solid, it directly answers the query, and yet it’s stuck. Check if a second page on your own site targets the same phrase before you start rewriting the good one.

Where it comes from on a real site

On the sites I run, it shows up in a few recurring ways:

Old and new content targeting the same phrase. You write an article in year one. Two years later you write a better, more current article on the same topic because the first one felt thin, but you never merged or redirected the old one. Now both exist, both are indexed, both mention the keyword in the title.

Category or tag pages competing with an article. A WordPress or CMS setup will often auto-generate a tag archive page, and if that tag matches your target keyword closely, the archive page and your dedicated article can both surface for the same search.

Programmatic or templated pages. If you generate a batch of location or comparison pages from a template, it’s easy for two of them to end up worded closely enough that they answer the same underlying question, even though the URLs and headers look different.

Near-duplicate intent, not near-duplicate keyword. This one gets missed a lot. Two pages don’t need identical titles to cannibalize each other. “keyword cannibalization” and “duplicate content SEO” can end up ranking for the exact same query if both pages actually answer the same underlying question, even with different words in the H1.

What doesn’t fix it

Noindexing everything that isn’t the “main” page usually isn’t the right first move, especially if the secondary page has its own backlinks or its own slice of relevant traffic on a slightly different intent. You’d be throwing away equity to solve a routing problem that redirects or consolidation can fix without loss.

Stuffing more instances of the keyword into the page you want to win doesn’t address the actual issue. The problem isn’t that the page under-signals relevance. The problem is that two pages both signal relevance for the same thing, and the engine has to choose. More keyword density on one page doesn’t stop the second page from existing and confusing the picture.

Renaming the URL of the weaker page and hoping that separates them doesn’t work either if the on-page content still targets the same query. The URL slug is a small signal. The title, headers, and body copy are what actually establish what a page is about.

The actual fix, step by step

First, confirm it’s really cannibalization and not just genuine topical overlap that should exist. Two pages can legitimately both mention a keyword without competing for the same search intent. Check the actual query-level data before you touch anything.

Once you’ve confirmed two pages are chasing the same query with the same intent, you generally have three options, and which one fits depends on the pages themselves.

Consolidate. If one page is clearly stronger, or the two together would make one genuinely better page, merge the useful content from the weaker page into the stronger one, then 301 redirect the weaker URL to the stronger one. This is the option I reach for most often, because most cannibalization I’ve dealt with is really just two versions of the same article that should have been one.

Differentiate. If both pages serve a real, distinct sub-intent, make that difference obvious in the title, the H1, and the opening paragraph, not just buried in the body. “Keyword cannibalization” as a concept page and “how to fix keyword cannibalization in Search Console” as a tactical walkthrough can coexist, but only if each page commits to its own angle instead of both trying to cover everything.

Canonicalize. If you have near-duplicate pages for structural reasons, like a paginated series or a filtered version of the same catalog page, and one is clearly the version you want indexed, a canonical tag pointing to that one from the near duplicates tells the engine which version to treat as the source. This is different from consolidation because you’re not merging content, you’re picking which URL should be the indexed representative of a group.

After you make the change, go back to internal linking. Whichever page you decided is the primary target for the keyword should get the internal links using that keyword phrase as anchor text. The secondary page, if it survives, should get links using different anchor text tied to its own angle. Internal links are one of the few signals you control directly and completely, so use them deliberately here instead of leaving them as an afterthought.

What to expect and what not to expect

Fixing cannibalization doesn’t guarantee the surviving page jumps to a specific position or that it happens on any particular timeline. What it does is remove a self-inflicted source of confusion, so the page that’s actually answering the query well has a cleaner shot at being evaluated on its own merits instead of splitting signal with a page you built yourself. Sometimes that’s a meaningful change. Sometimes the underlying content just isn’t strong enough yet and cannibalization was a secondary issue, not the main one. Check both.

If you want more breakdowns like this on the practical side of SEO, The SEO Desk covers keyword research, technical fixes, and link building the same way: grounded in how the mechanics actually work, not in guesses about what an algorithm is thinking.

for SEOs
Tracking rankings or scraping SERPs at scale?

Rank checkers and SERP crawlers get blocked and geo-skewed fast on datacenter IPs. Singapore Mobile Proxy runs real 4G/5G mobile IPs that search engines still trust, so your position data stays clean.

see plans →
read on
More from The SEO Desk

Technical SEO, link building, content and SERP strategy, and tool reviews for people who ship growth.

browse all articles →