The first audit I run on every new client account is a cannibalization sweep. It takes about 90 minutes. On 7 out of the last 10 incoming sites, I found at least 1 case of 2 URLs targeting the same keyword without anyone realising it.
The pattern is almost always the same. A previous agency built a service hub, then 6 months later built a blog post or a secondary landing page targeting a phrase that overlaps with the hub. Both pages now compete against each other for the same SERP slot. Google picks 1, ranks it weakly, and the other gets buried.
The client paid for both pages. Neither of them works.
Why this happens so often
The mechanism is straightforward. Most agencies operate on a content-quota model: 4 blog posts a month, 2 landing pages a quarter, whatever the retainer specifies. The pressure is to ship volume. So someone runs keyword research, finds a phrase with decent volume, and assigns it to a new page without checking whether an existing page is already targeting the same intent.
The result: 2 URLs, 1 keyword, and a self-inflicted ranking problem.
The test I run before any new page goes into a content plan
Before I assign a keyword to a new URL, I check whether its SERP overlaps with the SERP of the closest keyword we already target. The rule is straightforward: 3 or more URLs ranking in the top 5 for both keywords means same intent, same page. Different SERPs means 2 pages.
Most cannibalization cases I find could have been avoided by running this single check. It takes about 4 minutes per keyword pair.
Here is the decision framework as I apply it on incoming audits:
| SERP overlap (top 5) | Intent signal | Action |
|---|---|---|
| 5 of 5 URLs shared | Identical intent | 1 page. Pick the strongest existing URL, consolidate. |
| 3-4 of 5 URLs shared | Same intent, slight variation | 1 page. Cover both phrases as H2 sections inside the hub. |
| 1-2 of 5 URLs shared | Adjacent but distinct | 2 pages. Cross-link, ensure each has a clearly different angle. |
| 0 URLs shared | Different intent entirely | 2 pages. Treat as unrelated for architectural purposes. |
What this looks like on a real client site
One incoming Tenmar audit found a service hub for glass railing installation in BC and a separate blog post titled something close to "how much does glass railing installation cost in BC." Both pages targeted phrases that returned 4 of the same 5 URLs in the top 5. Same intent, 2 pages competing.
The fix was to fold the cost content into the hub as a properly structured H2 with a pricing table, then 301 the blog post to the hub. We did the same exercise across the site as we expanded from 5 pages to 85+. 4x lead generation in 10 weeks, and a meaningful chunk of that was redirected internal authority finally pointing at a single canonical page per intent.
The lesson is the inverse of what most agencies tell clients. More pages is not the goal. The right number of pages is the goal. Sometimes the highest-leverage move is deleting a URL.
The hub-spoke rule I do not break
If the hub targets "private spa Vancouver," no spoke page can target "private spa Vancouver." That is non-negotiable. The hub owns that exact keyword. Spokes target adjacent phrases with their own SERPs: "private spa with sauna Vancouver," "couples spa Vancouver," "private cold plunge Vancouver." Each spoke has been SERP-confirmed to have a different top 5 than the hub.
This is the analysis I keep internal. The client sees the content plan, not the spreadsheet of overlap percentages I used to build it. Showing the work is not what the client is paying for. Making sure the work is correct is.
How to spot it on your own site
If you want to run a 30-minute version of this audit yourself, do this. Pull your top 50 ranking pages from Google Search Console. Sort by clicks. For any keyword that has multiple URLs receiving impressions, open the SERP for that keyword and check whether 1 of your URLs is consistently outranking the other, or whether they trade positions. Trading positions is the signal. It means Google is undecided about which of your pages should serve that intent. That is cannibalization in real time.
The fix is almost always consolidation, not deletion. The losing URL gets folded into the winning one as a section, then 301-ed. The combined page becomes stronger than either was on its own.
The takeaway
Volume of pages is the wrong metric. Coverage of distinct intents is the right metric. If you cannot draw a clean line between what 2 pages on your site target, neither of them is going to rank well. The fastest growth I have seen on incoming accounts has come from publishing fewer pages and making each one own its keyword cleanly.
Liam Lytton is the founder of The 66th, an SEO and GEO agency in Vancouver that has driven results including 1,500% organic traffic growth, 5x revenue, and 4x lead volume for clients across North America.