Skip to content
Can Elmas

SEO · 8 min read

Keyword Cannibalization: How to Find It and Fix It

TL;DR

Keyword cannibalization is when two or more of your pages target the same intent and Google keeps switching between them, so neither ranks as well as one would. Confirm it in Search Console by checking which URLs earn impressions for a query over time. Then merge, re-target, de-optimize or canonicalize, and point internal links at one primary page.

· Published · Updated

Keyword cannibalization happens when two or more pages on your site target the same search intent and Google can’t settle on which one to rank. The fix is to choose one primary URL per intent, then merge, re-target, de-optimize or canonicalize the others and back the winner with internal links. Confirm it first, though: plenty of multi-URL rankings are harmless.

What cannibalization is, and what it isn’t

Real cannibalization has three ingredients:

  1. Same intent. Both pages answer the same question for the same searcher. Sharing a word isn’t enough.
  2. Swapping. The URL Google shows for the query changes from week to week, and the position moves with it.
  3. A weaker result than one page would earn. Backlinks, internal anchors and content depth are split across two URLs, so neither reaches the position a single strong page could hold.

What it isn’t:

  • Two of your URLs showing together for one query. Google chose to show both, and you own more of the page.
  • Pages sharing a keyword but not an intent. “Email marketing software” (a product page) and “email marketing examples” (a post) overlap in words, not in what the searcher wants.
  • A trickle of impressions for a loosely related query. Almost every page picks those up for long-tail variants.
  • Technical duplicates from parameters, trailing slashes or http/https versions. That’s a canonicalization problem for technical SEO, not a content decision.

Finding it in Search Console

The Performance report has everything you need, though the interface makes you work one query at a time.

  1. Build a candidate list. Open Performance > Search results, set the last three months and export the queries. Keep the ones with commercial value or meaningful impressions. Nobody needs to fix cannibalization on a query with a handful of impressions.
  2. Check which pages rank for each query. Click a query to filter the report to it, then open the Pages tab. More than one URL with real impressions makes it a candidate.
  3. Look for swapping. Keep the query filter, add a page filter for each URL in turn and switch on Average position in the chart. Or use the date comparison to put this month next to last month. If URL A earned the impressions last month and URL B earns them now, with position dropping at each handover, that’s the pattern.
  4. Scale it past the interface. On a site with hundreds of pages, pull query and page together through the Search Console API, the Looker Studio connector’s URL impression table, or the bulk data export to BigQuery. Then filter for queries where two or more URLs each carry a real share of impressions. I start with a threshold of around 10 to 20% per URL and adjust from there; it’s a working filter, not a rule.

A quick site:yourdomain.com keyword search shows which pages Google associates with a term, but it doesn’t reflect real rankings. Use it to spot candidates, never to confirm them.

When two ranking pages are fine

Before changing anything, ask one question: if one of the two pages disappeared tomorrow, would someone searching this query lose anything? If not, you have cannibalization. If yes, you probably have two pages doing different jobs.

What you seeVerdict
Two URLs, both stable on page oneFine. Leave them alone
Primary URL stable, second URL appears deep in results with few impressionsNoise. Ignore it
Branded query showing homepage, pricing and product pagesNormal for branded terms
Ranking URL alternates week to week, position drifts downCannibalization
Wrong page type ranks, such as a post for a commercial queryCannibalization of intent. Fix it
Two near-identical pages, neither in the top 10Cannibalization. Usually a merge

Mixed-intent queries deserve care. If the results page shows service pages and how-to guides side by side, Google hasn’t decided what the searcher wants, and ranking with one page of each type can be the best outcome available.

Fix options: merge, re-target, de-optimize or canonicalize

Start by choosing the primary URL. Intent comes first: a commercial query belongs to a commercial page, even if a blog post currently ranks higher. Among pages that match the intent, prefer the one with more referring domains, the better conversion rate and the stronger history in Search Console.

SituationFixKey step
Same topic and intent, secondary adds littleMergeMove unique content, then 301 to the primary
Secondary has value and an open adjacent keywordRe-targetNew title, H1 and angle for a different query
Secondary must stay indexed for another reasonDe-optimizeRemove the term from title, H1 and anchors
Near-duplicate needed for users or campaignsCanonicalize or noindexCanonical tag pointing to the primary

Merge

This is the most common fix and usually the strongest. Move anything useful from the secondary page into the primary: a better example, a section the primary lacks, a table. Then 301 the secondary to the primary, update internal links so they point straight to the final URL instead of through the redirect, and remove the old URL from your XML sitemap. Don’t redirect to a loosely related page just to keep link equity somewhere; redirect to the page that actually answers the same query.

Re-target

When the secondary page is worth keeping, give it its own job. Pick an adjacent query nobody on the site owns yet, then rewrite the title tag, H1, intro and section headings around it. Say two posts both chase “SaaS onboarding.” One becomes the onboarding email sequence post, the other the onboarding checklist. Each now has a distinct intent, and both can rank.

De-optimize

Some pages have to stay for other reasons. A post might attract links, or a feature page might support sales. If one of them pulls a commercial term away from the page that should own it, remove the term from the title tag and H1, cut exact-match repetitions in the body and change any internal anchors that use it. Then add a contextual link to the primary page using that term. Keep the URL as it is; changing it creates a redirect you don’t need.

Canonicalize or noindex

Use a canonical when near-duplicates must stay live for users: product variants, the same article published under two sections, or a campaign page cloned from an organic one. Add rel="canonical" on the duplicate pointing to the primary. Google treats it as a hint and can ignore it when the pages differ substantially, so it only works on genuine near-duplicates. For paid landing pages that should never rank, noindex is cleaner. Don’t combine noindex with a canonical to another URL on the same page; the signals conflict.

Two mistakes I see in cleanup projects: deleting the secondary page and letting it 404 when it has backlinks, and changing a dozen pages in one week so nobody can tell which fix worked. Work in small batches and log what changed and when.

Internal links are the cheapest signal you control, and inconsistent ones often keep cannibalization going. If half your posts link to one page with the keyword as anchor text and half link to another, you’ve told Google two pages own that term.

  1. Crawl the site with Screaming Frog or a similar crawler and export all internal links with their anchor text.
  2. Filter anchors containing the target keyword or its close variants.
  3. Repoint every matching link to the primary URL. Links that still point to the secondary page should use anchors that describe its new focus.
  4. Link from the secondary to the primary near the top of the body, with a descriptive anchor.
  5. Raise the primary’s prominence through navigation, hub pages or breadcrumbs if it’s a key commercial page.

Internal links rarely fix true duplicates on their own. They’re the follow-through after a re-target or de-optimize, and they keep a merge from drifting back. The wider system for planning links between related pages is in internal linking strategy.

Preventing it with a keyword-to-URL map

Most cannibalization comes from the content calendar: someone briefs a new post for a term an older page already owns. A keyword-to-URL map stops that. It’s a spreadsheet with one row per intent, and every keyword on the site has exactly one owner.

Here’s what a few rows might look like for a hypothetical SaaS company:

Primary keywordVariants on the same rowIntentOwner URLAnchor to use
customer onboarding softwareonboarding platform, onboarding toolCommercial/product/onboarding/customer onboarding software
customer onboarding checklistonboarding checklist templateInformational/resources/onboarding-checklist/onboarding checklist
onboarding email sequencewelcome email seriesInformational/resources/onboarding-emails/onboarding email sequence

The rules that keep it working:

  • Check the map before approving any brief. If the keyword or a close variant has an owner, update that page instead of publishing a new one.
  • One intent, one owner URL. Variants with the same intent go on the same row, not new rows.
  • Record the anchor text other pages should use when linking to each owner.
  • Update the map the day you merge, redirect or re-target a page.
  • Once a month, re-run the query-and-page check on your top queries and review any query that picked up a second URL.

The map is only as good as the research behind it. If you’re building one from scratch, keyword research for B2B SaaS covers how to group terms by intent before you assign owners. In my SEO engagements, the map sits next to the content calendar, and no brief gets written without an owner URL on it.

Get it built

If rankings keep swapping between your pages, or your blog is outranking the pages that should convert, I’ll find the conflicts, fix them and set up the map that keeps them fixed. Start with a Growth Audit, $1,500 fixed and credited if we continue. See pricing or get in touch.

FAQ

Frequently Asked Questions

Does keyword cannibalization cause a Google penalty?

No. It isn't a penalty or a manual action; it's a relevance problem where your own pages split links, anchors and content depth. The cost is weaker and less stable rankings for the affected queries, not a sitewide demotion.

How many pages ranking for the same keyword is too many?

There's no fixed number. Two URLs are a problem when they serve the same intent and the ranking URL keeps swapping between them. Two URLs serving different intents, or both holding stable page-one positions, are usually fine.

Should I use a canonical tag or a 301 redirect to fix cannibalization?

Use a 301 when the weaker page has no reason to exist on its own, because it consolidates signals and removes the competitor. Use a canonical when both pages must stay live for users, and remember Google treats a canonical as a hint, not a command.

Can a blog post cannibalize a service or product page?

Yes, and it's one of the most common cases. If a post ranks for a commercial term the service page should own, shift the post toward an informational angle and link from it to the service page with a descriptive anchor.

How long before a cannibalization fix shows results?

It depends on how often Google recrawls the pages involved, so expect weeks rather than days. Request indexing for the primary URL after the change, then compare the query's data over equal periods before and after.

Work with me

Let’s find your biggest growth lever

Tell me about your growth challenge. I’ll tell you honestly if I can help — and if I can’t, who can.

  • ✓ No obligation
  • ✓ No sales script
  • ✓ Honest feedback
  • ✓ Clear next steps