Keyword Cannibalization Checker
Paste a Search Console export with queries and pages together and see which queries your own pages are fighting over — how the impressions split, who is winning, and what to do about each one.
Nothing you type here is uploaded, stored or sent anywhere. It all runs in your browser.
What a keyword cannibalization checker actually measures
Keyword cannibalization is when two or more of your own pages are shown by Google for the same query, and the impressions — and usually the clicks — split between them instead of going to one page that ranks well. This keyword cannibalization checker does not guess at it from titles or target keywords, which is how most audit tools do it. It reads what Google actually did: every query where more than one of your URLs earned a meaningful share of impressions. If Google never showed the second page, it is not cannibalising anything, whatever its title says.
The symptom people notice first is a ranking that will not settle. One week the guide ranks eighth, the next week the category page ranks eleventh, and neither ever gets past the middle of page one.
When two ranking pages are completely fine
Not every split is a problem, and "fixing" the wrong one costs you traffic. Three cases I leave alone:
- A double listing. Two of your pages on page one at the same time, one under the other. Both pages collect impressions for the query in roughly equal numbers, because they are shown together. That is more of the results page, not less, and merging them throws half of it away. The tool labels this case rather than flagging it for a fix.
- Different intents. "Best espresso machine" can be answered by a buying guide and by a category page, because some searchers want to read and some want to buy. If each page clearly serves one of those, Google will sort them. The fix is to make the difference obvious, not to delete one.
- Branded queries. Someone searching your brand name should see your home page, your pricing and your reviews. Put your brand terms in the box and they are ignored.
How to export the right data from Search Console
This is where most people get stuck. The Performance report in the Search Console interface exports queries and pages as separate tables, and a list of queries with no page next to them cannot show cannibalization at all. You need both dimensions in one table, one row per query and page pair. Three ways to get it:
- Search Analytics for Sheets. A free Google Sheets add-on. Group by Query and Page, pick the last three months, then File, Download, CSV.
- Looker Studio. Add the Search Console connector with the URL impression table, build a table with Query and Landing Page as dimensions and Url Clicks, Impressions and Average Position as metrics, and export it.
- The Search Console API. Request the
queryandpagedimensions together. Any script or connector built on it produces exactly this shape.
Three months is the window I use. A single week is too noisy, and a year hides whether the problem is getting better or worse. URLs with a # fragment, which Google creates for jump links and featured snippets, are merged into their page before anything is counted, so they do not show up as fake competitors.
How to fix keyword cannibalization
Each query in the table gets one suggested action. It is a heuristic — my judgement applied to the numbers, not a verdict — so look at both pages before you act on it.
- Consolidate. The weaker page earns almost nothing apart from this query. Move anything useful from it into the stronger page, then 301 the old URL to the new one. The 301 redirect generator writes the rule for your server. It also merges whatever links the weaker page had collected.
- Differentiate intent. One page reads as an article and the other as a commercial page. Make each one plainly about its own job, and link between them. The keyword intent classifier helps you decide which intent the query really has.
- De-optimise the weaker page. The weaker page gets most of its clicks from other queries, so it has its own job and should stay. Take the contested phrase out of its title and H1 and let it rank for what it is actually good at.
- Add an internal link. The stronger page is already clearly ahead. Link to it from the weaker page, with the query as the anchor, so the site says out loud which page it wants to rank. The internal linking planner turns that into a list.
The way to stop it happening again is to plan one page per topic before writing. Grouping your keyword list with the keyword clustering tool first means two writers never get briefed on the same query.
The numbers that are judgement, not fact
Five of them, and I would rather you knew. The ten-impression floor and the ten per cent share are the defaults in the form, and you can change both. A double listing means both pages average a top-ten position and the weaker one has at least 80% of the stronger one's impressions. A weaker page "has its own job" when at least 30% of its clicks in your export come from other queries. And the stronger page is "already ahead" when its average position is at least three places better. None is a Google threshold; they are working figures. Everything else in the table — the sums, the shares, the impression-weighted positions — is plain arithmetic on the rows you pasted.
Questions people ask
What is keyword cannibalization?
It is when two or more pages on the same site are shown for the same search query and split the impressions and clicks between them, so neither ranks as well as one consolidated page would. It is only a problem when the pages serve the same intent. Two pages that answer different needs, or a double listing where both appear on page one together, are usually fine.
How do I find keyword cannibalization in Google Search Console?
Export performance data with the query and page dimensions together, then look for queries that appear against more than one page with a meaningful share of impressions. The Search Console interface cannot export both dimensions in one table, so use the Search Analytics for Sheets add-on, a Looker Studio table, or the API, then paste the result into this tool.
Does keyword cannibalization hurt rankings?
It can, but less often than audit tools suggest. The real cost is that signals which could go to one page — links, internal links, engagement — are spread over two, and Google keeps swapping between them. When the split is between pages with different intents, or the two appear together on page one, there is usually nothing to fix.
Should I delete or redirect the weaker page?
Redirect it, almost never just delete it. A 301 to the stronger page keeps the links the old URL earned and sends its visitors somewhere useful, where a deleted page returns a 404 and loses both. Move any content worth keeping into the stronger page before you redirect.
Why does my export only have queries and no pages?
Because the Performance report in Search Console exports each tab separately — queries in one file, pages in another. Neither file alone can show which pages compete for which query. You need a tool that asks for both dimensions at once: Search Analytics for Sheets, Looker Studio, or the Search Console API.
How much data should I paste?
Three months is a good window. Less than that and a page that ranked for a week looks like a competitor; more and you are measuring a site that no longer exists. The tool handles tens of thousands of rows in the browser, and raising the minimum impressions filter keeps the table readable on a large site.
Is my Search Console data uploaded anywhere?
No. The page has no backend. Pasted text and opened files are read in your browser, the analysis runs there, and nothing is uploaded, logged or stored — which matters here, because a query-level export is a fairly complete picture of your organic traffic.
Related tools
Consolidating pages fixes the split. Links fix the ceiling
Once one page clearly owns a query, the question becomes whether that page has enough authority to climb. That is usually a links question, and it is the one I work on.