Keyword cannibalization checker
Find keywords that several of your pages compete for and see which page to keep.
Keyword cannibalization checker
Paste rows from a keyword-position export — one per line, in the form address;keyword;position;impressions — and this tool finds every keyword that more than one of your pages ranks for. That overlap is keyword cannibalization: instead of one strong page winning a search result, two or more of your own URLs compete against each other, which usually means both rank worse than a single consolidated page would.
Minimum addresses per keyword sets how many competing pages a keyword needs before it's reported; the default of 2 catches every overlap. Position difference threshold controls what counts as "suspected" — pages ranking close together are a real risk, while a keyword where one page sits at position 3 and another at position 80 is not really competing, so it's still listed but not flagged. Ignore keywords below this many impressions drops low-traffic overlaps that aren't worth fixing. Group by switches the report between one row block per keyword and one per address, and favor an address whose URL already matches the keyword nudges the recommendation toward the page whose URL slug already spells out the term — a reasonable proxy for page focus when no page title is available. Output chooses between a full table of every match or a short list of action sentences for the suspected pairs only.
The recommendation always names one address to keep per keyword: the one with the best position, tie-broken by impressions and then alphabetically, with the URL-match bonus applied first when that option is on. Rows are read from ; separated text, so it works directly with a CSV export where you've stripped the header row, or with anything you paste in that shape — malformed lines are skipped rather than blocking the rest of the report.
Everything runs locally in your browser. Search Console exports and rankings data never leave your device — nothing is uploaded to a server. Copy the result, download it as a .txt file, or send the output back into the input to refine the options.