Skip to content
100% local

Keyword cannibalization checker

Find keywords that several of your pages compete for and see which page to keep.

Input

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.

FAQ

What input format does it expect?
One row per line: address;keyword;position;impressions, semicolon-separated. This matches an exported keyword-position report with the header row removed.
How does it decide which page to keep?
It ranks the competing addresses by position (best first), breaking ties by impressions and then alphabetically. When "favor a matching URL" is on, an address whose URL already contains the keyword gets a small ranking bonus.
What does "suspected" mean versus just "found"?
A keyword is found whenever multiple addresses rank for it. It is marked suspected only when those addresses rank close enough together (within the position difference threshold) that the overlap is likely hurting both pages.
Can I get a shorter list instead of the full table?
Yes. Switch Output to "List of actions" to see one sentence per suspected keyword, naming the page to keep and the pages to consolidate or redirect.
Is my ranking data uploaded anywhere?
No. The check runs entirely in your browser — the addresses, keywords and positions you paste never leave your device.