WordPress Tag Archives: Noindex, Delete, or Keep?

WordPress Tag Archives: Noindex, Delete, or Keep?

WordPress tag archives are indexable from the moment you create the term, and for most of the tags on a typical blog the right answer is to delete them rather than hide them. Noindex earns its place on the handful of archives you genuinely use to move readers around the site; everything else is a tag that should never have existed, and a deleted term cannot quietly compete with the post it was supposed to describe.

This is not a hypothetical problem on this site. WPFairs has 84 posts and more than 800 tags. One theme tutorial here carries 37 of them, including How To Add Breadcrumbs In Generatepress Theme, How To Add Breadcrumbs In Generatepress WordPress Theme and Adding Breadcrumbs In GP Using Hooks Element as three separate terms with three separate URLs. Three near-identical variants of “What is DA and PA in SEO” exist as three more. Each one was a page the site invited search engines to look at, and none of them was ever written for a reader.

The short version, if you only read one box

Under roughly ten thousand pages, crawl budget is not your problem — Google’s own documentation says as much. Thin, near-duplicate listing pages are. So: delete tags that describe one or two posts, noindex the few you use as on-site navigation, and index only the ones you would happily link to from a menu. One more thing worth knowing before you start: a noindex rule takes effect only when Google recrawls that URL, which can take months, so it is worth getting the decision right the first time.

What WordPress tag archives actually are

Every term you create in the post_tag taxonomy gets a URL at /tag/<slug>/, renders through your theme’s archive template, and lists the posts carrying that term with pagination. That is the whole feature. WordPress adds no noindex rule to it, because core has no opinion about whether the page is worth indexing.

Core does have an opinion about your sitemap, and it is a more sensible one than most people expect. post_tag is a public, viewable taxonomy, so it appears in wp-sitemap.xml — but the taxonomy sitemap provider queries terms with hide_empty set to true, so a tag attached to zero posts is left out. That detail matters when you audit: your 500 empty tags are not in the sitemap, yet their URLs still resolve, still render a page, and still get crawled, because the tag lists at the bottom of your old posts link to every single one of them.

The content of that page is the problem. A tag archive shows post titles and excerpts that already appear on your home page, in your category archives, in your sitemap and on the posts themselves. When the tag holds one post, you have published a title-only restatement of an article at a second URL. When the tag holds two posts and a near-duplicate tag holds the same two posts, you have done it twice.

If you are on a block theme, the template doing the rendering is archive — or taxonomy-post_tag if your theme ships one — and you can edit it in the Site Editor without touching PHP. Customizing a block theme: theme.json or a child theme? covers where those changes should live so they survive a theme update.

Audit your tags before you decide anything

You cannot make a sensible call from the Tags screen in the admin, because it paginates at 20 and sorts alphabetically. Over SSH, three commands give you the actual shape of the problem in about ten seconds.

# Your 40 busiest tags, post count first.
# Count leads the CSV deliberately, so a comma inside a tag name
# cannot shift the column you are sorting on.
wp term list post_tag --fields=count,term_id,name --format=csv \
  | tail -n +2 | sort -t, -k1 -rn | head -40

# How many tags are attached to nothing at all?
wp term list post_tag --fields=count --format=csv \
  | tail -n +2 | grep -c '^0$'

# Tag names longer than four words. These are almost never real tags.
wp term list post_tag --field=name | awk 'NF>4'

Read the first list from the bottom up rather than the top down. The top is fine — those are your real topics. The bottom is where the decision lives, and on most sites it is a long tail of terms with a count of 1 or 0.

Two numbers are worth writing down before you change anything: how many tags you have in total, and how many have a count above three. On this site the second number is a rounding error against the first. If that ratio holds for you, you are not looking at a tagging system that needs tidying. You are looking at a keyword field that someone used as a notes app, and the cleanup is larger than the tags themselves.

While you are in there, run the counts again from scratch. Term counts drift when posts are deleted or bulk-edited, and an audit built on stale counts will tell you a tag is empty when it is not.

# Recalculate term counts from the actual relationships
wp term recount post_tag category

No SSH access? The Site Health screen will not count your tags, but it will tell you whether you have the tooling and the headroom to do this comfortably — WordPress Site Health: how to find and fix common problems walks through reading it. Without a shell, do the audit in batches from the Tags screen and expect it to take an evening rather than a coffee break.

The criteria I use to decide

State the test before you start applying it, otherwise you will talk yourself into keeping everything. These are the questions I ask about a tag archive, in the order I ask them.

Would I link to this page from a menu? If the answer is no, it is not a destination, and a page nobody would link to is not a page worth indexing. This single question resolves about nine tags in ten.
Does it hold at least four or five posts? Below that there is nothing to browse. The exact threshold matters less than having one and applying it consistently — pick a number and stick to it rather than judging each tag on its merits, which is how 800 tags happen.
Is the name a noun phrase of one to three words? core web vitals is a tag. How To Add Breadcrumbs In Generatepress WordPress Theme is an article title that got pasted into the wrong box. Sentence-shaped and question-shaped terms are always deletions, whatever their post count.
Does a category already cover it? A tag that duplicates a category gives you two URLs listing the same posts and no reason to prefer either. Keep the category.
Does a near-duplicate tag exist? WooCommerce, woocommerce plugins and Best WooCommerce Plugins are one tag wearing three hats. Merge into the shortest sensible name, then delete the rest.
Does it rank or get clicks today? Worth checking, and worth being honest about: a tag archive that genuinely pulls search traffic is a page you should improve, not hide. In my experience that is a very short list, but it is not always empty, so look before you bulk-delete.
Will this tag ever apply to a second post? If it was invented for one article, its future is to stay at one. Delete it now rather than keeping a hidden page alive on the theory that you might write the companion piece.

Run those questions against each term and the three-way decision falls out. On a narrow screen the table below stacks into one card per situation.

What the tag looks likeDo thisWhy
One or two posts, name is a sentence or a questionDelete the termIt describes a single article, which already has a URL. There is nothing to preserve and nothing to hide
Zero posts, left over from a deleted articleDelete the termNot in your sitemap, but still a live URL rendering an empty archive, and still linked from wherever it survives
Near-duplicate of a tag you are keepingReassign the posts, then deleteTwo URLs listing the same posts split whatever value either had. Consolidating is the only version of this that helps
Duplicates a category exactlyDelete the tagCategories are hierarchical and usually in your navigation. The tag is the redundant copy
Four or more posts, real topic, used in menus or widgetsKeep and index itIt is a browsable page a reader might want. Add a term description so it is not just a list of titles
Useful for on-site navigation, but thin as a landing pageKeep, set noindexThe link still works for readers and still passes internally. It simply stops asking to be a search result
Gets real search clicks todayKeep, index, improve itWrite an actual introduction on it. A ranking archive is a content opportunity, not a technical problem
The default is delete. Noindex is for the narrow case where the archive has a job on the site but no business in search results.

Notice that “noindex everything” is not on that list, despite being the advice you will read most often. Hiding 800 pages leaves you with 800 pages to maintain, 800 URLs in your internal link graph, and an admin screen you still cannot use. Noindex solves an indexing problem. Most tag bloat is not an indexing problem — it is a data-entry problem that happens to be visible to Google.

How to noindex WordPress tag archives

Pick one method and only one. Two things writing a robots meta tag for the same URL is how you end up with a noindex you cannot find the source of six months later.

MethodWhat it doesEffect on your sitemapWhen to use it
Yoast SEO: Yoast SEO → Settings → Categories & Tags → Tags, search appearance toggleOutputs noindex on tag archivesYoast also drops tags from its own sitemap, so the two stay consistentYou already run Yoast. This is the least surprising option
Rank Math: Rank Math SEO → Titles & Meta → Taxonomies, robots meta for tagsSame output, per-taxonomy robots controlsHandled alongside the robots settingYou already run Rank Math. There is also a separate global option for noindexing empty archives
A four-line plugin using the wp_robots filternoindex, follow on is_tag() onlyNo effect — remove tags from the core sitemap separatelyNo SEO plugin, or you want this in version control rather than in a settings screen
A Disallow line in robots.txtBlocks crawling. Does not remove anything from the indexNoneEssentially never, for this job. See the warning below
Admin paths are current as of Yoast and Rank Math releases shipping in late 2026; both vendors move their settings screens around, so expect the labels to differ slightly from the wording above.

Do not use robots.txt to deindex a tag archive

Google’s documentation is explicit about this: for a noindex rule to work, the page must not be blocked in robots.txt, because a crawler that never fetches the page never sees the rule. Block and noindex together is the one combination guaranteed to leave the URL sitting in the index indefinitely. Google also states plainly that it does not support noindex directives in robots.txt. Choose crawling control or indexing control, and for this job you want indexing control.

If you are not running an SEO plugin, this is the whole implementation. Drop it in a site-specific plugin rather than functions.php so it survives a theme change:

<?php
/**
 * Plugin Name: Noindex Tag Archives
 */

// wp_robots_no_robots() sets noindex, and adds follow while the site
// is public — so internal links from the archive still count.
add_filter(
	'wp_robots',
	function ( array $robots ) {
		return is_tag() ? wp_robots_no_robots( $robots ) : $robots;
	}
);

// The robots meta tag and the sitemap are separate systems.
// Leaving tags in wp-sitemap.xml while noindexing them is
// a mixed signal with no upside.
add_filter(
	'wp_sitemaps_taxonomies',
	function ( array $taxonomies ) {
		unset( $taxonomies['post_tag'] );
		return $taxonomies;
	}
);

The wp_robots filter and wp_robots_no_robots() both landed in WordPress 5.7, so on 7.1 you are well clear of any compatibility question. If Yoast or Rank Math is active, delete this snippet and use the setting instead.

Then verify it, because a robots meta tag is exactly the kind of change that silently fails. Load a tag archive and look at the source:

curl -s https://example.com/tag/your-tag/ | grep -i 'name="robots"'
# Expect: <meta name="robots" content="noindex, follow" />

Seeing two robots meta tags in that output means you have two systems fighting, which is the problem the first paragraph of this section was about. Seeing none means your SEO plugin is filtering the output further down the chain, or page caching is serving you a copy from before the change.

Deleting tags without breaking anything

Take a database backup you have actually restored

Deleting a term removes rows from wp_terms, wp_term_taxonomy and wp_term_relationships, and there is no undo and no trash for terms. Your posts are untouched — they simply stop being associated with the term — but if you delete the wrong 400 tags, reattaching them by hand is not realistic. Take a snapshot, and take it on a host where you have restored one before.

Work the list in two passes. The first pass prints what would be deleted and deletes nothing:

# Pass 1 — dry run. Read this list properly before going further.
wp term list post_tag --fields=count,term_id,name --format=csv \
  | tail -n +2 | awk -F, '$1==0'

# Pass 2 — delete only the terms attached to nothing.
wp term list post_tag --fields=count,term_id --format=csv \
  | tail -n +2 | awk -F, '$1==0 {print $2}' \
  | xargs -r -n1 wp term delete post_tag

Empty terms are the free win: nothing links to them from a post, they are not in your sitemap, and deleting them costs you nothing. Terms with a count of 1 need a second look, because that one post is still linking to the archive from its tag list, and because occasionally a one-post tag turns out to be a real topic you simply have not written about twice yet.

For merging, reassign before you delete. wp term delete does not move posts anywhere — it drops the relationship and leaves the post with one fewer tag:

# Everything tagged "Best WooCommerce Plugins" should be "woocommerce"
wp post list --tag=best-woocommerce-plugins --format=ids \
  | xargs -r -d' ' -I{} wp post term add {} post_tag woocommerce

# Only now remove the old term
wp term delete post_tag 1234

After deleting, those URLs return 404, and that is the correct outcome rather than a problem to paper over. Google’s guidance for permanently removed pages is a 404 or 410, not a redirect to something unrelated. Redirect only where a tag URL has real inbound links or real traffic, and redirect it to the closest genuine page — a category archive or the single best post — not to your home page. If 404s start showing up in bulk somewhere you did not expect, how to fix 404 errors in WordPress covers tracking down what is still linking to them.

Expect the cleanup to show up in Search Console as a rise in excluded URLs over the following weeks, not as an immediate ranking change. That is the system working.

If your tags only existed for navigation

A fair number of tags exist purely to power a “related reading” list at the bottom of a post. That is a reasonable thing to want and a poor reason to maintain an indexable archive, because the archive is a side effect of the mechanism rather than the thing you wanted.

Core already does this without new URLs. A Query Loop block filtered by taxonomy, placed in your single-post template in the Site Editor, renders related posts from the same tag with no plugin and no archive page involved. It is the first thing to try, and for most sites it is the last.

Where Query Loop gets awkward is hand-picked lists — “these four posts, in this order, on this page” — because it is a query builder, not a curation tool. Disclosure: I build and maintain Post Showcase, which does curated and queried post lists with layout controls, so treat that as an interested recommendation and judge it on the same test as anything else: does it let you delete tags you were only keeping as plumbing? If your lists are rule-based rather than curated, Query Loop is the better answer and you should not install anything.

What cleaning up tag archives will not do

Being honest about this matters, because the most common reason this cleanup disappoints people is that they were sold it as something it is not.

It will not fix your crawl budget, because you almost certainly do not have a crawl budget problem. Google’s large-site crawl budget guide puts the threshold for caring at roughly a million unique pages changing weekly, or ten thousand or more changing daily, and says outright that if your pages are crawled the same day you publish them, the guide does not apply to you. The same document advises against using noindex to save crawl effort at all, on the grounds that Googlebot still has to request the page before it can act on the rule. A 100-post blog with 800 tags has a quality and duplication problem, not a budget one — and that is the honest case for deleting rather than hiding.

There is no duplicate content penalty waiting for you. Thin tag archives are not a manual action, and Google’s spam policies are aimed at doorway pages and scaled content abuse, not at WordPress defaults. The cost is subtler: pages of yours competing with other pages of yours for the same query, and a site where the ratio of real articles to automatically generated listings is unflattering. Framing it as a penalty leads to panic deletions; framing it as competition leads to the right decisions.

It will not speed up your front end. Tag archives are not in the path of a visitor reading a post. What a few hundred thousand rows in wp_term_relationships does slow down is the admin — the tag box in the editor, autocomplete, the Tags screen itself. If the dashboard is your actual complaint, start with diagnosing a slow WordPress admin dashboard, because term bloat is rarely the biggest thing on that list.

It will not recover rankings you lost for other reasons. If traffic fell off a cliff on a specific date, look at that date rather than at your taxonomy. Tag cleanup is maintenance that compounds quietly over months. It is not a recovery play, and anyone presenting it as one is guessing.

What you do get is a site structure you can reason about, an admin that responds, and a set of archives where every one that is indexed is one you would be happy to see in a search result. On this site that means going from more than 800 tags to a controlled vocabulary of a few dozen, one category per post, and a rule that a tag applying to exactly one post does not get to exist. The breadcrumbs tutorial mentioned at the top — adding breadcrumbs in the GeneratePress theme — has been through exactly that treatment, down from 37 tags and six categories to four and one.

Frequently asked questions

Should I noindex all my WordPress tag archives?

Only if you are keeping all of them, and you probably should not be. Noindexing the lot is a single switch, which is why it is the usual advice, but it leaves every thin archive in place as a live URL you still have to maintain. Delete the tags that describe one post, noindex the ones you use for navigation, and index the few that are genuine browsable topics. If you want the one-switch version anyway, use your SEO plugin’s tag setting and move on — it is not harmful, just incomplete.

Will deleting a tag delete my posts?

No. Deleting a term removes the term and its relationships, and the posts carry on with one fewer tag. Post content, dates, URLs and comments are all untouched. The one irreversible part is the term itself: there is no trash for taxonomy terms, so a mistaken bulk delete has to be fixed from a backup.

Are WordPress tags included in the default sitemap?

Yes. Since core sitemaps arrived in WordPress 5.5, public viewable taxonomies appear in wp-sitemap.xml, tags included. Core’s taxonomy provider queries terms with hide_empty set to true, so tags attached to zero posts are excluded automatically — but every tag with at least one post is listed. Yoast and Rank Math replace core’s sitemap with their own and apply their own taxonomy settings to it.

How many tags should a post have?

Three to five, as short noun phrases, reusing terms that already exist. The test is not “what is this post about” — that is the title’s job — but “which other posts belong next to this one”. If a tag will never apply to a second post, it is not a tag. The 37-tag example on this site came from answering the first question instead of the second.

How long until Google drops a noindexed tag archive?

Until it recrawls the URL, and Google’s own documentation warns that revisiting a page can take months depending on how important it considers it. There is no way to force this at scale; the URL Inspection tool in Search Console will request a recrawl one URL at a time, which is fine for a handful and useless for 800. This latency is a practical argument for deleting rather than noindexing — a 404 is unambiguous on the next crawl.

Should I use categories or tags?

Categories for the handful of sections your site is organised into — one per post, in your navigation, hierarchical if you need it. Tags for cross-cutting topics that do not fit that hierarchy. If a tag and a category hold the same posts, you have one taxonomy too many; keep the category. Most sites need far fewer of both than they have.

Will deleting hundreds of tags hurt my rankings?

Not if the tags were thin archives nobody linked to or landed on, which is the normal case. The risk is specific and checkable: a tag archive that currently receives search clicks or has inbound links from other sites. Check for those before a bulk delete, keep and improve the ones you find, and remove the rest. Doing it in batches over a few weeks also makes it easier to tell cause from coincidence if something does move.

Sources

Leave a Reply to This Post