Why Your Shopify Size Filter Doesn't Work (Letter vs. Numeric Sizing)

If you run an apparel store on Shopify with any size variety in your catalog, your size filter is almost certainly broken — and not in a way you'd spot from the admin. Shopify treats M, Medium, 10, and 8/10 as completely separate sizes, even when they refer to the same fit. The result: shoppers filter to "M," see half the products they should, and bounce. Part of our Store Operations pillar.
Skip ahead and ship the fix → Install ShopMySize on the Shopify App Store — defines your size equivalence map once and applies it across the whole store.
The customer pain point — viewed from the operator seat
You finish a buy cycle. You launch the new drop. It includes 14 SKUs, some sized M / L / XL, some sized 8 / 10 / 12. A shopper hits the collection page, clicks "M" in the filter, and gets back only the products with the literal M tag. The 8/10/12 product they would have bought stays hidden — because to Shopify's filter, 10 and M are different sizes.
This costs you in three ways:
- Direct lost revenue — the shopper bounces because the collection looks half-empty
- Indirect category dilution — shoppers learn your store doesn't carry their size when actually it does
- Ad-spend waste — every paid click that lands on a filtered-down half-collection has worse intent satisfaction
The buying team doesn't see it. The merch team doesn't see it. The data team sees a "high bounce on category pages" and chases it down a CRO rabbit hole that's not actually the problem. The problem is structural.
Table of Contents
- Why Shopify Treats Letter and Numeric Sizing as Separate
- The Hidden Cost in Three Numbers
- Why "Just Standardize Your Sizing" Isn't Viable
- The Real Fix: Size Equivalence Mapping
- What Good Mapping Looks Like
- Other Shopify Filter Failures to Audit While You're Here
Key Takeaways
| Problem | Why it happens | Fix |
|---|---|---|
M and 10 don't show up under the same filter |
Shopify treats every distinct variant title as a unique size | A mapping layer that says M = 8, 10, L = 12, 14, etc. |
Medium, M, and Med all filter separately |
Same — pure string match | Same — mapping handles synonyms |
| Plus sizing splits from base sizing | Different vendors label XL, 1X, Plus, 18 differently |
Consolidate Plus to cover 18+ / 1X / 2X |
| Shopper picks once and the store doesn't remember | Filter is per-page-visit | Persistent size preference (cookie or session-stored) |
The non-negotiable: the mapping has to live at the platform layer, not in human comprehension. Telling shoppers "M is also 10" doesn't work. Building a layer that knows it for them does.
Why Shopify Treats Letter and Numeric Sizing as Separate
Shopify's native variant filtering is pure string match. If your variant option for "Size" includes the string M on one product and 10 on another, the filter UI treats those as two separate filter values. Same for Medium, M., and Med — three separate filters, three separate filtered views.
This is a perfectly reasonable default for a platform that has to handle every conceivable product category. Sizing isn't a Shopify-specific concept — it's a category-specific one. Apparel has it worst, but footwear, jewelry, and even nutritional supplements ("small dog / medium dog / 5lb / 10lb") run into the same shape of problem.
Shopify's stance: standardize your variants upstream. In practice, that fails for any merchant who:
- Carries multiple brands with their own sizing
- Sells across regions with different sizing conventions (US 8 ≈ UK 12 ≈ EU 38)
- Has a legacy catalog where old products use letters and new products use numbers
- Imports from a wholesale source that ships its own variant naming
That's most apparel stores. So the filter stays broken.
The Hidden Cost in Three Numbers
Concrete numbers from audits we've run on Shopify apparel brands $300K-$2M/mo:
- Collection-to-PDP click-through drops 20-35% on filtered category pages vs unfiltered. Most operators interpret this as "shoppers got narrowed and made a decision." It's also "shoppers saw a thin collection and bounced."
- Bounce rate on collection pages with size filter applied is meaningfully higher than unfiltered — when the collection should have looked rich for the shopper's size but didn't.
- Cart abandonment by size mismatch. Shoppers add a product they liked, hit the variant dropdown at checkout, realize the size shown was the only one in stock for that color, and leave.
None of these surface as "size filter problem" in standard Shopify analytics. They surface as generic conversion drops. The fix is structural.
Why "Just Standardize Your Sizing" Isn't Viable
The naive answer is: pick one system, force every product onto it, retag in bulk. Most operators have thought about this. It fails because:
- It rewrites your variant titles on the customer-facing storefront — confusing returning shoppers and breaking historical order data
- It breaks integrations — ERP, warehouse management, returns apps, and accounting all reference the variant titles
- It's expensive — bulk variant retagging across hundreds of SKUs is a manual project, and it has to happen again every drop
- It still doesn't handle multi-region sizing, since you can't simultaneously be
US 10andUK 12andEU 38on the same variant string
The correct architecture is to leave the variant titles alone — let the data stay accurate — and add a mapping layer on top of the filter.
The Real Fix: Size Equivalence Mapping
This is what ShopMySize does. Conceptually:
- You define your store's size schema once in the admin:
M = M, Medium, 8, 10L = L, Large, 12, 14Plus = 16, 18, 20, 1X, 2X, Plus - The mapping is store-wide, not per-product. Update it once, every collection respects it.
- When a shopper filters "M," they see every product that has at least one variant matching the M equivalence set —
M,Medium,8, or10. The collection feels full because it is full. - The filter uses Shopify's native filtering layer (no client-side hacks), so pages stay fast and paginate correctly.
The same mapping powers the popup that asks the shopper their size once, the persistent "Showing: M — Change" pill that follows them across the store, and the one-tap add-to-cart that uses the right variant automatically.
What Good Mapping Looks Like
The mapping schema for a real apparel brand:
XS = XS, X-Small, 0, 2
S = S, Small, 4, 6
M = M, Medium, Med, 8, 10
L = L, Large, 12, 14
XL = XL, X-Large, 16
Plus = Plus, 1X, 2X, 18, 20, 22, 24
Notes from setting these up:
- Include synonyms in the same row.
M,Medium, andMedgo together because they're the same fit but get tagged inconsistently across brands and seasons. - Plus deserves its own group. Most apparel brands consolidate
18+into "Plus" both for filtering and for size-personalization purposes. Don't split 1X and 18 just because the variant title differs. - Multi-region. If you sell across US/UK/EU, add the international sizes to each row:
M = M, Medium, 8, 10, UK 12, EU 38. - Footwear gets its own schema. If you sell apparel + footwear, set up two mappings — they share no values.
Once it's in place, the buyer-team workflow is unchanged. The filter just works.
Other Shopify Filter Failures to Audit While You're Here
While you're auditing the size filter, check three other places where Shopify's default filtering quietly costs you:
- Color filtering with non-standard names. "Forest" and "Pine" filter separately. Same fix shape as size — synonym mapping.
- Material filtering with mixed-blend products. A 70% cotton / 30% linen shirt should filter under both "cotton" and "linen." Standard filter shows only one.
- Size availability is invisible in the collection grid. Shoppers see thumbnails, click in, then discover "your size is sold out" on the PDP. Showing the in-stock-for-shopper indicator on the grid is a separate conversion fix — covered here.
None of these are platform bugs. They're product decisions Shopify made to keep the filter generic. Apparel operators need a layer on top.
Fix your size filter in 15 minutes
Define the size equivalence map for your store once. The filter then works the way shoppers expect, across every collection and search page. No theme editing, no variant rewriting, no broken integrations. Free to install.
Install ShopMySize on the Shopify App Store →
Frequently Asked Questions
Will fixing this break my reports or integrations?
No. The mapping layer sits on top of the existing variant titles — it doesn't rename anything in your catalog. Your reports, ERP, warehouse, and order history all stay intact.
How long to set up the mapping?
15-30 minutes for a typical apparel store. The bulk of the work is deciding which synonyms group together — once you've written that down, entering it is fast.
Does the persistent size preference work for guest shoppers?
Yes, via browser storage. Once they pick, the store remembers across pages for the session. Returning guests get re-prompted if the cookie has cleared; logged-in shoppers persist across devices once you wire that to a customer account if you want.
What about products with multiple size dimensions (e.g. waist + inseam for jeans)?
Two approaches: (1) define the primary size dimension as the one the filter cares about (most jeans buyers filter waist first, then pick inseam on the PDP). (2) For brands with strong multi-dim needs, the equivalence mapping still works on whichever dimension you want to be the primary filter.
Does this work on every Shopify theme?
Yes. The mapping operates on the filter API, not on theme-side code. Themes that use Shopify's native filtering — which is almost every modern theme — work out of the box.
Related reading
- How to Capture Back-in-Stock Demand by Size on Shopify — the restock-priority angle.
- Cut Apparel Bounce Rate with Shopify Size Personalization — the conversion-rate angle.
- Shopify Store Operations — The Branva Playbook — the broader on-site systems framework.
- How Branva Runs Shopify SEO with Claude — for the on-site optimization loop.
- The AI Workflows pillar — every workflow we run.