{"id":300576,"date":"2026-04-30T14:57:08","date_gmt":"2026-04-30T14:57:08","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/seo-product-filter-for-woocommerce\/"},"modified":"2026-08-17T12:25:34","modified_gmt":"2026-08-17T12:25:34","slug":"filtrex-seo-product-filters-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/ru.wordpress.org\/plugins\/filtrex-seo-product-filters-for-woocommerce\/","author":14637393,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.0","stable_tag":"1.1.0","tested":"7.1","requires":"6.5","requires_php":"8.0","requires_plugins":null,"header_name":"Filtrex \u2014 SEO Product Filters for WooCommerce","header_author":"Slobodan Pantovic","header_description":"WooCommerce product filter with SEO-friendly URLs, AJAX support, and dynamic filtering by categories, attributes, brands, and price","assets_banners_color":"696a66","last_updated":"2026-08-17 12:25:34","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/filtrex-seo-product-filters-for-woocommerce\/","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":309,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"tihi","date":"2026-04-30 14:56:55"},"1.0.1":{"tag":"1.0.1","author":"tihi","date":"2026-05-02 13:50:24"},"1.1.0":{"tag":"1.1.0","author":"tihi","date":"2026-08-17 12:25:34"}},"upgrade_notice":{"1.1.0":"<p>Internal refactor with minor bug fixes. No action required.<\/p>","1.0.1":"<p>Maintenance release \u2014 internal refactoring only. No action required.<\/p>","1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128\u00d7128.png":{"filename":"icon-128\u00d7128.png","revision":3519659,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256\u00d7256.png":{"filename":"icon-256\u00d7256.png","revision":3519659,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.jpg":{"filename":"banner-1544x500.jpg","revision":3519659,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772\u00d7250.jpg":{"filename":"banner-772\u00d7250.jpg","revision":3519659,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"spfwsp\/filter-widget":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"spfwsp\/filter-widget","title":"SEO product filter","category":"widgets","icon":"filter","description":"Display SEO product filter widget for WooCommerce products","keywords":["filter","product","woocommerce","seo","shop"],"supports":{"html":false,"align":true,"multiple":true},"attributes":{"title":{"type":"string","default":""},"show":{"type":"string","default":""},"hide":{"type":"string","default":""},"collapsed":{"type":"string","default":""}},"textdomain":"filtrex-seo-product-filters-for-woocommerce","editorScript":"spfwsp-filter-widget-editor","style":"spfwsp-filter-widget-style"}},"tagged_versions":["1.0.0","1.0.1","1.1.0"],"block_files":[],"assets_screenshots":{"screenshot-1.jpg":{"filename":"screenshot-1.jpg","revision":3519659,"resolution":"1","location":"assets","locale":"","width":1444,"height":1012},"screenshot-10.jpg":{"filename":"screenshot-10.jpg","revision":3519659,"resolution":"10","location":"assets","locale":"","width":1427,"height":1501},"screenshot-2.jpg":{"filename":"screenshot-2.jpg","revision":3519659,"resolution":"2","location":"assets","locale":"","width":1418,"height":1405},"screenshot-3.jpg":{"filename":"screenshot-3.jpg","revision":3519659,"resolution":"3","location":"assets","locale":"","width":1420,"height":871},"screenshot-4.jpg":{"filename":"screenshot-4.jpg","revision":3519659,"resolution":"4","location":"assets","locale":"","width":1420,"height":1080},"screenshot-5.jpg":{"filename":"screenshot-5.jpg","revision":3519659,"resolution":"5","location":"assets","locale":"","width":1417,"height":463},"screenshot-6.jpg":{"filename":"screenshot-6.jpg","revision":3519659,"resolution":"6","location":"assets","locale":"","width":1416,"height":1663},"screenshot-7.jpg":{"filename":"screenshot-7.jpg","revision":3519659,"resolution":"7","location":"assets","locale":"","width":1423,"height":723},"screenshot-8.jpg":{"filename":"screenshot-8.jpg","revision":3519659,"resolution":"8","location":"assets","locale":"","width":1429,"height":809},"screenshot-9.jpg":{"filename":"screenshot-9.jpg","revision":3519659,"resolution":"9","location":"assets","locale":"","width":1421,"height":1059}},"screenshots":{"1":"Filter panel with checkboxes, product counts, and active filters bar","2":"Color and image swatches on a category page","3":"Mobile slide-in filter drawer","4":"SEO tab \u2014 robots meta settings per scenario","5":"SEO tab \u2014 canonical URL settings per scenario","6":"SEO tab \u2014 title component builder with live preview","7":"Structure tab \u2014 drag-and-drop ordering and display style","8":"Display tab \u2014 mobile panel colors and button position","9":"Gutenberg block editor view"}},"plugin_section":[],"plugin_tags":[221,2236,6033,186,286],"plugin_category":[45,55,59],"plugin_contributors":[231089],"plugin_business_model":[],"class_list":["post-300576","plugin","type-plugin","status-publish","hentry","plugin_tags-ajax","plugin_tags-filter","plugin_tags-product-filter","plugin_tags-seo","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_category-seo-and-marketing","plugin_category-utilities-and-tools","plugin_contributors-tihi","plugin_committers-tihi"],"banners":{"banner":"https:\/\/ps.w.org\/filtrex-seo-product-filters-for-woocommerce\/assets\/banner-772\u00d7250.jpg?rev=3519659","banner_2x":"https:\/\/ps.w.org\/filtrex-seo-product-filters-for-woocommerce\/assets\/banner-1544x500.jpg?rev=3519659","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/filtrex-seo-product-filters-for-woocommerce\/assets\/icon-128\u00d7128.png?rev=3519659","icon_2x":"https:\/\/ps.w.org\/filtrex-seo-product-filters-for-woocommerce\/assets\/icon-256\u00d7256.png?rev=3519659","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/filtrex-seo-product-filters-for-woocommerce\/assets\/screenshot-1.jpg?rev=3519659","caption":"Filter panel with checkboxes, product counts, and active filters bar"},{"src":"https:\/\/ps.w.org\/filtrex-seo-product-filters-for-woocommerce\/assets\/screenshot-2.jpg?rev=3519659","caption":"Color and image swatches on a category page"},{"src":"https:\/\/ps.w.org\/filtrex-seo-product-filters-for-woocommerce\/assets\/screenshot-3.jpg?rev=3519659","caption":"Mobile slide-in filter drawer"},{"src":"https:\/\/ps.w.org\/filtrex-seo-product-filters-for-woocommerce\/assets\/screenshot-4.jpg?rev=3519659","caption":"SEO tab \u2014 robots meta settings per scenario"},{"src":"https:\/\/ps.w.org\/filtrex-seo-product-filters-for-woocommerce\/assets\/screenshot-5.jpg?rev=3519659","caption":"SEO tab \u2014 canonical URL settings per scenario"},{"src":"https:\/\/ps.w.org\/filtrex-seo-product-filters-for-woocommerce\/assets\/screenshot-6.jpg?rev=3519659","caption":"SEO tab \u2014 title component builder with live preview"},{"src":"https:\/\/ps.w.org\/filtrex-seo-product-filters-for-woocommerce\/assets\/screenshot-7.jpg?rev=3519659","caption":"Structure tab \u2014 drag-and-drop ordering and display style"},{"src":"https:\/\/ps.w.org\/filtrex-seo-product-filters-for-woocommerce\/assets\/screenshot-8.jpg?rev=3519659","caption":"Display tab \u2014 mobile panel colors and button position"},{"src":"https:\/\/ps.w.org\/filtrex-seo-product-filters-for-woocommerce\/assets\/screenshot-9.jpg?rev=3519659","caption":"Gutenberg block editor view"},{"src":"https:\/\/ps.w.org\/filtrex-seo-product-filters-for-woocommerce\/assets\/screenshot-10.jpg?rev=3519659","caption":""}],"raw_content":"<!--section=description-->\n<p><strong>Filtrex \u2014 SEO Product Filters for WooCommerce<\/strong> is built around one principle: every filtered page should be a page search engines can understand, crawl, and index correctly.<\/p>\n\n<p>The plugin generates clean, hierarchical URLs \u2014 <code>\/product-category\/clothing\/color-red\/size-m\/<\/code> \u2014 with no <code>\/filter\/<\/code> segment and no tracking query strings. Each URL type can carry its own robots meta tag and canonical URL, configured per filter scenario in the plugin settings.<\/p>\n\n<p>Beyond URL structure and crawl control, the plugin provides dynamic title tags, dynamic H1 headings, dynamic meta descriptions, and integration with all major SEO plugins. The entire frontend is vanilla JavaScript \u2014 no jQuery required.<\/p>\n\n<h3>SEO-Friendly Filter URLs<\/h3>\n\n<p>Filter selections are encoded directly into the URL path, e.g. <code>\/product-category\/clothing\/color-red\/size-m\/<\/code> or <code>\/product-category\/clothing\/price-100-500\/<\/code>.<\/p>\n\n<p>In AJAX mode, the browser URL updates silently via the HTML5 History API as filters are applied \u2014 the resulting URLs are shareable, bookmarkable, and support browser back\/forward.<\/p>\n\n<h3>Robots and Canonical Control per Filter Scenario<\/h3>\n\n<p>Configure robots (<code>index,follow<\/code> \/ <code>noindex,follow<\/code> \/ <code>noindex,nofollow<\/code>) and canonical (current URL \/ first page \/ category \/ shop) independently for each scenario: plain category\/shop pages (first page and paginated), single filter (single or multiple values), brand only, brand + one filter, two filters, three-or-more filters, price only, pagination, and <code>?orderby=<\/code> pages.<\/p>\n\n<p><strong>Granular noindex<\/strong> \u2014 mark individual attribute terms as noindex without affecting the rest of the attribute (e.g. noindex <code>pa_color = black<\/code> while keeping other colors indexable).<\/p>\n\n<h3>SEO Plugin Integration<\/h3>\n\n<p>Compatible with Yoast SEO, Rank Math, The SEO Framework, SEOPress, and All in One SEO \u2014 the plugin detects the active SEO plugin and hooks into its robots, title, and canonical filters. With no SEO plugin active, it outputs the meta tags directly in wp_head. Settings in the SEO tab take effect regardless of which SEO plugin handles output.<\/p>\n\n<h3>Dynamic Titles, H1 Headings and Meta Descriptions<\/h3>\n\n<p><strong>Title tag and H1<\/strong> \u2014 generated from a drag-and-drop configurable list of components (category, shop name, up to two attribute values, separator text), with capitalization rules and an optional title suffix. A live preview is available in the SEO tab before saving.<\/p>\n\n<p><strong>Meta description<\/strong> \u2014 per-scenario templates using placeholders: <code>{category}<\/code>, <code>{attribute}<\/code>, <code>{price}<\/code>, <code>{filters}<\/code>, <code>{category_in}<\/code>.<\/p>\n\n<p><strong>Grammatical inflection<\/strong> \u2014 assign gender to categories\/taxonomies and store inflected term forms for correct output in Slavic and other inflected languages (predefined support: Serbian, Croatian, Bosnian).<\/p>\n\n<h3>Filter Types<\/h3>\n\n<p><strong>Price<\/strong> \u2014 dual-thumb slider, input fields, or both; min\/max calculated from products in the current category context.<\/p>\n\n<p><strong>Categories<\/strong> \u2014 hierarchical tree with product counts; clicking navigates to the category page.<\/p>\n\n<p><strong>Attributes<\/strong> \u2014 all WooCommerce attributes, each with an independent display style and dynamic product counts.<\/p>\n\n<p><strong>Brands<\/strong> \u2014 WooCommerce product brands with color or image swatch support.<\/p>\n\n<p><strong>Custom taxonomies<\/strong> \u2014 public product taxonomies beyond WooCommerce defaults, displayed as hierarchical link trees.<\/p>\n\n<p>Every filter type supports: enable\/disable, custom label, default collapsed\/expanded state, drag-and-drop reorder, and product counts with dynamic recount.<\/p>\n\n<h3>AJAX Mode and Display Styles<\/h3>\n\n<p>AJAX mode updates the product grid, pagination, active filter chips, and browser URL without a page reload. Page reload mode is also available.<\/p>\n\n<p><strong>Filter logic<\/strong> \u2014 AND (match all active groups) or OR (match any group), applied across all filter types.<\/p>\n\n<p>Attributes and brand can each use one of five display styles: checkboxes, chips, toggle buttons, color swatches (with hex picker), or image swatches (uploaded per term). A search box can appear above a configurable item threshold, with a \"Show more \/ Show less\" control.<\/p>\n\n<p>Active selections appear as removable chips with a \"Reset all\" link; the bar can be positioned above the grid or below the filter panel.<\/p>\n\n<h3>Ghostblock Pagination<\/h3>\n\n<p>Standard sequential pagination leaves deep pages (page 50+ on a large catalog) almost unreachable from internal links, starving them of PageRank. Ghostblock pagination shows two 10-page blocks on every page: the primary block around the current page, and a reduced-opacity \"ghost block\" jumping ahead by <code>current_page \u00d7 10<\/code>. This keeps every store page reachable in a few clicks and crawlable by search engines.<\/p>\n\n<p>Enabled by default; can be disabled in the Display tab in favor of standard WooCommerce pagination.<\/p>\n\n<h3>Variation Images and Mobile Panel<\/h3>\n\n<p><strong>Variation image matching<\/strong> \u2014 when enabled for an attribute, the product card swaps its image and price to match the variation for the currently selected attribute values (WooCommerce variable products).<\/p>\n\n<p><strong>Mobile filter panel<\/strong> \u2014 opens as a slide-in drawer with configurable trigger position, width, label, and panel colors (background, text, accent, overlay) via the Display tab. Apply\/Reset buttons stay fixed at the bottom, outside the scrollable filter area.<\/p>\n\n<h3>Gutenberg Block and Shortcode<\/h3>\n\n<p><strong>Gutenberg block<\/strong> \u2014 add \"Product Filter\" via Appearance &gt; Widgets. Each instance has independent settings for title, visible filters, and collapsed state. Added directly in the post\/page editor (not a widget area), only category and custom taxonomy filters display \u2014 price\/attribute\/brand filters need a shop or category archive context.<\/p>\n\n<p><strong>Shortcode:<\/strong> <code>[spfwsp_filter]<\/code> \u2014 parameters: <code>show=\"price,categories\"<\/code>, <code>hide=\"brands,pa_color\"<\/code>, <code>title=\"Filter Products\"<\/code>, <code>collapsed=\"price,brands\"<\/code>, <code>layout=\"full_width\"<\/code> (forces off-canvas layout when the theme lacks the standard hook). Combinable freely.<\/p>\n\n<h3>Theme Compatibility (Dynamic H1)<\/h3>\n\n<p>Tested and confirmed with Astra, Kadence, Neve, OceanWP, Blocksy, GeneratePress, Storefront, and Virtue. Each theme renders its WooCommerce title differently, so the plugin includes dedicated integration for themes that override standard rendering (Kadence, Neve, OceanWP); other themes use the standard WooCommerce title filters.<\/p>\n\n<p>If your theme isn't listed, enable H1 in the SEO tab and check the output on a filtered page. If it doesn't update, find the filter hook your theme uses for the page title and enter it in the <strong>Custom H1 filter hook<\/strong> field.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>filtrex-seo-product-filters-for-woocommerce<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install from the WordPress plugin repository.<\/li>\n<li>Activate via the <strong>Plugins<\/strong> menu.<\/li>\n<li>Go to <strong>WooCommerce &gt; SEO Product Filter<\/strong> to configure filters, display, and SEO settings.<\/li>\n<li>Place the filter on the <strong>Shop page<\/strong> or a <strong>product category archive<\/strong> using the <strong>Product Filter<\/strong> block or <code>[spfwsp_filter]<\/code>.<\/li>\n<li>After the first save, go to <strong>Settings &gt; Permalinks<\/strong> and click <strong>Save Changes<\/strong> to flush rewrite rules.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"where%20can%20i%20place%20the%20filter%3F\"><h3>Where can I place the filter?<\/h3><\/dt>\n<dd><p>On the <strong>Shop page<\/strong> or a <strong>product category archive<\/strong> \u2014 price, attribute, and brand filters need that context to generate correct URLs. The category filter is an exception and works on any page (it redirects to the correct archive). An admin-only notice appears if the filter is placed elsewhere.<\/p><\/dd>\n<dt id=\"does%20the%20filter%20work%20with%20page%20builders%3F\"><h3>Does the filter work with page builders?<\/h3><\/dt>\n<dd><p>Yes, if the builder templates a real WooCommerce shop\/category archive \u2014 WordPress still runs the standard product query the filter modifies. Confirmed with Elementor; other archive-templating builders (Divi, Bricks, Kadence Blocks, etc.) rely on the same underlying mechanism and should work the same way, though they haven't been individually tested. It does not work with a Products\/WooCommerce widget dropped on a custom (non-archive) page, since that widget runs an independent query the plugin can't intercept.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.0<\/h4>\n\n<p>Internal architecture refactor of the SEO robots\/canonical\/title engine (no settings UI changes). Fixed several inconsistencies uncovered during the refactor: a filter query edge case, a price-filter fallback, and a title\/H1 preview bug on custom taxonomy pages.<\/p>\n\n<h4>1.0.1<\/h4>\n\n<p>Internal code improvements. No behavior changes.<\/p>\n\n<h4>1.0.0<\/h4>\n\n<p>Initial release.<\/p>","raw_excerpt":"WooCommerce product filter with SEO-friendly URLs, per-scenario robots and canonical control, AJAX mode, and dynamic SEO title generation.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/300576","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=300576"}],"author":[{"embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/tihi"}],"wp:attachment":[{"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=300576"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=300576"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=300576"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=300576"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=300576"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=300576"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}