Discuss project

Keyword Cannibalization: How to Find and Fix It

Keyword cannibalization is when several pages compete for one query. How to spot it in Search Console, tell it apart from a false alarm, and what to do next.

Vladislav KrivorutskoAugust 10, 20269 min read
Contents

TL;DR - key points

  • Cannibalization means Google keeps choosing between two of your pages for the same query — and keeps changing its mind
  • Overlapping words in titles are not a diagnosis: the call is made from Search Console data, not from comparing headlines
  • The main symptom is different URLs alternating under one query while average position swings between periods
  • The fix is not deleting at random: pick a winner first, then merge, rewrite for a separate intent, or 301 the rest
  • Most cannibalization is created by the CMS — tags, pagination, filters and language versions — not by whoever wrote the text

The short answer

Keyword cannibalization is when several pages on your site claim the same query and Google decides afresh each time which one to show. The result: instead of one page in the top five you get two pages somewhere between eighth and fifteenth, each carrying half the signals.

The diagnosis comes from data, not from similar-looking headlines. If different URLs alternate under one query in Search Console and the average position swings month to month, you have cannibalization. If one URL holds the query steadily while another shows up with a handful of impressions, that is normal and there is nothing to fix.


Why it actually hurts

The mechanics are simple: everything that makes a page strong gets split between the competitors.

External links split. One person linked to the article, another to the service page. Instead of one URL with ten links you have two with five.

Internal links and anchors split. This is the most common self-inflicted cause: the same anchor phrase points sometimes to one page and sometimes to the other. How to untangle that is covered in my piece on internal linking, which lists this exact failure mode.

User signals split. Clicks and returns to the results page scatter across two URLs, and neither builds a track record for the query.

Google wastes crawl effort. Two pages under one intent means two pages to crawl, render and re-evaluate. On a small site that is irrelevant; across tens of thousands of URLs it becomes a visible share of crawl budget.

There is also an underrated side effect: instability. Even if total traffic holds, you cannot report on positions honestly — they move not because anything changed, but because Google keeps switching between your own pages.


Cannibalization or false alarm?

Two pages about the same topic are not automatically a problem. The difference is intent.

SituationCannibalization?What to do
"What is X" in the blog and "X service" under servicesNo, if the texts do not overlapSeparate the wording, link from the article to the service
Two blog posts answering the same questionYesMerge into one, 301 the other
Category page and a filtered view of the same categoryYesCanonical to the category or keep the filter out of the index
Estonian and English versions of one pageNoCheck hreflang
Service page and a "service + city" pageDependsIf the cities differ only in the heading, they are duplicates
An article and its print versionYesCanonical to the main version

The check I run before changing anything: if both pages belonged to a competitor, which one would I open for this query? If the answer is "either, no difference", merge them. If it is "depends on what I need", the intents differ and the right move is sharper separation, not a merge.


Finding it in Search Console

The main tool is free, and it is also the most accurate one, because it shows the actual results served for your site rather than a guess.

  1. Open the Performance report and set the window to 3–6 months. Two weeks will not accumulate enough data for alternation to show.
  2. Go to the Queries tab and pick a query — usually you start with the ones that have many impressions and few clicks.
  3. Without clearing the query filter, switch to the Pages tab. That is where the diagnosis lives: how many URLs were served for this query.
  4. Look at the split. One URL with 95% of impressions is fine. Two URLs at 40–50% each is cannibalization.
  5. Check the trend. Compare two consecutive periods: if the leading URL changed, Google still has not made up its mind.
  6. Run it in reverse: take a page, filter by it and look at its queries. If a page is collecting impressions for queries it was never written for, it is pulling in someone else's cluster.

A rough supporting trick is a site: search with the key phrase: site:yoursite.ee phrase. It shows which pages Google considers relevant to the topic at all. It is crude and no substitute for Search Console, but it gives you a candidate list in a minute.

What is not a diagnostic method: comparing headlines by eye, and plugins that look for overlapping keywords across texts. They find matching words, and matching words are not competition for a query.


Where cannibalization comes from

In my experience it is usually created by the system rather than by whoever writes the content.

CMS and templates. WordPress tags, date and author archives, category pagination, print versions. All of it is generated automatically and lands in the index unless someone says otherwise.

Filters and parameters in a shop. The "sofas" category and the same category sorted by price are, to Google, two pages with nearly identical content.

A blog that grew without a plan. Three articles written in different years answering the same question in different words. That happens when material is planned by topic rather than by keyword cluster: without clustering, a new article almost inevitably overlaps an old one.

No structure behind the keyword set. If pages are not mapped to intents up front, overlaps appear on their own. That gets solved at the level of site structure derived from keyword research, not by editing individual texts.

"Service + city" pages. Five pages differing only by the city name in the heading are a classic source of cannibalization in local markets. If nothing on the page is genuinely local beyond the substitution, Google is right to treat them as one page.


Four ways to fix it

There is no universal "delete the spare one". The choice depends on what the weaker page carries.

1. Merge. Right when both pages cover the same ground and both are weak. Take the better one as the base, move the unique passages across, 301 the other to it and rewrite internal links to the new address. Redirecting without moving the content is half the job: you keep the link equity but lose the text the page was ranking on.

2. Separate the intents. Right when the pages really are different but written vaguely. Strip commercial wording ("order", "price", "cost") from the informational article and three screens of theory from the service page. After that the article links to the service instead of competing with it.

3. Consolidate technically. For filters, pagination, parameters and utility pages: rel="canonical" to the main version, or noindex if the page has no business being in the results at all. Do not confuse the two — canonical is a hint Google sometimes ignores, noindex is an instruction.

4. Delete. The last resort, and only for pages with no traffic, no links and no purpose. Everything else is better redirected.

After any of these, check that no internal links with the old anchors survive — otherwise you will rebuild the competition yourself within a month.


What I see on my own projects

Cannibalization is almost never a site's only problem, and I have not seen a case where fixing it alone changed traffic by a multiple. It works differently: it lifts the ceiling where a page is already close to the top and cannot get through.

Three observations from practice.

First, the pairs are rarely where you expect them. The owner suspects two similar articles, while the data shows the service page competing with a tag page they did not know existed. That is why diagnosis starts with a report, not with a hypothesis.

Second, on multilingual sites in Estonia I regularly see fake cannibalization — the Estonian and Russian versions of one page with no hreflang in place. It looks like competition but is fixed by annotation, not by merging. The mistake is expensive: the visitor gets a version in a language they do not use and leaves.

Third, on limits: on a site of 30–40 pages it is easier to prevent cannibalization with structure than to hunt for it. On a catalogue of tens of thousands of URLs, going query by query is impossible and the work happens at template level — indexation rules for filters, canonicals and pagination, not individual pages. The method in this article is built for the first case.

If positions dip for a couple of weeks after a merge, that is expected: Google is re-evaluating the consolidated URL. Start worrying if nothing has recovered after a month.


Checklist: audit cannibalization in one pass

  1. Write down the 15–20 core queries for the site — from your keyword research or from the impressions report.
  2. For each one, check in Search Console how many URLs were served for it over 3–6 months.
  3. Flag the queries where two or more URLs share impressions and the position is unstable.
  4. For each pair, answer whether the pages have genuinely different intents.
  5. Pick the winner on traffic, links and intent fit — not on publication date.
  6. Apply the right fix: merge, separate, canonicalise or delete.
  7. Rewrite internal links and anchors so the key phrase points at one page only.
  8. Check the language versions — make sure Google is not treating them as duplicates.
  9. Come back to the report a month later and confirm one URL is left under the query.

If it turns out the overlaps come from templates rather than texts — filter, tag and pagination pages multiplying on their own — editing content will not close it: you need indexation rules at the engine level, which is web development. And when there are dozens of such overlaps tied to the catalogue structure, handling them one by one makes no sense — that is SEO work starting from a structure rebuild.

Frequently asked questions

What is keyword cannibalization in plain terms?
It is when two or more pages on the same site compete for the same search query and Google has to choose between them. That choice is not made once and for all: the URL in the results can alternate and the position can swing. Instead of one strong page you end up with two mediocre ones, each holding a share of the links, the user signals and the topical relevance.
Do two pages using the same words always mean cannibalization?
No, and this is the most common diagnostic mistake. Overlapping words in titles prove nothing. Cannibalization exists when Search Console shows different URLs being served for one specific query and the position is unstable. If the pages answer different intents — one explains a concept, the other sells a service — they can coexist and collect different traffic.
How do I find cannibalization in Google Search Console?
Open the Performance report, pick a query on the Queries tab, then switch to the Pages tab without clearing the query filter — you will see every URL that was shown for that query. Use a window of at least three months; over two weeks the alternation does not gather enough data. The warning sign is two or more URLs with comparable impressions plus an average position that jumps from period to period.
Should I delete the losing page or keep it?
Delete it last. The order is: if the second page carries no standalone value, 301-redirect it to the winner and move any unique passages across. If it has its own intent, rewrite it for that intent and strip the overlapping wording. If it is a technical page such as a tag or a paginated view, canonicalise it or keep it out of the index. Simply deleting a page that has traffic and links means losing both with nothing in return.
Do language versions of one page cannibalize each other?
No, provided they are separated correctly. Estonian, Russian and English versions compete for different audiences, not with each other, and hreflang is what ties them together. The problem starts when the versions are not annotated and Google treats them as duplicates of the same content — then it serves whichever one it likes, including the one your visitor cannot read.
Can a blog cause cannibalization?
Yes, and on service sites it is the classic scenario. A thorough article starts outranking the service page for a commercial query — traffic is there, enquiries are not. The fix is not deleting the article but separating intents: strip the commercial wording from the article and add a contextual link to the service page.

Conclusion

Cannibalization is rarely the reason a site fails, but it almost always costs a few positions exactly where they are missing. You do not find it by scanning headlines — you find it in the data: one query, how many URLs were shown for it over a quarter. If the answer is more than one and the position keeps swinging, Google is not sure which page of yours to show, and deciding that for it is cheaper than waiting. When the overlaps run through the whole catalogue rather than a handful of pages, it stops being a content fix and becomes a structure job — which is where I usually start an SEO engagement.

About the author

Vladislav Krivorutsko — founder of ADLAB
Vladislav Krivorutsko

Founder of ADLAB OÜ · SEO and Google Ads

Over 20 years in search traffic and monetization, and on the Estonian market since 2017. I work solo: I run the audit, build the strategy and deliver the project myself — no subcontractors, no templates. I only write about what I have tested on my own and client sites.

  • 20+ years in search traffic
  • 50+ end-to-end projects
  • Own sites in competitive niches
  • SEO for ru/et/en in one market
More about me

Read next