Skip to content

Shopify Catalog

Why my Shopify products aren't in Catalog (diagnostic flow)

Published

The diagnostic order for Catalog eligibility failures

Eleven gates fail in a predictable order. Walk store-level gates first because one failure disqualifies every product. Then walk product-level gates per failing product. Then check hidden/Unlisted status separately, because the seo.hidden metafield silently disqualifies products in a way the eligibility flag doesn't expose. Most stores fail on one of three: password protection, US/CA shipping configuration, or product status (Draft / Unlisted / Archived).

The eligibility list comes from Shopify's requirements page1; the hidden-status edge cases come from the hide-a-page doc3. Walking the diagnostic in store-then-product order saves time — one store-level fix can flip thousands of products into eligible.

Store-level failures (one breaks everything)

Six store-level gates. Each one, if it fails, disqualifies every product in the store. Most common failures: password protection left on, plan downgraded to free trial state, Markets configuration that excludes US and CA both, or store-level Acceptable Use Policy issue (typically affects regulated categories).

  1. Plan is below Starter (Shopify Lite, Pause, free trial, deactivated). Fix: upgrade plan.
  2. Storefront password protection is on (Online Store > Preferences > Password protection). Fix: turn off.
  3. Store ships to neither US nor CA (Settings > Shipping and delivery + Settings > Markets). Fix: enable at least one.
  4. Acceptable Use Policy violation flagged by Shopify (categories with regulatory issues). Fix: contact Shopify support.
  5. Products are not published to Online Store / Hydrogen / Headless sales channel. Fix: publish to one of the three.
  6. Hydrogen / Headless without correct route format. Fix: confirm Storefront API route format matches Shopify spec.

Product-level failures

Five product-level gates per product. Most common failures: a product imported via CSV with empty title or empty media library, a free product with $0.00 price (typically promo or sample SKUs), or a product whose status got bumped to Draft during a bulk edit and never reverted.

  • Title is empty. Fix: set a non-empty product title.
  • No image attached. Fix: add at least one media item.
  • Price is $0.00. Fix: set price > $0 (use a sample/gift workflow for free items).
  • Status is Draft or Archived. Fix: set Status to Active.
  • Product is set to Unlisted (Online Store > Search engine listing > Unlisted). Fix: change to Listed.

Hidden / Unlisted edge cases

Shopify exposes three ways to hide a product from search engines: Unlisted status, the seo.hidden metafield, and a noindex meta tag added via theme.liquid. Unlisted is the one most likely to silently disqualify Catalog inclusion because it's a per-product status flag many merchants don't know exists.

Per Shopify3, Unlisted status 'hides the product from internet search, Shopify Catalog, and your store's sitemap.' The seo.hidden metafield set to 1 has the same effect. The third method (theme.liquid noindex on a template or handle) blocks search engines but doesn't necessarily disqualify Catalog — Catalog is an internal Shopify feed, not a search-engine crawl.

The diagnostic checklist

Walk these in order. If any store-level gate fails, stop and fix it first — every product is disqualified until the store passes. After store-level gates pass, sample three products and walk the product-level gates per product.

  1. Confirm Settings > Plan shows Starter or higher.
  2. Confirm Online Store > Preferences > Password protection is off.
  3. Confirm Settings > Markets has US or CA enabled.
  4. Confirm Settings > Shipping zones include US or CA.
  5. Open three random products. Confirm Status = Active, not Draft.
  6. Confirm each has a non-empty title.
  7. Confirm each has at least one image.
  8. Confirm price > $0.
  9. Confirm Online Store > Search engine listing shows Listed, not Unlisted.
  10. Open Content > Metafields > Products and confirm no seo.hidden metafield is set to 1.
  11. If on the Agentic plan: confirm external product URL is set per product.