Spotting keyword cannibalisation in Search Console
How to tell when two of your pages are competing for the same query, when that is fine, and how to fix it when it is not. The manual method, and the detector.
Keyword cannibalisation is what happens when two or more of your own pages appear for the same query and Google cannot settle on which one to show. It alternates between them, or splits the impressions, and neither page builds the signals it would have built alone. The result is usually two pages stuck at positions 9 and 14 where one page could be at 5.
It is also one of the most over-diagnosed problems in SEO, so this post covers both halves: how to find it in Search Console, and how to tell when what you have found is not a problem at all.
What it looks like in the data
Three symptoms, and you will usually see two of them together.
The query’s average position bounces. Not a steady decline, but a line that sits at 8 one week, 13 the next, 9 the week after, with no change on your side. Google is swapping which page it shows, and the average is blending two different positions.
Two pages share the impressions for one query, with neither growing. Each has a slice of the demand and a middling position, and polishing either one on its own has not moved it.
The click-through rate is lower than the position suggests, because on the days Google shows the wrong page, the snippet does not match what the searcher wanted, and they scroll past.
Finding it in Search Console
For a single query, the web interface does this directly. Open the Performance report with a date range of three months, so the numbers are smooth, go to the Queries tab, click the query, then switch to the Pages tab. If more than one page appears with meaningful impressions, note each page’s position and impressions. Two pages at similar positions, splitting the impressions roughly evenly, is the classic shape.
For a whole site, you need the query-and-page pairs together, which means exporting from the API or using a tool that reads it. Group the pairs by query, keep the queries with two or more pages, and sort by total impressions so the ones that matter are at the top. A query where a second page has three impressions is not cannibalisation; it is noise. The list you want is the one where real demand is being split.
QueryWatch’s cannibalisation detector, a Pro feature, does that grouping for you and shows the queries where two of your pages are competing, ranked by what is at stake. The free striking-distance view will also surface pairs, because a query with two of your pages at 11 and 14 is very often a striking-distance query with a cannibalisation problem underneath it.
When it is not a problem
Before you merge anything, check three things.
Are the positions stable? Two pages that each hold a steady position for a query are not fighting; Google has decided they both belong, often because the query carries two intents and you have a page for each. A buying guide and a product page for the same term can coexist indefinitely.
Is Google showing both at once? If the two pages appear as two listings on the same results page, or one as a sitelink of the other, you are getting more real estate, not less. That is the opposite of a problem.
Is the second page tiny? A page with a handful of impressions for a query another page owns is just the index being thorough. Leave it.
The case that needs fixing is the bouncing one: a single intent, two pages, positions that trade places, and a combined result that is worse than either page would manage alone.
Fixing it
There are four moves, and the right one depends on how different the two pages are.
Consolidate. If the pages say roughly the same thing, keep the stronger one, move anything unique from the weaker one into it, and redirect the weaker URL permanently. This is the move that works most often and the one people avoid longest, because deleting a page feels like losing something. You are not; you are concentrating it.
Differentiate. If the pages serve different purposes but have drifted onto the same query, retarget one of them. Change its title, its heading and its opening to the query it should own, and remove the contested term from its title. This is the fix when consolidation would destroy a page that does a job.
Canonicalise. If the pages are near-duplicates that both have to exist, parameter versions, print versions, a syndicated copy, point the duplicate’s canonical at the original.
Point the internal links one way. Whichever page you choose, every internal link that uses the query as anchor text should go to it, and none to the other. Inconsistent internal linking is often how the cannibalisation started.
Watching the fix
Give it four to eight weeks. The survivor’s position for the query should settle first, then rise. Save the query to a watchlist so you notice when it does; in QueryWatch the watchlist holds five queries on the free tier, unlimited on Pro.
One more place cannibalisation shows itself: in a traffic drop. When one page loses clicks on the same day a sibling page gains them, Google has swapped which page it shows, and the change investigation’s counter-mover is where it turns up. Clicks dropped, now what has that step.
Keep reading
Get QueryWatch
Free on iPhone and Android for every property you have, with no site limit. Open Demo Mode first if you want to look around before you connect a Google account.
iPhone needs iOS 26 or later; Android needs Android 12 or later. Free to download, with an optional Pro subscription. An independent app, not affiliated with Google.