Free SEO tool
Keyword Cannibalization Checker
Paste a Google Search Console query-by-page export below and this finds every keyword where two or more of your own pages are competing — with a severity score and a keep-this / fix-that verdict for each one, computed entirely in your browser.
On this page
Check your keywords
In Search Console: Performance → Search results → add a "Page" dimension next to "Query" → Export → CSV or Google Sheets. Paste the raw contents (header row included) below. Comma or tab-separated both work.
Paste a header row plus at least one data row.
What keyword cannibalization is — and what it isn't
Keyword cannibalization is when two or more pages on the same site earn meaningful search impressions for the same query, and Google keeps switching which one it shows — splitting authority, clicks, and crawl attention between pages that should be consolidated into one clear target. It's a real, measurable problem: the fix is almost always mechanical (redirect, canonical, or a rewrite), not a content-quality issue on either page individually.
Most cannibalization audits over-flag, though, because "two pages, one query" isn't sufficient on its own. Four patterns get mistaken for it constantly: a brand page and a comparison page both ranking for the brand name (different intent, not competition); paginated or parameterized duplicates of the same URL (a canonicalization bug, not two competing pages); normal SERP testing where Google trials a second page for a week and reverts (a snapshot problem, not a trend); and a page picking up single-digit incidental impressions next to a page with hundreds (statistical noise, not competition). This tool's significance floor — at least 10 impressions on two distinct pages — exists specifically to filter the fourth case out before it ever reaches you.
For a multi-site or multi-client operation this matters more than it looks: cannibalization inside one client's site is invisible in a portfolio-level rank tracker (that tool watches keyword → position, not query → multiple pages), and it's easy for two writers on the same account to independently target the same phrase months apart. Nobody notices until both pages plateau around position 6-9 instead of one of them holding position 2-3.
How the severity score is calculated
The score is a transparent, three-step heuristic — not a machine learning model, and not a certified formula. It runs in this order:
| Severity | Trigger | What it means |
|---|---|---|
| LOW | Top page's clicks are 5x+ the second page's, or their positions are 20+ ranks apart | One page has already won. Cleanup, not urgent. |
| MEDIUM | Both pages are significant but neither LOW nor HIGH conditions are met | Worth a look this month — not yet an emergency. |
| HIGH | Both pages clear 10+ impressions and sit within 5 ranks of each other | Google is actively unsure which page to rank. Fix this week. |
These thresholds are deliberately conservative defaults tuned for a typical mid-traffic content or SaaS site; a very high-volume property may want a tighter position-gap cutoff, and a brand-new site with thin impression counts may want to lower the significance floor below 10 temporarily.
Worked example: a blog post sits at position 4.8 for "agency seo tool" with 14 clicks and 410 impressions, while a tools page for the same query sits at position 6.2 with 9 clicks and 360 impressions. Both clear the significance floor, and the position gap is 1.4 ranks — under the HIGH cutoff — so this is HIGH severity. The blog post wins on clicks and position, so it's kept; the tools page holds 360/410 ≈ 88% of the winner's impressions, comfortably above the 40% differentiate line, so the verdict is differentiate, not consolidate — go check whether the tools page is actually trying to rank for a bottom-funnel "which tool should I buy" intent that the blog post, being a listicle, doesn't directly answer. Compare that to a page sitting at position 41 with 2 clicks next to a page at position 2 with 100 clicks: the dominance ratio alone (50x) forces LOW severity regardless of position gap, and the verdict flips to consolidate — that second page isn't competing, it's dead weight.
Consolidate vs. differentiate: the actual decision boundary
Every cannibalization checker will tell you to "pick a winner." The part most of them skip is how to decide whether the losing page should die (consolidate) or get a new job (differentiate) — and that decision is the one that actually determines whether the fix gains traffic or just deletes a page for nothing.
- Consolidate when the losing page holds less than 40% of the winner's impressions, or severity is LOW. Redirect (301) if the page has no independent reason to exist; use a self-canonical plus an internal link if it needs to stay live for another reason (an old backlink, a specific CTA, a different nav entry point).
- Differentiate when the losing page still holds 40%+ of the winner's impressions — that's real independent demand, not noise. Read both pages side by side and find the angle the loser is accidentally half-covering (a specific plan tier, a specific competitor, a specific team size); rewrite its title, H1, and opening paragraph to own that narrower intent on purpose, then link to the winner from it with a descriptive anchor instead of merging.
- When it's genuinely unclear, default to differentiate over consolidate — a redirect is hard to undo cleanly (you lose the ability to re-test the page as its own entity), while narrowing a page's angle can be reverted with a second content edit if it doesn't help.
Catch cannibalization automatically, across every site you manage
Connect GSC once per property and get a weekly ranked action list — including cannibalization alerts like this one — instead of re-running a paste-in checker by hand.
Frequently asked questions
Related tools & guides
← All free SEO tools