I am working on implementing facet filter for e-commerce site and I am not sure which schema of URL structuring is better for SEO purposes. There are three options I have in considerations as of now, and and I need some help to understand which is better for SEO & considered as best & standard practices.

Option A


All facet parameters separated by & and as key=value.

Option B


Like above, but with multiple values in same facet option separated by comma.

Option C


Parameters which are fixed like price, rating, category are separated like above and all are grouped in spec parameter with options separated inside spec using double pipe.

Update The question is not about what character to use but the structure of URL. Lets assume I will replace unsafe characters with safe characters, then then what structure do you recommend?

There is a difference in URL structure, like A has everything as key=value pair, while B has key=value1,value2 (two values in single key), and C has a grouping like specs=key:value|anotherkey=value.

Now, as the facetname is going to be dynamic and there could be thousands of them, I can not block them using robots or URL parameters like described here: https://stackoverflow.com/questions/9149782/ignore-urls-in-robot-txt-with-specific-parameters. I believe this is required for preventing duplicate contents issue.

If I use option C, this becomes easy as there are few facet groups only that can be easily configured compared to having direct facetname=value in URL.

What do you recommend.

  • Please see my updated answer. Your original question was a bit misleading in the sense that it made it look like your were questioning about URL formatting but instead it seems your question is about handling different URLs that correspond to the same content.
    – Prinny
    Commented Jan 29, 2019 at 7:52

1 Answer 1


First of all, let me open by saying I personally answered your last question and my proposal was option A. Since I stated my thoughts regarding option A, I will just say why options B and C are no good.

Option B uses comma as delimiters for range. Comma is an unsafe character, meaning it will be encoded to %2C in your url and will generally seem like gibberish (definitely not SEO friendly URL).

At the same time, its designated purpose in URLs is to be used for large numbers to seperate their magnitudes (like 9,999) so option B does not refer to that case.

Option C uses | and as seen in the rfc1738 I also linked in my previous answer:

Other characters are unsafe because
gateways and other transport agents are known to sometimes modify
such characters. These characters are "{", "}", "|", "\", "^", "~",
"[", "]", and "`".

So among those 3 options, the first one is the only that adheres to the specifications and best practices.


If your concern is a huge number of multifaceted URLs that correspond to the same content, grouping them in the URL is not the way to go. Use canonical tags or parameter-sort your URLs to ensure you get don't spill ranking across different pages for the same content. This is the way to handle duplicate content.

Even then, you can opt to block the faceted pages in your robots.txt. Just make your faceted pages start with /search, so for example




and in your robots.txt

Disallow: /*search?*

I still believe that the facetName=facetValue1-facetValue2 is the best format as it is easy to read by the user. This is however my personal opinion and I would love to hear some other people's inputs on the matter.

  • If I replace unsafe characters with safe characters, for example * or something like #, then what do you recommend? Also there i difference in URL structure, like A has everything as key=value pair, while B has key=value1,value2 (two values in single key), and C has a grouping like specs=key:value|anotherkey=value. So if we replace unsafe with safe characters, then what structure do you suggest?
    – Krunal
    Commented Jan 29, 2019 at 6:43
  • Pls check the updated questions
    – Krunal
    Commented Jan 29, 2019 at 6:53

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.