How to find keyword cannibalization in Google Search Console
You can find keyword cannibalization in Google Search Console without paying for anything, and Search Console is the only tool that sees what Google actually served — not what a crawler guesses it might serve. The catch is that the default interface answers a question you did not ask. This guide walks the full workflow: confirming a single suspected case, then using regex filters and exports to find the cases you had no reason to suspect, and finally the point where Search Console stops being able to help.
Run the Keyword Cannibalization Checker on your site — free, no account.
Why Search Console is the right tool for this
Cannibalization is a claim about how search engines respond to a query. Every other diagnostic — content similarity, title overlap, anchor text — is a proxy for that. Search Console is the only free source of the real thing: which of your URLs got impressions for which query, and in what position.
That makes it definitive for confirming a case and weak for discovering one, and most guides conflate the two. The confirmation workflow below takes two minutes. The discovery workflow takes longer and has a ceiling, which is worth knowing before you spend an afternoon on it.
Before you start Use a domain property, not a URL-prefix property, if you have one. A URL-prefix property for https://www. will miss impressions served to the non-www or http versions, and a split property is a common reason two URLs look like they are not competing when they are.
The two-minute confirmation
Start here when you already suspect two specific pages compete.
- Open Performance → Search results and set the date range to the last 3 months.
- Click + New → Query → Queries containing (or Exact query, if you know the exact term).
- With that filter applied, switch from the Queries tab to the Pages tab.
- Read the URL list. One URL means no cannibalization for that query. Two or more with meaningful impressions means you have candidates.
Meaningful, not any Almost every query returns several of your URLs if you look at a long enough window, because Google tests pages. A second URL with 4 impressions against a first with 900 is noise. Treat a URL as a real candidate when it holds a double-digit share of the query's impressions.
The instability test — the part that actually decides it
Two URLs appearing for one query is normal. What is not normal is Google being unable to decide between them. That indecision is the cost, and it is visible in Search Console if you compare periods rather than reading one.
- Keep the query filter applied and open the date picker → Compare.
- Compare the last 28 days against the previous 28 days.
- On the Pages tab, read the impression split per URL across the two periods.
period A period B verdict ------------- ------------- ------------------------------ A 95% / B 5% A 94% / B 6% stable, one winner - leave it A 60% / B 40% A 35% / B 65% swapping - real cannibalization A 50% / B 50% A 48% / B 52% split, both mid-page - costly A 100% / B 0% A 0% / B 100% a handover, not a competition
The last row catches people out. A clean handover — one URL stops, another starts — usually means you published a replacement and Google switched, which is the system working. Cannibalization is the oscillating middle rows, where neither page can hold the position long enough to accumulate click-through history.
There is a second tell worth checking: average position variance for the query as a whole. A query whose position swings by five or more places month to month while your content has not changed is often being served by different URLs at different times.
Finding cases you did not suspect
The confirmation workflow needs you to already have a hypothesis. To find cannibalization across a whole site you have to invert it: start from queries, not from pages.
Regex query filters
Search Console supports regex in the query filter (+ New → Query → Custom (regex)). This is the most underused feature in the product for this job, because it lets you isolate the query shapes that cannibalize most often.
- best .* (tool|tools|software) — the classic listicle overlap, where a rewritten post never retired its predecessor.
- how to .* — process content, where a general guide and a specific tutorial drift into the same query.
- (vs|versus|alternative) — comparison pages, which multiply quickly and rarely get audited.
- ^(?!.*brand).* — everything except your brand terms, which otherwise dominate the list and hide the interesting queries.
Apply one, then work down the Queries tab from the top. For each query with real impressions, click it and check the Pages tab. It is manual, but a focused regex turns a list of thousands into a list of dozens.
The export method
For a systematic pass, export rather than click. In Performance, use Export → Google Sheets with no filter applied, which gives you the top queries and top pages as separate sheets — and that is precisely the limitation: the standard export does not give you the query-to-page pairing.
To get the pairing you need the Search Console API (the searchanalytics.query endpoint with dimensions set to both query and page), or a connector that calls it for you, such as Looker Studio's Search Console source with both fields as dimensions. With one row per query-page pair, cannibalization is a group-by: any query with more than one page above an impression floor.
The 1,000-row ceiling The Performance UI exports at most 1,000 rows per table, and it samples. On a site of any size that quietly hides the long tail, which is where cannibalization accumulates. The API returns up to 25,000 rows per request with pagination — if the UI export looks suspiciously tidy, this is why.
What Search Console cannot tell you
Three blind spots matter enough to change how you audit.
- Pages with no impressions are invisible. A page that competes but never surfaces contributes nothing to the report, so the most cannibalized pages on a site — the ones so confused that neither ranks — are exactly the ones you cannot see here.
- It shows the symptom, never the cause. Search Console will tell you two URLs are swapping. It will not tell you they swap because forty internal links use the same anchor text for both, which is often the actual mechanism.
- It is retrospective. A page published last week has no data. On a growing content library the newest overlaps are the ones you most want to catch before they compound.
All three blind spots have the same shape: they are about pages and links, not queries. Comparing pages against each other — title and heading overlap, body similarity, and whether internal links point at both with the same anchor — finds what the query data structurally cannot. The free Keyword Cannibalization Checker does that pass over a crawl of your site, and the anchor-text angle is the one worth checking first, because anchor text is how you tell search engines what a page is about.
Use both directions. Search Console confirms that a competition is real and costing you something; a structural crawl finds the competitions that have not surfaced yet. Once you have a confirmed case, how to fix keyword cannibalization covers choosing between consolidating, differentiating and leaving it alone — and the internal-link repair that decides whether the fix holds.
A repeatable quarterly pass
- Run one regex filter per content shape you publish (listicles, how-tos, comparisons). Fifteen minutes each.
- For every query above your impression floor, check the Pages tab for a second URL.
- For each candidate pair, run the 28-day comparison. Only oscillating pairs go on the fix list.
- Separately, crawl the site and check for pages that duplicate each other structurally but have no impressions yet — the pre-symptomatic cases.
- Re-check fixed pairs one quarter later. The success criterion is that the swapping stopped, which shows up before the position improves.
Quarterly is the right cadence for most sites because cannibalization accumulates with publishing volume rather than with time. If you ship a lot of content in a burst — a migration, a bulk import, an agency handover — audit right after the burst instead of waiting for the calendar.
FAQ
Does Search Console have a cannibalization report?
No. There is no built-in cannibalization view — you build the diagnosis from the Performance report by filtering to a query and reading the Pages tab. Google does not label the problem for you, partly because two URLs ranking for one query is often perfectly fine.
How many impressions does a second URL need before it counts?
There is no official threshold. A practical floor is a double-digit percentage of the query's total impressions over 90 days. Below that you are usually looking at Google briefly testing a page, which resolves on its own and is not worth a consolidation.
Can I use regex in the Search Console query filter?
Yes. + New → Query → Custom (regex) accepts RE2 syntax. It is the fastest way to narrow thousands of queries down to the shapes that cannibalize most — listicles, how-tos and comparison terms — and it also supports negative lookahead for excluding brand terms.
Why does the export only give me 1,000 rows?
That is the Performance UI limit per table, and the data is sampled. To get complete query-to-page pairs you need the Search Console API's searchanalytics.query endpoint with both query and page dimensions, which returns up to 25,000 rows per request with pagination.
Will Search Console show cannibalization on a brand-new page?
Not for a few weeks, and this is its main weakness. The report is retrospective, so a page that will compete has to accumulate impressions first. Structural checks on the crawl — title overlap, body similarity, shared anchor text — catch those before any damage shows up in the query data.
Is average position dropping a sign of cannibalization?
It can be, but it is weak evidence on its own — position also drops when competitors improve or the SERP changes shape. The stronger signal is which URL is being served: if the page behind a query keeps changing between periods while your content has not, that instability is the cannibalization tell.
Sources
Links report — Google Search Console Help
Put this into practice
Run the Keyword Cannibalization Checker to see this on your own site, or run the full structural audit for the complete picture — both free, no account required.