WooCommerce CRO Technique

How to add faceted filters to WooCommerce category pages

Faceted filtering lets shoppers narrow WooCommerce shop and category pages by price, attributes, brand, stock status and rating instead of scanning a long grid. It helps most when category pages are broad, list-to-PDP click-through is weak, mobile users struggle to refine results, or shoppers often leave without clicking a product.

Summary

Bottom Line: The safest way to add product filters to WooCommerce category pages is to start with clean product attributes, then use WooCommerce’s core Product Filters block on WooCommerce 9.9+ archive templates or a dedicated faceting plugin when you need stricter per-category control

  • In current WooCommerce core, the Product Filters block is the native route for archive filtering: it was introduced in WooCommerce 9.9, supports dynamic filtering without a full page reload, and includes price, rating, attribute, stock, category, brand and tag filters plus an Active Filters block.
  • Multi-select logic matters. Baymard’s guidance is AND between filter types, OR within one filter type, which is the behaviour shoppers expect when they want “blue or black” within the same colour filter. WooCommerce core and Product Filters for WooCommerce both expose multi-select and logical-condition settings.
  • Start with the filters buyers actually use. Baymard’s 2025 product-list research says the five essential filter types, when applicable, are price, user ratings average, colour, size and brand.
  • Make selected filters visible and removable. Baymard found 20% of sites still fail to keep applied filters visible; on mobile, promoted filters are especially useful because the main filter UI is hidden behind a separate interface.
  • Treat filter URLs as an SEO control problem, not just a UX feature. Google warns that faceted navigation can create a near-infinite number of URLs, recommends blocking or fragmenting unimportant filtered states, and says paginated pages should each have their own canonical rather than canonicalising page 2+ to page 1.

How To Implement

  • Clean the catalogue data before you touch the UI

    In WooCommerce, go to Products → Categories and Products → Attributes and make sure the terms shoppers care about are defined consistently as global attributes, not a jumble of one-off values. WooCommerce explicitly documents global attributes as the preferable option because they are reusable across products and easier to update storewide. If you want a brand filter, make sure the brands feature is enabled and brands are assigned to products.

  • Choose the right implementation route for the store’s setup

    • Block theme / Site Editor / WooCommerce 9.9+: use the native Product Filters block in the archive templates. Go to Appearance → Editor → Templates → WooCommerce → Product Catalog and also review the product taxonomy template used for category-style archives. WooCommerce documents the Product Catalog template as the owner of the main shop layout and recommends adding the Product Filters block there.
    • Classic theme or need for more conditional control: use Product Filters for WooCommerce or FacetWP. Product Filters for WooCommerce is managed at WooCommerce → Filters and bound to archives via WooCommerce → Settings → Products → Filters. FacetWP facets are created under Settings → FacetWP and can be placed into archive sidebars or supported blocks.
  • If you use core WooCommerce Product Filters, build from the archive template outward

    Add the Product Filters block next to the Product Collection block inside the relevant archive template. Then add the inner filters that match real buyer behaviour: usually Price Filter, one or more Attribute Filters, Status Filter, Rating Filter, and Brand Filter where brand matters commercially. Include Active Filters so selected filters are visible and removable. WooCommerce’s documentation for the block shows these inner blocks and their settings.

  • Match filter logic to how shoppers think

    For any attribute where customers may want more than one value in the same family, enable multiple selections. In core WooCommerce’s Filter by Attribute settings, you can allow single or multiple options and choose filter conditions. In Product Filters for WooCommerce, the relevant fields are Multi select and Query type, where you can choose AND or OR for that element. For “blue or black”, use one colour filter with multi-select and inclusive logic rather than two separate filters.

  • Keep the filter set narrow and category-specific

    Do not expose every possible facet just because the plugin allows it. Baymard’s evidence suggests the most broadly useful set is price, rating, colour, size and brand where relevant, and its filter-UI guidance also argues for category-specific filters that align with what buyers are scanning for in that category. On block themes, WooCommerce core gives you the archive template and context-aware filtering, but the official docs do not document native per-category display rules in the same way dedicated plugins do; if you need different filter sets by category, that usually means theme-level template decisions or a more configurable plugin. Product Filters for WooCommerce does document Display rules by category, attribute, taxonomy, tag and page.

  • Handle applied filters and reset explicitly

    • Core WooCommerce: add Active Filters so selected states are plainly visible and removable. On mobile, WooCommerce’s Product Filters block uses a modal-style filter interface, so the visible summary matters even more.
    • Product Filters for WooCommerce: use the Notes for Product Filters widget or shortcode to show applied selections, and add a Button element with Action = Reset for one-click clearing. This route gives you the most explicit “applied filters bar + reset” setup out of the box.
  • Design for mobile on purpose, not as a desktop afterthought

    Baymard’s guidance is a persistent left sidebar on desktop, but a drawer or sticky-apply pattern on mobile, with applied filters visible above the results. It also recommends promoting especially important filters because on mobile the main filter UI is hidden until tapped, and typically only two or three promoted filters fit comfortably in one line. In practice, that means: keep the full filter stack in the drawer/sidebar, but pull 1–3 high-usage filters such as price, size, or delivery/availability into a visible row above the product grid on mobile if your chosen theme/plugin can do this cleanly.

  • For larger catalogues, choose tooling that can cope with scale

    FacetWP is built around an index table and documents both its block support and its WooCommerce support, including variable products. It also documents that indexing can become the main operational constraint on large catalogues and recommends more controlled indexing approaches such as WP-CLI for sites with lots of content changes. FiboSearch is useful here too, but as a complementary search layer, not as a replacement for category-page faceting: its official materials describe it as live WooCommerce search with autocomplete, and its Pro performance claims are vendor data based on an inverted index and SHORTINIT mode.

  • Add a no-results state and measure it before rolling out widely

    WooCommerce’s Product Collection block includes a No results inner block, so give shoppers a sensible recovery path instead of a dead end. In the same release, instrument custom GA4 events such as filter_apply, filter_remove, filter_reset, and filter_zero_results, with parameters like category_slug, facet_name, selected_value_count, and results_count. Validate them in DebugView before publishing broadly. GA4’s official documentation supports both recommended ecommerce events and custom events.

  • Stop filter URLs creating index bloat

    If filtered states are not intended to rank, canonicalise them back to the clean category URL and keep your internal UX state out of the index where possible. Google’s guidance says faceted navigation can explode URL counts, suggests blocking or fragmenting states you do not need indexed, and notes that rel="canonical" can consolidate signals to the main page. If you use Yoast SEO, its official API documents the wpseo_canonical filter for changing the canonical URL programmatically. Important caveat: for real pagination such as ?page=2, Google says each page in the sequence should keep its own canonical rather than pointing all pages back to page 1.

  • Check plugin and theme caveats before launch

    • Core Product Filters block is the current native route and the earlier filter blocks were deprecated from WooCommerce 9.9 onward.
    • Product Filters for WooCommerce does not apply its [wcpf_filters] shortcode to WooCommerce Blocks, so it is a poorer fit if the category grid is driven by WooCommerce blocks.
    • FacetWP Blocks support the WooCommerce Product Collection block in both classic and block themes, but FacetWP also warns that the Block/Site Editor ecosystem is evolving and future WordPress updates can affect behaviour, so version-testing matters.
    • HPOS is largely irrelevant to storefront filtering. WooCommerce’s HPOS documentation is about order storage tables, not product-archive filtering, so it is not the main compatibility question here; the more important checks are theme, archive template, block support, indexing, and JavaScript refresh behaviour.

How To Measure

The core KPI is list-to-PDP CTR on category/shop pages, read as select_item ÷ view_item_list, because GA4 explicitly defines view_item_list for list exposures and select_item for clicks from a list. The commercial KPI to judge the technique is RPV and purchase conversion from filtered sessions. The operational KPI is zero-result filter combinations.

In GA4, use: – Recommended ecommerce events: view_item_list, select_item, and purchase. These populate official ecommerce metrics such as Item-list view events, Item-list click events, Purchases, Transactions and Purchase revenue. – Custom events: filter_apply, filter_remove, filter_reset, filter_zero_results, and optionally filter_panel_open. Register key parameters as custom dimensions so you can segment by category, facet family, or whether a session used filters at all. GA4’s official setup docs confirm custom events are supported via Google tag or GTM.

Read results in these slices: – Filtered sessions vs non-filtered sessions on shop/category archives. – Mobile vs desktop, because mobile filtering patterns differ materially. – Broad categories only, where filters should do real work rather than decorate a short list. – Top filter families such as price, colour, size, brand.

What success looks like: – higher list-to-PDP CTR from category pages, – lower category exit behaviour after a filter interaction, – higher purchase conversion and RPV for filtered sessions, – fewer zero-result filter combinations over time as you refine the configuration.

Guardrail metrics: – LCP, INP and CLS must not worsen after adding faceting or extra AJAX behaviour; Google’s current “good” thresholds are LCP within 2.5 seconds, INP at 200 ms or less, and CLS at 0.1 or less. – overall conversion rate and AOV should not fall, – zero-result rate should not rise, – product-list render latency / filter refresh delay should not create obvious lag, especially on mobile and on larger catalogues.

Pitfalls

  • Pitfall: treating filters as a plugin problem instead of a catalogue-data problem. If attributes and brands are inconsistent, the UI will only expose that inconsistency faster. WooCommerce’s own taxonomy documentation makes clear that attributes are what power cross-category filtering, and that global attributes are the preferred storewide approach.
  • Pitfall: forcing single-select where users want multi-select. Baymard’s research shows shoppers regularly try to select several values within the same filter family, especially for price and colour. If they cannot do that, comparison becomes tedious and some users abandon the task.
  • Pitfall: hiding applied filters inside the drawer. Baymard explicitly calls out invisible applied filters as a recurring usability failure, especially on mobile where users can forget what they filtered by and assume the site simply has poor stock.
  • Pitfall: assuming infinite scroll is always the modern answer. NN/g says infinite loading can work when there are relatively small result sets, good filters, and a clear item count, but it is not automatically the best choice for large product listings. For bigger catalogues, “Load more” or conventional pagination usually gives shoppers more control and is easier to stabilise analytically and technically.
  • Myth: every filtered URL is an SEO opportunity. Google’s guidance points the other way by default: faceted URLs can explode crawl volume, dilute signals, and waste server resources unless you deliberately manage indexing and canonicalisation.
  • Myth: Product Filters for WooCommerce is a drop-in answer for block-based archives. It is not. Its own documentation says the [wcpf_filters] shortcode does not apply filtering to WooCommerce Blocks.

Examples

FAQs

Sources & Further Reading

Want us to implement this for you?

We run measured CRO consultancy for WooCommerce. If you want help prioritising, testing & implementing these improvements, tell us about your store.

Book Pilot

About This Page

  • Written By: Eliot Webb – Founder & WooCommerce CRO Consultant
  • Last Reviewed: 17 Jun 2026
  • Last Updated: