Free tool
Keyword cannibalization checker for your Search Console data
Add Search Console data with the query and page on each row and see every search two of your pages split, with the page to keep, plus low CTR searches and your branded split. It all runs in your browser.
Your Search Console data
A CSV with Query, Page, Clicks, Impressions and Position columns.
Showing demo data for example.com until you add yours.
Demo data, example.com
5 searches are split across two or more of your pages
- Split searches
- 5
- Low CTR
- 5
- Brand clicks
- 12%
1,079 clicks on these searches, out of 13 searches checked.
how to descale a coffee machine
9,500 impressions · 288 clicksHigh
Page Clicks Impressions /guides/descale-coffee-machinePosition 4.6Keep 16056% 5,20055% /blog/descaling-with-vinegarPosition 5.1 12844% 4,30045% how much caffeine in cold brew
5,350 impressions · 133 clicksHigh
Page Clicks Impressions /blog/caffeine-in-coffeePosition 7.1Keep 6952% 2,65050% /guides/cold-brew-ratioPosition 8.2 5239% 2,10039% /recipes/cold-brewPosition 12.0 129% 60011% french press ratio
4,200 impressions · 53 clicksHigh
Page Clicks Impressions /recipes/french-pressPosition 5.2Keep 3158% 2,30055% /guides/pour-over-vs-french-pressPosition 5.8 2242% 1,90045% cold brew ratio
7,600 impressions · 421 clicksMedium
Page Clicks Impressions /guides/cold-brew-ratioPosition 2.3Keep 38090% 5,90078% /recipes/cold-brewPosition 6.8 4110% 1,70022% best grind size for espresso
8,100 impressions · 184 clicksLow
Page Clicks Impressions /guides/espresso-grind-sizePosition 6.5Keep 17092% 6,90085% /guides/espresso-at-homePosition 11.4 148% 1,20015%
- High: clicks split between pages.
- Medium: impressions split, clicks mostly to one.
- Low: a second page appears now and then.
- 1 brand search was left out: several pages showing for your own name is normal.
A split search is a reason to look, not proof of a problem: two pages can rank for one broad search when they answer different needs. The typical CTR is an approximation of the curve large click studies report, and featured snippets, AI Overviews and ads move it, so treat a low CTR as a title worth testing.
How the keyword cannibalization checker works
For every search with enough impressions, it adds up the impressions and clicks each of your pages got. Any page with 10% or more of the search's impressions counts as competing. Two or more competing pages and the search is flagged, with a severity:
- High: two or more pages each take at least 20% of the clicks. Searchers are landing on both, so neither page gets the full value of the search.
- Medium: two or more pages each take 20% of the impressions, but the clicks mostly go to one. Google is swapping which page it shows.
- Low: a second page turns up between 10% and 20% of the time. Usually worth a glance, rarely worth a merge.
The page marked Keep is the one already earning the most clicks for that search, with the better position breaking a tie. Addresses that differ only by a jump link (#steps, or the #:~:text= Google adds for highlighted answers) are the same page, so they are merged first. Brand searches are left out, because your home page and about page both showing for your name is how it should be.
How to get query and page data out of Search Console
The Export button on the Performance report gives one table per tab: queries in one file, pages in another. Nothing in it says which page showed for which search, so it cannot reveal cannibalization. Any of these gives you the query and the page on the same row:
- Looker Studio (free). Create a data source with the Search Console connector, choose your site and the URL impression table. Add a table chart with Query and Landing Page as dimensions and Url Clicks, Impressions and Average Position as metrics, set the date range, then use the chart's menu to export it as CSV.
- The Search Console API, or a spreadsheet add-on built on it: ask for the query and page dimensions together and save the result as CSV.
- BigQuery bulk export. If you have it switched on, export query, url, impressions, clicks and sum_top_position from the URL table. The checker turns sum_top_position into an average position for you.
Use 28 days to three months of data. Shorter and a page that appeared once looks like a rival; longer and you pick up pages you have already merged.
Is it really cannibalization? How to read the result
Open both pages side by side and ask one question: would a searcher be happy landing on either? If yes, they answer the same need and one should go. If one is a guide and the other a product or a recipe, they answer different needs, and the split may be Google testing which one fits. Then:
- Same need, one clearly better: move anything useful from the weaker page into the keeper, then redirect the weaker address to it with a 301.
- Same need, both worth keeping: rewrite one so its title, H1 and opening target a different, narrower search, and link from it to the keeper.
- Different needs: leave both, and make sure each title says plainly which need it answers.
In every case, check your internal links: links that use the search as anchor text should point at the page you kept.
Low CTR searches and the branded split
The Low CTR tab lists non-brand searches on page one (average position 1 to 10) whose click-through rate is under half the typical rate for that position. On the curve used here, a search at position 3 usually gets about 11% of clicks, so one at 3.4 getting 0.4% stands out. The fix is usually the title and meta description: say exactly what the searcher asked, with the number, year or format they want. If the results page has a featured snippet or an AI Overview above you, the low rate may be the layout, not your title.
The Branded split tab shows how much of your search traffic comes from people who already know your name. Brand clicks are worth having, but they come from awareness you built elsewhere. Non-branded clicks are the ones SEO work wins, which is why they are the number to report on. Add misspellings and short forms of your name to Brand terms, and read the list of matched searches to make sure a generic search has not been caught by accident.
How to check for cannibalization by hand
For one search, open Performance in Search Console, choose Add filter, then Query, type the search, and open the Pages tab. Every page listed there showed for it. For the whole site, put your query and page table in a spreadsheet, make a pivot table with Query as rows, a count of Page and a sum of Impressions as values, and sort by the count. Anything with two or more pages is a candidate; then compare each page's share of the impressions and clicks, which is the part this checker does for you.
The same check, without the export
An export is a snapshot, and the query and page table is the awkward one to get. Flowra connects to Search Console directly, so there is no file to make. Its keyword cannibalization report, on the Pro plan, lists the searches your pages compete for with a severity and the clicks at stake, next to the content decay and striking distance reports.
Clicks, impressions, CTR and position for every query and page, with 16 months of history, are in Flowra's analytics dashboard from the Starter plan. The Free plan includes the content decay report and your top 5 striking distance searches.