# Keyword cannibalization: two pages, one search, and how to fix it

Two of your pages show for the same query and take turns. Your average position looks worse than it should, and CTR drifts. Here is how to spot it in Search Console, choose the winner, fold the loser, and when to keep two pages because the intents differ.

Updated 2026-09-13 · Source: https://porteur.ai/guides/keyword-cannibalization

## What keyword cannibalization looks like in Search Console

You search for one query in the Performance report and see two URLs alternate at the top. The winner flips day to day or week to week. Total impressions look fine, but clicks underperform.

1. **Open the query view** In Search Console, Performance, set Search type to Web. Set Date to Last 28 days. Click the Queries tab. Find the query, for example "keyword cannibalization".
2. **Filter to one query** Click the query to open its detail. This filters the whole report to that query only.
3. **Compare URLs** Switch to the Pages tab. Tick two URLs to compare. For example, /blog/keyword-cannibalization and /guides/keyword-cannibalization.
4. **Check impressions, clicks, position, CTR** Look for crossovers. If the lines for position cross often, or both pages get impressions on the same days with low CTR, you have cannibalization.

> Search Console counts an impression when a link to your page appears on a results page a user loaded. Position is the highest link to your site on that page. Average position is the mean over impressions, so a page can average 8 while appearing at 3 and at 40.

You may not see every query. The query dimension omits rare and anonymised queries, so its totals are lower than the site or page totals. That is normal as of 2026.

## Why two pages for one query can cost rank and clicks

Google tries to show one best page per site for a query. Two similar pages dilute signals. Links, internal links, and behavioural signals split between them. The wrong page can win on some days.

- Lower average position: the mean of good and bad days drags down.
- Lower CTR: the weaker snippet can show more often, cutting clicks.
- Crawl and index waste: Google keeps re-evaluating near-duplicates.
- Confused internal links: mixed anchors tell Google both pages are about the same thing.

If you fix it, one URL concentrates relevance. It tends to stabilise. Your chart for that query shows one line rising, the other fading to zero impressions. CTR normalises because the better page wins more often.

## Choose the winner and the role of each page

You need one canonical page to own the head query. Any other page should support it or target a different intent. Decide before you edit anything.

1. **Check performance by URL** On the query view, Pages tab, compare the two URLs over the last 28 and the previous 28 days. Which gets more clicks or holds a better position when it shows?
2. **Read the pages side by side** Is the coverage overlapping? If both answer the same intent, pick the stronger or more suitable template. For example, prefer /guides/keyword-cannibalization over /blog/what-is-keyword-cannibalization if the guide is structured to convert.
3. **Audit links and assets** Which page has stronger backlinks, better internal links, and better on-page assets? Keep the one with durable advantages.
4. **Assign roles** Winner: the canonical that targets the head query. Loser: merge into the winner, or retarget to a distinct intent. Update anchors on the rest of the site to point to the winner.

> If user intents differ clearly, keep both. For example, "keyword cannibalization", informational, vs "keyword cannibalization tool", transactional. More on this below.

## Merge overlapping pages and redirect the loser

If both pages serve the same intent, merge content into the winner and 301 redirect the loser. This is the cleanest fix for small sites. It removes ambiguity and preserves equity.

1. **Draft the merged page** Open the winner, pull across the best sections and examples from the loser. Trim repetition. Keep the H1, title, and URL of the winner if they already match the query. For example, keep /guides/keyword-cannibalization.
2. **Update on-page SEO** Check the title is under about 60 characters, the meta description reads naturally, and headings map to subtopics the query needs. Fix thin or vague sections.
3. **Replace internal links** Search your site for links to the loser and retarget them to the winner. Use consistent, specific anchors, for example "keyword cannibalization guide" rather than "click here".
4. **Set a 301 redirect** Redirect the loser URL to the winner. Test it. Ensure it is a direct 301, not a chain. Update sitemaps if the loser was listed.
5. **Remove duplication signals** Remove the loser from navigation, related posts, and XML sitemaps. If you must keep the loser live briefly, add a rel=canonical to the winner until you can redirect.

> In the Page indexing report, "Alternate page with proper canonical tag" means Google found a canonical pointing to a different URL and agreed, so the alternate is left out of the index on purpose. It is only a problem when the canonical is wrong.

A fixed page looks like this: /guides/keyword-cannibalization holds all the depth. /blog/what-is-keyword-cannibalization 301s cleanly. All internal links point to the guide. The Pages tab now shows one URL for the query.

## Use canonicals and internal links when you cannot redirect

Sometimes you cannot delete the loser. You need a version for print, UTM testing, or a regional path. Use a canonical and align your internal links to mark one page as the source.

- Add a rel=canonical on the loser that points to the winner’s absolute URL.
- Add a self-referencing canonical on the winner.
- Ensure the loser is not linked from navigation.
- Point most internal links, including breadcrumbs, to the winner.
- Keep content on the loser minimal or blocked where appropriate, for example noindex on staging clones.

Canonicals are a hint, not a directive. If the loser is more linked, Google can pick it anyway. That is why redirects and internal links matter more on small sites as of 2026.

## When two pages are legitimate because intents differ

Not all overlap is bad. You can rank two pages when they solve different tasks behind the same words. The queries look the same, but intents differ in structure, format, and CTA.

- Head vs long-tail: "/guides/keyword-cannibalization" vs "/tools/keyword-cannibalization-checker". One teaches, one lets someone act.
- Journey split: "/blog/what-is-keyword-cannibalization" for definitions vs "/guides/how-to-fix-keyword-cannibalization" for the fix.
- Product vs education: "/pricing" for "keyword cannibalization tool pricing" vs "/guides/keyword-cannibalization" for the head term.

1. **Check the results page** Search the head term. If the top results mix definitions, checkers, and product pages, there is room for multiple intents. If all top results are guides, fold your duplicates.
2. **Differentiate on page** Make the intent obvious in the title and H1. Change structure, not just wording. For example, a checker has a form above the fold and short help. A guide has steps and FAQs.
3. **De-duplicate anchors** Use clear anchors for each. Link to the guide with "learn keyword cannibalization" and to the tool with "check cannibalization". Avoid reusing the same anchor for both.

> Do not create a second page for the same intent just to capture a synonym. Expand the primary page instead, and use the synonym in headings and anchors.

## Prevent cannibalization with a simple map

Small sites get into trouble by publishing fast without a map. Keep a one-page sheet that assigns a primary query and role to each URL. Update it before you ship new pages.

- One URL, one primary query and intent.
- A home for each subtopic as a section, not a new URL, unless intent differs.
- A rule for titles: keep the head term on the canonical page. Variants belong in headings.
- Anchors: standard text for internal links to each canonical page.
- Redirect policy: when you retire a page, point it to the closest canonical.

Before you publish "/blog/keyword-cannibalization-examples", check if "/guides/keyword-cannibalization" already covers examples. If yes, add a section there and link to it from the blog index instead of shipping a new URL.

## Measure the fix in Search Console

After a redirect or canonical change, give it a few crawls. On a small site this can be days to a couple of weeks. Watch the query view, not just sitewide charts.

1. **Query view, last 28 vs previous 28** On the query, compare the last 28 days against the 28 before. You want to see the winner’s impressions and clicks rise, and the loser’s fade to near zero.
2. **Pages tab shows one URL** For that query, the Pages tab should list only the winner after the change. If both still show, recheck internal links and redirects.
3. **CTR stabilises** A stable, relevant snippet tends to lift CTR. If CTR stays low, fix title and meta description to match the query and intent.
4. **Indexing states** Check the Page indexing report for the loser. If it shows as "Alternate page with proper canonical tag" or is excluded after a 301, the signal is clean.

> CTR is clicks divided by impressions. If impressions spike while clicks are flat, your snippet may be wrong for the intent, or a non-canonical page is still showing.

## Worked example: one query, two URLs, one winner

Your site shows two pages for "keyword cannibalization": /blog/what-is-keyword-cannibalization and /guides/keyword-cannibalization. Performance, query filter set, Pages tab shows both. The blog post averages position 12, the guide averages 9, but the lines cross often. CTR is low on both.

1. **Pick the guide as the winner** It converts better and already ranks higher on good days.
2. **Merge content** Move the strongest examples and the FAQ from the blog into the guide. Keep the guide’s URL and H1. Tighten the intro and add a step-by-step fix.
3. **Redirect the blog post** 301 /blog/what-is-keyword-cannibalization to /guides/keyword-cannibalization. Replace internal links across /blog/, /guides/, and /pricing/.
4. **Watch the query chart** Over the next 28 days, the guide holds position 6 to 8 steadily. The blog drops to zero impressions. CTR improves because the same good snippet shows more often.

If you later build a small tool, ship it to /tools/keyword-cannibalization-checker with a distinct intent and anchors like "check cannibalization". The guide keeps the head term. The tool ranks for action verbs and long-tail variants.

## Common traps to avoid

- Splitting guides into part 1 and part 2 on the same head term.
- Publishing a glossary term and a blog post that both target the head term with near-identical intros.
- Creating location pages for cities when the offer is identical and the intent is not local.
- Letting UTM or filtered URLs get indexed. Always canonicalise to the clean URL.
- Relying only on rel=canonical while internal links still point to the loser.

## Questions

### What is an example of cannibalization?

You have /guides/keyword-cannibalization and /blog/what-is-keyword-cannibalization. Both target the same informational intent and both show for “keyword cannibalization”. They alternate in Search Console, dilute links, and depress CTR. Merge them, keep one URL, and redirect the other.

### How do I fix keyword cannibalization fast?

Pick the best URL for the query. Move unique value from the weaker page into it. Replace internal links to point to the winner. 301 redirect the loser. If you cannot redirect, add a rel=canonical to the winner and reduce links to the loser, but redirects are stronger as of 2026.

### How do I check for keyword cannibalization in Search Console?

Performance report, filter to one query, then switch to the Pages tab. If two URLs for that query get impressions and their position lines cross or alternate, that is cannibalization. Compare the last 28 days with the 28 before to confirm the pattern.

### Is keyword cannibalization always bad?

No. If the intents differ clearly, keep both pages. For example, a guide vs a tool. Make the difference obvious in title, H1, structure, and CTA. Use distinct internal link anchors. If intents match, merge and redirect.

### Should I use canonical tags or redirects to fix it?

Use a 301 redirect when two pages target the same intent. It consolidates signals cleanly. Use rel=canonical only when you must keep both URLs live, such as print versions or parameters. Back it with internal links to the canonical page.

### How long until changes show in Search Console?

Allow a few crawls. On a small site this is often days to a couple of weeks. Watch the query view for one URL gaining impressions while the other falls to zero. Check the Page indexing report for the loser to confirm exclusion or proper canonical.

## Read next

- [The Search Console performance report, column by column](https://porteur.ai/guides/search-console-performance-report): Every column in the Google Search Console performance report explained with the traps that trip small sites, and how to act on each.
- [What an impression means in Search Console, and what it does not](https://porteur.ai/guides/what-is-an-impression-in-search-console): An impression is a counted view of your link on a Google results page. Here is what it includes, what it omits, and what to do with it.
- [Canonical tags: what they do and the mistakes that cost rankings](https://porteur.ai/guides/canonical-tag): What a canonical tag does, when to use one, the mistakes that cost rankings, and how to check and fix canonicals on a small site.
- [Alternate page with proper canonical tag: what Search Console means](https://porteur.ai/guides/alternate-page-with-proper-canonical-tag): What this Search Console status means, when to ignore it, when it hides the wrong page, and the exact checks and fixes to set the right canonical.
- [Search intent: what the results page tells you to build](https://porteur.ai/guides/search-intent): Learn the four intents, read intent from the results page, and fix pages that will never rank by changing their kind, not just the words.
- [Striking distance](https://porteur.ai/glossary/striking-distance): Striking distance keywords are queries where you rank 11 to 20. Here is why they are your cheapest wins, how to find them, and what to change next.
- [Duplicate content](https://porteur.ai/glossary/duplicate-content): Learn what duplicate content is, how Google handles it, how to find it on a small site, and the exact controls to fix and prevent it.
- [Google is not indexing your site: find the reason in Search Console](https://porteur.ai/guides/google-is-not-indexing-my-site): Use the Page indexing report to find the cause. Check for sitewide blockers, then quality reasons. Request a recrawl only after you fix them.

Want to see where two of your pages fight for one query, and which should win next, from a single URL in about thirty seconds, free? Try the check from Porteur. Free check: https://porteur.ai/
