There is a specific pattern in Search Console that most people look straight past. You check a query you care about. Last month it was /services/analytics. This month it is /blog/analytics-guide. Next month it is back. Average position hovers around eleven and never improves no matter what you do.
That is not volatility. That is two of your pages competing for the same query, and Google resolving the tie differently each time it crawls.
Neither page ever accumulates enough signal to break through, because every link, every internal link, and every engagement signal that should have gone to one page is split between two.
What it actually is
Cannibalisation is several pages on one domain competing for the same query with the same intent. The consequences compound:
- Authority splits. External links land on whichever page the linker found. Two pages with fifteen links each rank worse than one page with thirty.
- Google picks, and picks inconsistently. You lose control of which page represents you for a commercial term. Often it picks the blog post over the service page — the one that informs rather than the one that sells.
- Internal linking gets incoherent. Different pages link to different targets for the same concept, reinforcing the split.
- Optimisation stops working. You improve one page, the other one starts ranking, and your change appears to have done nothing.
The last point is why this is worth finding early. It makes every other SEO effort look ineffective, and teams conclude the channel does not work.
The critical distinction
Multiple pages ranking for one query is not automatically a problem.
If someone searches "analytics setup" and gets both your service page and your documentation, that is healthy. Two different intents, two different needs, both served.
The problem is specifically when pages compete for the same intent — when both are trying to be the answer to the same question for the same kind of person, and neither is clearly better.
Test it by asking: if a user searching this query landed on either page, would they be equally satisfied? If yes, you have cannibalisation. If one page is obviously the better landing point for that specific search, you have a hierarchy problem instead, and the fix is different.
Finding it in Search Console
You do not need a tool for this.
The query-first method
- Open Performance → Search results
- Add a filter: Query → exactly your target term
- Switch to the Pages tab
You are now looking at every URL that has received impressions for that query. Two or more URLs with meaningful impressions on a commercial term is your signal.
The flap check
Same filter, then set the date range to 12 months and compare quarter by quarter. If the dominant URL changes between periods, Google has been switching. That is the clearest confirmation available and it costs two minutes.
Finding it at scale
For a full sweep, export 12 months of query and page data, then group by query and count distinct URLs with more than a handful of impressions each. Sort by total impressions descending. The top of that list is your priority order, because it ranks the problem by the traffic it is costing you rather than by how bad it looks.
This is the sweep I run at the start of every structure engagement. On sites that grew page by page without an architectural plan, it routinely surfaces a dozen conflicts nobody knew existed.
Deciding which page wins
Once you have a conflict, you have four options. Choosing between them by instinct is how consolidation projects lose traffic.
Option 1 — Consolidate
Merge the pages, keep the strongest URL, redirect the rest.
Choose this when the pages genuinely serve the same intent and neither has a separate job.
Pick the survivor on evidence, in this order:
- Backlinks. The page with more referring domains is the harder one to rebuild.
- Conversions. A page that produces leads outranks a page that produces sessions.
- Intent fit. For a commercial query, the commercial page should win even if the blog post currently ranks.
- URL quality. Shorter, cleaner, better structured.
Backlinks usually decide it. Rankings can be rebuilt; a link profile largely cannot.
Then move the good content across. The most common consolidation failure is redirecting a page and discarding what made it rank. Take the sections that earned the links.
Option 2 — Differentiate
Rewrite the pages to target genuinely different intents.
Choose this when both pages have real value and can serve distinct needs — one commercial, one educational; one for beginners, one for practitioners.
This means changing titles, headings, and body copy so the difference is unmistakable to both a reader and a crawler. Adjusting a title tag is not differentiation. If you cannot articulate in one sentence who each page is for, it will not work and you should consolidate instead.
Option 3 — De-optimise the loser
Keep both pages, but stop one of them competing.
Choose this when a page must exist for users but should not represent you in search — a support article, a legacy landing page still used in email.
Remove the target term from its title and H1, thin out its use in the body, and point the internal links at the winner. The page stays useful and stops fighting.
Option 4 — Canonicalise
Point the losing page's canonical at the winner.
Choose this when the page must stay accessible at its own URL — a print version, a syndicated copy, a near-duplicate variant.
Two cautions. Google treats a canonical as a hint, not a directive, and will ignore it when the pages differ substantially. And a canonicalised page still gets crawled, so it does not save crawl budget the way a redirect does.
Shipping it without losing traffic
Consolidation loses traffic through execution, not through strategy. Four rules:
Redirect to the closest equivalent, not the homepage. A redirect to an irrelevant page is treated as a soft 404 and the equity is lost.
Eliminate chains. If /a redirects to /b and /b redirects to /c, fix /a to point at /c directly. Chains accumulate over years of migrations and quietly bleed signal.
Update internal links to point at the final URL. Do not rely on redirects to do it. Every internal link still pointing at the old URL is a wasted signal and a slower page load.
Validate the map before release. Every removed URL must appear in the redirect map with a destination that returns 200. Crawl the list and confirm it, then crawl again after release.
Then wait. Consolidated pages typically dip for one to three weeks while Google reprocesses, and recover above the previous combined level. Reversing a consolidation in week two — which happens often — locks in the dip and discards the benefit.
How it starts, so you can stop it
Cannibalisation is almost never a decision. It accumulates:
- A blog post written about a topic that already has a service page
- Location pages generated from a template with the same body text
- A campaign landing page nobody retired
- A site migration where old and new URLs both stayed live
- Two teams publishing without a shared keyword map
The durable fix is a keyword-to-URL map: one owning page per target query, written down, checked before anything new gets published. It takes an afternoon to build and prevents the entire class of problem.
If Google keeps swapping which of your pages ranks and you cannot work out which one should win, send me the URL and the query. Reconciling intent against links and conversions is a mechanical exercise once you have the data in front of you.