I present two selections in my site; one is language (which will change the URL and content) and currency. The currency setting is applied via querystring, like page?curr=EUR, then it'll remember for that session.

I'm using the rel="alternate" hreflang="x" for my multilanguage content but I can't tag the "currency" setting. Google currently crawls all my alternate currency pages and marks them duplicate. Which is not false; because only the price text are changing.

  • If someone changes the site language, I also set the most probable currency for that language at the same time. For example, if chosen English, I set currency to USD, for German I change to EUR etc. But visitor can override these settings if they want to. (for example English content with EUR prices is possible)
  • I also only have 2 languages but more than 2 currencies, so the language-currency mapping is not strictly one-to-one. (some countries use more than one currency)

How can I mark/tag the currency setting without generating "duplicate" content for search engine perspective?

Is tagging every possible currency alternative for a language in rel="alternate" a reasonable approach? Will alternate URLs with query strings work?

  • Not all combinations are valid. You could have CAD and French or CAD and English, but CAD and German wouldn't make any sense. Commented Apr 18, 2018 at 19:06
  • @StephenOstermiller Probably no actual human being going to use that combination but it is possible to browse in German / CAD, at least in my application. I switch to most probable currency for the current language at the first request. My concern is about bots. They can crawl a page in German and can follow a link which includes ?curr=CAD in my currency dropdown. And Googlebot is doing exactly that and that resulted many duplicate pages in webmaster tools.
    – Hazard
    Commented Apr 18, 2018 at 19:24
  • I'm trying to say that you should limit crawling only to combinations that represent actual populations of people. Rather than two parameters, this problem is usually solved with a single "locale" parameter that has a country and language portion, but which only works for a standard list of locales that are actually used. Commented Apr 18, 2018 at 19:26
  • @StephenOstermiller Thanks, I agree that the locale should also define the currency; and I already do that but I must provide an override, at least in my case. Agreed, German/CAD is a bit extreme but for example Chinese/US$ and Chinese/CN$ is possible. Should I list all the combinations in rel=alternate (weird or not) or only that makes sense & somehow ban the others from bot access? Humans can still do whatever they want.
    – Hazard
    Commented Apr 18, 2018 at 19:41
  • There is an answer here you can use to do what you have asked. Just fill in the details like the answer says, and select 'specifies' and 'Every URL'.
    – Willtech
    Commented May 21, 2018 at 13:34

1 Answer 1


I think you should be trying to use rel=canonical pointing to the page that you want indexed by Google. In the event that you do want two of the same pages ranking on Google for some reason because of your language tags, then you can use rel=alternate.

If Google is considering all of your pages to be duplicate despite the price differences in currencies, then this is probably because it feels that there just isn't enough content on your pages. As a result, you may need to create more unique/dynamic content for all of your currencies. This could be in the form of charts and tables, or even articles.

Parameter URLs (with ?) should function the same as normal URLs from Googlebot's perspective, in that it will treat them as individual pages. The added benefit of using paramter URLs is that you can actually instruct Google how to treat your parameters in Search Console.

For instance, if you have two pages:

  • example.com/currency/usd/eur
  • example.com/currency?&one=usd&two=euro

You can potentially tell Google to have one=usd&two=euro point to /usd/eur as the canonical, in Search Console parameters. https://www.google.com/webmasters/tools/crawl-url-parameters?hl=en&siteUrl=

  • Thanks. Is this reasonable and valid? Sorry for formatting but SO eats newlines in comments.. Page: /shop/product-in-english -- canonical = /shop/product-in-english -- alternate = /shop/product-in-english?lang=en -- alternate = /shop/product-in-english?curr=USD -- alternate = /shop/product-in-english?curr=EUR -- alternate hreflang[de] = /shop/same-product-but-in-german
    – Hazard
    Commented Apr 20, 2018 at 8:18

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.