When two of your pages chase the same query, Google does not add them together. It alternates them, splits their signals and ranks the pair worse than either would rank alone. That is cannibalization, and most sites over two years old have some.

Here is the find, the diagnosis and the three fixes, in the order that preserves the most value.

Why splitting always loses

page A half the links + clicks page B the other half position ~9 and wobbling one merged page all signals, one URL position ~4 and stable The arithmetic is unforgiving: ranking signals concentrate or they dilute, and the SERP pays concentration.
Google picks one result per site for most queries anyway. Fighting yourself for the slot only weakens whoever wins it.

Find the collisions

Three detection methods, cheapest first.

MethodHowBest for
GSC pages-per-queryFilter one query, open Pages tab, count URLsChecking known money queries
The wobble tellA tracked keyword swapping ranking URL in your trackerCatching it as it happens
site: searchsite:yourdomain.com "keyword"Seeing the contenders as Google does

The wobble tell deserves its own habit: when a keyword's graph shows the ranking URL alternating, that is cannibalization live, not ordinary volatility. Trackers that show which URL ranked make this visible; the cannibalization report automates the sweep.

Diagnose before cutting

Not every shared query is a disease. The question is intent: do the two pages answer the same need, or two needs that happen to share words?

The test never changes: search the query and read what ranks. If the SERP is all one kind of answer, one of your pages is redundant. If the SERP mixes kinds, guides next to products next to comparisons, your two pages may each be chasing a different slot legitimately.

Fix 1: merge (same intent)

Both pages answer the same question: keep the stronger URL, fold the weaker page's unique value into it, and 301 the weaker URL to the winner.

Pick the winner by links, history and current performance, not sentiment. After the redirect, update internal links to point at the winner directly, and expect a few weeks of settling before the concentrated page finds its level.

Fix 2: differentiate (different intents)

Both intents deserve pages, so make each page unmistakably its own: retarget titles and headings so each names its distinct query, cut the overlapping sections from each, and cross-link the pair with descriptive anchors so Google sees a structure instead of a fight.

Differentiation is unfinished until the internal links agree: every link to the pair should choose deliberately, with anchor text matching the target's query.

Fix 3: canonicalize or prune (near-duplicates)

Parameter variants, print versions, tag pages and thin near-copies do not need merging, they need declaring: a canonical tag pointing at the main URL, or removal if nothing links to them and no one visits.

Prevent the next one

Cannibalization is usually a planning failure arriving two years late. Two habits prevent it: keep a registry mapping each target query to exactly one URL, checked before any new page is planned; and pre-publish, search the intended keyword and see whether you already rank with something.

New content should extend your coverage, not re-litigate it. The registry turns that from a wish into a lookup.

The one-line takeaway: find collisions in GSC's pages-per-query view, diagnose by intent with the SERP test, then merge same-intent pages, differentiate distinct ones and canonicalize the duplicates. One query, one page, on purpose, forever.