Keyword cannibalisation is 2 URLs from the same site ranking for one query and splitting the clicks between them. Search Console shows it without a paid tool, and the work is usually a decision about which page has the job rather than a rewrite of both.
Where the split hides in the report
Every query row in the Performance report is an average across all the pages from your site that ranked for it. Google’s help page for the report says the average position in a table row is the average for the grouping dimension shown, and the dimensions are tabs above the table. So one query row can hide two URLs sitting at position 3 and position 20, and the row reads as a single mediocre ranking.
Check 1: filter one query, then open the Pages tab
- Open Performance and set the date range to the last 28 days.
- In the Queries tab, click the query you care about. The click adds that query as a filter.
- Switch to the Pages tab. The list now holds only the URLs that ranked for that query.
- Note every URL with more than a few impressions. Two or more is the signal.
Start with the query that has the most impressions, not the one you find most interesting. It has the most to lose from a split.
Check 2: read each URL’s position separately
Click one URL from that list and the report now shows that page alone. Read its position, its impressions and its clicks, then do the same for the second URL. If the two numbers swap places across the 28 days, you are watching two pages take turns rather than one page improving.
A swap is worth checking against the calendar. When a core update is rolling out, positions move for reasons that have nothing to do with your own pages. A pair that splits in the same week an update starts will look worse than it is.
Check 3: compare what the 2 pages promise
Read the title, the H1 and the first paragraph of each URL side by side. If both answer the same question in the same shape, you have one page stored in 2 files and Google is choosing between them. The canonicalization guide describes how Google picks one URL when it finds duplicates, and that pick is not a promise to pick the one you prefer.
If one page defines a term and the other walks through a fix, the split may be intent rather than conflict, and there is nothing to merge.
Once the pair is clear, the fix follows the kind of pair it is.
What a 24 October 2026 batch shows
On 24 October 2026 this blog published 4 posts on the PHP2Shell bug: the bug itself at 14:23, the PHP version check at 14:50, the compromised-site check at 14:51 and the piece on AI finding PHP bugs at 14:51. Four URLs on one event is the exact shape that cannibalises.
Those 4 can share a subject because each one promises a different answer. One says what happened, one says how to check your version, one says how to tell whether you are already compromised, and one says what changed in how bugs get found. The test is not how close the topics sit. The test is whether 2 pages answer the same question.
Where this check gives a false alarm
A page at position 12 with 40 impressions is not a cannibal. It is a weak page, and merging it frees nothing. The pair only matters when both URLs collect impressions for the same query, because that is the case where Google is choosing and you are not.
Search Console also samples. Google’s own help page warns that a query in the report may show no result from your site if you type it into Google, because results depend on time, place, device and search history. Use the report to find the pair, and use the live result only to see what the searcher gets today.
A fixed pair is not the same as a fixed site. Crawled but not indexed pages keep splitting impressions for a different reason, and rank trackers handle the same query differently, so a tool’s number is not the search engine’s decision. A test that cannot fail proves nothing, which is why the pair gets checked on impressions and clicks rather than on a screenshot of positions.
Everything else on this beat sits in the search and SEO hub.







