SEO Optimization for Layered Navigation with PRG Pattern

Layered navigation often referred to as Filter Navigation or faceted navigation, is used by almost every online store.
Of course, it's a great feature that allows customers to quickly and easily browse through the products and restrict them to relevant products.

As helpful as the product filter and a layered navigation are for the customer, the challenge is to realize this function in a good and SEO-friendly way. One reason for this:
Each filter and category combination creates a new and unique URL that is both crawlable and indexable for search engines. Depending on the number of filter options, this results in an almost infinite number of URLs that bring the following problems from the SEO point of view

  1. (Near) Duplicate Content
  2. Waste of valuable Crawl Budget
  3. Ranking Signals and Link Juice passed to pages that you do not want to have indexed at all

How can this SEO issue with Filter Navigations be solved?

Other solutions and approaches for SEO Optimization for Filter Navigations one might think of at first would probably be the following:

"Noindex, follow"

The "Meta Robots NoIndex" tag indicates that a page should not be indexed by search engines. With this approach, the issue with duplicate content from Filter Navigations in the search index would be solved. The drawback here is that countless Filter-URLs would still be crawled and thus crawl budget be wasted and also Link Juice would continue to be passed to the non-indexed URLs and wasted.

"Canonical URL"

By specifying a Canonical URL, you can tell search engines like Google in cases with similar pages about the preferred URL to be indexed ;to avoid problems with duplicate content. Since this also consolidates the ranking signals and the link juice to the "Canonical URL", using this approach in conjunction with Filter Navigations is not a bad idea.
But: All URLs will still be crawled. The problem with wasted Crawl Budget remains and would not be solved.


Prohibit search engine bots the crawling of Filter-URLs via robots.txt would be another way to address the problem described. However, the result is not really satisfying. Ranking signals and Link Juice are still passed on to the no longer crawlable URLs and disappear virtually useless in "Nirvana". In addition, URLs blocked by robots.txt can still appear in the index.


Adding "NoFollow" to all internal links for filter options would be another conceivable option to tackle the issue addressed here. While this would help reduce the waste of Crawl Budget, this method would continue to lose Link Juice and prevent reliable indexing of Duplicate Content.

"JavaScript / AJAX"

A more sophisticated and costly approach would be to "mask" filter URLs via an implementation using JavaScript / AJAX or the like (i.e. to hide them from search engine bots) or to avoid the generation of new URLs by filters. Since Google now executes JavaScript in order to simulate the actual user experience of a page as realistically as possible, the former is likely to be not reliable. The second would have the disadvantage of not having the opportunity to link certain filter results, to share in social networks and possibly still indexable if needed.
This at least as long as the implementation does not explicitly provide for the possibility of such exceptions.


PRG Pattern: The perfect solution

The perfect solution for a clean link structure in filter navigations and to avoid the waste of crawl budget is to mask the filter links using the
PRG (Post / Redirect / Get) pattern .

Learn here how the PRG method works in detail.