SEO Filters

SEO Filters allows replacement of layered navigation links (e.q. with interchangeable parameters like size and colors) to a SEO-friendly links with more intuitive and human-readable path.

Corresponding settings subsection is located at Stores -> Configuration -> Mirasvit Extensions -> SEO Filters.

The only options, available for now, are:

  • Enabled - enables and disables SEO Filters feature
  • Separator goes between words in complex filter names - if attribute name consists of several words, this option will define their concatenating to single name with a delimiter. There are the following options:
    • Do not use separator - words are not separated at all.
    • Use "_" as separator - words will be separated with underline.
    • Use capital letter as separator - each word in attribute name will be capitalized.
  • Use custom separator before filters - allows set custom separator.

Note

Important Note

SEO Filters should only be enabled if you are using native Magento Layered Navigation or Mirasvit Layered Navigation and there are no third-party Layered Navigation extensions installed on your store.

Otherwise, turning on this option can cause unchecked errors and unexpected crushes.

SEO Filters Example

Consider a links, which are generated for different subcategories at Tops category page, and displayed as layered navigation sidebar.

Layered Navigation Sidebar

Subcategories, displayed above, are constructed dynamically from parameters, that defined in configurable products, and have the following form. For example, let's consider a links for a top of XS size and of Orange color.

    http://www.example.com/women/tops-women.html?size=167
    http://www.example.com/women/tops-women.html?color=56

As you see, link has a dynamic part, which takes form parameter=ID, which is not optimal for web indexing.

But if we will set Marketing > Advanced SEO Suite > Settings > SEO Filters -> Enable to Yes, links will change into:

    http://www.example.com/women/tops-women/xs.html
    http://www.example.com/women/tops-women/orange.html

These links are far more SEO-friendly.

Note

Important Note

You should purge ALL cache after enabling/disabling SEO filters, otherwise links will not change.

Command Line Interface

Usage: php -f bin/magento [options]

  • mirasvit:seo-filter:rewrites --generate - generate SEO friendly aliases for attributes and their options (if not generated yet).
  • mirasvit:seo-filter:rewrites --remove - delete all SEO friendly aliases for attributes and their options.

1.3.57

(2026-03-03)

Fixed

  • Grouped option rewrites are now cleaned up by the --actualize command when the referenced grouped option no longer exists

1.3.56

(2026-01-21)

Fixed

  • Fixed a type error in swatch filter parameter processing when numeric request keys were passed to pattern matching
  • Fixed duplicate alias suffixes being appended when saving grouped options — the save plugin now detects unchanged aliases and skips redundant processing

1.3.55

(2025-12-29)

Features

  • Product swatches on category listing pages now pre-select the active filter option when browsing via SEO-friendly filter URLs

1.3.54

(2025-12-17)

Improvements

  • Optimized memory usage for large catalogs — added in-memory caching for attribute lookups, display mode checks, and category URL rewrites; switched several services to singletons to avoid duplicate instances

Fixed

  • Fixed numeric filter aliases (e.g., 10-20) being misinterpreted as price ranges when using dash separator

1.3.53

(2025-12-15)

Fixed

  • Added safety check for malformed URLs that could cause errors when parsing landing page and brand URL paths

1.3.52

(2025-11-26)

Fixed

  • Fixed breadcrumbs showing raw parameter-style URLs instead of SEO-friendly URLs on filtered category pages

1.3.51

(2025-11-11)

Fixed

  • Fixed search term being lost when filters are applied on a Landing Page that has a configured search query

1.3.50

(2025-10-15)

Fixed

  • Fixed 404 errors when using short slash URL format together with a filter prefix — the prefix was being incorrectly counted as a filter segment

1.3.49

(2025-09-19)

Improvements

  • Optimized filter alias lookups by caching "not found" results, reducing repeated database queries on pages with many filter options

Fixed

  • SEO aliases are no longer generated for non-filterable attributes — the attribute edit page now hides alias fields for these attributes
  • Fixed incorrect URL matching when multi-word filter aliases contain the separator character (e.g., t-shirt with dash separator) — the splitting algorithm now uses longest-match-first logic
  • The --actualize command now also removes rewrites for attributes that are no longer filterable

1.3.48

(2025-09-02)

Fixed

  • Fixed 404 errors with short slash URL format caused by incorrect URL path trimming during matching
  • Fixed type error when numeric attribute codes were used as filter parameters

1.3.47

(2025-08-29)

Fixed

  • Fixed canonical URLs and hreflang tags containing raw query parameters instead of SEO-friendly filter URLs when used with Advanced SEO Suite

1.3.46

(2025-08-26)

Fixed

  • Fixed a security issue where unsanitized filter option values could be passed to database queries — special characters are now stripped from filter values

1.3.45

(2025-08-15)

Fixed

  • Fixed the "Enable SEO URL" toggle on the attribute edit page having no effect due to a cached configuration value

1.3.44

(2025-08-12)

Improvements

  • OnSale filter now uses shorter, more SEO-friendly aliases (onsale/nosale) instead of the previous verbose format
  • Reserved built-in aliases are now protected — if a product attribute option generates a conflicting alias, a unique suffix is automatically added

1.3.43

(2025-07-17)

Improvements

  • SEO-friendly filter URLs now work correctly on Mirasvit Landing Pages with custom URL suffixes

1.3.42

(2025-05-06)

Features

  • Added --actualize option to the mirasvit:seo-filter:rewrites command to remove rewrites for attribute options that no longer exist in the catalog

1.3.41

(2025-04-17)

Features

  • Added new "Short Underscore" URL format — produces URLs like category/option1_option2_option3 with underscore-separated filter values

1.3.40

(2025-04-14)

Fixed

  • Fixed PHP 8.4 compatibility — updated deprecated implicit nullable parameter type hints

1.3.39

(2025-04-09)

Fixed

  • Fixed fatal error when Mirasvit Layered Navigation is not installed but the grouped option alias editor is loaded

1.3.38

(2025-04-08)

Features

  • Added ability to set custom SEO aliases for grouped filter options per store view from the admin panel

1.3.37

(2025-04-03)

Fixed

  • Fixed 404 errors on Brand Pages when a custom URL suffix is configured — the suffix was not being stripped before parsing filters

1.3.36

(2025-03-31)

Features

  • Added five new URL format presets: Short Dash, Short Slash, Long Dash, Long Slash, and Long Colon — each with independently configurable attribute and option separators

Fixed

  • Fixed error when Mirasvit Layered Navigation module is disabled but its display mode is referenced

1.3.35

(2025-03-11)

Fixed

  • Fixed inconsistent filter ordering in canonical URLs — filters are now always sorted in the same order
  • Improved alias conflict detection when saving attributes — in short URL format, the check now also catches conflicts between attribute-level and option-level aliases

1.3.34

(2025-02-17)

Fixed

  • Fixed incorrect URLs for text attributes configured with slider display mode — they are now correctly treated as decimal-type filters
  • Fixed SEO filter routing interfering with Amasty Quick Order and other excluded paths
  • Fixed Cyrillic soft sign character appearing in generated URL aliases

1.3.33

(2025-01-23)

Fixed

  • Improved Landing Page URL matching by delegating to the Landing Page module's own URL parser, fixing edge cases in multi-store setups

1.3.32

(2025-01-21)

Fixed

  • Fixed apostrophe characters not being removed when generating aliases (e.g., "Women's" no longer produces women-s)
  • Fixed Landing Page filter matching on stores with multi-store assignments

1.3.31

(2025-01-14)

Features

  • Added ability to enable or disable SEO-friendly filter URLs per individual attribute, independent of the global setting
  • ⚠️ New database table mst_seo_filter_attribute_config stores per-attribute SEO status

1.3.30

(2024-12-27)

Improvements

  • Reorganized admin settings panel with clearer labels and descriptions
  • Alias duplication warning now shows the conflicting attribute code for easier troubleshooting

Fixed

  • Fixed brand page filtering failing when a custom URL suffix is configured

1.3.29

(2024-12-19)

Fixed

  • Fixed brand page filtering failing when a custom URL suffix is configured
  • Alias duplication warning now shows the conflicting attribute code

1.3.28

(2024-11-26)

Fixed

  • Fixed custom price filter alias being ignored — the price filter URL now uses the configured alias instead of the raw attribute code

1.3.27

(2024-11-22)

Fixed

  • Fixed alias uniqueness check being too narrow in short URL format — it now validates across all attributes, preventing collisions between attributes

1.3.26

(2024-11-05)

Improvements

  • Added compatibility with Mirasvit SEO module for generating correct alternative/hreflang URLs with SEO-friendly filters in multi-store setups

1.3.25

(2024-10-07)

Fixed

  • Fixed 404 errors when dash separator is used and one filter alias is a prefix of another (e.g., blue vs blue-green) — aliases are now sorted by length to prevent ambiguous matching

1.3.24

(2024-09-26)

Features

  • Added "Rewrite Alias Source" setting to control whether aliases are generated individually per store view or inherited from the default store

Fixed

  • Fixed brand URL matching being too greedy — partial brand name matches no longer cause incorrect routing
  • Fixed dash-separated aliases with multiple options being miscounted during URL parsing

1.3.23

(2024-09-12)

Fixed

  • Fixed 404 errors when a category URL with applied filters partially matches a Landing Page URL
  • Fixed Landing Page matching when the module is not installed — a module-enabled check is now performed first

1.3.22

(2024-06-12)

Features

  • Added hyphen as a new separator option for multi-word filter names (e.g., all-weather instead of all_weather)

Fixed

  • Fixed price filter aliases colliding with category URL rewrites, causing 404 errors

1.3.21

(2024-05-29)

Fixed

  • Fixed inactive Landing Pages still being matched and displayed when filters are applied
  • Fixed filter rewrites not working when only a single filter is active

1.3.20

(2024-04-26)

Fixed

  • Fixed SEO filter routing incorrectly matching URLs that don't contain the configured filter prefix

1.3.19

(2024-04-15)

Fixed

  • Fixed Landing Page URLs missing the store code in multi-store setups
  • Fixed filter rewrites appearing inside Landing Page URLs instead of being appended after them

1.3.18

(2024-03-20)

Fixed

  • Fixed error when building filter URLs for options that have no rewrite configured
  • Fixed 404 errors on Brand Pages when filter aliases contain dashes — the dash-counting logic now correctly accounts for dashes within aliases

1.3.17

(2024-02-26)

Improvements

  • Reduced unnecessary database queries during filter URL resolution by skipping redundant alias lookups

1.3.16

(2024-02-21)

Improvements

  • Optimized routing process with stricter URL validation — filter URLs are now verified against expected segment counts before processing, reducing false-positive matches

1.3.15

(2024-02-20)

Improvements

  • Optimized attribute alias lookups with instance-level caching, reducing database queries when building URLs for multiple filter options of the same attribute

Fixed

  • Fixed potential XSS vulnerabilities in admin alias management templates

1.3.14

(2024-01-29)

Features

  • Added SEO-friendly filter URL support for Mirasvit Landing Pages

1.3.13

(2024-01-26)

Improvements

  • Reduced unnecessary database queries when loading filter rewrites

Fixed

  • Fixed 404 errors on category pages when the URL rewrite ends with a trailing slash

1.3.12

(2024-01-16)

Improvements

  • Reduced rewrite table size by excluding slider and from-to display mode attributes from rewrite generation
  • Fixed search queries being incorrectly treated as filter parameters in URLs

1.3.11

(2024-01-12)

Fixed

  • Fixed slider display mode attributes generating unnecessary rewrites that bloated the rewrite table

1.3.10

(2024-01-12)

Fixed

  • Fixed cache key collisions between filter aliases that differ only by hyphens vs underscores (e.g., blue-sky vs blue_sky)

1.3.9

(2023-11-22)

Fixed

  • Fixed trademark and copyright symbols not being properly stripped from generated URL aliases

1.3.8

(2023-11-20)

Fixed

  • Fixed URL suffix being removed from paths that don't actually end with it, corrupting non-filter URLs
  • Fixed rewrites being regenerated unnecessarily when one already exists for the same option

1.3.7

(2023-11-02)

Fixed

  • Fixed duplicate rewrite errors crashing the admin attribute save — conflicts now show a warning and auto-generate a unique alias instead
  • Fixed categories with the same URL key on different stores sharing cache entries, causing incorrect filter matching

1.3.6

(2023-10-12)

Fixed

  • Fixed double-slash appearing at the end of filter URLs when the URL suffix is a trailing slash

1.3.5

(2023-07-27)

Improvements

  • Added ability to programmatically build SEO-friendly filter URLs via getUrlWithFilters() method
  • Excluded available_shipping_methods attribute from SEO filter configuration

1.3.4

(2023-06-19)

Fixed

  • Added available_shipping_methods to the attribute exception list to prevent errors on unsupported attribute types

1.3.3

(2023-05-22)

Fixed

  • Fixed product view pages returning unexpected responses when a product URL key resembles a category URL with filters

1.3.2

(2023-04-04)

Fixed

  • Fixed incorrect filter matching when an attribute and one of its options share the same alias

1.3.1

(2023-03-31)

Fixed

  • Fixed additional filters from Mirasvit Layered Navigation (stock, rating, sale) not being recognized in Long URL format

1.3.0

(2023-03-22)

Features

  • Added CLI command mirasvit:seo-filter:rewrites with --generate and --remove options for bulk managing filter URL rewrites
  • Category filter now uses the category's URL key as its SEO alias instead of raw IDs
  • Country of manufacture filter now shows country names instead of country codes in URLs

Improvements

  • Special characters (trademark, service mark, registered, copyright) are automatically stripped from generated aliases

1.2.10

(2022-12-20)

Fixed

  • Fixed unnecessary numeric suffixes being appended to attribute aliases due to overly broad conflict detection

1.2.9

(2022-11-01)

Fixed

  • Fixed filter matching returning incorrect results in multistore environments due to missing store ID filter

1.2.8

(2022-10-21)

Improvements

  • Added "Clear all" link for filter options per attribute in Mirasvit Layered Navigation

1.2.7

(2022-10-20)

Features

  • Added SEO-friendly URL support for the "Product Attribute Linking" feature in Mirasvit Layered Navigation

1.2.6

(2022-09-29)

Fixed

  • Fixed SEO Filters not working on categories that don't have URL rewrites in the url_rewrite table

1.2.5

(2022-06-20)

Improvements

  • Removed deprecated db_schema_whitelist.json to prevent conflicts during upgrades

1.2.4

(2022-06-13)

Fixed

  • Fixed inability to save custom attribute aliases in multistore environments
  • Fixed incorrect routing on brand pages when a filter option alias matches a brand page URL key

1.2.3

(2022-06-01)

Fixed

  • Fixed missing SEO aliases for Sale and New additional filters — these now generate distinct yes/no aliases

1.2.2

(2022-05-27)

Fixed

  • Fixed inability to save custom aliases in multistore environments

1.2.1

(2022-05-24)

Improvements

  • Optimized router performance by reducing unnecessary database queries during route matching

1.2.0

(2022-05-12)

Improvements

  • ⚠️ Switched to Magento declarative database schema — the mst_seo_filter_rewrite table is now defined in db_schema.xml instead of legacy Setup scripts

1.1.24

(2022-04-11)

Fixed

  • Fixed filter URLs not working correctly on Brand View pages (Mirasvit Brand module)

1.1.23

(2022-04-06)

Improvements

  • Added caching layer for SEO filter rewrites, significantly improving page load performance on filtered pages

Fixed

  • Fixed attribute alias being regenerated every time the attribute is saved

1.1.22

(2022-02-23)

Fixed

  • Fixed 404 errors when filters are applied on stores that share the same category URL paths but have different category IDs

1.1.21

(2022-02-18)

Fixed

  • Fixed slider filter producing incorrect URLs with float/decimal values

1.1.20

(2022-02-11)

Fixed

  • Fixed "Call to a member function getRequestPath() on null" error when a category has no URL rewrite
  • Fixed "strpos(): Empty needle" error when an empty filter alias is encountered

1.1.19

(2022-02-02)

Fixed

  • Fixed 404 errors when a filter alias includes part of the category URL path
  • Fixed empty SEO filter rewrites being generated for options with Arabic text

1.1.18

(2022-01-18)

Fixed

  • Fixed 404 errors when filters are applied on subcategory pages in certain URL configurations

1.1.17

(2022-01-04)

Fixed

  • Fixed incorrect category base URL being used in filter URLs
  • Fixed 404 errors when an attribute code matches a category URL key in long URL format
  • Fixed price slider not working with long URL format
  • Fixed empty aliases being generated for attribute options with blank labels
  • Fixed wrong category being matched during filter URL resolution, causing 404 errors

1.1.16

(2021-11-22)

Fixed

  • Fixed multiselect filters not working correctly with long URL format
  • Fixed inability to remove selected filters from the "clear filter" block when using grouped option display format

1.1.15

(2021-11-11)

Improvements

  • Duplicate custom option aliases are now blocked — saving an alias that already exists shows a warning instead of silently creating a conflict

1.1.14

(2021-10-28)

Fixed

  • Fixed custom aliases with more than one dash character not being matched correctly
  • Fixed slider filter URLs causing 404 errors

1.1.13

(2021-10-15)

Fixed

  • Fixed custom aliases containing dashes creating partially duplicated aliases during URL parsing

1.1.12

(2021-08-31)

Fixed

  • Fixed price slider filter redirecting to 404 page

1.1.11

(2021-08-19)

Improvements

  • Multiselect filter behavior is now configurable per individual attribute instead of being a global setting

1.1.10

(2021-07-20)

Fixed

  • Fixed SEO filter prefix causing 404 errors on category filter pages
  • Fixed decimal filters (slider, from-to) with long SEO rewrite producing incorrect URLs

1.1.9

(2021-07-06)

Fixed

  • Fixed price filter not working correctly with SEO-friendly URLs

1.1.8

(2021-06-23)

Fixed

  • Fixed 404 errors on URLs with typos in category path or filter values — invalid URLs now fall through gracefully
  • Fixed additional Layered Navigation filters (stock, sale, new) not being recognized in filter URLs

1.1.7

(2021-05-31)

Features

  • Added SEO-friendly URL support for Layered Navigation "Grouped Options" feature

Fixed

  • Fixed custom aliases containing dashes not being matched correctly

1.1.6

(2021-05-13)

Fixed

  • Fixed filter matching failing when option aliases contain dash characters

1.1.5

(2021-04-23)

Fixed

  • Fixed filter URLs not working correctly on brand pages
  • Fixed "filter by category" not working when SEO filters are active

1.1.4

(2021-04-21)

Features

  • Added "Remove existing aliases" button in admin configuration for resetting all SEO filter rewrites

Improvements

  • Improved URL handling for multistore setups

1.1.3

(2021-04-13)

Fixed

  • Fixed "Array to string conversion" notice when filtering by price
  • Fixed "clear URL" link not working correctly on brand pages

1.1.2

(2021-04-06)

Fixed

  • Fixed error when loading URL rewrites on the attribute edit page

1.1.1

(2021-03-23)

Fixed

  • Fixed issues with disabled categories appearing in filter URL matching
  • Fixed pagination parameters appearing in SEO-friendly filter URLs

1.1.0

(2021-03-22)

Features

  • Added admin UI for managing SEO filter aliases — new "URL Rewrite" tab on the attribute edit page for viewing and customizing attribute and option aliases
  • Added new "Long" URL format option that includes the attribute code in the URL (e.g., /category/color/red-blue)
  • Added configurable URL prefix for filter segments
  • Added configurable name separator for multi-word option labels (none, underscore, capital letter)
  • ⚠️ Dropped compatibility with Magento 2.1 and 2.2

1.0.29

(2020-12-01)

Fixed

  • Fixed brand page URL generation issues when filters are applied

1.0.28

(2020-11-19)

Fixed

  • Fixed inability to apply filters on brand pages

1.0.27

(2020-09-08)

Improvements

  • Added translation support for admin configuration labels

1.0.26

(2020-09-04)

Features

  • Added "applying mode" — GET parameters from the current request are now preserved when constructing filter URLs

1.0.25

(2020-08-20)

Improvements

  • Reorganized internal plugin structure for better maintainability

1.0.24

(2020-08-12)

Features

  • SEO-friendly filter URLs now work on brand pages (Mirasvit Brand) and "All Products" pages, not just category pages

Fixed

  • Fixed isMultiselectEnabled() returning incorrect value
  • Fixed second click on an active filter not clearing it

1.0.23

(2020-07-29)

Improvements

  • Added compatibility with Magento 2.4

1.0.22

(2020-03-23)

Fixed

  • Fixed category filter URL losing other applied filters after selection

1.0.21

(2020-03-12)

Fixed

  • Fixed category filter using SEO-friendly URL format when multiselect is enabled — now correctly uses GET parameters to prevent routing issues

1.0.20

(2020-03-10)

Fixed

  • Fixed unwanted rewrites being generated for weight and other decimal attributes with dash separator

1.0.19

(2020-03-05)

Improvements

  • Special symbols (TM, SM, (R), (C)) are now automatically removed from generated filter URL aliases

1.0.18

(2020-02-20)

Features

  • Added configurable custom separator for SEO filter URLs

Fixed

  • Fixed multiple filters not being applied simultaneously
  • Fixed nested price filter not being displayed or applied correctly

1.0.14

(2019-10-28)

Improvements

  • ⚠️ Major internal restructuring — renamed and reorganized all plugin classes into Plugin/Frontend/* and Plugin/Backend/* namespaces. Removed separate price rewrite table and consolidated into main rewrite system
  • Disabled SEO-friendly URLs for decimal/slider filter values that were causing errors

1.0.13

(2019-08-09)

Improvements

  • Code quality improvements for Magento Marketplace compliance

1.0.12

(2019-06-04)

Fixed

  • Fixed empty URLs being generated for Yes/No attribute filter values
  • Fixed pagination issues when FishPig WordPress module is installed
  • Fixed router incorrectly matching URL rewrite entries with request_path = .html

1.0.11

(2018-11-29)

Improvements

  • Added compatibility with Magento 2.3

1.0.10

(2018-11-15)

Fixed

  • Fixed "The attribute model is not defined" error when filtering by certain attribute types

1.0.8

(2018-10-24)

Fixed

  • Fixed filter string not being parsed correctly from the URL
  • Fixed attribute URLs being rewritten even when the SEO Filter module is disabled

1.0.7

(2018-08-17)

Fixed

  • Fixed incorrect filter URLs when a category with the same URL key exists elsewhere in the catalog

1.0.6

(2018-07-17)

Fixed

  • Fixed incorrect database index on the price rewrite table causing errors

1.0.5

(2018-07-16)

Fixed

  • Fixed "Integrity constraint violation" database error when saving price filter rewrites
  • ⚠️ Added separate mst_seo_filter_price_rewrite table for price filter storage

1.0.4

(2018-05-29)

Fixed

  • Fixed "Undefined property: objectManager" error in swatch multiselect filter plugin

1.0.3

(2018-05-23)

Fixed

  • Fixed compilation error with swatch filter plugin dependency injection

1.0.2

(2018-05-23)

Fixed

  • Fixed incorrect URLs for additional filters in Layered Navigation when using swatch-based multiselect

1.0.1

(2018-05-17)

Fixed

  • Fixed error when filtering by stock status attribute

1.0.0

(2018-04-03)

  • Initial release