Intent overlap is the test, not keyword overlap
Almost every audit tool will hand you a list of "cannibalisation issues" built by finding pages that share keywords. Most of that list is noise. Two pages on a site about SEO pricing will both contain the phrase "seo cost" — that's a topic, not a conflict.
The real test is one question: would the same searcher be satisfied by either page? If someone types "seo cost in india" and both your pricing breakdown and your "is SEO worth it" essay would answer them equally well, those pages compete. If one answers what it costs and the other answers whether to spend it, they serve different intents and can coexist happily — and should link to each other.
The distinction matters because the wrong fix is expensive. Merging two pages that served different intents throws away one that was working, and you rarely get the traffic back.
The Search Console diagnostic, step by step
You don't need a tool for this. Google Search Console gives you the evidence directly, and it's the only source that shows what Google actually did rather than what a third-party crawler estimates.
- Performance → Search results. Set the date range to the last 6 months.
- Filter by query, exact match, on the phrase you're worried about.
- Switch to the Pages tab. If one URL appears, there's nothing to fix. If two or more appear with meaningful impressions, keep going.
- Now compare periods. Set a four-week window, note the top URL, then step the window back four weeks at a time.
- Look for swapping. URL A ranks in March, URL B in April, A again in May. That oscillation is Google being unable to decide, and it's the clearest evidence of genuine cannibalisation.
- Check average position on both. Two URLs stuck at positions 14 and 19 for the same query is a much stronger case than one at position 4 and one at 60 — the second is just a page that happens to mention the topic.
Merge, differentiate or canonicalise
Once you've confirmed it, the decision is mechanical. Match your situation to the row.
| Situation | Fix | What it involves |
|---|---|---|
| Same intent, one page clearly stronger | Merge into the strong page | Move the useful content across, 301 redirect the weaker URL to the stronger one, update every internal link that pointed at the old URL. |
| Same intent, both mediocre | Merge into a new, better page | Write the page that should have existed, redirect both old URLs to it. Expect a dip for four to eight weeks before it settles. |
| Different intent, similar wording | Differentiate | Rewrite titles, H1s and opening paragraphs so each page states its distinct question. Fix internal anchor text so it stops pointing both ways with the same phrase. |
| Near-duplicates you have to keep | Canonicalise | Print views, faceted URLs, parameter variants. A canonical tag points them at the primary version without removing them. |
| Low-value pages nobody should reach | Noindex, then reconsider | Tag archives, thin category pages. But never noindex a page with inbound links — redirect it instead so the equity moves. |
Where it comes from: archives, and enthusiasm
Most cannibalisation is manufactured on-site, not stumbled into. Three sources cover nearly all of it.
Automatic archives. WordPress ships with tag, category, author and date archives switched on. A blog with 200 posts and 180 tags produces 180 thin pages, each listing a couple of posts, each competing with the posts themselves. Noindex the tag and date archives, keep a few curated categories.
Publishing instead of updating. The editorial habit behind most of it. Someone writes a fresh post on a topic you covered eighteen months ago, because writing new is more satisfying than revising old. Now two pages answer the question and neither is complete. If a page already targets the query, update that page — see when to update old content instead of writing new.
Templated location or service pages. Fifty pages differing only by city name compete with each other and look like scaled content abuse. Each has to say something true and specific, or it shouldn't exist.