How to use hreflang and canonical tags together

Last updated on Jul 12, 2015

When you use hreflang tags as well as canonical tags on your website, you have to be careful not to send confusing signals to Google. Here’s how to implement hreflang tags when you already have a canonical tag solution on your website.

hreflang and canonical tags both have similar functions: They suggest to Google which URLs to index. If you already have a canonical tag solution on your website, which asks Google not to implement certain URLs, and you then add hreflang tags to all of your URLs, you will confuse Google. You will be asking Google to index and not to index certain URLs at the same time.

What do URLs with canonical tags want?

A URL that has a canonical tag pointing to another URL says to Google:

Hey Google, how’s it going? I don’t want to be indexed. But you can index my twin sister here instead of me.

A URL that has a canonical tag pointing to itself says to Google:

Howdy Google, please index me and not my stupid twin brothers.

Now you have to make sure that your URLs with canonical tags still know what they want after you’ve implemented hreflang on your website:

What do URLs with hreflang want?

A URL with correctly implemented hreflang implementations could say to Google:

Bonjour Google, comment ça va? I speak French and I want to be indexed. Here are my cousins from other countries. Can you please index them too?

So URLs with hreflang annotations always want to be indexed and always want additional URLs (their equivalents in other language and country versions) to be indexed along with them.

What do URLs with canonical tags and hreflang annotations want?

Now let’s see what a URL that has a canonical tag pointing to itself and hreflang annotations says to Google:

Hola Google, ¿qué tal? I am the most mature out of my twin brothers and I want to be indexed. I speak Spanish and these are my cousins from other countries. Can you please index them too?

This is a very clear and easy to follow instruction for Google. But what if the URL has a canonical tag pointing to another URL and hreflang annotations at the same time?

Guten Tag Google, wie geht’s? I don’t want to be indexed, please index my twin brother instead. I speak German, so please index me and here are my cousins from other countries. Please index them too.

And then Google will say:

What a nutcase! Let’s see what his cousins say.

And then Google will visit the other URLs in the hreflang annotations and hear a choir of:

Buon giorno, 今日は, добрый день! We don’t want to be indexed, please index our twin sisters instead of us. But we really want to be indexed, so please? And please, please index all of us because we are all cousins from different countries.

And then Google will say:

Shut up! I’m not listening to you and I will just figure out who to index myself.

If you send confusing signals, Google will ignore your instructions. So make sure your URLs know what they want!



If you are using a canonical tag solution on your website, make sure that URLs that have a canonical tag pointing to another URL do not receive hreflang annotations. hreflang annotations are okay for URLs that point to themselves via canonical tag and for URLs that do not have canonical tags.

Say thanks by sharing this:


  1. Jordi
    2. December 2016

    Hi Eoghan

    Thanks for putting some light on this topic. We have much more clear how to deal with hreflang and canonical thanks to this post. We’d appreciate though to know your opinion on the following doubts that we still have:

    In our user generated pages one topic is written in a single language but we have the site translated to 22 languages and 22 subdomains or, and so on.

    If a user writes a topic in English, then each of the 22 translated pages (chrome is translated, the user content is only in the user’s language) we’ll put the 22 hreflangs one for every language:

    … (etc…)

    Should we indicate that the content is only written in say English in some way? If so, what would you recommend to do it properly?

    We see two possible options:

    Adding a “canonical” to indicate that the content is only in English:

    or adding a an “x-default” hreflang for the English version:

    Or both? What do you recommend in this case?

    Thanks in advance for your extra help on this subject


    • Eoghan Henn
      5. December 2016

      Hello Jordi,

      Thanks a lot for your comment. Unfortunately, my website swallowed your hreflang code examples. I am very sorry about that! Still, I understand your comment without the examples, so here we go:

      I think that the problem you describe cannot be solved with canonical tags or hreflang annotations.

      Let’s talk about the two options you suggested first.

      Option 1: Adding a canonical tag to the language version the user-generated content is written in.
      It is never a good idea to use a canonical tag across language versions. If you have several language versions, you want Google to be able to show the right language version to each user. This is what hreflang annotations are for. Canonical tags across language versions, on the other hand, would have a different effect: Only the canonical version would be indexed and displayed to users. Google also recommends not to use canonical tags across language versions here:

      Option 2: Adding the x-default value to the version the user-generated content is written in.
      This would only mean that you want this version to show to all users that there is no language version specified to. So if a user uses Google in a language that is not covered by your 22 versions, this would be the default version displayed to this user. I do not think this is the solution you are looking for.

      So what does this mean for your hreflang annotations?
      For now, I would not change anything and leave the hreflang annotations the way you described it first: Each URL gets the correct hreflang value for the language version/subdomain it belongs to.

      Now the actual problem is that you are mixing languages within pages and this will most likely send confusing signals to Google. Why would you even want to do this? Also, it is not really user-friendly to show content in the “wrong” language.

      Here are some suggestions:

      – You could decide to only show user-generated content in the correct language version. This would obviously mean that you would have less content in the other language versions, but from an SEO point of view this would help you rather than harm you: You will not get traffic for, let’s say, Spanish search queries anyhow with German, French or English content. And also, for most users, content in the “wrong” language will rather harm than help you.
      – Another option that might work would be to translate the user-generated content. This would obviously cost a lot of money if you did it manually, but maybe you can find a solution to it automatically. Tripadvisor, for example, does it automatically, and although it is not a perfect solution, it looks like it does work for them.

      I hope this helps and feel free to let me know if you have any other questions!


      • Jordi
        9. December 2016

        Many thanks Eoghan for your insights on the subject. We really appreciate it and we’re going to proceed as you suggest avoiding the use of ‘canonical’ since thanks to your explanation we now see it is not intended for our case.

      • Eoghan Henn
        14. December 2016

        OK, let me know how it goes and just ask if you have any other questions!

  2. Maria
    3. November 2016

    hi Eoghan,

    Thanks for the article! Just a quick question on Hreflang tags. If I have 2 domains in Spanish (one for Spain and another one for Mexico)
    And they have the same or very similar content. The question is: How do I implement hreflang?
    Is adding these tags in these pages a correct way? Also, do I need to do this on a page level, I mean page by page or is it ok if only the homepage has it? will have the following tag: will have the following tag:

    It would be great if you could help out.

    • Eoghan Henn
      4. November 2016

      Hi Pilar,

      Thanks a lot for your comment!

      Unfortunately, your code examples don’t show in your comment. This is my fault, because I haven’t had time to fix this problem in WordPress 🙁 I’ll take care of it soon!

      Anyhow, to answer your questions: If you implement hreflang only for your home pages, it will only work for your home pages. hreflang is a page-level annotation, so if you want it to work for all pages of your websites, you need to implement it on a page level.

      I will send you an e-mail now so that you can send me your code examples again 🙂


  3. Carlo
    21. September 2016

    That’s a very well written article! Thanx a lot for it!
    Now I have got a more clear idea about hreflang and canonical!

    Anyway I really wanted to go a little bit deeper with a classical e-commerce situation (nobody on the web talks about the correct implementation of this):

    Let’s suppose this example of category:

    Page 1)
    Page 2)
    Page 3)
    Page 4)

    In wich /category and /category?View=1 are exactly the same (?View=1 exists only for a complete use of URL’s and to not obtain a broken page)

    And let’s suppose I have got both .it and .de domains….

    What is the right way to implement tags?
    I know Google says that in some case you can index the ALL page, but in my case the ALL page is too long and it needs too much time to load…. so I don’t want it to be the canonical page.

    I was thinking about something like the following:

    Page 1)
    meta name=”robots” content=”index,follow”
    link rel=”alternate” hreflang=”it” href=””
    link rel=”alternate” hreflang=”de” href=””
    link rel=”canonical” href=”
    link rel=”next” href=”″

    “Hey Google, I want to be indexed and this is my cousin from Germany. Oh, I’m the first page of a list and ?View=2 comes after me”

    Page 2)
    link rel=”canonical” href=”

    “Hey Google, I dont want to be indexed, please index my twin brother”

    Page 3)
    meta name=”robots” content=”index,follow”
    link rel=”alternate” hreflang=”it” href=”″
    link rel=”alternate” hreflang=”de” href=”″
    link rel=”prev” href=””

    “Hey Google I want to be indexed and this is my cousin from Germany. Oh, I’m the last page of a list and /category comes before me”

    Page 4)
    link rel=”canonical” href=”

    “Hey Google, I dont want to be indexed, please index my twin brother”

    Is this the correct way? Or one of the possible correct ways?

    • Eoghan Henn
      27. September 2016

      Hello Carlo,

      Thanks a lot for your comment and for sharing your interesting problem.

      Everything you say makes sense and I do not see any problems with your use of hreflang and canonical tags.

      The only thing I’m wondering about is whether it’s a good idea to have page 4 point to page 1 via a canonical tag. Normally, when you use a canonical tag, the content of the page that has the canonical tag should be fully included on the page it is pointing to. This would not be the case here.

      I suggest you test the implementation you described to see whether Google will follow or ignore your recommendation (i.e. you canonical tag).

      Let us know how it goes!

      • Carlo
        27. September 2016

        Thank you very much for the answer and your time.
        I will test this so we can see if the canonical tag of page 4 is right o wrong….only Google knows 🙂

  4. Charlotte
    20. September 2016

    Hi Eoghan,

    Thank you for a very interesting and well written article. I truly enjoyed reading it, as well as the questions and answers below it 🙂

    Unfortunately, I’m a little confused as to what to do in my situation so I hope you can point me in the right direction.

    I have a website in the following markets: UK, US, Norway, Sweden, and Denmark (so 5 websites in total). The content on these websites are almost identical, and I have therefore added hreflang tags on all pages to avoid confusing Google with duplicate content.

    The problem is this: the products, that are the same for each website, come in regular size, travelsize and supersize, and all of these sizes have their own product page, which contains the exact same content. In other words, the structure looks somewhat like this:

    Individual product page 1: Product A Regular Size
    Individual product page 2: Product A Travel Size
    Individual product page 3: Product A Supersize

    Individual product page 4: Product B Regular Size
    Individual product page 5: Product B Travel Size
    Individual product page 6: Product B Supersize

    All of these pages contain identical content and they are all indexed, which, in other words sums up to A LOT of duplicate content within each of my 5 websites.

    I have a feeling that this isn’t very beneficial for my rankings, and I therefore want to clean up the structure a bit. I basically want Google to only pay attention to the Regular Size product pages, as this is where I want the traffic to end up.

    As a result, I was thinking of adding canonical tags to each Travel Size and Supersize product page, pointing to the Regular Size product page to show Google that this is the page I want it to pay attention to. However, since these pages now has a hreflang tag on them, I’m guessing that adding a canonical tag can confuse Google even more. How do I solve this? Do I have to remove the hreflang tags from the travelsize and supersize product page on each website and add a canonical tag to them instead? I would be truly grateful if you could provide me with some advice as to what the right approach would be.

    Many thanks for the article and any help would be greatly appreciated.

    • Eoghan Henn
      27. September 2016

      Hello Charlotte,

      Thanks a lot for your comment. I’m glad you enjoyed the article.

      You have already come up with the right solution yourself 🙂 If you want only the pages for one size per product to be indexed, you can include canonical tags on the other sizes that point to the URL of the size you want to be indexed. You should indeed remove the hreflang tags from the URLs that have canonical tags pointing to other URLs.

      Please just let me know if you have any further questions!

  5. Tom
    9. September 2016

    Hello Eoghan,

    many thanks for your explanation. Now my programmer has added the Canonical and the duplicate content indeed goes down. guess it will take some more weeks to clear this in GSC.
    Because of some programming challenges he just could add the canonical to all pages and not distinguish between cat1 and cat to place different tags like you explained (cat1: hreflang + optional canonical and cat2: canonical only)
    Thats now cause rising hreflang errors in GSC, because the missing pointing to itself.
    Exactly as you mentioned it.

    Concerning your last item: de or de-DE.
    We have chosen “de” because we want to address other Geman speaking countries like Austria and Switzerland.
    So still confused if we should change to de-DE to get more visitors also from AT or CH.
    Could you give short recommendation in this?
    I really appreciate the time you spend for helping.

    • Eoghan Henn
      13. September 2016

      Hi Tom,

      Google strongly associates ccTLDs (country-specific domains like .de, .at, .ch, etc.) with the countries they stand for. You can verify this by going to the Google Search Console property for your .de domain and navigating to “Search Traffic > International Targeting > Country”. Here, the country will be set to “Germany” and you will not be able to change this.

      What does this mean for your hreflang annotations? On a .de domain, there will be no real difference between marking up a website version as “de” or “de-de”. The country association is already incorporated into the domain. Your German content on a .de domain will always be “de-de”, so to say.

      Now, of course a .de domain can rank in Austria and Switzerland (many do), but if you really want to be successful in those countries, a .de domain is not the right choice. Not from an SEO perspective and certainly not from a Swiss or Austrian user’s perspective. In general, I strongly believe that international websites should use gTLDs (generic, non-country domains such as .com).

      This doesn’t mean that I recommend that you change your domain. This would be a big change and it might not be worth the effort and risk. I would just like to make clear that a .de domain is not really suited for good performance in AT & CH and that marking your content up as “de” instead of “de-de” will not change this.

      If you have any further questions, please don’t hesitate 🙂


  6. Tom
    2. September 2016

    Hello Eoghan,

    great to have found this thread with very interesting information.
    Seems that the usage of hreflang and canonical can be so much different.
    Actually I have not found the right configuration for my website yet although lots of expert told me how to do.
    Explanation sometimes is very confusing therefore I am using examples in detail.
    Would you be so kind to check this and in case something still is wrong, to please show me the correct code also as example.

    I try to describe my situation and experience which I already have made. Guess some more are interested in.
    My situation and need:
    I am running an online shop in two languages. And products are available and linked internally in different categories with the result of different urls, but same content for each language.
    Example for the german product (named produktname1 in two different categories)

    Same for English product description with /en/ in url and English names

    So the demand is
    a) To tell google about the 2 different languages
    b) To tell google that the 2 urls for this product shows the same and to prevent duplicate content

    Expert group one told me use hreflang only:

    link rel=”alternate” href=”” hreflang=”x-default” /
    link rel=”alternate” href=”” hreflang=”de” /
    link rel=”alternate” href=”” hreflang=”en” /
    These code has been implemented in all these four URLs above.
    They explained that google can understand that because all tags show all time the same big brother for English and German page.
    No canonical required.

    Google Search Console showed me endless duplicate content for meta and title within two weeks 

    So I have contacted other experts. They told me to use canonical only. What a nonsense.
    After long research in internet. Yes both must be used, but how?
    – Canonical only on the canonical pages and hreflang on the “big brother”-pages?
    – Combination of both on all pages? If yes, what is the right code.

    Expert group two suggested this and at the moment we do like this:

    On the 2 German pages we put this code:
    link rel=”alternate” href=”” hreflang=”x-default” /
    link rel=”alternate” href=”” hreflang=”de” /
    link rel=”alternate” href=”” hreflang=”en” /
    link rel=”canonical” href=”” /

    And on the 2 English page it is this:
    link rel=”alternate” href=”” hreflang=”x-default” /
    link rel=”alternate” href=”” hreflang=”de” /
    link rel=”alternate” href=”” hreflang=”en” /
    link rel=”canonical” href=” ” /

    And according to these examples for all other categories and productnames.
    So we use hreflang and caonical now.

    Actually I do not know, what google search console will say. Results in changes take long time. Still I am not sure about the correct code.
    Therefore it would be great you could confirm this configuration or help to find the right setup.
    Many Thanks.

    • Eoghan Henn
      5. September 2016

      Hello Tom,

      Thank you for your comment and your interesting question. Here is what I would recommend:

      First of all, let’s talk about the canonical tags. You only want the URL of the product in the first category to be shown in the search results, so the other version (in the second category) should have a canonical tag pointing to the first version (in the first category). Optionally, the URL in the first category can have a canonical tag pointing to itself, but this is not required.

      Now the hreflang tags should only be used on URLs that you want to be shown in the search results. Why is this so? > hreflang annotations always require a link pointing to the URL itself, and they also require reciprocal links, so the linked pages have to link back via hreflang. Also, hreflang annotations that link to a page (be it a different page or the page itself) automatically ask for this page to be indexed. In this sense, they have a function that is very similar to that of canonical tags.

      All of this entails that a URL that has a canonical tag pointing to another URL should not have any hreflang annotations at all.

      So, in your example, the pages in the second category do not get any hreflang annotations.

      Here’s the hreflang code for the German and English version of the product page in the first category:

      < link rel="alternate" href="" hreflang="de">
      < link rel="alternate" href="" hreflang="en">

      Optionally, you can add "x-default" for the English version (like in your example) and the self-referencing canonical tag to each of the URLs.

      The URLs in the second category only get the canonical tag pointing to their equivalents in the first category and no hreflang annotations.

      I hope this helps!

      One last remark: If you use a .de domain, strictly speaking, your hreflang values should always include the "DE" country code. You should be using "en-DE" and "de-DE" instead of "en" and "de". This is because Google automatically associates .de domains with users in Germany, so using "en" and "de" in hreflang annontations on a .de domain automatically means "en-DE" and de-DE".

      Let me know if anything remains unclear.

  7. Pedro
    14. August 2016

    Hi Eoghan – great post! 😉

    Just a couple questions.

    1) If I want to implement the hreflang but not necessarily have a “big brother” to be indexed (I want each to be a big brother in their own country). Is the canonical mandatory for the hreflang to work correctly? I read on a Google webmasters blog post (from 2012) that they no longer advise the canonical and recommend not to use it for the sake of a more simple implementation.

    2) If I am to put the self-referencing canonical on one site along with the hreflangs tags. I still need to add hreflangs on the other sites but do I need to have a self-referencing canonical on them as well?

    Many thanks in advance.

    • Eoghan Henn
      18. August 2016

      Hello Pedro,

      Thanks a lot for your comment. Here are my answers to your questions:

      1) hreflang works absolutely independently from canonical tags, so you so not need canonical tags in order to make hreflang work correctly. In fact, the self-referencing hreflang tag has a very similar function to the self-referencing canonical tag and basically makes the self-referencing canonical tag unnecessary.
      2) If you have a self-referencing canonical tag and hreflang tags on one URL, this does not mean that you need self-referencing canonical tags on the other versions of this URL that you link to with hreflang. You can have two or more URLs that link to each other with hreflang, but only one of them pointing to itself with a canonical tag.

      I hope this helps!

  8. Sanela
    22. July 2016

    This are tags I find when I open the site in Italian version (homepage):

    This are tags I find when I open the site in English version (homepage):

    Sorry, I try in this way…

    • Eoghan Henn
      28. July 2016

      Hello Sanela,

      I am sorry you had problems with inserting code examples into the comments. I will work on the comment function of this website. You can send me your questions via email and I will have a look at your problem.

      Best regards,


  9. Sanela
    22. July 2016

    Hello, thank you for your post. But I still haven’t understand…
    So, in this case, is correct?

    This are tags I find when I open the site in Italian version (homepage):

    This are tags I find when I open the site in English version (homepage):

    The same for other pages (category, products, CMS….)
    Thank you

  10. Kara Shapiro
    14. July 2016

    Great article! I have a question in the opposite direction. I have a site that is only available in English (USA). I just received a notice from Google: “Incorrect hreflang implementation on…” but am using WordPress. This is automatically and dynamically programmed. Do you know if this is something that is detrimental to a site or can we simple ignore it. Or, do you know how to remove that feature that’s adding it?

    • Eoghan Henn
      15. July 2016

      Hello Kara,

      I guess this is nothing you have to worry about. Incorrect hreflang implementations are ignored by Google anyhow.

      On the other hand, the less you confuse Google, the better. If you like you can send me the domain of your website and I will have a quick look to try to figure out where the hreflang annotations are coming from and how you can remove them.

      • Kara Shapiro
        15. July 2016

        Thank you Eoghan! Is there a way I could just email you the URL? Or, message you somehow?

      • Eoghan Henn
        18. July 2016

        Sure! Just send me an email or a message on Linkedin or Twitter.

  11. Derek
    8. July 2016

    We have a situation very similar to the previous couple comments. We have content in multiple regions and languages. For the most part, the content for any given language is mostly identical i.e. English / North America is pretty much the same as English / Europe. For that reason, we have set our robots.txt to only allow crawling of 1 region per language thinking that we did not want similar pages competing with each other in Google. But then we also setup full hreflang entries for each url for every country / language combination we care about using the sitemap. Of course, we only have urls in the sitemap for the language / region combinations that we have chosen to be indexed. That has resulted in errors from Google Search console about hreflang entries that do not have return tags because they are pointing to pages that we have prohibited via our robots.txt and are not in the sitemap. Based on your great article, my thinking is that we should change our robots.txt to no longer prevent any of these pages from being indexed and add all of these to the sitemap with the full hreflang entries. Having all pages setup correctly with hreflang entries should take care of the pages competing with each other in Google because Google will realize they are for different audiences and sort them out appropriately. Is my line of thinking on this correct?

    • Eoghan Henn
      11. July 2016

      Hello Derek, thanks a lot for your comment. I fully agree with your thinking here.

      It would be a good idea to have all the different region versions indexed, especially because you would want users to land on the right region version straight away when they find your website in Google, right? if you only have one region version indexed, a big part of your visitors from organic search will always land on the wrong content.

      With hreflang set up correctly you can eliminate any problems related to different versions competing for rankings. From what I can see, your hreflang structure might end up being a bit complex, but I’d be happy to help if you encounter any problems or if you have any questions.

      Check out this article about assigning more than one country value to a URL: You will need a structure like this if you have website versions for groups of countries like Europe, North America, and so on.

      Let me know if there is anything else I can help you with!

      • Derek White
        15. July 2016

        Thanks for the response Eoghan! After investigating some of the webmaster tools warnings more, I can’t find anything wrong with them. They all seem to have the correct hreflang entries (both directions) and they don’t seem to be blocked by robots.txt. Have you heard of Webmaster tools incorrectly giving the “no return tags (sitemaps)” warning? The only thing I can think of is that we have our sitemap structured so that each language / region / industry is in its own file. Is it possible that it is processing 1 file and finding missing return tags because it hasn’t yet processed the other files?

      • Eoghan Henn
        15. July 2016

        Hi Derek,

        Yes, the hreflang error messages in Google Search Console are often irrelevant and misleading.

        Google often has issues with hreflang annotations in sitemaps. I would normally recommend to implement hreflang in the head section of the source code of each page. As far as I know, these problems are caused by the fact that sitemaps are crawled and processed less frequently than website URLs, which can cause errors like the ones you describe (you already assumed it in your last sentence).

        What I would recommend is not to pay too much attention to the error messages in Google Search Console and rather check to see if the right version of your content is displayed in different countries and for users of different languages. You can use the “search analysis” report in Google Search Console (apply country filters), or you can use SEO tools that collect ranking data, like Sistrix or Searchmetrics. You can also check your organic traffic from different countries in Google Analytics to see if users are entering through the correct landing pages.

        I hope this helps!

  12. Jörg
    29. April 2016

    Hey Eoghan.

    I was busy with my classes and only just had time to reply.

    I am not totally sure if the current implementation is correct, but I dont think that the internal implementation, the linking structure or contradicting signals are the real issue.

    We already have identified one problem we had with our previous sitemap. The submitted Sitemap only had Short-URLs, that were a redirect to the long version and didn’t include hreflang tags.
    We then uploaded a testsitemap with …en-ww and then all the other languages and regions as hreflang with rel=alternate. We had like 10 of these and although all of them are identical from the setup the indexing worked quite differently. There were pages with 100 indexed from 300 but others where only 6 from 300 were indexed.

    All of these factors and research led to our canonical idea. Do you have a source that the case study I mentioned is not working anymore the way we would like it.
    Additionally I think I have misinterpreted the Image from your article. I thought the pages on the bottom are the canonicals and should not have hreflang tags to the other canonical. But I just saw the Canonicals are pointing to the both pages above. If I would use our canonicals to this image, the top 2 pages would be de-ww and en-ww and the pages on the bottom would be de-de and en-de. De-ww would point to en-wwh hreflang but de-de would not point to en-de.

    A google search with shows over 3 Million pages. The Webmaster Tools show 2 totally different numbers though. If we check Google Index -> Index Status it says over 6 Million, but if we look at Crawl -> Sitemaps it only says a little over 70 000. I am not sure what I should think about this.

    I like to hear your further opinion.


    • Eoghan Henn
      16. May 2016

      Hello Jörg,

      About the case study: I said it was “out of date” because I didn’t want to be too harsh. I should have just said that it is wrong. The implementation used in the described case is contrary to what Google recommends (see here) and shows a lack of understanding of the signals canonical tags and hreflang annotations send (see the article above). The reason the results in the case study were positive is probably that Google simply ignored the canonical tags, as it does in so many cases where signals are mixed. Here’s another case from a couple of years ago where Google ignored canonical tags in favour of hreflang annotations (text in German): SEO-Schnick-Schnack-Schnuck.

      If you like, we can continue this discussion via e-mail so you can share more details about your page with me. I am not sure if I can help you any further without knowing which page we are talking about 😉

  13. Jörg
    22. April 2016

    Hello Eoghan,

    I am a student in Germany and at the moment working as an intern for a company that is trying to rework their SEO strategy. I tried to come up with ideas but am not totally sure if my thinking is correct.

    We have a lot of Product Information Pages that all should be indexed by Google. All of them are available in 6 languages and about 150 regions. The region pages in the same language itself do not differ from other pages in the same language, i.e. de-ww is identical to de-at or de-de.
    So our plan was to implement canonical tags for the international websites and then have all the other languages and regions as hreflang Tags available.

    en-ww is the standard page for English international users
    de-ww is the standard page for German international users
    en-uk is the English page for UK users (but identical to en-ww)

    We have a canonical tag on every en page referring to en-ww. (en-uk & en-de to en-ww)
    We have a canonical tag on every de page referring to de-ww. (de-de & de-uk to de-ww)
    We have hreflang tags from en-ww to en-uk, to en-de and also to de-ww (de-ww is the canonical link for german content).
    We have hreflang tags from de-ww to de-at, de-ch and en-ww (en-ww is the canonical link for English content).
    We have hreflang tags from en-uk to en-de and vice versa.
    We have hreflang tags from de-de to de-at and vice versa.

    Do we need href lang from en-uk to de-uk or (same content but different language/region)
    Do we need href lang from de-ww to en-uk (from the canonical page to another language that is not the canonical link)

    If I understand your article correctly we should not have hreflang tags from en-ww to de-ww because this will send mixed signals to Google. But what do you think about the rest.
    And if this would be a possible solution how would a sitemap look like. Should it only contain the canonical URLs or is it important to have all other 150 hreflang links also in there.

    Thanks for this article and help would be greatly appreciated.

    • Eoghan Henn
      22. April 2016

      Hello Jörg,

      Thanks a lot for your comment and your interesting questions.

      First of all, I would NOT recommend having canonical tags that point from one language/region version to another. So you should NOT use canonical tags that point from en-uk to en-ww etc.

      You want users in the UK to see the UK version in the search results and users in Switzerland to see a version for Switzerland in French, German or Italian, right? If you use canonical tags on these pages that point to a ww-version, these region pages will not be indexed and users will only see the ww-versions in search results.

      So, first of all, get rid of these canonical tags! What you need to do here is to link all versions of one page with hreflang tags. So the en-uk version, for example, will have hreflang annotations pointing at all the other versions that exist of this page (in all languages and for all regions).

      Here’s a nice example of a similar hreflang implementation that I came across this week: Yours would look similar, just with far more different version.

      Concerning your question about the sitemap: All of the URLs should be in there, but it makes sense to create one sitemap per language/country version and then link to the different sitemaps from a sitemap index file. Here’s a good example for that:

      I hope this helps! Please let me know if you have any further questions.


      • Jörg
        22. April 2016

        Hi Eoghan,

        first of all thank you for your fast answer.

        At the moment everything is handled the way you are suggesting with 150 hreflangs per page. And with that implementation we are not 100% satisfied with the ranking of the pages in the Google result pages and the regionalization. That is the reason we are trying to change something on the page and came to canonical links.

        Another reason we were trying to go for canonicals is the bad indexation rate when looking through Webmaster Tools. Our Sitemape pretty much has 40000 links in it and not 2000 are indexed.

        Our goal is pretty much what you described. Give an english talking person from Switzerland en-ch, give the german talking person de-ch and the french talking person fr-ch.

        So our mindset was that google just indexes the 6 main URL (de-ww, en-ww, fr-ww…) sees the hreflang on these pages (de-de, de-ch or en-de, en-it …) and then gives the user the correct result based on the internal process done by google (IP-adress, language of search terms, etc).

        I found following test online and I thought this could work for us as well:

        He is only doing it for 1 language and multiple regions. So we were like thinking to do this exact thing for all 6 languages. If I understand that test correctly they also tested the search engine with proxys, real searches from other countries and they got exactly the correct URL, depending on their location.
        This would also reduce the number of indexed links by a lot and still help the regionalization.

        Am I wrong with that idea. What would you suggest to have better search results after knowing we already have the hreflang implemented.

        Greetings and I am looking for your answer


      • Eoghan Henn
        25. April 2016

        Hi Jörg! Thanks for the additional information. Here are my remarks:

        It’s great news that you already have the hreflang solution implemented. If the results are not satisfying yet, I would recommend looking for errors in the implementation or contradicting signals you are sending in other places. Are you using the internationalisation settings in Google Search Console to send additional signals to Google? Is the content on your pages in the actual language the hreflang annotations say it is? Do you have a clear internal linking structure?

        If only 2000 URLs out of the 40000 you submitted in your sitemap are indexed, it looks like you might have other technical problems that are not related to hreflang and internationalisation. Are your URLs available with and without https, with and without www, with and without trailing slashs or something similar? How many URLs do you have and how many are indexed in total (do a search in Google)? How many URLs are supposed to be indexed?

        Pointing from one language or region version to another with canonical tags is NOT an option if you want all language versions to be indexed and shown to the right users in the right places.

        The case study you linked to is very interesting, but I’m afraid it’s slightly out of date. Again: Canonical tags should not point from one language or country version to another.

        The solution you have a the moment is the right one, as far as I can tell. You should find out why it’s not working for you yet instead of changing it completely. I would be happy to help you look for problems if you provide me with more information.

        Best regards,


  14. Jaap
    11. April 2016

    Thank you Eoghan, I will try the multiple hrelang approach (without x-default) and monitor if Google will indeed show us in the search results for each of those targeted countries. Thank you for this great advice!

    • Eoghan Henn
      12. April 2016

      Great! Let us know how it goes!

  15. Jaap
    8. April 2016

    Let’s say there are 3 versions, two of them are an exact duplicate in english, the 3rd is in italian. The first should target Europe (unfortunately there is no region tag), the second should target the world. If I would want the Europe version to be THE ONE AND ONLY for english, should the 1st link be canonical when you visit either the Europe version OR the world version? And when you visit the italian version, would the 3rd link then become the canonical (for italian) or would all of them be alternate because there is no other italian version anyway?

    Your article is really funny 😉

    • Jaap
      8. April 2016

      Unfortunately my hreflang examples could not enter my questions. The 1st hreflang would be the one for europe, the 2nd for world, the 3rd for italian.

      • Eoghan Henn
        11. April 2016

        Hello Jaap,

        Thanks a lot for your comment. I’m glad you enjoyed reading this article. Sorry about the trouble with inserting code examples into the comments. I’ll have to work on that.

        You are right, there is no region tag for Europe, but I recently learnt from John Mueller that you can assign several country values to one URL. Read about it here:

        I think you should definitely try this out! Just mark up your worldwide English version as “en”, your Italian version as “it”, and your European version with one hreflang tag per country you target (“en-gb”, “en-ie”, “en-nl”, etc., just like in the example in the article I linked to above). I am really curious to see the results of this. Let me know if you need a hand getting the hreflang implementation right.

        By the way, I would generelly NOT recommend using canonical tags between language versions.

        Talk soon,


  16. Christo
    17. February 2016

    Absoltutely PERFECT. Thank you SO much! I really appreciate your quick and thoughful answer.

  17. Christo
    17. February 2016

    Wow. This is SO well done. Thanks very much for putting this together. So well done. so funny.

    (Please note that I mistakenly posted this here: – please delete that. Sorry 🙁 )

    Now back to the topic ;). I have a follow-up question if you don’t mind:

    Let’s say I’m a business in Miami, FL USA and the population in that DMA speaks an almost equal mix of English and Spanish. For each of my main SEO focused landing pages I have an English and a Spanish version. I would assume that Spanish speaking users go to as their default search.

    In this case, I want Google to index both English and Spanish version (without penalty) AND of course I want the users to be directed to the correct page by Google.

    So, can you please confirm that the following is the best approach for being cool with Google for indexing (and no penalties) AND proper user of hreflang?

    1) I should have NO canonical tags since I want Google to love me AND my brother when searching from the Miami area via the english OR spanish versions of the Google search page (noting that oftent spanish users use spanish searches in the English version of Google and vice versa, since they are bi-lingual).
    2) The hreflang tags should look like the following on both the English and the Spanish version of the pages:

    Do you agree? Or do you have any corrections / insights?

    Thanks again for such an awesome post!

    • Eoghan Henn
      17. February 2016

      Hi Christo! Thanks for your comment and your kind words. I deleted that other version of your comment that you left on the other article 🙂

      About your question: Yes, you did everything just right!

      Some remarks:

      The “-us” part is optional, you could just mark up your English version as “en” and your Spanish version as “es” (to also reach users outside of the US), but if you are only targeting users in your region, then it is fine this way. Have you set your Google Search Console setting to “Target users in: United States”? You find this setting under Search Traffic > International Targeting > Country and it is a good idea to have it aligned with the signals you send in your hreflang annotations.

      About the users that search in Spanish on the English version of and vice versa… Google will figure this out for you. If a user enters a search query that would be the same in either language (like your business name, for example), he or she will see your result in the language that they are using Google in. If Google, on the other hand, can detect the language of the search query, this will normally override the language of the Google version the user is on and show results in the language of the search query. So, if you search for, let’s say, “comprar coche segunda mano” on the English version of Google, you will see Spanish results. Your hreflang annotations will help Google figure this out, obviously.

      I hope this helps!


  18. PCT
    26. December 2015

    Most clear info regarding canonical and hreflang by far, very useful for me as I’ve had trouble on how to implement those two at the same time. Think I’ve got it right now! 🙂

    • Eoghan Henn
      15. February 2016

      Thanks a lot, very kind of you!

  19. JD
    2. November 2015

    Hi Eoghan, This is definitely the funniest explanation of using canonicals & hreflang’s that I’ve seen. Well done. Makes perfect sense too!

    • Eoghan Henn
      2. November 2015

      Hi JD, thanks a lot! I’m happy you liked it. Eoghan

  20. Adam
    28. August 2015

    Loved the article, Eoghan. We just launched a Spanish language version of our homepage and I was having trouble deciding whether to canonical or not canonical the Spanish version.

    Your article made things very clear and was quite funny. I LOLed several times. 😛 Thanks for the help and doing so in a humorous way!

    • Eoghan Henn
      28. August 2015

      Hi Adam, thanks for your kind words. Made my day. Eoghan

  21. Ryan
    11. August 2015

    Hey Eoghan, I’ve got a site and want to duplicate the content onto an .ie site with slight variations in regards to location, sponsors etc

    Do I need a canonical tag or would the hreflang tag suffice?


    Is this a situation where I would need both a canonical tag and a hreflang tag?

    I want them both to be indexed and display in the correct SERPS but I don’t want to be penalized for duplicate content

    There is conflicting advise out there and Google are saying they no longer recommend using rel=canonical.

    Thanks in advance for your help

    • Eoghan Henn
      12. August 2015

      Hi Ryan! You will need to link your and .ie versions with hreflang annotations. Here is some additional info on how to get your hreflang annotations right, although not all of it will be applicable to your case:

      It is NOT ADVISABLE to have canonical tags pointing from one country version to the other. If you had, let’s say, a canonical tag pointing from the .ie home page to the home page, you would be asking Google not to index the .ie home page, and to index the home page instead. But this is not what you want! You want users in Ireland to see your .ie pages in the SERPs. This is where the hreflang annotations come in handy. By linking the .ie and the pages with hreflang, you ask Google to show the .ie pages to Irish users and the pages to British users.

      Here’s what your hreflang annotations on the home pages of both country versions would look like (both lines on both versions!):

      < link rel="alternate" href="" hreflang="en-gb">

      < link rel="alternate" href="" hreflang="en-ie">

      And here's an example for another page. The annotations have to be implemented on page level:

      < link rel="alternate" href="" hreflang="en-gb">

      < link rel="alternate" href="" hreflang="en-ie">

      I hope this helps! If you have any more questions, I will be happy to follow up on this.


Leave a Reply