=== NoIndexer ===
Contributors: fernandot, ayudawp
Tags: noindex, nofollow, seo, robots, search engines
Requires at least: 6.0
Tested up to: 7.0
Requires PHP: 7.4
Stable tag: 1.5.0
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Lightweight SEO noindex and nofollow manager for WordPress. Control which content search engines should not index or follow.

== Description ==

NoIndexer gives you full control over the `noindex` and `nofollow` robots directives, telling search engines not to include certain content in their results and not to follow its links. No bloated SEO plugin needed — just clean, focused noindex and nofollow management.

**Features:**

* **Bulk noindex / nofollow by content type** — Set entire post types (pages, posts, products, etc.) as noindex, nofollow or both with a single checkbox per directive.
* **Bulk noindex / nofollow by taxonomy** — Set entire taxonomy archives (categories, tags, product attributes, etc.) as noindex, nofollow or both. Works with all public taxonomies, including WooCommerce product categories, tags, and attributes (requires "Enable Archives?" in WooCommerce attribute settings).
* **Smart exclusions** — When a content type or taxonomy is set to noindex or nofollow, exclude specific posts or terms that should keep the default behavior. Exclusions work independently per directive.
* **Individual noindex / nofollow** — Set noindex or nofollow on specific posts or taxonomy terms without affecting the entire content type or taxonomy.
* **Instant search** — Find content and terms quickly with a live search field in the settings page. Click to add, click to remove.
* **Editor integration** — noindex and nofollow checkboxes available in both the Classic Editor and Block Editor sidebar.
* **Link-level nofollow** — A nofollow checkbox in the Classic Editor link popup lets you mark individual links with `rel="nofollow"` without leaving the editor. The Block Editor already exposes a native nofollow toggle in its link popover.
* **Quick Edit** — Toggle noindex and nofollow directly from the post list table without opening the editor.
* **Bulk actions** — Set or remove noindex and nofollow on multiple posts at once from the post list.
* **Robots column** — Two color-coded icons in your content lists show the current index/follow state at a glance.
* **Search results noindex / nofollow** — Prevent internal search result pages from being indexed and/or having their links followed.
* **404 pages noindex / nofollow** — Keep 404 error pages out of search indexes and stop crawlers from following dead-end links.
* **Date archives noindex / nofollow** — Apply either or both directives to daily, monthly, and yearly archive pages.
* **Paginated archives noindex / nofollow** — Apply either or both directives to /page/2/, /page/3/ and beyond for all archives.
* **Attachment pages noindex / nofollow** — Apply either or both directives to media attachment pages created by WordPress.
* **Author archives noindex / nofollow** — Apply either or both directives to author archive pages.
* **RSS feeds noindex / nofollow** — Granular control to noindex and/or nofollow RSS feeds by type: main feed, taxonomy feeds, author feeds, site comments feed, and per-post comments feeds. Works via the `X-Robots-Tag` HTTP header since feeds are XML, not HTML.
* **Native sitemap integration** — Automatically excludes noindexed content from the native WordPress sitemap. Posts, post types, taxonomy terms, and taxonomy archives marked as noindex are removed from the sitemap without needing any additional plugin.
* **Lightweight** — No unnecessary features, no frontend scripts, no database tables. Just a meta tag when needed.

**How it works:**

NoIndexer adds a `<meta name="robots">` tag to the `<head>` of posts and taxonomy archives that should not be indexed and/or followed. The directive content is composed dynamically based on the configured rules — you can end up with `noindex, follow`, `index, nofollow`, `noindex, nofollow` or no tag at all.

**Priority logic for posts (applies independently to noindex and nofollow):**

1. Individual directive always applies.
2. Post type bulk directive applies unless the post is specifically excluded.
3. Exclusions override the bulk setting for specific posts.

**Priority logic for taxonomy archives (applies independently to noindex and nofollow):**

1. Individual term directive always applies.
2. Taxonomy bulk directive applies unless the term is specifically excluded.
3. Exclusions override the bulk setting for specific terms.

**Do you really need a full SEO plugin?**

Most WordPress sites don't need a 100-feature SEO plugin just to manage noindex rules or customize a sitemap. WordPress already generates a native sitemap and a robots.txt file — the two core pieces search engines need to crawl your site properly.

NoIndexer handles the noindex side: decide which content should stay out of search results. It also automatically excludes noindexed content from the native WordPress sitemap, so search engines won't find it there either. If you need additional sitemap customization beyond noindex — like excluding specific content that is indexed but shouldn't appear in the sitemap — [Native Sitemap Customizer](https://wordpress.org/plugins/native-sitemap-customizer/) is the perfect companion. Together with the robots.txt that WordPress generates automatically, you have everything essential for technical SEO — no bloat, no unused features, no performance overhead.

**Third-party integration:**

Developers can check noindex and nofollow status using:

* `Noindexer_Frontend::is_noindex( $post_id )` — returns `true` if a post should not be indexed.
* `Noindexer_Frontend::is_nofollow( $post_id )` — returns `true` if a post should have its links nofollowed.
* `Noindexer_Frontend::is_term_noindex( $term_id, $taxonomy )` — returns `true` if a taxonomy term archive should not be indexed.
* `Noindexer_Frontend::is_term_nofollow( $term_id, $taxonomy )` — returns `true` if a taxonomy term archive should have its links nofollowed.

All methods resolve the full priority logic (individual meta, bulk rules, and exclusions).

== Installation ==

1. Upload the `noindexer` folder to `/wp-content/plugins/`.
2. Activate the plugin through the 'Plugins' menu in WordPress.
3. Go to Settings > NoIndexer to configure your noindex rules.

Or install directly from the WordPress plugin directory by searching for "NoIndexer".

== Frequently Asked Questions ==

= What does noindex do? =

A noindex directive tells search engines like Google not to include a page in their search results. The page is still accessible to visitors, but it won't appear in search results.

= Does this plugin remove content from my sitemap? =

Yes. Since version 1.3.0, NoIndexer automatically excludes noindexed content from the native WordPress sitemap. Posts, post types, taxonomy terms, and taxonomy archives marked as noindex are removed from the sitemap. This works only with the native WordPress sitemap — third-party sitemaps from SEO plugins like Yoast or Rank Math are not affected, as those plugins manage their own sitemaps independently. For additional sitemap customization, you can also use [Native Sitemap Customizer](https://wordpress.org/plugins/native-sitemap-customizer/).

= Will this conflict with my SEO plugin? =

NoIndexer uses the standard WordPress `wp_robots` filter. If another plugin or theme also sets robots directives, the noindex directive from NoIndexer will be combined with them. If you only need noindex control and nothing else from your SEO plugin, NoIndexer is a lightweight alternative.

= Can I set noindex or nofollow from the editor? =

Yes. Both the Classic Editor and the Block Editor (Gutenberg) include NoIndex and NoFollow checkboxes in the sidebar. You can also use Quick Edit or bulk actions from the post list.

= Can I mark individual links with rel="nofollow"? =

Yes. Since version 1.5.0, NoIndexer adds a nofollow checkbox to the link insertion popup of the Classic Editor. It reads the existing `rel` value and adds or removes the `nofollow` token without touching anything else (other tokens like `noreferrer` or `sponsored` are preserved). The Block Editor already includes a native nofollow toggle in its link popover, so no extra integration is needed there.

= Can I noindex RSS feeds? =

Yes. Since version 1.4.0, NoIndexer includes a dedicated section to noindex (and now also nofollow) WordPress RSS feeds by type: main feed, taxonomy feeds, author feeds, site comments feed, and per-post comments feeds. Each type has its own independent toggle for each directive. Feeds are XML, so NoIndexer uses the `X-Robots-Tag` HTTP header instead of the meta robots tag. These rules work independently from your content settings.

= What happens when I deactivate or delete the plugin? =

Deactivating the plugin stops the noindex meta tags from being output, but your settings are preserved. Deleting the plugin removes all settings, post meta, and term meta data from the database.

= Does this work with custom post types? =

Yes. NoIndexer automatically detects all public post types registered on your site, including those from plugins like WooCommerce (products), bbPress (forums), or any custom post type.

= Does this work with custom taxonomies? =

Yes. NoIndexer automatically detects all public taxonomies, including WooCommerce product categories, product tags, and any custom taxonomy registered by other plugins.

= Why don't I see WooCommerce product attributes in the taxonomy list? =

WooCommerce product attributes (color, size, etc.) only appear in NoIndexer when they have archives enabled. Go to WooCommerce > Attributes, edit the attribute, and check "Enable Archives?". Without this option, WooCommerce does not create public archive pages for the attribute, so there is no URL to noindex.

= Can I noindex specific categories or tags? =

Yes. You can either set an entire taxonomy as noindex (e.g., all tags) and then exclude specific terms, or set individual terms as noindex without affecting the rest of the taxonomy.

= How can other plugins detect NoIndexer? =

Developers can use `Noindexer_Frontend::is_noindex( $post_id )` and `Noindexer_Frontend::is_nofollow( $post_id )` for posts, plus `Noindexer_Frontend::is_term_noindex( $term_id, $taxonomy )` and `Noindexer_Frontend::is_term_nofollow( $term_id, $taxonomy )` for taxonomy terms. All methods resolve the full priority logic.

== Screenshots ==

1. Settings page with post types, taxonomies and special pages checkboxes (noindex + nofollow) and instant search.
2. robots column with two color-coded icons and quick edit checkboxes in the post list.
3. Block editor sidebar panel with noindex and nofollow toggles.
4. nofollow checkbox in the Classic Editor link popup.

== Changelog ==

= 1.5.0 =
* New: nofollow management mirroring every place where noindex is already controlled — bulk by post type, bulk by taxonomy, exclusions, individual posts and terms, editor sidebar, quick edit, bulk actions, RSS feeds and additional rules (search, 404, date archives, pagination, attachment pages, author archives).
* New: nofollow checkbox in the Classic Editor link popup (wpLink) for marking individual links with `rel="nofollow"`. Other rel tokens like `noreferrer` or `sponsored` are preserved.
* New: `Noindexer_Frontend::is_nofollow( $post_id )` and `Noindexer_Frontend::is_term_nofollow( $term_id, $taxonomy )` methods for third-party integration.
* New: Bulk actions to set or remove nofollow on multiple posts.
* Improved: the "Index?" column is replaced by a single "robots" column with two color-coded icons (index/noindex and follow/nofollow). Existing noindex data is preserved.
* Improved: combined robots meta tag now reflects every possible state: `noindex, follow`, `index, nofollow`, `noindex, nofollow` or no tag.
* Improved: X-Robots-Tag header for feeds composes both directives in a single header line.

= 1.4.0 =
* New: NoIndex for RSS feeds with granular control by feed type.
* New: Checkbox to noindex the main site feed (/feed/ and its format variants) plus date archive and search feeds.
* New: Checkbox to noindex taxonomy feeds (categories, tags and custom taxonomies).
* New: Checkbox to noindex author feeds.
* New: Checkbox to noindex the site-wide comments feed.
* New: Checkbox to noindex per-post comments feeds.
* Improved: Renamed the "special pages" settings section to "Additional noindex rules" to better reflect its scope.

= 1.3.0 =
* New: Native WordPress sitemap integration — noindexed content is automatically excluded from the sitemap.
* New: Fully noindexed post types and taxonomies are removed entirely from the sitemap for better performance.
* New: Posts and terms excluded from bulk noindex rules remain in the sitemap as expected.
* New: Individual noindex posts and terms are excluded from the sitemap without affecting the rest of the content type.
* New: Author archives removed from sitemap when author noindex is enabled.
* New: Attachment pages removed from sitemap when attachment noindex is enabled.
* Fixed: A post or term could be added to both the exclusion list and the individual noindex list simultaneously. Adding to one list now automatically removes from the other.

= 1.2.0 =
* New: Bulk noindex by taxonomy — set entire taxonomy archives as noindex with a single checkbox.
* New: Term exclusions — exclude specific terms from taxonomy-level noindex rules.
* New: Individual term noindex — set noindex on specific term archives without affecting the entire taxonomy.
* New: Instant search for taxonomy terms in the settings page.
* New: Support for all public taxonomies, including WooCommerce product categories, tags, and attributes.
* New: `Noindexer_Frontend::is_term_noindex()` method for third-party integration.
* Improved: Paginated archives noindex now also detects Query Loop block pagination (?query-1-page=2) used by block themes.
* Improved: Search sections now support both posts and terms with a unified interface.

= 1.1.1 =
* Fixed block editor panel strings not being translated.

= 1.1.0 =
* New: Noindex for search result pages.
* New: Noindex for 404 error pages.
* New: Noindex for date archives (daily, monthly, yearly).
* New: Noindex for paginated archives (/page/2/, /page/3/, etc.).
* New: Noindex for attachment pages.
* New: Noindex for author archives.
* Improved: Post type checkboxes now display in a 2-column grid for better readability.
* Improved: Unified terminology across the plugin (set vs mark).

= 1.0.1 =
* Fixed: Block editor sidebar showed duplicate NoIndexer panels.
* Fixed: Noindex checkbox did not save in the block editor.
* Improved: Added SEO context to the plugin description.
* Improved: Added integration instructions for third-party developers.

= 1.0.0 =
* Initial release.
* Bulk noindex by post type with checkboxes.
* Exclusion system with instant search.
* Individual noindex with instant search.
* Classic Editor and Block Editor meta box.
* Quick Edit checkbox in post list tables.
* Bulk actions to set/remove noindex.
* Indexed? status column.

== Upgrade Notice ==

= 1.5.0 =
Adds full nofollow management mirroring every noindex option, plus a nofollow checkbox in the link popup of the Classic Editor.

== Support ==

Need help or have suggestions?

* [Official website](https://servicios.ayudawp.com)
* [WordPress support forum](https://wordpress.org/support/plugin/noindexer/)
* [YouTube channel](https://www.youtube.com/AyudaWordPressES)
* [Documentation and tutorials](https://ayudawp.com)

Love the plugin? Please leave us a [5-star review](https://wordpress.org/support/plugin/noindexer/reviews/#new-post) and help spread the word!

== About AyudaWP.com ==

We are specialists in WordPress security, SEO, AI and performance optimization plugins. We create tools that solve real problems for WordPress site owners while maintaining the highest coding standards and accessibility requirements.