August 29, 2026

Shopify collection filters not showing (or showing the wrong values)

Shopify collection filters not showing (or showing the wrong values)

A shopper opens one of your collections, goes to filter it down, and the sidebar is either empty or wrong. Empty: there's a "Filter by product type" heading with nothing under it, or no filters at all where you set them up. Wrong: the same idea listed twice — a Sale option and a sale option, sitting one above the other, splitting the same products into two piles.

This is not the same problem as a collection that shows fewer products than you expected — that's the product grid, and it's usually pagination. And it's not an empty collection with zero products in it. This is specifically the filter controls on a collection page misbehaving: the facets a shopper clicks to narrow things down are missing, or they're offering junk.

The cause is almost always in your product data, not your theme, and it's the same root in both the empty case and the duplicate case: a filter can only offer values that actually exist on the published products in that collection. Fix the data and the filters clean themselves up. First, let's find yours.

Key takeaways

  • A filter only surfaces values present on the published products in that collection. So a filter with nothing to show means the field it reads is blank on those products; a filter showing the same thing twice means that value is spelled two ways in your data.
  • The two most common data causes are a blank product type and a tag spelled inconsistently. A "Filter by product type" facet has nothing to list when the product type field is empty. A tag saved as both Sale and sale can, depending on your theme and filter setup, appear as two separate filter entries.
  • Both are checkable from public data in about a minute. https://your-store.com/products.json returns every product's product_type and tags — no app, no login. The script below counts your blank product types and lists your casing-split tags. It's in the next section.
  • It's common enough to be worth a look. Across 20,604 products on 41 live storefronts, 7,536 (36.6%) had a blank product type, and 35 of the 41 stores had at least one. 17 of 41 stores carried at least one tag spelled in more than one casing.

Sample: 41 live Shopify stores, randomly drawn (fixed seed) from a convenience frame — a public list of storefronts whose owners posted their URLs on the Shopify Community's Store Feedback board asking for critique. Not a cross-section of Shopify, so read every figure as a prompt to check your own store. Method is at the end. Every figure comes from public catalogue data, not admin.

Find your blank product types and split tags first

Before touching a setting, get the two lists that explain almost every empty or duplicated filter: products with no product type, and tags that exist in more than one capitalization. Both are readable from the same public endpoint your storefront already serves.

Paste this into a terminal and swap in your domain. It only reads — nothing it does can change your store.

# save as filters.py, then: python3 filters.py
import json, urllib.request
from collections import defaultdict

STORE = "your-store.com"                 # swap in your own domain
page, blank_type, total = 1, 0, 0
casings = defaultdict(set)               # lowercased tag -> set of literal spellings

while page <= 60:
    url = f"https://{STORE}/products.json?limit=250&page={page}"
    products = json.load(urllib.request.urlopen(url))["products"]
    if not products:
        break                            # stop on an EMPTY page, not a short one
    for p in products:
        total += 1
        if not (p.get("product_type") or "").strip():
            blank_type += 1
        for tag in p.get("tags", []):
            casings[tag.strip().lower()].add(tag.strip())
    page += 1

split = {k: v for k, v in casings.items() if len(v) > 1}
print(f"{blank_type} of {total} products have a BLANK product type")
print(f"{len(split)} tag(s) exist in more than one spelling:")
for _, spellings in sorted(split.items()):
    print("  " + "  |  ".join(sorted(spellings)))

/products.json returns 250 products per request, so the loop walks the pages and stops on the first empty page — a short page in the middle is normal, so don't stop on a short one. The first number is how many of your live products have no product type at all; that's the fuel for an empty "Filter by type" facet. The list underneath is every tag that shows up in more than one capitalization — the fuel for a filter that offers the same thing twice. In our 41-store read, real examples that came out of this were Sale / sale, New / new, Bundle / bundle, ACCESSORIES / Accessories / accessories, and Dog Toys / Dog toys / dog toys.

Two numbers worth having before you start, so you know whether you're looking at a stray or a habit. Across the 41 stores we read, 7,536 of 20,604 products (36.6%) had a blank product type, and 35 of the 41 stores had at least one. Separately, 17 of 41 stores carried at least one tag spelled more than one way. A blank product type here and there is a loose end. A third of a catalogue with no product type is a filter that will never populate, no matter how carefully you set it up in the app.

Now, how each of those turns into a broken filter.

How storefront filters get their values

The one rule that explains both symptoms: a filter only shows values that exist on the products in front of it. Shopify's own documentation on Search & Discovery puts it plainly — "Only filter values that apply to products of a collection or search result display on your store."

Storefront filters are configured in one of two places. The Shopify Search & Discovery app — made by Shopify, at no extra cost — is where most stores add and order them; some themes also expose a filter setting of their own. Either way, the standard filters you can offer are Availability, Price, Product type, Vendor, Tags, and product Options — plus custom ones built on metafields. You pick which filters to show; you don't pick the values inside them. Those get read off your products automatically.

That's the whole story behind an empty facet. If you add a "Filter by product type" filter but your products have no product type, the filter has nothing to list, and depending on your theme it either shows an empty heading or doesn't render at all. The filter isn't broken — you've pointed it at a field that's blank.

Two more reasons a filter comes back completely empty, worth ruling out before you dig into data: your theme may not support storefront filtering at all (non-supported themes sometimes show no filters and no warning), and very large result sets suppress filters — Shopify's docs note filters don't display on collections over 5,000 products or searches returning more than 100,000 results. If your whole sidebar is missing on a normal-sized collection, check the theme first. If specific filters are empty while others work, it's the data below.

Cause 1: a blank product type gives the "product type" filter nothing to show

Product type is a single field on each product — "Sneakers," "Ceramics," "Dog Toy." It's separate from the newer Category field, it's yours to fill in with anything, and it's one of the standard things a collection filter can offer. When you add a "Filter by product type" filter, its values are read straight off that field across the collection's products.

So if the field is blank, the filter is blank. And it's blank far more often than store owners expect: across the 41 stores we read, 36.6% of the products had no product type at all. On a store like that, a shopper who wants to filter by type is looking at either an empty control or no control — and the merchant, testing on a handful of fully-filled products, never sees it.

The fix is to fill product type, not to fiddle with the filter. Open a product and set its Product type; the filter picks it up automatically once the field has a value. The catch is scale: the filter looks empty because a lot of products are missing the field, which is exactly why nobody filled it — it's a few hundred products, each needing a judgement about what type it actually is. Shopify's bulk editor lets you edit the Product type column across a selection, which helps if the products share one type. It stops helping the moment the answer differs per product, which on a real catalogue it usually does.

Cause 2: one tag, two spellings, splitting a filter into two options

Here's the more confusing one, and it needs a careful distinction, because Shopify's behaviour has two layers that don't agree.

At the admin level, Shopify treats tags as case-insensitive. Its documentation is explicit: "Tags are not case sensitive. For example, Approved and approved are the same tag." So in the admin, Sale and sale are the same tag for search and management, and you can't create a "true" duplicate that differs only by case.

But that's not the same as saying your data is clean. In the raw catalogue we read, the literal strings differ: 17 of 41 stores had at least one concept stored in more than one casing — Sale on some products, sale on others, sitting in the same catalogue as two distinct spellings. That happens through imports, apps, and bulk edits that write tags verbatim, and it's real regardless of how the admin displays them.

What it does to your storefront filter depends on your setup, and this is where you should check yours rather than take a rule on faith. Because Shopify treats tags as case-insensitive, a native tag filter will often merge the two — but depending on your theme and how the tag filter is configured, casing variants can surface as two separate options (a Sale entry and a sale entry), each linking to a different, incomplete slice of products. Third-party filter apps and custom themes are especially prone to this, since they may match tags as literal strings. If your filter sidebar is showing what looks like the same category twice, the split tag list from the script above tells you exactly which concepts are involved — go check whether the filter actually renders them as two.

The fix is to normalise the tags so one concept is spelled one way. Pick the casing you want, re-tag the products that use the other, and the ambiguity disappears whether or not your theme was splitting it. On a handful of products this is a five-minute edit. Across a catalogue where the script found dozens of split tags spread over hundreds of products, it's the same shape of problem as the blank product types — not hard per item, just a decision you have to make and apply the same way every time.

(A related but separate problem — a collection built on a "sale" condition silently missing the products tagged "Sale" — is about collection membership, not the filter UI. This article is about the filter sidebar; that one's its own fix.)

When it stops being a five-minute job

With one blank product type and one split tag, the fixes above take ten minutes. You edit a product, retag a couple, refresh the storefront, done.

The reason this stalls isn't difficulty — it's volume and judgement. A "Filter by product type" facet doesn't look broken because of one missing field; it looks broken because, across the 41 stores we read, 36.6% of the catalogue is missing it, and filling it means deciding, product by product, what type each of a few hundred items actually is. A duplicated filter option isn't one typo; it's a tag written two ways across a batch, and cleaning it means picking a convention and applying it consistently everywhere it drifted. Neither is a bulk find-and-replace when the right answer varies per product, and neither shows up when you spot-check the ten products you happen to have finished.

That deciding-and-doing across hundreds of products is what Arvio is built for. It's an AI store operator, not a filter app and not a bulk editor with a bigger button: it reads your live store, finds the products with no product type and the tags that exist in more than one spelling across your whole catalogue, and drafts the normalisation — a proposed product type for each blank one, a single agreed casing for each split tag — for you to look at. Nothing changes until you approve it, and every change can be undone. It doesn't replace the Search & Discovery app; it fixes the data underneath so the filters you set up there actually have clean values to show.

Disclosure: Arvio is our own product, and it's paid — plans start at $9.90 per 30 days with a 5-day trial. If you have one blank product type and one split tag, the steps above need nothing from us. Arvio is for the store where the fix isn't editing any one product but going through hundreds and deciding, the same way, every time.

FAQ

Why are my Shopify collection filters not showing?

A filter shows values only when those values exist on the published products in the collection, so an empty filter usually means the field it reads is blank — a "product type" filter is empty when your products have no product type. Rule out two other causes first: some themes don't support storefront filtering (and may not warn you), and Shopify suppresses filters on collections over 5,000 products or searches over 100,000 results. If specific filters are empty while others work, it's the underlying product data.

How do I add filters to a Shopify collection page?

Install the Shopify Search & Discovery app (made by Shopify, at no extra cost), open Filters, and add the ones you want from the standard set — Availability, Price, Product type, Vendor, Tags, and product Options — plus any metafield-based custom filters. You choose which filters appear; the values inside each are read automatically off your products. Your theme also has to support storefront filtering for them to render.

My "Filter by product type" is empty even though I added it.

That filter reads the Product type field on your products, and if that field is blank the filter has nothing to list. It's common — across 41 stores we read, 36.6% of products had no product type. The fix is to fill in Product type on the products (the filter picks up the values automatically), not to change the filter setting.

Why does my filter show the same option twice, like "Sale" and "sale"?

Because that concept is stored in more than one capitalization in your product data. Shopify's admin treats tags as case-insensitive, so it often merges them — but depending on your theme and filter configuration, casing variants can surface as two separate filter options, each linking to a partial set of products. The reliable fix is to normalise the tags so the concept is spelled one way across every product.

Are Shopify tags case sensitive?

For admin search and management, no — Shopify's documentation says "Tags are not case sensitive" and treats Approved and approved as the same tag. But your raw catalogue can still store both spellings literally, and how a storefront filter treats that depends on your theme and filter app, which is why a duplicated filter option can appear even though the admin considers them one tag. Shopify recommends picking one consistent capitalization.

Do I need a third-party filter app to fix this?

No. Both causes here are data problems, not filter-app problems — Shopify's own Search & Discovery app (no extra cost) will show clean values once the product type field is filled and the tag casing is consistent. A third-party filter app won't fix a blank product type or a split tag; if anything, some are more likely to render casing variants as separate options because they match tags as literal strings.

Method

Sample. 41 live Shopify storefronts, catalogues read 2026-08-26. Every figure comes from /products.json — a public endpoint any browser can fetch — reading each product's product_type and tags. Nothing authenticated.

How the 41 were drawn. Owners had posted their own store URL on the Shopify Community's Store Feedback board asking for feedback. From that public list we drew a random sample — a fixed seed, so anyone can redraw the same set. That makes this a convenience frame, not a cross-section of Shopify: stores that ask for feedback skew newer and smaller, and the largest bias is survivorship — a large share of the URLs posted there no longer serve a catalogue and drop out. So read every figure here as a prompt to check your own store, not a platform-wide rate.

What we counted. 20,604 products across the 41 stores. A product counted as blank-type when its product_type was empty or whitespace — 7,536 (36.6%), with 35 of 41 stores having at least one. For tags, we lowercased each tag and grouped the literal spellings under it; a group with more than one spelling is a casing conflict. 315 such groups appeared across the dataset, and 17 of 41 stores had at least one. Whether a given conflict shows as a duplicate storefront filter depends on the store's theme and filter setup, which we did not test store-by-store — the count is of the data condition, not of confirmed duplicate filters.


Written by Adot Technologies Inc, the team behind Arvio: AI Store Operator — it reads your live store, finds the blank product types and the tags spelled more than one way, and drafts the normalisation for your approval so your collection filters have clean values to show.

Arvio: AI Store Operator

Other AI tools give you a to-do list.
Arvio's AI store agent does the work.

Arvio scans your Shopify store daily, finds what needs fixing — SEO, prices, stock, product content — and drafts the fix. You approve it, Arvio ships it. Every edit can be undone.

Install on the Shopify App Store
4.9★ rated on Shopify App StoreFree trial availableEvery edit reversible