Unlisted Posts

Description

Unlisted Posts adds an “Unlisted” toggle to posts and pages. Switch it on and the post is left out of everywhere WordPress lists content, while anyone with the link can still open it. Handy for sharing a page with clients, publishing documentation you don’t want in your blog feed, or keeping old content reachable without promoting it.

What gets hidden

  • Blog home, category, tag, author and date archives
  • Search results
  • RSS and Atom feeds, including the comments feed
  • XML sitemaps: WordPress core, Yoast SEO, Rank Math, All in One SEO, SEOPress and The SEO Framework
  • Latest Posts, Query Loop, Page List, Archives, Latest Comments and other blocks and widgets that list content
  • Previous / next post links
  • WooCommerce shop, product category pages, product search, related products, product blocks and the [products] shortcode
  • Public REST API lists (editors still see unlisted posts in the editor’s link search and Parent page picker)

Unlisted posts also send a noindex robots meta tag so search engines drop them (also through Yoast SEO, Rank Math, All in One SEO, SEOPress and The SEO Framework, which print their own robots tag), and the admin lists show an “Unlisted” label next to each one.

Where the toggle lives

  • Block editor: the post sidebar’s Summary panel, next to Status and Visibility
  • Classic editor and WooCommerce products: a checkbox in the Publish box

The plugin stores a single _unlisted_post post meta value and keeps a small cached list of unlisted IDs, so there is no extra query cost on the front end.

Custom post types

Posts, pages and (when WooCommerce is active) products are supported by default. Add other post types with the unlisted_posts_post_types filter. A post type must support custom-fields for the block editor toggle to save.

add_filter( 'unlisted_posts_post_types', function ( $types ) {
    $types[] = 'portfolio';
    return $types;
} );

Installation

  1. Upload the plugin to the wp-content/plugins directory, or install it from the Plugins screen.
  2. Activate it from the Plugins screen.
  3. Edit any post or page and switch on “Unlisted” in the sidebar’s Summary panel (or the Publish box in the classic editor).

FAQ

Can people still see an unlisted post?

Yes. Anyone with the link can open it and share it like any other URL. It is only left out of lists, feeds and search engines. If you need real access control, use WordPress’s private or password-protected visibility instead.

Is an unlisted post secret?

No. WordPress post IDs are sequential, so someone who tries ?p=1, ?p=2 and so on can still reach an unlisted post, and a listed child page’s address includes its parent’s slug. Unlisted keeps content out of the places people browse; use private or password-protected posts for anything confidential.

Will Google index unlisted posts?

The page sends a noindex robots meta tag and is left out of the XML sitemap, so search engines that respect those signals will not index it. Yoast SEO, Rank Math, All in One SEO, SEOPress and The SEO Framework are handled automatically: the post is left out of their sitemaps and their robots tag says noindex.

What happens to the child pages of an unlisted page?

They stay listed. In page lists (the Page List block, Pages widget and Navigation) they move up to take the unlisted page’s place.

Does this work with the classic editor?

Yes. The classic editor gets a checkbox in the Publish box, and the block editor gets a toggle in the Summary panel.

I updated from 1.x. Do I need to do anything?

No. Existing unlisted posts are migrated automatically the first time the site loads after updating.

Reviews

There are no reviews for this plugin.

Contributors & Developers

“Unlisted Posts” is open source software. The following people have contributed to this plugin.

Contributors

“Unlisted Posts” has been translated into 1 locale. Thank you to the translators for their contributions.

Translate “Unlisted Posts” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.

Changelog

2.1.0

  • WooCommerce: unlisted products are left out of the shop, product category pages, product search, related products, product blocks, the [products] shortcode and the Store API. Products get the Unlisted checkbox automatically.
  • SEO plugins: Yoast SEO, Rank Math, All in One SEO, SEOPress and The SEO Framework leave unlisted posts out of their XML sitemaps and output noindex for them. Rank Math and All in One SEO were removing the plugin’s noindex tag.
  • Fixed the Latest Comments block, Recent Comments widget and comments feed linking to unlisted posts.
  • Fixed editors not finding unlisted posts in the block editor’s link search, the Parent page picker, the classic editor’s link dialog and the WordPress apps.
  • Fixed unlisted posts showing up in lists that pick posts by ID (hand-picked lists, related posts, on-sale products).
  • Fixed the Archives widget listing months that only contain unlisted posts.
  • Fixed the Page List block hiding listed child pages of an unlisted page.
  • Fixed unlisted posts staying listed on a shop set as the front page.
  • Unlisted posts no longer send pingbacks to the sites they link to.
  • WP-CLI commands such as wp post list now include unlisted posts.
  • Upgrades from 1.x now migrate on the first page load instead of the first admin page load.
  • Uninstalling on multisite now removes the plugin’s data from every site.

2.0.0

  • Native block editor toggle in the sidebar’s Summary panel replaces the old meta box. The classic editor gets a checkbox in the Publish box.
  • Pages can now be unlisted too, and other post types can be added with the new unlisted_posts_post_types filter.
  • Unlisted posts are now excluded from previous / next post links.
  • “Unlisted” label in the Posts and Pages admin lists.
  • The unlisted state is now stored as _unlisted_post post meta (exposed to the REST API), so it survives exports, imports and WP-CLI. Existing unlisted posts are migrated automatically.
  • Deleting a post now removes it from the unlisted list.
  • The noindex tag uses the wp_robots API instead of the deprecated wp_no_robots() function, and is only added on the unlisted post itself.
  • No longer overwrites a post__not_in value set by other plugins or themes.
  • Uninstalling the plugin now removes its data.
  • Text domain corrected to unlisted-posts so translations from WordPress.org load.
  • Tested up to WordPress 7.1. Requires WordPress 5.7 or newer.

1.1.0

  • Tested up to WordPress 5.9.
  • Compatibility with Gutenberg.
  • Converted the unlisted post option to a meta box.

1.0.0

  • Initial Release.