Keyword cannibalization

Keyword cannibalization means several pages of your own site show for one search and hold each other back. The wrong page ranks, or Google swaps between them and none of them settles near the top. More than one of your pages on a query is not, by itself, a problem. Check in Search Console which pages showed and whether they serve the same question. Only then act: merge them with a 301 redirect, or give each page a job of its own.

What is keyword cannibalization?

Your site competes with itself. A service page targets a term, a blog post covers the same term a year later, and a category page puts it in its title too. For that query Google now has several candidates from one site.

Some writers split off "content cannibalization": pages on the same topic in different words. Search Console can't tell the two apart. You see one query with several of your URLs, and you check and fix it the same way.

Is it bad when two of my pages rank for the same keyword?

Usually not. In September 2025 John Mueller of Google wrote that three of your pages in one results page don't look like a problem to him "just because it's 'more than 1'". Nor does showing up on the same results page make two pages duplicates, he added. Results at positions 3 and 4 also cover more of the screen than one result does.

Google's site diversity system usually keeps a site to two listings in the top results, and allows more only when they are especially relevant. Any page that ranks for hundreds of queries overlaps on a few of them with other pages on your site.

It costs you in three cases:

  1. The wrong page wins. Your blog post gets the buying query, while the product or service page that should take the visit is stuck on page three.
  2. The pages take turns. One URL ranks for a few weeks, then the other, and neither holds the spot that a single page could.
  3. Two weak pages fill one slot. Two half-finished articles answer the same question with a few links each, and both stay stuck on page two.

Intent decides it. A guide that explains a task and a tool that does it answer different questions, so both can rank, each for its own visitor. When two pages give the same visitor the same answer, one of them is surplus.

How do I find keyword cannibalization in Search Console?

For every query, the Performance report in Google Search Console lists the pages of yours that appeared in the results.

Search Console's Pages tab for one query: the homepage, the About page, the service page and four more show for it, none with a click
  1. Open Performance > Search results, switch on Average position, and set the date range to the last three months. That is long enough to catch pages taking turns and recent enough to describe the site today.
  2. Open the Queries tab and sort by impressions. Begin with queries that earn you money or leads, such as the service, the product or the category. Skip your brand name, because your homepage, About page and contact page are meant to show together for it. The branded queries filter drops them for you once the site has enough impressions to get the filter.
  3. Click one query. Search Console filters the whole report on it. The Pages tab now shows each URL that appeared for it, with its clicks, impressions and position.
  4. Read the rows. A clear winner takes nearly all the clicks and impressions and leaves a handful to a few other URLs. A candidate looks different: two pages with about the same impressions, or the page you want ranking far below another.
  5. Check whether they take turns. Keep the query filter on, add a page filter, choose Compare and enter both URLs. The chart draws a line per page; when one climbs each time the other falls, Google is swapping them.
  6. Group the variants of a term. A Custom (regex) query filter like running shoes|running shoe|trail running shoes puts them in one view, so you see which pages show across the whole group.
Search Console comparing two pages for one query: from September 10 the About page drops to almost zero while the homepage keeps showing; in October they swap

By hand you get one query at a time, in a table that stops at 1,000 rows. To list every query where two or more of your pages appeared, you need queries and pages in the same table. The Search Console API gives you that, up to 25,000 rows per request.

A site: search for the keyword shows indexed pages that contain the words. The site: operator is fine for finding pages to review, but it says nothing about which pages compete for the query.

Which rows can you ignore?

Language and country versions. Translations of a guide turn up as their own URLs for the English query, often with impressions from the countries they were written for. To Google they are different pages: localized versions are duplicates only if the main content stays untranslated. Set a country filter first, then count.

Jump links. /guide#step-2 and other URLs with a # and a name are one page, reached through a link to a section of it. Count them as that page.

Small numbers. A dozen impressions in three months means the URL turned up now and then for a rare variant. The main page loses nothing to it.

Totals that don't add up. The Pages tab counts an impression per page, while the query total counts one impression for the site when two of your results share a search. The rows can add up to more than the total. Position is averaged as well, from the topmost spot a page held in each search: an average of 14 can be 8 one week and 20 the next. A query filter also drops anonymized queries, which makes filtered totals lower.

What does it look like on a real site?

Here is the check on a consultancy site of ours, on Search Console data from July 12 to October 10, 2026. On that site 240 queries had two or more URLs and at least 50 impressions between them. Most were the kind you can ignore.

One worth fixing: the name of the service plus "consultant". It brought 36 URLs, 1,447 impressions and no clicks.

PageImpressionsAverage position
Homepage33913.9
About page2937.3
Service page, written for this query28647.3
Page for agencies12784.4
Every other URLfewer than 130 each

The page built for the query sits on page five, below two general pages. The About page coming out on top suggests Google prefers a page about the person over a page about the service when someone searches "consultant". The fix to try works on the service page, not on the pages that beat it. Add what the About page has (who does the work and why you can trust them). Then link to the service page from both, with the words people search.

The same site has the opposite case too. For the topic plus "wordpress", the plugin page got 1,857 impressions at position 7.7, against 248 at 35.1 for a WordPress guide. One page clearly wins, and the two answer different questions. That one needs no fix.

How do you fix keyword cannibalization?

Decision chart: same question, merge and 301 redirect, or a canonical for a near-copy that has to stay; different questions, keep both and link to the winner

Which page should win?

Start from what the query asks for: a service, a product or an explanation. Then let the data pick: which page gets the clicks and the conversions, which one has links from other sites, which one already ranks best. Most of the time that is the page already highest. Sometimes it is the page that sells, and the work is getting it up. Before you change the other page, filter the report on its URL and open the Queries tab. If it brings visits from other searches, it has a job of its own.

Merge and redirect when two pages answer the same question

Move whatever is useful from the weaker page into the stronger one. Then send the weaker URL there with a permanent (301) redirect. Google treats a redirect as a strong signal that the target should become canonical. Links pointing at the old URL now land on the page you keep. That is how a part 1, a part 2 and a later article on the same subject become one complete piece.

Use a canonical tag only for near-copies that have to stay

An ad landing page and a filtered category view are near-copies with a reason to exist. A canonical is a hint, not a rule, meant for duplicate pages. Between two articles with different text it is the wrong tool. Our canonical tag article shows where it does work.

Give each page its own question when both should exist

Split the term: the category page takes the broad version, the product pages the specific models. Then rewrite the weaker page, headings and body, so it answers its own question. Many people start by changing that page's title so it looks less optimized. Leave the title alone.

Point internal links at the winner

Links from your own pages, with the searched words as anchor text, tell Google which page you treat as the main one for a term. Go through the menu, the homepage and every article that mentions the term.

Noindex and deleting are last resorts

Noindex suits pages with no reason to be in search, like thin tag archives. For picking between two of your own pages Google advises against it: noindex completely blocks the page from Search. Delete a page only when it has no traffic, no links and no business reason to exist. A deleted page returns a 404 and its links point nowhere, so a redirect to the winner almost always does better.

After the change

Point the internal links that still use the old URL at the new one. Drop the old URL from your XML sitemap (Google reads the sitemap as a weak canonical signal). Give Google a few weeks to recrawl. Then open the query's Pages tab again and compare equal periods before and after.

Check every client site

MarketingTracer has this check built in. In its Search Console keyword report, a click on a keyword shows every page that appeared for it. You also get the keyword's trend. Through the SEO MCP, your AI assistant lists the queries where two or more pages showed, per client site. It gives each page's clicks, impressions and position. Choosing the winner is still up to you.

MarketingTracer's keyword view: every page that appeared for one query, with impressions per page and the keyword's trend

FAQ

Does Google penalize keyword cannibalization?

No. Even duplicate content on your site is not a spam policy violation and won't lead to a manual action.

Do country and language versions count as cannibalization?

No, when hreflang links them. An English page for the US and one for Canada, both on the same term, are meant for different searchers. Mark them with hreflang so Google sends each searcher to the right version for their language and region. Hreflang needs the pages to point at each other; when one of them doesn't, Google ignores the annotations.

Can a blog post cannibalize my product page?

Only when Google shows the post for a buying query. Then make the product page answer a buyer's questions, and link to it from the post.

Can I see which pages Google considered for a query but didn't show?

No. Search Console only reports pages that appeared in the results; in Mueller's words, "it's not a theoretical measurement". A page that never showed competes with nothing. Searching by hand shows one results page at one moment, so two of your pages turn up together some days and not others.

How do you prevent keyword cannibalization?

Give each important query one page, and write it down in a keyword map: one row per page with the main query it answers. Before anyone writes a new page, look the query up in Search Console. When a page already shows for it, improve that page instead. With several writers on one site, this one check prevents most of the merging later.

Free 14-day trial

MarketingTracer smart A.I. tool shows you what you need to rank. Then we'll help you get it done.

Start your 14-day trial >>
  • No credit card required
  • No installation needed
  • No strings attached