Keyword Cannibalization Checker
Paste Google Search Console style data: query, URL, clicks, impressions, position.
Keyword Cannibalization Checker — URL Conflict Analysis
Detect queries split across multiple pages that reduce total CTR. Use this report to prioritize intent consolidation and internal link fixes.
How to Use
- Paste rows from Google Search Console (query, URL, clicks, impressions, position)
- Set a minimum impression threshold to filter low-volume noise
- Review conflicting queries and choose a canonical/intent winner
FAQ
Getting query + URL pairs out of Search Console
You can only see keyword cannibalization when a query and a page sit in the same row. The standard export of the Performance report doesn't give you that — queries and pages land on separate sheets. Three ways that work:
- Looker Studio. Add a Search Console data source with the "URL impression" table, then build a table with the dimensions Query and Landing Page and the metrics Clicks, Impressions and Average Position. Export it as CSV.
- Google Sheets with the Search Analytics for Sheets add-on, grouped by query and page.
- The Search Console API:
searchanalytics.querywith the dimensionsqueryandpage.
For a single keyword the UI is enough: filter the report by the query and open the Pages tab. Keep in mind that Google hides rare, anonymised queries, so every export misses some impressions.
Paste format
Column order is fixed: query, URL, clicks, impressions, position. Tabs, commas or semicolons work as separators, and decimal commas are understood. A header row is skipped when it contains "query" and "url" or "page". Rows with an invalid URL don't break the run; they are counted as invalid. Queries are compared case-insensitively, so "SEO Audit" and "seo audit" are merged.
How the keyword cannibalization checker scores risk
The tool groups rows by query and keeps the ones with two or more URLs and total impressions above the threshold (20 by default). Then it looks at the impression share of the most visible URL:
| Risk | Rule | How to read it |
|---|---|---|
| High | 3+ URLs, or the leader has under 55% of impressions | Google can't settle on a page; impressions are split almost evenly |
| Medium | leader has 55–75% | There is a main page, but another one regularly swaps in |
| Low | two URLs, leader has 75%+ | The second page shows up occasionally — often harmless |
An example: "site audit" has 1,000 impressions — page A gets 520, B 380, C 100. Three URLs and a 52% leader share make it high risk on both counts. Remove C and point its links to A, and you are left with 520 / 380, a leader share of about 58% — medium risk, with the next step being to separate A and B by intent. Re-running the same export after each fix shows progress, not just the problem.
High risk is listed first; within each level, queries with the most impressions come first, because that's where the loss is biggest. Position is read from your data but isn't used in the risk score — check it yourself when deciding which page to keep. The checker is free: 10 analyses a day without an account, 30 with one.
When overlap is not cannibalization
- Both pages in the top 10. Two slots on page one is a win, not a problem.
- Branded queries. For your company name it's normal to see the home page, About and Contact.
- Language versions.
/en/pageand/pageon the same query are an hreflang question, not a content one. The tool treats them as different URLs, so review those rows separately. - Different intent. A "how to choose" article and a service page can legitimately share a broad query if each wins its own, more specific queries.
Typical page pairs in the report
Look at the URL breakdown under each query. The pairs tend to follow the same few patterns, and each pattern points to its own fix:
- Home page vs an inner page. The home page picks up a broad query that a category or service page should own. Usually the inner page lacks internal links with an exact-match anchor.
- Blog post vs commercial page. An overview article outranks the page that sells. Separate the intents and link from the article to the service page.
- Old vs new article on the same topic. The textbook case for consolidation with a 301.
- One URL in two spellings: with and without a trailing slash, with and without
www, with parameters. That's technical, not content: redirect to the preferred form and set a canonical.
To stop new cases, keep a keyword map — one query cluster per URL — and check it before publishing a page aimed at a query you may already cover.
How to fix keyword cannibalization
First decide which page should win: the one that answers the query best and converts, not necessarily the one ranking higher today. Then pick a fix:
| Situation | Fix |
|---|---|
| Two pages about the same thing | Consolidate: move the useful parts into the main page and 301 the other one |
| Both pages are needed, but topics overlap | Differentiate: rewrite the second page's title, H1 and copy for its own, narrower query |
| Duplicates from filters, sorting, UTM tags | Canonical to the main version |
| Internal links point to both pages | Every link using the query as anchor goes to the main page only |
A 301 redirect when consolidating:
# nginx
location = /old-page/ { return 301 /main-page/; }
# Apache (.htaccess)
Redirect 301 /old-page/ https://example.com/main-page/
In WordPress, the Redirection plugin or Rank Math's redirect manager does the same. After the change, wait 3–4 weeks and export again: the main page's impression share should grow and the other URL should drop out of that query's rows. If the competing pages have near-identical titles, compare them with the meta tag analyzer.
Automatic cannibalization tracking in SEO Radar
Pasting tables by hand makes sense for a competitor's data or a one-off export. For your own site, SEO Radar connects to Search Console and finds cannibalization by itself from the same data, with no export. In Radar:
- branded queries and queries with search operators are excluded, and overlaps under 10 impressions are treated as noise;
- the main page is chosen by clicks, then by the expected CTR of its position — not simply by the best position;
- a competing page must be in the same language and actually in play for the query; language versions of one page are flagged separately as an hreflang issue;
- each query shows how many impressions are split across extra pages, and the duplicate is left out of the promotion plan, so links go to the main page only.
For the background — what cannibalization is and where it comes from — see the glossary article; for a step-by-step check inside Search Console, read how to check for keyword cannibalization.
RankBotAI — AI SEO Optimization for WordPress
RankBotAI AI plugin automatically finds and fixes SEO issues in WordPress products and posts — no manual editing.