{"id":391619,"date":"2026-10-25T10:37:52","date_gmt":"2026-10-25T10:37:52","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/opuswerk-filter-landing-pages-for-woocommerce\/"},"modified":"2026-10-26T20:34:15","modified_gmt":"2026-10-26T20:34:15","slug":"opuswerk-filter-landing-pages-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/opuswerk-filter-landing-pages-for-woocommerce\/","author":23573567,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.1","stable_tag":"1.0.1","tested":"7.1.4","requires":"6.5","requires_php":"7.4","requires_plugins":null,"header_name":"Opuswerk Filter Landing Pages for WooCommerce","header_author":"Opuswerk","header_description":"SEO landing pages from the WooCommerce filters you already use: own H1, text, title and self-canonical for the filter combinations you choose.","assets_banners_color":"767676","last_updated":"2026-10-26 20:34:15","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/opuswerk.at\/plugins\/filter-landing-pages\/","header_author_uri":"https:\/\/opuswerk.at","rating":0,"author_block_rating":0,"active_installs":0,"downloads":116,"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":"ykamanin","date":"2026-10-25 10:37:41","revision":3764341},"1.0.1":{"tag":"1.0.1","author":"ykamanin","date":"2026-10-26 20:34:15","revision":3767307}},"upgrade_notice":{"1.0.1":"<p>No change to what the plugin does; links to the support forum and to rate the plugin.<\/p>","1.0.0":"<p>First release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3764339,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3764339,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3764339,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3764339,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3764339,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.0.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3764339,"resolution":"1","location":"assets","locale":"","width":1280,"height":720},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3764339,"resolution":"2","location":"assets","locale":"","width":1280,"height":720},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3764339,"resolution":"3","location":"assets","locale":"","width":1280,"height":720},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3764339,"resolution":"4","location":"assets","locale":"","width":1280,"height":720},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3764339,"resolution":"5","location":"assets","locale":"","width":1280,"height":720}},"screenshots":{"1":"The landing pages under Products, with category, filters and product count.","2":"Editing a landing page: the pasted address, its canonical form, the product count and the robots.txt line.","3":"A landing page in the shop: its own heading and intro text above the filtered products.","4":"The settings section under WooCommerce, Settings, Products, with the robots.txt block to copy.","5":"The unfiltered category page with the \"Popular filters\" links to its landing pages."}},"plugin_section":[],"plugin_tags":[6363,1600,6033,186,286],"plugin_category":[45,55],"plugin_contributors":[283687],"plugin_business_model":[],"class_list":["post-391619","plugin","type-plugin","status-publish","hentry","plugin_tags-canonical","plugin_tags-landing-pages","plugin_tags-product-filter","plugin_tags-seo","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_category-seo-and-marketing","plugin_contributors-ykamanin","plugin_committers-ykamanin"],"banners":{"banner":"https:\/\/ps.w.org\/opuswerk-filter-landing-pages-for-woocommerce\/assets\/banner-772x250.png?rev=3764339","banner_2x":"https:\/\/ps.w.org\/opuswerk-filter-landing-pages-for-woocommerce\/assets\/banner-1544x500.png?rev=3764339","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/opuswerk-filter-landing-pages-for-woocommerce\/assets\/icon.svg?rev=3764339","icon":"https:\/\/ps.w.org\/opuswerk-filter-landing-pages-for-woocommerce\/assets\/icon.svg?rev=3764339","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/opuswerk-filter-landing-pages-for-woocommerce\/assets\/screenshot-1.png?rev=3764339","caption":"The landing pages under Products, with category, filters and product count."},{"src":"https:\/\/ps.w.org\/opuswerk-filter-landing-pages-for-woocommerce\/assets\/screenshot-2.png?rev=3764339","caption":"Editing a landing page: the pasted address, its canonical form, the product count and the robots.txt line."},{"src":"https:\/\/ps.w.org\/opuswerk-filter-landing-pages-for-woocommerce\/assets\/screenshot-3.png?rev=3764339","caption":"A landing page in the shop: its own heading and intro text above the filtered products."},{"src":"https:\/\/ps.w.org\/opuswerk-filter-landing-pages-for-woocommerce\/assets\/screenshot-4.png?rev=3764339","caption":"The settings section under WooCommerce, Settings, Products, with the robots.txt block to copy."},{"src":"https:\/\/ps.w.org\/opuswerk-filter-landing-pages-for-woocommerce\/assets\/screenshot-5.png?rev=3764339","caption":"The unfiltered category page with the \"Popular filters\" links to its landing pages."}],"raw_content":"<!--section=description-->\n<p>Shoppers often search for something specific, such as \"grey velvet sofas\". Your shop already\nhas that page: the Sofas category with the colour filter set to grey and the material filter\nset to velvet. To a search engine, though, it is just a filter address. It carries the\ncategory's heading and the category's text, and most SEO plugins give it a canonical that\npoints back to the plain category. It does not rank on its own.<\/p>\n\n<p>This plugin turns the filter combinations you pick into real landing pages, at the address\nthe filter already produces. You keep your filters, and no new URL is created.<\/p>\n\n<p><strong>How it works<\/strong><\/p>\n\n<p>Open a category in your shop, set the filters and click \"Make this a landing page\" in the\ntoolbar, or paste the address under Products, Filter landing pages. Write a heading and an\nintro text; a text below the products, a title and a description for search results are\noptional. Publish. Whoever then opens that filter combination, through a link, a filter\nclick or a search result, sees your heading and text, and search engines see a page whose\ncanonical points to itself.<\/p>\n\n<p><strong>What it does<\/strong><\/p>\n\n<ul>\n<li>Gives each landing page its own H1, intro text, text below the products, title and meta\ndescription, and hides the category description on that page.<\/li>\n<li>Prints a self-referencing canonical and <code>index, follow<\/code> on landing pages, through Yoast\nSEO or Rank Math, or on its own when no SEO plugin is active.<\/li>\n<li>Leaves every other filter combination exactly as it was.<\/li>\n<li>Recognises a combination in any form: values in any order, with or without the operator\nargument, from the classic filter widget or the Product Filters block. It stores one\ncanonical form and uses it everywhere: in the canonical tag, the links and the robots.txt\nlines.<\/li>\n<li>Refuses what cannot be a landing page and says why: price, rating, stock or search\narguments, a second results page, a duplicate of an existing landing page, a combination\nwithout products. A combination with very few products gets a warning.<\/li>\n<li>Lists the landing pages under Products, with category, filters and product count.<\/li>\n<li>Adds a \"Popular filters\" block of links to the landing pages on their unfiltered category\npage, so that search engines find them.<\/li>\n<li>Shows a robots.txt block to copy: filter addresses disallowed, and an <code>Allow<\/code> line for\neach landing page that matches its exact address. The plugin does not write robots.txt\nitself.<\/li>\n<li>Makes the WooCommerce Product Filters block reload the page in categories that have\nlanding pages, so that a shopper who filters into one sees its heading and text. In other\ncategories the block keeps filtering without a reload.<\/li>\n<li>Clears the cache of a changed landing page and its category in WP Rocket and LiteSpeed\nCache. Other caches can listen to an action.<\/li>\n<li>Works with page builders through the shortcode <code>[opusflp_landing part=\"intro\"]<\/code>, with the\nparts <code>h1<\/code>, <code>intro<\/code>, <code>bottom<\/code> and <code>links<\/code>.<\/li>\n<li>Offers the WP-CLI commands <code>wp opusflp list<\/code> and <code>wp opusflp check &lt;url&gt;<\/code>.<\/li>\n<\/ul>\n\n<p><strong>Which shops it is for<\/strong><\/p>\n\n<p>Shops that filter with WooCommerce's own filters: the \"Filter Products by Attribute\" widget,\nthe Product Filters block, and themes that reuse their addresses, such\nas <code>?filter_color=grey<\/code>. Landing pages are built on product categories and product\nattributes. Filter plugins that write addresses of their own are not read in this version.<\/p>\n\n<p><strong>SEO plugins<\/strong><\/p>\n\n<p>Tested with Yoast SEO (free) and Rank Math. With either of them, the plugin hands its\ncanonical, title, description and robots values to the SEO plugin, so each tag appears\nexactly once. Without an SEO plugin, the plugin prints them itself. When another SEO plugin\nis active, for example SEOPress, All in One SEO or The SEO Framework, the plugin prints\nnothing in the page head, to avoid a second canonical, and says so in one dismissible\nnotice. Headings, texts and links still work.<\/p>\n\n<p><strong>For shops in Germany, Austria and Switzerland<\/strong><\/p>\n\n<p>Filter pages (Filterseiten) and faceted navigation (Facettennavigation) are where a shop's\nmost specific searches land, such as a colour or a material within a category. A complete\nGerman translation is available, in the formal (Sie) and the informal (du) form. WordPress\nloads it from translate.wordpress.org. Until the language pack is published there, German\nshops see the English admin screens. The texts of the landing pages are yours, in any\nlanguage.<\/p>\n\n<p><strong>What it deliberately does not do<\/strong><\/p>\n\n<p>It does not phone home and does not require an account. It does not touch filter addresses\nthat are not landing pages: no noindex, no redirect, no new canonical. It does not write\nrobots.txt or an XML sitemap. Landing pages are built on product categories, not on brands,\ntags or the shop page.<\/p>\n\n<p><strong>For developers<\/strong><\/p>\n\n<p>Read another filter address format with the <code>opusflp_dialects<\/code> filter, support an SEO plugin\nwith <code>opusflp_seo_adapters<\/code>, and a cache with <code>opusflp_cache_adapters<\/code> or the\naction <code>opusflp_purge_urls<\/code>. Choose which landing page a request shows with <code>opusflp_match<\/code>,\nchange the canonical address with <code>opusflp_canonical_url<\/code>, and set the product count below\nwhich a page counts as thin (default 3) with <code>opusflp_thin_threshold<\/code>. The\nactions <code>opusflp_landing_saved<\/code> and <code>opusflp_landing_deleted<\/code> fire after a change. The full\nlist is in the plugin's source.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin. WooCommerce must be active.<\/li>\n<li>Open a product category in your shop, set one or more attribute filters and choose \"Make\nthis a landing page\" in the toolbar.<\/li>\n<li>Write the heading and the intro text, then publish.<\/li>\n<li>Optional: copy the robots.txt block from WooCommerce, Settings, Products, Filter landing\npages into your robots.txt.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"which%20filters%20does%20it%20work%20with%3F\"><h3>Which filters does it work with?<\/h3><\/dt>\n<dd><p>WooCommerce's own: the \"Filter Products by Attribute\" widget, the Product Filters block, and\nthemes that write the same addresses (<code>filter_&lt;attribute&gt;<\/code> and <code>query_type_&lt;attribute&gt;<\/code>).\nFilters by price, rating or stock cannot be part of a landing page, because their results\nchange with every price or stock update. Filter plugins with an address format of their own\nare not supported in this version.<\/p><\/dd>\n<dt id=\"does%20it%20create%20new%20urls%3F\"><h3>Does it create new URLs?<\/h3><\/dt>\n<dd><p>No. A landing page lives at the address the filter already produces, for example\n\/product-category\/sofas\/?filter_color=grey. There is nothing to redirect, and the address\nkeeps working when you deactivate the plugin, only without your heading and texts.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20all%20the%20other%20filter%20combinations%3F\"><h3>What happens to all the other filter combinations?<\/h3><\/dt>\n<dd><p>Nothing. They keep whatever your SEO plugin does with them today. To stop search engines\ncrawling them, copy the robots.txt block from the settings: it disallows filter addresses\nand allows each landing page. A blocked address is no longer crawled, but one that search\nengines already know may stay listed for a while, without its content.<\/p><\/dd>\n<dt id=\"why%20an%20allow%20line%20for%20each%20landing%20page%3F\"><h3>Why an Allow line for each landing page?<\/h3><\/dt>\n<dd><p>A robots.txt that blocks <code>?filter_<\/code> addresses blocks your landing pages too. Google follows\nthe most specific matching rule, so a line with the landing page's exact address, ending\nin <code>$<\/code>, lets it crawl that one page and no variant of it. The plugin writes the line in the\nsame canonical form as the canonical tag and the links, so the three always match. Copy the\nblock again after you add or change a landing page.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20yoast%20seo%3F\"><h3>Does it work with Yoast SEO?<\/h3><\/dt>\n<dd><p>Yes, tested with Yoast SEO (free). On a landing page, Yoast prints the canonical, title,\ndescription and robots values the plugin hands it, in its Open Graph tags as well. The paid\nYoast WooCommerce SEO has not been tested.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20rank%20math%3F\"><h3>Does it work with Rank Math?<\/h3><\/dt>\n<dd><p>Yes. On a landing page, Rank Math prints the plugin's canonical, title, description and\nrobots values, in its Open Graph and Twitter tags as well.<\/p><\/dd>\n<dt id=\"i%20use%20another%20seo%20plugin.%20what%20happens%3F\"><h3>I use another SEO plugin. What happens?<\/h3><\/dt>\n<dd><p>The plugin adds no canonical, title, description or robots tags, so nothing is doubled, and\na dismissible notice names the SEO plugin it found. Headings, texts, links and the\nrobots.txt lines work as usual. Keep in mind that most SEO plugins give filter addresses a\ncanonical to the category, which keeps a landing page out of search results.<\/p><\/dd>\n<dt id=\"yoast%20seo%20and%20rank%20math%20are%20both%20active.%20is%20that%20a%20problem%3F\"><h3>Yoast SEO and Rank Math are both active. Is that a problem?<\/h3><\/dt>\n<dd><p>Each of them prints its own canonical, so a page gets two. Both point to the landing page\nitself, but one SEO plugin per site is the clean setup.<\/p><\/dd>\n<dt id=\"my%20theme%20or%20page%20builder%20still%20shows%20the%20category%20heading.\"><h3>My theme or page builder still shows the category heading.<\/h3><\/dt>\n<dd><p>The plugin changes the heading and the description through WooCommerce's hooks and the\narchive title functions that most themes use. For a page builder or a theme with a header of\nits own, use the shortcode: <code>[opusflp_landing part=\"h1\"]<\/code> returns the heading text for your\nheading element, and <code>intro<\/code>, <code>bottom<\/code> and <code>links<\/code> print the texts and the links block. The\ntexts and the links block appear only once per page, even when a theme hook prints them too.<\/p><\/dd>\n<dt id=\"why%20does%20the%20product%20filters%20block%20reload%20the%20page%3F\"><h3>Why does the Product Filters block reload the page?<\/h3><\/dt>\n<dd><p>The block normally swaps only the product list. A shopper who filters into a landing page\nwould then see the category's heading above its products. In categories that have landing\npages, the plugin switches the block to full page loads; elsewhere the block stays as it is.\nTurn this off under WooCommerce, Settings, Products, Filter landing pages.<\/p><\/dd>\n<dt id=\"do%20i%20need%20to%20clear%20my%20cache%20after%20editing%20a%20landing%20page%3F\"><h3>Do I need to clear my cache after editing a landing page?<\/h3><\/dt>\n<dd><p>Not with WP Rocket or LiteSpeed Cache: the plugin clears the landing page and its category\nwhen you save, trash or delete it. Clear other caches yourself, or hook into the\naction <code>opusflp_purge_urls<\/code>.<\/p><\/dd>\n<dt id=\"how%20many%20landing%20pages%20can%20i%20create%3F\"><h3>How many landing pages can I create?<\/h3><\/dt>\n<dd><p>As many as you like.<\/p><\/dd>\n<dt id=\"does%20it%20send%20any%20data%20anywhere%3F\"><h3>Does it send any data anywhere?<\/h3><\/dt>\n<dd><p>No. The plugin makes no external requests of its own. The only request it makes at all is\nthe one you ask for with <code>wp opusflp check &lt;url&gt; --fetch<\/code>, which loads that page from your\nown site to read its head.<\/p><\/dd>\n<dt id=\"what%20is%20removed%20when%20i%20delete%20the%20plugin%3F\"><h3>What is removed when I delete the plugin?<\/h3><\/dt>\n<dd><p>Its landing pages, its settings, its index of filter combinations and the notices you\ndismissed. Products, categories and attributes are not touched. Lines you copied into\nrobots.txt stay there until you remove them.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Links to the support forum and to rate the plugin on the plugins screen; the settings section names the support forum for problems and bug reports, and once three landing pages are live asks for a review, hidden for good with one click.<\/li>\n<li>Tested with WordPress 7.1.3 and WooCommerce 11.2.1.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First release.<\/li>\n<li>Landing pages for WooCommerce filter combinations on product categories, with their own H1, intro text, text below the products, title and meta description.<\/li>\n<li>Self-canonical and index, follow through Yoast SEO, Rank Math or on its own; nothing in the head when another SEO plugin is active.<\/li>\n<li>\"Popular filters\" links on the category page, robots.txt lines to copy, full page loads for the Product Filters block where landing pages exist.<\/li>\n<li>Cache clearing for WP Rocket and LiteSpeed Cache; the shortcode <code>[opusflp_landing]<\/code>; WP-CLI <code>list<\/code> and <code>check<\/code>.<\/li>\n<\/ul>","raw_excerpt":"SEO landing pages from the WooCommerce filters you already use: own H1, text, title and self-canonical for the filter combinations you choose.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/391619","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=391619"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/ykamanin"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=391619"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=391619"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=391619"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=391619"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=391619"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=391619"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}