Skip to content

Hiding Pages · § 1.5.2

The seo.hidden Metafield on Shopify: How It Works and When It's Already Taken

Published:

What the seo.hidden metafield does

Per Shopify's Hiding-a-page-from-search-engines doc, setting a custom metafield with namespace.key seo.hidden to value 1 on a product, page, or blog post hides that resource from search engines and the sitemap. Unlike Unlisted, the seo.hidden metafield does not remove the resource from collection pages, storefront internal search, or product recommendations. The shopfront still displays the resource — only the search-indexing layer hides it.

The verbatim Shopify guidance1 describes seo.hidden as a custom metafield. The namespace is seo; the key is hidden; the value is 1 (or true, depending on the type chosen). Shopify themes read this metafield and conditionally emit a noindex meta-robots tag on resources where the value is set. Shopify's sitemap generator reads the same metafield and excludes those resources from /sitemap.xml.

Setting it up

Open Shopify admin. Settings > Custom data > pick the resource type (Products, Pages, or Blog posts). Click Add definition. In Name, enter 'Hidden from search engines'. In Namespace and key, enter exactly seo.hidden. Choose type Boolean (preferred) or Single-line text accepting value 1. Save. The metafield now appears on every resource of that type.

To use it on a specific resource: open the product, page, or blog post; scroll to the Metafields panel; find 'Hidden from search engines'; set the toggle to true (or type 1 into the text field). Save. The next time Shopify regenerates the sitemap, the resource is excluded. The theme picks up the metafield on the next page render and emits the noindex meta tag.

The 'namespace already taken' error, verbatim

Shopify warns: 'If you receive a message that says Namespace and key. seo.hidden. Namespace and key are already taken, then seo.hidden is being used by third-party apps and isn't available to modify.' Apps that emit SEO metafields on install commonly claim the namespace. When this error fires, the path forward is theme.liquid handle-based noindex — covered in the noindex-theme-liquid article.

The exact error text1 is the Shopify-emitted validation message in the metafield definition modal. If you see it, don't try to bypass the apps holding the namespace. Switch methods.

seo.hidden vs Unlisted (and why the answer differs by resource type)

For products, Shopify recommends Unlisted over seo.hidden. The reason: Unlisted hides the product from collection pages, storefront internal search, and product recommendations — coverage seo.hidden does not give you. For pages and blog posts, Unlisted is not an option (it's product-only), so seo.hidden is the recommended method when you want to hide from search and sitemap without editing theme code.

BehaviorUnlisted (products only)seo.hidden (products, pages, blog posts)
Hides from search enginesYesYes
Removes from /sitemap.xmlYesYes
Excludes from Shopify CatalogYesYes (for products)
Removes from collection pagesYesNo
Removes from storefront /searchYesNo
Removes from product recommendationsYesNo
Works on pages and blog postsNo (product-only)Yes
Survives third-party app claimsYes (it's product status, not metafield)No — fails on "namespace already taken"

When to use seo.hidden

seo.hidden is the right tool for pages and blog posts you want to keep accessible in the storefront but hidden from Google. Internal-team landing pages with their own URL but no search-indexing role. Legal disclosure pages required by jurisdiction but irrelevant to organic search. Old blog posts archived but kept live for direct link traffic. Lead-magnet landing pages used only for paid traffic that shouldn't compete with the homepage in search.

seo.hidden is also the path for products in the narrow case where you want search hidden but collection visibility preserved — for example, a product listed in a curated "Staff picks" collection but not yet ready for search-driven traffic. This is unusual; the more common product-hide case (gated launch, sample SKU, retired item) wants the full Unlisted radius.