How to Find and Fix Keyword Cannibalization in WordPress

Keyword cannibalization gets blamed for a lot of things it didn’t do. Somebody notices two of their posts showing up for the same search, reads a scary article, and starts deleting content. Most of the time that’s the wrong move. Sometimes, though, two pages really are fighting over one search, Google keeps flipping between them, and neither gets anywhere. This guide is about telling those two situations apart on a WordPress site, finding the real cases with free tools, and fixing them in the right order.
What is keyword cannibalization, really?
It’s when two or more pages on your site target the same search intent closely enough that Google can’t settle on one. Instead of one strong page sitting at position 4, you get two pages taking turns at positions 14 and 19. Clicks are split, links are split, and the page you’d actually want people to land on doesn’t build any momentum.
The key word there is intent, not keyword. Two pages can share a keyword without competing at all.
- A post called “How to season a cast iron pan” and a product page for a cast iron pan both mention “cast iron pan.” Different intent, no problem.
- Two of your URLs sitting at positions 2 and 3 for one query? That’s not cannibalization. That’s a good day. Leave it alone.
What it does look like: two posts written a year apart that answer the same question, a “2025” and a “2026” version of the same roundup both still live, or a tutorial and a “complete guide” that ended up covering identical ground. The symptom in the data is pages that swap for one query over weeks, with both stuck lower than either should be.
How do you find keyword cannibalization in Google Search Console?
Search Console is free, it’s Google’s own data, and it’s the best place to start. Here’s the process we use.
- Open Performance > Search results. Set the date range to at least the last 3 months. Cannibalization is about pages swapping over time, and a 7 day window hides that.
- Go to the Queries tab and click a query you care about. Search Console adds it as a filter at the top. You can also type one in via Add filter > Query.
- With the query filter on, switch to the Pages tab. This now lists every URL on your site that got impressions for that query.
- If only one page shows, or one page has nearly all the impressions and clicks, you’re fine. Move on.
- If two or more pages each have a real share of impressions, click into each one (that adds a page filter alongside the query filter) and turn on Average position in the chart. Look for the lines taking turns: page A ranks for a while, drops out, page B appears, and so on.
That swapping pattern is the thing you’re hunting. Two pages with steady, separate positions usually means Google is happy showing both for slightly different reasons.
A couple of caveats. Search Console hides some low-volume queries for privacy, so very small searches may not show up. And it only tells you about queries you already get impressions for. If two posts are competing so badly that neither ranks at all, you won’t see it here. That’s where the next two checks help.
Is a site: search good enough?
It’s a rough check, not a measurement. Type site:yourdomain.com cast iron care into Google and look at what comes back. If three of your posts have nearly the same title and snippet, you’ve probably written the same article more than once.
Don’t read the order of site: results as rankings. It isn’t. It just shows which pages Google has indexed that match those words. Use it to spot duplicates quickly, then confirm in Search Console.
Inside WordPress you can do something similar without leaving the dashboard. Search your posts list for the phrase, and if you use Yoast, Rank Math or a similar plugin, sort or scan by focus keyphrase. Two posts with the same focus keyphrase is a strong hint that someone (often past you) wrote the same post twice.
Are your own links causing it?
This one gets talked about far less than it should. Internal anchor text is one of the clearest signals you give Google about what a page is about. So what happens when you link the words “cast iron care” to one post in March, then to a different post in September, and to a third from your sidebar widget?
You’ve told Google three times that three different pages are the page about cast iron care. It does take that into account.
It happens naturally. You write a better post, you start linking to it, and the old links never get updated. Over a couple of years a site builds up dozens of these split anchors. If you want the background on how anchors work as a signal, our guide to anchor text best practices covers it.
By hand, search your content for your 10 or 20 most important phrases and check where every link goes. Pick one page per phrase, and make every link with those words go there.
How do you fix keyword cannibalization?
Work through these roughly in order. The first one fixes the most cases.
1. Merge the pages and 301 redirect
If two posts really cover the same thing, combine them. Pick the stronger one as the survivor (more clicks, more links pointing in, better URL), move anything useful from the weaker post into it, then delete the weaker post and add a 301 redirect from its URL to the survivor. If you’re unsure which redirect type to use, we explain the difference in 301 vs 302 redirects in WordPress. For cannibalization it’s almost always a 301.
2. Differentiate the intent
Sometimes both pages deserve to exist but drifted into each other. A beginner tutorial and an advanced guide can live side by side if they’re clearly different. Rewrite titles, headings and intros so each one answers its own question, and change the focus keyphrase on one of them. “How to season cast iron” and “Fixing sticky cast iron seasoning” aren’t the same search.
3. Repoint your internal links
Whatever you decide, your links should agree with it. Every link that uses the topic phrase should go to the one page you picked. Even after a merge, links to a redirected URL add a hop you don’t need.
4. Canonical tags, and when not to
A canonical tag tells Google “this page is a copy, the real one is over there.” It fits when you need both URLs to stay live for users, like near-duplicate product variants or a printable version. It’s a hint, not an instruction, and Google ignores it when the pages aren’t actually near-duplicates. So don’t use a canonical to “fix” two genuinely different articles. Merge them or differentiate them instead.
5. Noindex, rarely
Noindex removes a page from search but keeps it on the site. That’s useful for thin tag archives or internal pages nobody searches for. For two competing articles it’s usually the wrong tool, since you throw away whatever the noindexed page had earned. Reach for it last.
Symptom to likely fix
| What you see | Likely fix |
|---|---|
| Two posts answer the same question, one is clearly better | Merge into the better one, 301 the other |
| A “2025” and “2026” version of the same post are both live | Update one, 301 the old one to it |
| Two pages overlap but serve different readers | Differentiate titles, headings and focus keyphrases |
| Same anchor phrase links to different pages | Repoint those links to one page |
| Two URLs must stay live but are near-identical | Canonical to the main one |
| Two of your pages at positions 2 and 3, steady | Nothing. That’s not a problem. |
The mistake to avoid: deleting without a redirect
We see this often. Someone finds two competing posts, deletes the weaker one, and stops there. Now every link to that URL, from other sites and from your own posts, hits a 404. Any rankings it had are gone rather than transferred.
Always redirect a deleted post to its closest replacement. Then update your own links so they point straight to the new URL. If you’re doing this across a lot of old content at once, run it as part of a proper content audit so you keep a record of what went where.
One more: give changes time. After a merge or a repoint, Google needs to recrawl the pages involved. Check Search Console again after four to six weeks, not four days.
How our plugin helps (and what it can’t see)
Full disclosure: this is our plugin, and Competing pages is in Pro.
JNK Linkweave Pro has a report under Linkweave > More tools > Competing pages. It looks at two things on your own site.
The first section, Same link words, different pages, lists link text that points at two or more different pages, matched regardless of capitals. Everyday phrases like “here” or “read more”, and words that point at lots of pages, are set aside in a collapsed list instead of cluttering the report. Each group suggests one page to keep. Next to each page there’s a Send all these links here button, which rewrites the links with those words in your posts so they point at that page. Only links with that exact text and address are changed, and every change is listed in the URL changer’s history, where you can undo it.
The second section, Pages aiming at the same search, groups posts that share a focus keyphrase in Yoast, Rank Math, All in One SEO or SEOPress, or have almost the same title (it ignores numbers, so “Best grinders 2025” and “Best grinders 2026” land together). For these it gives you an Edit button and a link that opens the URL changer with the old and new addresses filled in, so you can move links to the suggested page.
How it picks the suggested page: if you’ve imported a Search Console queries export, the page with the most matched clicks wins. Otherwise it’s the page the most posts link to, and after that the link most often used with those words, or for duplicate posts, the one published first.
Now the honest limits. It works from your site’s own content and links. It doesn’t check Google rankings or watch positions swap, so it can’t tell you whether Google is actually confused. The Search Console part is a CSV you upload yourself, and the queries are matched to posts by their wording, which is an estimate. It only counts links saved in your posts, not ones added by auto-link rules. And it doesn’t merge posts or set up redirects. Use the Search Console steps above to confirm a real problem, then use the report to clean up the links.
Frequently asked questions
Is it bad if two of my pages rank for the same keyword?
Not by itself. If both pages hold steady positions, especially near the top, Google is happy showing both and you can leave them. It becomes a problem when the pages keep swapping places for the same query and both sit lower than either should.
How long does it take to see results after fixing cannibalization?
Usually a few weeks. Google has to recrawl the merged page, follow the redirect and pick up your updated links. Check Search Console again after four to six weeks and compare the same date range length before and after.
Should I use a canonical tag or a 301 redirect?
Use a 301 when the weaker page no longer needs to exist on its own, which covers most cannibalization cases. Use a canonical only when both URLs have to stay reachable for visitors and the content is nearly identical.
Can category and tag pages cannibalize my posts?
Sometimes, mostly when a tag or category has the same name as a post and only lists one or two posts. Merging thin tags into broader ones or setting them to noindex usually sorts it out, while a well curated category archive rarely causes trouble.