Shopify: 5 Ways to Hide Products (With Code)

March 30, 2026

Most Shopify store owners eventually need to hide a product. Maybe it's out of stock, maybe it's a gift-with-purchase that shouldn't appear in your catalog, or maybe you're building a VIP collection that's only accessible via direct link.

The problem is Shopify doesn't have a single "hide" button. There are multiple ways to control product visibility, and each one behaves differently. Use the wrong method and your product disappears from checkout too — or worse, stays indexed in Google while hidden from your store.

This guide covers every method for hiding products on Shopify, when to use each one, and which ones need code versus just admin clicks.


Understanding Shopify's Product Visibility States

Before diving into methods, it helps to understand how Shopify thinks about product visibility. Every product has a status and sales channel assignments that work together:

| State | Visible in store? | Buyable via link? | Appears in search engines? | |---|---|---|---| | Active + Online Store channel | Yes | Yes | Yes | | Active, removed from Online Store | No | Yes (direct URL still works) | Depends on prior indexing | | Draft | No | No | No | | Archived | No | No | No (delisted) |

The distinction between "visible" and "buyable" matters. A product can be hidden from your collections and search but still purchasable if someone has the direct link. That's useful for bundles, VIP products, and gift items.


Method 1: Remove From the Online Store Sales Channel

Best for: VIP products, exclusive links, bundle components, wholesale items

Needs code: No

This is the most common way to hide a product while keeping it buyable. The product stays Active but isn't published to your Online Store.

How to do it:

  1. Go to Products in your Shopify admin
  2. Click on the product you want to hide
  3. In the Publishing section (right sidebar), click Manage
  4. Uncheck Online Store
  5. Save

The product won't appear in collections, search results, or anywhere on your storefront. But the direct product URL still works — anyone with the link can view and buy it.

When to use this: You want the product purchasable but not browsable. Common for gift-with-purchase items, bundle components sold separately, or products shared only via email/WhatsApp links.

Watch out: If the product was previously indexed by Google, the listing may persist in search results for a while. See Method 5 if you need to control that.


Method 2: Set to Draft

Best for: Upcoming products, seasonal items not yet ready, products being reworked

Needs code: No

Draft products are completely invisible. They don't appear anywhere on the storefront, can't be purchased, and won't be indexed by search engines.

How to do it:

  1. Go to Products in your Shopify admin
  2. Click on the product
  3. Change the Status dropdown from "Active" to "Draft"
  4. Save

When to use this: The product isn't ready to sell yet. You're still uploading images, writing the description, or waiting for stock to arrive. Draft is a staging state.

Don't use this if you still want the product buyable via direct link — Draft kills that completely.


Method 3: Hide From Collections Using Liquid

Best for: Gift products, free items, products that should be buyable but never browsable

Needs code: Yes (Liquid template editing)

This method keeps the product Active and published but filters it out of collection pages using Liquid template code. The product page itself still works — it just won't show up when customers browse your collections.

How to do it:

Tag the products you want to hide with a consistent tag like

hidden
. Then edit your theme's collection template to skip them.

In your collection template (usually

sections/collection-template.liquid
or
snippets/product-card.liquid
):

{% for product in collection.products %}
  {% unless product.tags contains 'hidden' %}
    <!-- Your existing product card code -->
    {% render 'product-card', product: product %}
  {% endunless %}
{% endfor %}

This approach is flexible. You can use any tag name and apply it to as many products as you want without changing the code again.

For hiding specific products by ID (useful when you only have one or two):

{% for product in collection.products %}
  {% if product.id == 12345678 %}
    {% continue %}
  {% endif %}
  {% render 'product-card', product: product %}
{% endfor %}

Replace

12345678
with your actual product ID (find it in the URL when editing the product in admin).

When to use this: You want the product to stay fully functional — buyable, indexed, accessible via direct URL — but invisible in your catalog. This is the go-to for hiding gift products and free items included with orders.

Watch out: If your theme uses AJAX filtering or predictive search, you may also need to filter those separately. This method only hides from collection loops.


Method 4: Hide Out-of-Stock Products Automatically

Best for: Stores with fluctuating inventory, dropshipping, made-to-order products

Needs code: Sometimes

Many Shopify themes have a built-in setting for this:

  1. Go to Online Store > Themes > Customize
  2. Look for Collection pages settings
  3. Find a toggle like "Hide out of stock products" or "Show sold out products"

If your theme doesn't have this option, you can add it with Liquid:

{% for product in collection.products %}
  {% if product.available %}
    {% render 'product-card', product: product %}
  {% endif %}
{% endfor %}

product.available
returns
true
if any variant has inventory or if inventory isn't tracked. Products with zero stock across all variants get filtered out.

When to use this: You don't want customers browsing products they can't buy. Particularly useful for stores with large catalogs and fast-moving inventory.


Method 5: Hide From Search Engines

Best for: Products that should be on your store but not in Google results

Needs code: Yes (theme.liquid edit)

Sometimes you want a product visible on your store but invisible to Google. Maybe it's a duplicate, a landing-page-specific offer, or a temporary promotion.

Add a

noindex
tag to specific product pages in your
theme.liquid
or
product.liquid
:

{% if product.tags contains 'noindex' %}
  <meta name="robots" content="noindex, nofollow">
{% endif %}

Tag any product with

noindex
and search engines will stop indexing it (after their next crawl).

When to use this: The product is live on your store and buyable, but you don't want it competing with other pages in Google or appearing in search results.


Quick Comparison: Which Method Should You Use?

| Method | Visible in store? | Buyable? | Needs code? | Best for | |---|---|---|---|---| | Remove from sales channel | No | Yes (via link) | No | VIP, bundles, gifts | | Set to Draft | No | No | No | Upcoming, seasonal | | Liquid filtering | No (in collections) | Yes | Yes | Gift products, free items | | Hide out-of-stock | Auto-hidden when sold out | No (sold out) | Sometimes | Large catalogs | | Noindex meta tag | Yes | Yes | Yes | SEO control |


When You Actually Need an App

The methods above cover most use cases. But there are situations where a dedicated app makes sense:

  • Customer-specific product visibility — showing different products to different customer groups (wholesale vs retail). This requires login detection that Liquid can't handle alone.
  • Scheduled visibility — automatically showing/hiding products at specific dates and times. Shopify Flow can handle some of this, but a dedicated app gives you more control.
  • Password-protected products — requiring a code or login to view specific products.

For everything else — hiding gifts, managing out-of-stock items, controlling search visibility — native Shopify features and a few lines of Liquid are all you need.


Wrapping Up

Shopify gives you more control over product visibility than most store owners realize. The key is matching the method to your use case:

  • Need it buyable but not browsable? Remove from the Online Store channel.
  • Not ready to sell yet? Set it to Draft.
  • Want it active but filtered from collections? Use Liquid tags.
  • Want to auto-hide sold-out items? Check your theme settings first, then add Liquid if needed.
  • Need to control Google indexing? Add a noindex tag.

If you're running into a more complex scenario or need help implementing any of these methods, get in touch — I build and maintain Shopify stores and can set this up for you.


Related Articles