Overview
Keyword cannibalization happens when two or more pages on the same site compete for the same query, and Google cannot decide which to rank. The result is that neither page wins. Both bounce around in positions 8 to 20, link equity splits, and a competitor with one focused page outranks both. The fix is a mapping rule: each primary keyword belongs to exactly one canonical page, and supporting pages target adjacent variations.
Map one primary keyword to one canonical page
Maintain a keyword map alongside the content tree. Each row is a page; each page owns one primary keyword and zero or more supporting variations.
| URL | Primary keyword | Supporting variations |
|---|---|---|
| /postgres-indexes | postgres indexes | postgres index types, when to add a postgres index |
| /postgres-btree | postgres btree index | btree index postgres, btree vs hash postgres |
| /postgres-gin | postgres gin index | gin index postgres, gin vs gist postgres |
The map enforces intent separation upfront. Before publishing a new page, check the primary keyword against the map. If it is already claimed, the new page targets a variation or merges into the existing page. See keyword-research and content-clusters for the broader topical-map pattern.
Detect cannibalization in GSC Performance by query
The detection loop uses Search Console.
- Open Performance > Search results.
- Set the date range to the last 90 days.
- Click the Queries tab.
- For each query that drives meaningful traffic, click the row, then switch to the Pages tab.
- If more than one page receives clicks for that query, the query is cannibalized.
The pattern to look for: two pages where each receives between 20 and 80 percent of the clicks on the query, and neither sits in position 1 to 3. A page receiving 95 percent of clicks for a query is winning cleanly; the other URL is incidental. See master-google-search-console for the full GSC workflow.
Fix by merging when the pages overlap substantially
If two pages cover the same intent with overlapping content, merge them. This is the most common fix.
- Pick the stronger page based on backlinks, current position, and content depth.
- Move the unique content from the weaker page into the stronger page.
- 301 the weaker URL to the stronger URL. Do not 404; the inbound links carry ranking signal.
- Update every internal link that pointed at the weaker URL to point at the stronger one directly. A 301 passes most equity, but a direct internal link passes more. See redirects and internal-linking.
- Re-submit the stronger URL through the sitemap
lastmodand through IndexNow.
The merge takes 30 to 90 days to fully settle. The stronger page typically gains the combined click volume minus a 5 to 15 percent redirect decay.
Fix by differentiating intent when the pages serve distinct purposes
If the two pages overlap on keyword but serve different intents (one informational, one commercial; one tutorial, one reference), the fix is to sharpen each page toward its intent.
- Rewrite each H1 and first paragraph to make the intent unambiguous. “How postgres indexes work” (informational) vs “Postgres index management for production teams” (commercial).
- Add structured-data signals that match the intent:
HowToschema on the tutorial,ProductorServiceon the commercial page. See structured-data. - Cross-link explicitly: the informational page links to the commercial page with anchor text that signals the intent shift (“hire a team to do this” or “production setup guide”).
- Track each page against its own keyword, not the shared one.
This fix is harder than a merge and slower to take effect, but it preserves two pages where two pages are warranted.
Fix with noindex only when the weaker page serves an internal purpose
If one of the two pages exists for internal navigation, a campaign landing page, or a non-search purpose, noindex it.
<meta name="robots" content="noindex,follow" />Examples that warrant noindex: a category page that exists for site navigation but should not compete with the main pillar page, a thin tag archive, a duplicate page for email-campaign tracking. The follow keeps the page passing link equity to its outbound links; the noindex removes it from the competition.
Do not use rel="canonical" between two competing pages on the same site. Canonical is for duplicate URLs of the same content (parameter variants, protocol variants). Pointing one editorial page’s canonical at another editorial page loses the long-tail traffic on the second page and does not consolidate the way 301 does.
Common errors
- Solving cannibalization with
rel="canonical"between pages. Canonical is for URL duplicates, not for editorial deduplication. Long-tail traffic on the canonicalized page dies. - Merging without a 301 redirect. A 404 on the old URL throws away every inbound link. Always redirect.
- Assuming the page Google ranks is the page you want to rank. Sometimes the older, weaker page outranks the newer, better one. Decide which page should win by content quality, not by current position, and merge in that direction.
- Treating sibling pages in a cluster as cannibalization. A pillar page and ten cluster pages on related sub-topics are not competing; they reinforce each other. See content-clusters.
- Detecting cannibalization on a brand or navigational query. The homepage, the about page, and the contact page all ranking for the brand name is correct behavior.