Prioritization Commercial BOFU

How to detect keyword cannibalization between two URLs

Two URLs ranking for the same query, both stuck on page two: identify the pair, decide consolidate-or-differentiate, and confirm recovery in two recrawl windows.

Two URLs from the same domain competing for the same search query, neither winning a stable position
Both URLs earn impressions on the same query; Google rotates between them and the combined CTR never recovers.

Two URLs on the same domain rank for the same query, both stuck on page two, neither breaks through. Google does not know which page is the canonical answer, so it averages your authority across both. This is keyword cannibalization. The classic symptom: average position around 8–12, impressions steady, clicks well below benchmark CTR for that position. Spotting it from GSC alone takes hours; setting up an alert for new cannibalization events takes ten minutes.

What the data looks like before you act

  • In Site → GSC → Queries: filter to queries with more than one URL appearing in the top 20.
  • For each, look at the per-URL trend: typically you see two URLs leapfrogging each other week to week, neither stabilizing in the top three.
  • CTR at the same average position is materially below the expected SERP CTR curve — Google rotates between your URLs and burns half the impressions.

2-UA setup that surfaces this automatically

  1. Connect Google Search Console to the project (Site → GSC → Connect).
  2. Open the Queries view and add a filter: distinct URLs per query > 1.
  3. Sort by impressions — high-volume cannibalized queries are the only ones worth time this sprint.
  4. For each ambiguous query, add the top two ranking URLs to Site → Keywords as a tracked pair with a single target position (e.g. 3).
  5. Enable the drop-step alert so any 10-position shift on either URL fires; cannibalizing pairs see big shifts during Google rotations.

The signal you wait for

A clean cannibalization alert is a pair of URLs where:

  • Both pages collectively earn impressions on the same query.
  • Their combined click count is lower than a single-page benchmark at their best position.
  • Their position lines cross each other in the GSC trend chart — sometimes weekly.

Ten-minute decision playbook

  1. Compare intent: blog post (informational) vs product/category page (commercial).
  2. If intent matches: pick the stronger page and 301-redirect the weaker one. Update internal links pointing at the redirected URL to point at the canonical instead.
  3. If intent differs: rewrite the H1, intro, and meta description of one page to disambiguate. Push the blog page toward "what is X / how does X work"; push the commercial page toward "buy X / X pricing".
  4. Add both URLs to Tracked URLs with field tracking on title and H1, so subsequent CMS rewrites do not re-merge them.
  5. Re-check the query in GSC after 14 days. Cannibalization usually resolves inside two recrawl windows when the disambiguation is clean.

Three setups that produce silent cannibalization

  • Blog covering the same topic as a money page — the most frequent cause; content teams ship "What is X" while the product team owns "Buy X".
  • Localized categories sharing English copy — same query in en-US and en-GB resolves to two competing URLs because hreflang was never set.
  • Faceted URLs ranking instead of the parent category?color=black outranks the bare category page; both then split the same query.

Connect GSC inside a project to surface cannibalizing query pairs automatically, then add each pair to keyword tracking for continuous monitoring.