Technical5 min read

Keyword cannibalization on WordPress sites

WordPress keyword cannibalization is mostly generated by the CMS rather than written by anyone. Out of the box, WordPress creates an archive page for every tag, every category, every author and every date — each a thin page whose title is a keyword and whose content is a list of excerpts from posts that already rank. Add a few years of posts on one subject and you have a library that competes with itself in two directions at once: archives against posts, and posts against each other.

Run the Keyword Cannibalization Checker on your site — free, no account.

Check your WordPress site free

What WordPress generates that you did not write

Before auditing your posts, audit what the platform publishes on your behalf.

  • Tag archives — /tag/internal-linking/ is a page whose title is a keyword and whose body is a list of excerpts. If you use tags freely, you have hundreds of these.
  • Category archives — the same shape, but usually fewer and more meaningful.
  • Author archives — one per author, with no unique content and no search demand for most sites.
  • Date archives — /2024/03/, duplicated by year and month, with no reason to exist.
  • Paginated archives — page 2, 3, 4 of each of the above.
  • Attachment pages — a page per uploaded image, historically one of the biggest sources of thin indexable URLs on WordPress.

The tag archive trap A tag archive titled with your target keyword will sometimes outrank the post you wrote for that keyword, because its title matches the query exactly. You then have a list of excerpts ranking where an article should be — a worse result for the reader and a worse conversion for you.

A default archive policy

What to index on a typical blog
  archive type      index?   reason
  ----------------  -------  ----------------------------------
  category          yes*     if it has an intro and real intent
  tag               no       thin, duplicative, keyword-titled
  author            no       unless authors are the draw
  date              no       no demand, pure duplication
  attachment        no       redirect to the parent post
  search results    no       generates a page per query typed
*A category archive earns indexation by having unique introductory copy and a distinct purpose.

In Yoast or Rank Math this is a handful of toggles: noindex tag archives, author archives and date archives, and redirect attachment URLs to the parent post. Both plugins default attachment redirection on now, but sites migrated from older versions frequently still have thousands of attachment pages indexed.

The category exception is worth taking seriously rather than treating as a formality. A category archive with a genuine introduction, a curated ordering and a clear job is a legitimate hub page. One that is a bare list of excerpts is a tag archive with a different URL prefix.

Post-against-post cannibalization

Once the archives are settled, the remaining problem is the one every content library develops: posts covering the same ground, written years apart.

  • The annual rewrite — a “best X for 2024” post published alongside the 2023 version rather than replacing it. The most common single case on WordPress.
  • The topic drift — two how-to posts commissioned eighteen months apart that converged on the same query.
  • The imported archive — a site migration that brought across both the old and new version of a post.
  • The plugin-generated related posts — not cannibalization itself, but a mechanism that spreads identical anchor text across many destinations.

The annual-rewrite case has a specific fix that is better than merging: keep one evergreen URL without a year in it, update it in place, and 301 the dated versions to it. You keep the accumulated authority instead of restarting each January.

The related-posts anchor problem

This one is specific to WordPress and rarely discussed. Related-post widgets, popular-post sidebars and tag clouds generate large numbers of internal links automatically, and they usually use the post title as the anchor for every instance.

That is fine until two posts have similar titles, at which point the widget is repeating near-identical anchor text pointing at two destinations across every page on the site. You are telling search engines, at scale, that both pages are about the same thing — which is how borderline overlap becomes measurable cannibalization. The mechanism is described in what is anchor text, and the fix is usually editorial rather than technical.

Widget links are not editorial links Automatically generated related-post links carry far less weight than a link written into a paragraph, because they appear identically on every page. If your only internal links to a post come from widgets, it is closer to orphaned than the link count suggests — see contextual vs navigation links.

The audit, in order

  1. Check what is indexed. In Search Console, Pages → Indexed, and look for /tag/, /author/, /20xx/ and attachment URLs. This alone often removes most of the problem.
  2. Set the archive policy in your SEO plugin and let the noindex propagate before judging anything else.
  3. Take your top 30 queries and check the Pages tab for each — the method in finding cannibalization in Search Console.
  4. Crawl the site and group posts by title similarity to catch the pairs that have not surfaced in query data yet.
  5. Before merging anything, confirm it is competition rather than duplication, and check the cases where two ranking pages are fine.
  6. After consolidating, repoint internal links directly at the survivor and rewrite the anchors.

Doing step 1 first matters more than it sounds. On a lot of WordPress sites the archives account for most of what looks like a cannibalization problem, and clearing them changes which of your posts appear to compete — auditing the posts before the archives means auditing against noise.

FAQ

Should I noindex WordPress tag archives?

For most sites, yes. Tag archives are thin pages titled with a keyword and filled with excerpts from posts that already rank, so they compete with the articles you actually wrote. Category archives can earn indexation if they have genuine introductory copy and a distinct purpose.

Do categories and tags both cause cannibalization?

Tags far more than categories, because most sites have many more tags than categories and apply them loosely. A site with 40 categories and 600 tags has 600 keyword-titled thin pages, and those are the ones that end up outranking real articles.

What are attachment pages and do they matter?

WordPress historically created a separate page for every uploaded image. They have essentially no content and can number in the thousands. Modern Yoast and Rank Math redirect them to the parent post by default, but sites migrated from older setups often still have them indexed.

Should I republish my yearly post with a new year in the URL?

No. Keep one evergreen URL with no year in it and update it in place, redirecting any dated versions to it. Publishing a new URL each year restarts the accumulated authority and leaves the previous version competing with the new one.

Can related-posts plugins cause cannibalization?

Indirectly, yes. They generate large numbers of internal links using post titles as anchor text, so two posts with similar titles end up with near-identical anchors repeated site-wide. That tells search engines both pages cover the same thing, which can turn mild overlap into measurable competition.

Does Yoast have a cannibalization feature?

Yoast Premium flags when you assign the same focus keyphrase to more than one post, which catches the cases you declared. It does not detect pages that compete without sharing a declared keyphrase, which is most of them — for that you need query data or a structural comparison across the crawl.

Put this into practice

Run the Keyword Cannibalization Checker to see this on your own site, or run the full structural audit for the complete picture — both free, no account required.

What the fix list looks like

82

Health

B+

Grade

Strong structure with a few high-impact internal links to add. Acting on the list below could unlock a meaningful lift in organic visibility.

Internal links to add

example.com/blog/how-to-improve-seoexample.com/features/internal-linking
High

Anchor: internal linking strategy

Placement: Paragraph 3, sentence 2

example.com/blog/content-marketing-guideexample.com/pricing
Moderate

Anchor: structural SEO platform

Placement: Paragraph 6, sentence 1

example.com/guides/keyword-researchexample.com/blog/topic-clusters
Moderate

Anchor: build topic clusters

Placement: Paragraph 2, sentence 4

14

Quick wins

12

Orphan pages

9

Anchor gaps