# Faceted Navigation: What It Is and How It Affects SEO

> What faceted navigation is, how many URLs a category's filters create, what Google recommends for crawling them and how to check it on Shopify.

URL: https://clione.ai/glossary/faceted-navigation/
Lang: en

You know it even if you do not know its name: it is the column of filters on a category, the one that lets you narrow down to running shoes in size 9, black, from a particular brand. Each attribute you can filter by is a facet, hence the name. For the shopper it is the fastest way to get to the product. For a [crawler](/glossary/web-crawler/) it is something else: **every filter combination can be a new URL**, and a single category can manufacture thousands. It matters because those URLs compete for the time search engines spend on your store, and because almost all of them show the same products as the category they came from.

## How it works

Google defines it as a common feature of websites that lets visitors change how the items on a page are displayed, whether products, articles or events, and illustrates it with a parameter URL such as `items.shtm?products=fish&color=radioactive_green&size=tiny`.[^google-faceted] The problem it describes is one of crawling: because those URLs look new and the crawler cannot know whether they are useful without requesting them, it **often visits a very large number of filter URLs before concluding they are not useful**, and the time spent on them is not spent on new, useful URLs.[^google-faceted] The detail of that split is the [crawl budget](/glossary/crawl-budget/).

What is rarely calculated is how fast the combinations grow. A **fictional example calculation**: a category with a size filter of 9 values, a color filter of 6 and a brand filter of 4.

| How the filters work (fictional example) | Possible filter URLs | Where the figure comes from                   |
| ----------------------------------------------------------------------------------------------------- | -------------------- | --------------------------------------------- |
| A single value per facet                                                                              | 349                  | (9 + 1) × (6 + 1) × (4 + 1) − 1               |
| Several values per facet (size 9 **or** 10)                                                           | 524,287              | 2⁹ × 2⁶ × 2⁴ − 1                              |
| Several values, and the order of the parameters changes the URL                                       | Several times more   | Each combination allows several distinct URLs |

The second row is the one that tends to surprise. As soon as a filter accepts several values at once, each facet stops having "9 options" and has all of its possible subsets. No store has 524,287 distinct listings to show: most of those combinations repeat products or return none.

Google separates two decisions.[^google-faceted]

- **For filter URLs you do not need in the search engine**, it suggests blocking their crawling with [robots.txt](/glossary/robots-txt/), with `disallow` rules for each filter parameter, or moving the filters into URL fragments (`#color=green`), because Google Search generally does not support fragments for crawling or [indexing](/glossary/indexing/). Pointing filtered URLs at the category with a [canonical](/glossary/canonical-url/) can reduce crawling over time, and putting `rel="nofollow"` on links to filtered results can help, but Google considers these two routes **generally less effective in the long run**.
- **For the ones you do need crawled**, it asks you to use the standard `&` separator between parameters, keep a logical, fixed order of filters in the URL, not repeat a filter or allow nonsensical combinations, and **return a 404 when a combination has no results**.

The question for each facet is therefore whether any of its combinations answers a search someone really makes, and so deserves a [category page](/glossary/category-page/) of its own with a stable URL, or whether it only serves to narrow the list someone is already looking at.

## In a store

In Shopify, storefront filtering is the recommended method for filtering products in a theme, and it works on collections as well as on search results. Applied filters travel in the URL as parameters of the form `filter.scope.attribute=value`, where the scope is `p` for product filters and `v` for variant filters: for example, `filter.p.product_type=shoes` or `filter.v.option.color=red`. You can filter by availability, price, product type, vendor, tags, category, variant options and [metafields](/glossary/shopify-metafields/). **Different filters combine with "and"; several values of the same filter, with "or"**, and you can create up to 25 filters.[^shopify-filtering]

Here is what the URL map of a single collection would look like in a Shopify store, in a **fictional example**:

| What the visitor does (fictional example) | Resulting URL                                              |
| ----------------------------------------- | ---------------------------------------------------------- |
| Opens the collection                      | `/collections/trail-running-shoes`                         |
| Filters by size 9                         | `/collections/trail-running-shoes?filter.v.option.size=9`  |
| Adds the color black                      | `…?filter.v.option.size=9&filter.v.option.color=black`     |
| Also checks blue                          | `…&filter.v.option.color=black&filter.v.option.color=blue` |
| Sorts by price                            | `…&sort_by=price-ascending`                                |

Shopify already ships two defenses in its default robots.txt. The `Disallow: /collections/*+*` rule stops crawling of filtered collection pages, because they duplicate the content already on the collection page, and the `Disallow: /collections/*sort_by*` rule stops crawling of sorted collections, because they return the same products in another order.[^shopify-robots] What your store does with the `filter.` parameters is worth checking in your own file.


Moving the filters into `#` fragments takes them out of crawling, including the ones you wanted to be findable. Google generally does not support fragments for crawling or indexing,[^google-faceted] and it says so with an example: `/product/t-shirt#black` and `/product/t-shirt#white` are **the same page** to Google.[^google-ecommerce-urls] It works for filters that only reorder the view; it does not work for a combination that should rank on its own, which needs a URL without a `#`.


## How to check it

1. **Apply two filters in one order and then in the opposite order.** If the URL changes, each combination has at least two addresses; Google asks for a fixed order.[^google-faceted]
2. **Combine filters until no product is left** and look at that page's status code (in the browser's developer tools, network tab). Google asks for a 404 in that case.[^google-faceted]
3. **Open your `/robots.txt`** and look for which rules cover the filter, sort and pagination parameters. In Shopify, check whether the default rules for filtered and sorted collections are still there.[^shopify-robots]
4. **Review [Search Console](/glossary/google-search-console/)'s page indexing report.** Filter URLs tend to show up under statuses such as "Blocked by robots.txt" or "Duplicate without user-selected canonical"; the goal Google sets is for the canonical version of every important page to be indexed.[^gsc-page-indexing]
5. **Decide facet by facet.** Note which combinations you want findable, with their stable URL, and block or pull the rest out of crawling with one coherent rule, not three methods at once.

## Related concept: duplicate content

Faceted navigation is one of the most common causes of [duplicate content](/glossary/duplicate-content/) in a store: Google cites the results of sorting and filtering a category among the reasons a site has duplicate content.[^google-canonicalization] The difference lies in which problem weighs more. Duplicate content is mostly a question of which URL counts, and it gets sorted with signals such as the canonical; faceted navigation is also a crawling question, and there the canonical arrives late: Google places it among the less effective routes in the long run.[^google-faceted] The [PLP](/glossary/plp/) entry explains how all this fits into the product listing.

To keep going, the [crawling and indexing reading path](/learn/crawling-and-indexing/) orders the rest of the terms.
