Free to explore: filter winning sites by DR, traffic and niche  ·  Try the live explorer →

Faceted navigation SEO: control the URLs

An online shop's filter sidebar

Faceted navigation SEO is mostly a question of arithmetic. A category page with filters for size, colour, brand, price and rating can produce a separate URL for every combination, and often for every order in which a visitor clicks them. A few dozen filter values become thousands of addresses, nearly all showing the same products in a slightly different arrangement.

The usual advice is to put a canonical tag on every filtered page and move on. Google’s documentation does not lead with that. It treats faceted URLs as a crawling problem first, and the fix it recommends depends on one decision you have to make deliberately: should these pages be in the index or not?

What is faceted navigation in SEO?

Faceted navigation is the filter sidebar on a listing page: tick a brand, pick a size, set a price range, and the product grid narrows. In SEO terms, the issue is not the feature but what it does to the URL. Most implementations write each selection into query parameters, so every click creates a new crawlable address.

Filter checkboxes on a shop

Seen from a crawler, a single shoe category might look like this:

Four URLs, at most two genuinely different result sets. Multiply that across every category and filter, and the number of possible URLs dwarfs the number of real pages on the site.

A long URL with parameters

The two problems Google names

Google Search Central’s page on managing crawling of faceted navigation URLs describes two costs. The first is “Overcrawling”: crawlers access “a very large number of faceted navigation URLs before the crawlers’ processes determine the URLs are in fact useless.” The second is “Slower discovery crawls”, because “the crawlers have less time to spend on new, useful URLs.”

The second one is the one that hurts. A new product page or a refreshed category competes for attention with an effectively endless supply of filter permutations. That is the point at which crawl budget stops being a theoretical concern for large shops and becomes a practical one.

Google’s recommendations, side by side

The guidance splits on whether you want the filtered pages indexed. These are its main points, quoted where the wording matters:

Your situationGoogle’s recommendationWhat it means in practice
Facets don’t need indexing“Use robots.txt to disallow crawling of faceted navigation URLs”Block the parameter patterns so crawlers never fetch them
Facets don’t need indexing“Use URL fragments to specify filters”Keep filter state after a #, which search engines generally ignore
Facets don’t need indexingrel="canonical" and rel="nofollow"Described as less effective in the long term
Facets should be indexed“Use the industry standard URL parameter separator ‘&'”No commas, semicolons or custom separators
Facets should be indexedA consistent filter order, with no duplicate filtersOne URL per combination, not one per click order
Facets should be indexed“Return an HTTP 404 status code when a filter combination doesn’t return results”No 200-status empty pages
A disallow rule in a robots file

When the filtered pages don’t need to rank

For most filters, this is the honest answer. Nobody searches for a size-nine, red, under-fifty, four-star shoe page, so there is nothing to gain by letting it be crawled. Blocking the parameters in robots.txt stops the fetches before they happen, which is the whole point:

Test patterns before you deploy them. A wildcard that is slightly too broad can block the category pages you do want crawled; our guide to robots.txt for SEO covers how the matching works. Remember too that robots.txt controls crawling, not indexing, so blocked URLs that are heavily linked can still appear in results without a description.

The fragment approach is cleaner if you are building the filters from scratch. A URL such as https://example.com/shoes/#colour=red keeps filter state in the browser, and search engines generally treat everything after the hash as the same page. The trade-off is that filtered views cannot be shared or indexed separately, which is exactly what you want here.

Why are canonicals the weaker option? A canonical tag is a hint, and the crawler still has to fetch the page to read it. On a site with millions of filter combinations, that does nothing for overcrawling. Nofollow on filter links has a similar limit: it is not a reliable way to keep URLs out of the crawl if they are linked or discovered elsewhere.

An empty filtered results page

When some filtered pages should rank

Some facets do match real searches. “Women’s trail running shoes” or a brand within a category can deserve a page of its own. For those, Google’s advice is about making the URLs predictable. Use & to separate parameters, keep filters in one fixed order, and never repeat a filter in the same URL:

Enforcing the order usually happens in the code that builds filter links, not in the CMS settings. If the template always writes brand before colour, the duplicate orderings never get linked in the first place.

Empty combinations need a 404. A filter set that returns no products, served as a normal page with a 200 status, is a thin page waiting to be crawled. Returning 404 tells crawlers there is nothing there and stops them coming back as often.

A category landing page

In practice, the strongest pattern is a hybrid. Give the handful of valuable combinations clean, static category URLs with their own copy and internal links, and block or fragment everything else. Our wider guide to ecommerce SEO covers how those landing pages fit into the rest of a shop’s structure.

How to check whether you have a problem

Start with what crawlers actually request. Server logs or the crawl stats report in Search Console will show whether parameter URLs make up a large share of fetches. If they do, and your new products are slow to be discovered, the two costs Google names are probably both in play.

A crawl statistics chart

Then list your filters and sort them into two groups: those that match a real search and deserve a page, and those that only help a visitor already on the site. The first group gets clean, ordered URLs and internal links. The second gets blocked or moved into fragments. Change one category first and watch the crawl stats before rolling it out across the whole catalogue.

One limitation is worth stating. Google describes what works well for its crawlers, not how many wasted fetches it takes before discovery slows on your particular site. Small shops with a few hundred products may never notice the effect. The risk grows with catalogue size and filter count, so treat this as a priority in proportion to how many URLs your filters can generate.

Frequently asked questions

What is faceted navigation?

The filter options on a listing page, such as size, colour, brand or price, that narrow the results. Each selection usually changes the URL, which is what makes it an SEO issue.

Should I block faceted URLs in robots.txt?

If the filtered pages don’t need to be indexed, yes. Google recommends using robots.txt to disallow crawling of faceted navigation URLs in that case.

Is a canonical tag enough for filter pages?

Google describes rel=”canonical” and rel=”nofollow” as less effective in the long term, because crawlers still have to fetch the pages to see them.

What should an empty filter combination return?

An HTTP 404 status code, according to Google’s guidance, rather than a normal page with no products on it.

The takeaway Decide which filters deserve a page. Give those clean, consistently ordered URLs, and keep crawlers away from every other combination.