Troubleshooting
This page collects the most common Super Speedy Filters problems and their fixes, based on five years of support in our Discord server. If your issue isn’t here, see the Frequently Asked Questions or ask us on Discord. Super Speedy Filters is a complex plugin – always set it up on a staging or clone site first.
Table of Contents
- First fix to try for almost anything: save, flush and rebuild
- Rebuild the supporting tables (wp ssf rebuild)
- Filters are not displaying at all
- The first page load is very slow, or CPU is pegged
- The SSF cache folder has grown to several gigabytes
- Filters don’t apply to the products in a page builder or FSE theme
- The widget has no configuration options, or the colour picker is missing
- Filters show for you but not for logged-out visitors
- Ajax filtering is glitchy (selections reset, checkmarks missing, page reloads)
- Removing /product-category/ or /brand/ with another plugin breaks filtering
- The page title reverts to “Shop”, or a placeholder description appears
- Two archive titles are displaying, how do I hide one?
- The stock or on-sale filter shows the wrong products
- The on-sale filter isn’t working
- Pagination is broken, or shows the wrong number of products per page
- Bots are crawling every filter combination and overloading the server
- The settings tabs don’t work, or won’t save
- The default WooCommerce sort order is ignored
- A new term or product isn’t appearing in the widgets
- The product counts in the widgets are wrong
- Multiselect isn’t working
- “Clear Filters” isn’t clearing the category
- The wrong title is showing in the browser tab
- Your shop page is on /shop-2/ instead of /shop/
- PHP warnings are showing on the front end
- Garbled special characters (e.g. accented or Polish text)
- Plugin updates aren’t working
First fix to try for almost anything: save, flush and rebuild
The large majority of problems – filters showing nothing, filters showing everything, every option appearing “selected”, filtering redirecting to /shop/ or 404ing, new products or terms not appearing, wrong counts – are fixed by re-saving and rebuilding, in this order:
- Settings > Super Speedy Filters > Save (this re-flushes the rewrite rules).
- Settings > Permalinks > Save (no changes needed, just save).
- Super Speedy Filters > Advanced > Clear SSF Cache.
- Flush your object cache (Redis / Memcached).
- If it’s still wrong, rebuild the tables from the command line (see the next section).
On the Advanced tab, the common working configuration is the top two options OFF and the third (pre_get_posts / product-archive query) ON, but the exact combination depends on your theme – see the page-builder section below. Confirm the table build has completed: the Advanced tab shows a build status and the last completion time.
Rebuild the supporting tables (wp ssf rebuild)
Super Speedy Filters keeps an optimised “object ancestors” table that powers all the filtering and counts. It maintains itself automatically, but it can drift out of sync – and it needs rebuilding on purpose in these cases:
- You renamed term slugs (product categories, brands, colours, etc.).
- You renamed a taxonomy qualifier (e.g. the
/brand/in/brand/adidas/). - You ran an import with do_action calls switched off.
- You bulk-updated products via SQL, duplicated products, or migrated the site.
- Counts are wrong, or a new term/product isn’t appearing.
The best way is the WP-CLI command (run it anywhere inside your WordPress folder):
wp ssf rebuild
Use the CLI rather than the Advanced-tab button wherever you can – many hosts kill the long-running build query when it’s triggered from wp-admin, whereas the CLI runs it cleanly. The command returns quickly and finishes in the background. If a build is already stuck, wp ssf rebuild cancels and restarts it; add --force to make it wait for the stuck query to roll back first. To clear the fragment cache from the command line (version 6.18+) use wp ssf clear-cache. Always flush your object cache afterwards, especially if the “building object ancestors table” notice persists. On a local copy where wp-cron is disabled the build may never run on its own – use the CLI.
Filters are not displaying at all
Check these in order:
- Database version. Super Speedy Filters uses recursive CTEs, so it requires MySQL 8+, MariaDB 10.2.1+ or Percona. On older databases the tables never build.
- Filters disabled. Each widget has Disable / Enable / Enable for Admins at the top – make sure they’re enabled for everyone (see the “admin only” section below).
- Tables not built. Install Query Monitor and load the page – red database errors from Super Speedy Filters mean the tables didn’t finish building. Rebuild with
wp ssf rebuild, or copy the SQL from Settings > Super Speedy Filters > Advanced into phpMyAdmin and run it manually if your host kills long queries. - Server security. A ModSecurity / Imunify360 rule (specifically rule
77350107) has been seen blocking the build – disable it if present. - Collation error. If a rebuild fails with
Illegal mix of collations ... for operation '=', one table (usuallywp_postmeta) has a different collation from the rest of the database – convert it to match.
The first page load is very slow, or CPU is pegged
Super Speedy Filters relies on an object cache as its progressive cache – if you don’t have one, every archive page recalculates all the category and attribute counts from scratch and pages take 8-30 seconds (a profiler will blame FWWLink->getPermaLink in class-fww-link.php). Install one: Redis via Till Krüss’s “Redis Object Cache” plugin, LiteSpeed’s Redis object cache, or the free Docket Cache plugin if you can’t run Redis. In W3 Total Cache, enable object caching only. The first load of any archive builds the counts and is slow; every load after that is fast until the cache is cleared (the cache clears whenever you change a widget setting, or when an import flushes it).
If Redis errors with OOM command not allowed when used memory > 'maxmemory', your host has no memory limit and eviction policy set. In redis.conf set a memory limit and an eviction policy (Dave recommends LFU):
maxmemory 3000mb
maxmemory-policy allkeys-lfu
The SSF cache folder has grown to several gigabytes
The on-page fragment cache trades disk space for speed – a large cache is usually correct, because those HTML fragments are reused across many pages. If it’s ballooning (multiple GB) and filling your disk or bloating backups, raise the minimum time before something is cached on the Advanced tab from 50ms to 100ms or 250ms (nothing faster than that threshold gets cached), then Clear SSF Cache. There’s also a Cache age (minutes) setting. Configure your backups to exclude the cache folder – you should never be backing it up. Runaway growth is almost always bots crawling filter combinations (see below).
Filters don’t apply to the products in a page builder or FSE theme
Super Speedy Filters has no dedicated Elementor/Divi/Bricks block. In every builder (Elementor, Divi, Bricks, Greenshift, Oxygen, Avada, Kadence) you add the widgets under Appearance > Widgets and place a shortcode into the archive/shop template:
[ssf_widgets]
- The builder’s product loop must be set to “Current Query”, not “Latest Products” or a manual/random query, or Super Speedy Filters cannot filter it. In Elementor Pro set the Loop Grid to Current Query; in Divi use Theme Builder > Archive Page > Woo Products module > set to “Current Category / Show For Current Category”.
- If you use Divi or Oxygen and you have a Shop page set in WooCommerce > Settings > Products, filtering and the Clear Filters button can break because SSF can’t recognise the builder archive as the shop – unset the WooCommerce shop page.
- If clicking a filter opens the category page instead of filtering in place, or the wrong template loads, enable the template override option on the Advanced tab so the shop-archive template is used. Check which template is active with Query Monitor’s Template panel; some FSE/builder themes (Avada layouts, Fusion) hijack it and need their archive layout disabled.
- If the widget area is missing entirely (some Avada/FSE themes disable it), re-enable widgets in the theme settings. There’s an advanced option to enable 20 extra shortcode areas if you need them.
The widget has no configuration options, or the colour picker is missing
WordPress’s block-based widget screen interferes with the Super Speedy Filters widget editor and its colour picker. Install the free Classic Widgets plugin and edit from Appearance > Widgets (not the Customizer). The flow is: add the widget, choose the ‘product’ post type, then hit Save once – the rest of the options (taxonomy, container type, display type) only appear after you save and reload the page.
Filters show for you but not for logged-out visitors
Check every Super Speedy Filters widget in that sidebar under Appearance > Widgets for one whose visibility is set to “Admin Only” (the option exists so you can stage filters before going live). Setting a single SSF widget in a sidebar to admin-only currently hides the whole sidebar’s SSF widgets from the public – change it to Enabled / Everyone. If that’s not it, a WAF or firewall blocking JSON/ajax requests from non-logged-in users can produce the same symptom.
Ajax filtering is glitchy (selections reset, checkmarks missing, page reloads)
Full-page ajax is still being reworked, and our consistent advice is to turn it off for now and use normal page loads, which work reliably. Set the widget’s ajax option off (or items-per-page ajax to 0), and switch off your theme’s own ajax too, since theme ajax (Shoptimizer, Enfold, Divi, GeneratePress, Kadence) is a common cause of the whole page reloading or looping. The ajax term search inside a single filter widget – used when a taxonomy has thousands of terms – is separate and works fine, so leave that on. If ajax stays active on mobile despite “desktop only”, that’s your theme forcing it, not SSF. Ajax also needs your archive HTML to have a products container with product items inside it.
Removing /product-category/ or /brand/ with another plugin breaks filtering
If you strip a taxonomy base from your URLs with Rank Math, YITH, Premmerce, Permalink Manager Pro or WooCommerce’s own permalink settings, category pages can show no products, filters redirect to /shop/, or filtering 404s. Don’t remove it with the other plugin – do it inside Super Speedy Filters instead: URL Structure tab, tick the box to remove /product-category/ (or the relevant qualifier), then enable Custom URL Rewrites on the Advanced tab, then Settings > Permalinks > Save and clear both caches. SSF uses a single fast global rewrite rule where the other plugins rewrite per-URL, which is slow on large sites. Important: once a qualifier is removed, every term slug must be unique across all taxonomies, not just at the top level, or you’ll get 404s and wrong results. Avoid multiselect on a hierarchical category when qualifiers are removed.
The page title reverts to “Shop”, or a placeholder description appears
By default WordPress has no concept of a combined title, so when two or more filters are active the title falls back to the shop page and WooCommerce shows its placeholder text “This is where you can browse products in this store”. To control this:
- Build your titles on the SEO & Indexing tab and set the title/H1 override to ALL (not “Multi-term” – that only fires when 2+ taxonomies are in the URL, so single category pages wouldn’t be overridden).
- Use the Advanced-tab option “Don’t override page & shop titles when only 1 term selected” to keep a single-term page’s own category title.
- Use the URL tab’s “Use our template hierarchy” option to keep the taxonomy template active once more than one taxonomy is in the URL.
- To remove the placeholder description, disable Shop description override on the Advanced tab, clear any stray text on the category term, or blank the string with Loco Translate.
If you use Yoast or Rank Math to control your archive titles and meta, don’t also enable SSF’s overrides – two plugins writing the same tags produces duplicate or conflicting titles and canonicals. Leave SSF’s four SEO overrides (H1 title, browser page title, shop description, breadcrumb) unchecked while keeping the permalink/rewrite options on. Note that enabling Custom URL Rewrites can make Yoast stop recognising the page as a product archive and drop its titles – if you rely on Yoast for titles and don’t need the rewrite, leave that option off.
Two archive titles are displaying, how do I hide one?
Some themes use the archive_description hook and also the woocommerce_page_title filter, so if your theme uses both you’ll get two titles. Hide one with CSS. The woocommerce_page_title title normally appears first, so to hide that one:
.woocommerce.archive .shop-title-wrapper, .woocommerce.archive .page-title, .woocommerce.archive .title-shop {
display:none;
}
To hide the second (SSF) title instead:
.fww_archive_title {
display:none;
}
The stock or on-sale filter shows the wrong products
Super Speedy Filters deliberately doesn’t auto-sync stock visibility, because too many plugins and themes set it differently. Set the stock option identically in all of them – WooCommerce > Settings > Products > Inventory (Hide out of stock), the SSF Main tab stock control, and any theme/plugin stock option – then Save SSF settings and rebuild the ancestors table from the Advanced tab, in that order. For on-sale, note the filter reads a maintained onsale postmeta flag, not the live price, so run the “update on-sale flag” SQL from the settings page once (SSF then maintains it), and rebuild after big imports.
The on-sale filter isn’t working
Check wp-admin > Settings > Super Speedy Filters > URL Structure tab and scroll to the three on-sale settings: (1) Pretty Permalinks – choose /onsale/product-category/toys/ or /product-category/toys/?onsale=1; (2) On-sale slug – you must enter something here (we default it to onsale); do not delete it, though you can translate it; (3) “Run SQL to add/update on-sale flag” – this needs to be run once, then SSF maintains it. Products discounted only by a dynamic-pricing plugin never set the database flag, so they won’t appear – to make them filterable you have to write real sale prices into the database.
Pagination is broken, or shows the wrong number of products per page
If pagination shows a fake page count, sends page 2 back to page 1, or the archive ignores your products-per-page setting, the usual cause is Scalability Pro’s “Remove SQL_CALC_FOUND_ROWS” option, which stops the database counting total rows, so SSF fakes the total. Disable that Scalability Pro option to restore accurate pagination, or pair it with an infinite-scroll plugin and change the page-count text. Don’t remove the 404 on out-of-range pages – infinite scroll relies on it to know when to stop. To fix products-per-page (e.g. Divi always showing 12), set it in Customizer > WooCommerce, or force it with a filter:
add_filter('loop_shop_per_page', function($cols) {
return get_option('woocommerce_catalog_rows_per_page', 12);
}, 999);
Bots are crawling every filter combination and overloading the server
Search bots and AI scrapers can crawl hundreds of thousands of filter URLs, spiking CPU and MySQL memory, filling the disk with temp files and ballooning the cache. Super Speedy Filters already renders non-indexable filter links as href="javascript:void(0);" with rel="nofollow", storing the real URL in a data-bad-bots-href attribute that JavaScript restores for real users (bots like Bingbot ignore rel=nofollow, so this is more effective). To reduce the crawl surface:
- On the SEO & Indexing tab, keep the indexable combinations low – start at max 1 taxonomy and 1 term, set a minimum products-for-indexing (e.g. 10), and watch the live indexable-pages count come down; relax it slowly once pages are indexed.
- Set every widget’s multiselect to No – multiselect plus the
?expand_parameter is what generates the combinatorial explosion. - Put Cloudflare in front and challenge or block requests when the bot score is high, on your filter URL patterns.
- As interim mitigation, 301 the junk patterns to your shop root with the Redirection plugin (301, not 404, tells bots the page moved), e.g.
^.*expand_pa.*,^.*expand_product_cat.*.
The settings tabs don’t work, or won’t save
If the settings page renders as one long unsaveable page, the tabs stop responding, or the console shows ssfadmin is not defined, the shared admin JavaScript is out of date. The Super Speedy plugins share their settings files, so update all your Super Speedy plugins (Super Speedy Filters, Super Speedy Search, Scalability Pro) to the same version, not just one. If a dashboard update appears to fail and the plugin vanishes from the list, deactivate/delete it and upload the zip from your account manually.
The default WooCommerce sort order is ignored
If products come back in the wrong order and disabling SSF fixes it, the cause is usually Scalability Pro’s “Remove sort options” (or “Alter main query to use EXISTS”) setting – disable it; SSF always honours an explicit ?orderby in the URL. For manual term ordering in the filters themselves, SSF orders by the termmeta key order (falling back to term_order). The WP Taxonomy Order plugin sets that key and works – just Clear SSF Cache afterwards. “Custom Taxonomy Order” and some admin-sort plugins use a different key and won’t take effect.
A new term or product isn’t appearing in the widgets
We maintain the optimised tables automatically and we deliberately don’t flush your object cache for you (many large customers update thousands of products then flush once at the end). So if a change isn’t showing:
- Flush your object cache first (with Redis: Settings > Redis > Flush Object Cache), or Advanced > Clear Cache.
- Check the product isn’t a draft – WP All Import has a setting that imports as draft.
- If it’s still out of sync, rebuild with
wp ssf rebuildand flush the object cache again. If this happens, please tell us on the #super-speedy-filters Discord channel so we can find the sync bug.
The product counts in the widgets are wrong
First, some “wrong” counts are correct: if the category widget is set to Respect Filters, counts reflect the active filters, and a product placed in two sibling categories is legitimately counted in both. If the counts are genuinely out of sync (common after a migration, or an import with do_action calls disabled), go to Settings > Super Speedy Filters > Advanced and click “Rebuild ancestors table and empty cache” (or run wp ssf rebuild), then flush the object cache.
Multiselect isn’t working
For multiselect to work the widget must be set to “Respect other filters” – “Ignore other filters” resets the URL and clears everything. On hierarchical taxonomies, use the Children or Top level display option rather than a full hierarchy display, because a mixed-level path like /clothing/t-shirts/watches/ can’t be resolved. Avoid the dropdown display type for multiselect – it’s buggy; use List or Checkbox List with a Popout container instead. If a second value still won’t select, flush the object cache.
“Clear Filters” isn’t clearing the category
This is intentional. To let users clear the category too, go to Appearance > Widgets, find your Super Speedy Show Existing Filters widget and choose Display Current Category as Removable Filter. With that on, the current category appears as a clearable filter and Clear All returns to /shop/; with it off, Clear All keeps the user on the current category. There’s also an option to only show the Clear button when 2 or more filters are active.
The wrong title is showing in the browser tab
Go to Settings > Super Speedy Filters > Advanced and check whether “Enable Browser Page Title Override” is ticked. Disable it to revert to your previous page-title behaviour. If you leave it enabled, customise the titles under the SEO & Indexing tab in the “Shop Titles” area.
Your shop page is on /shop-2/ instead of /shop/
This isn’t caused by our plugin, but it’s a common WooCommerce annoyance. Go to Pages, find your two shop pages, select the one on /shop/ (not /shop-2/), trash it and delete it permanently, then edit /shop-2/ and change its permalink slug back to shop.
PHP warnings are showing on the front end
Messages like “Undefined array key” or “foreach() argument must be of type array|object” are warnings, not fatal errors, and they usually clear if you visit the SSF settings and hit Save (or update to the latest version). To stop visitors seeing any warnings, make sure display is off in wp-config.php:
define( 'WP_DEBUG_DISPLAY', false );
Garbled special characters (e.g. accented or Polish text)
If special characters look mangled on the front end even though the database looks right, the problem is the encoding of the CSV you imported – Excel commonly corrupts it. Re-save the CSV as UTF-8 using Notepad++ and re-import. A database collation of utf8mb4_general_ci is fine.
Plugin updates aren’t working
Visit wp-admin > Super Speedy Plugins > License Key and paste your key from your account; after saving, the plugin should show “Valid”. Beta or branch builds don’t update automatically through the dashboard – we only push automatic updates when we’re sure a release is stable. To run a beta or a specific branch, download the zip from your downloads and upload it manually.
Still stuck? Post a screenshot on our Discord, or read the Frequently Asked Questions.