Cannibalization is when two or more of your own URLs rank for the same query. Google picks one, often inconsistently, and neither page performs as well as a single consolidated page would.
Steps
-
Pull query + page pairs.
google_search_console.querywithdimensions: ["query", "page"], a 90-day window ending 3 days ago,rowLimit: 1000. A long window matters here, since flip-flopping between URLs only shows up over time. -
Group by query. Keep queries returning two or more distinct pages with meaningful impressions (set a floor, e.g. each page above 50 impressions, and state it).
-
Rank the severity. Worst first:
- Both pages rank on page one for the same query β clearest, most costly case.
- Pages alternate across the period, neither stable β classic ambiguity signal.
- One page dominant, another with trivial impressions β usually benign; don't over-report it.
-
Classify the intent overlap. Fetch what each competing page primarily ranks for overall. Two pages sharing one query but otherwise serving different query sets is normal overlap, not cannibalization. Only pages whose overall query sets substantially overlap need consolidating.
-
Report. Per conflict: the query, competing URLs, impressions/clicks/position for each, and a recommendation: consolidate and redirect, differentiate the targeting, or leave alone. Include "leave alone" cases explicitly so the reader knows they were considered.
Gotchas
- Overlap is not automatically a problem. A category page and a blog post both surfacing for one broad term is often fine. Recommending a merge on thin evidence destroys working pages.
- Never recommend a redirect without checking the traffic on both URLs. Redirecting the page that actually earns the clicks is a self-inflicted outage.
- Search Console attributes to the canonical URL. If two URLs share a canonical you'll see one page, not two. Absence of cannibalization here doesn't prove absence in the index.
- This needs a long window. Over 7 days, normal fluctuation looks like cannibalization.