As an SEO Consultant with a global localisation company one of the issues I see is sites which compete with themselves. A US e-commerce page showing up in Canada or the UK, a Brazilian page showing up in Portugal, even US pages showing up in non-English speaking countries for branded searches.
We need to tell Google about the structure of our sites using geo-targeting, so that local users get the local pages, so they pay in the local currency (having seen the correct prices for their markets), so they see local contact details.
One client I worked with had to support 10 English language markets, 7 Spanish markets as well as French speaking markets, German speaking markets – with overlaps (Switzerland / Belgium).
Previously we had to rely on a number of factors to determine market
- Setting up International Targeting at country level in Google Search Console.
- Language – ensuring only a single language existed on each page.
- Using local signals such as address, currency
- Using the html lang tag
Problems arise though. If your US pages go live first, you can’t have hreflang in place until everything goes live. The US pages get indexed for particular keywords, Google sees new versions of the page, for other English speaking markets as duplicates so it keeps them out of the index.
This leads to out of market pages showing up in search results and can lead to issues such as the user purchasing a product in US$ rather than $AU. Or calling the wrong support number for their region. It can also annoy a user leading them to go elsewhere.
This is frequently US pages showing up in Canada and the UK, but sometimes seeing pages meant for smaller markets showing up in the US. This carries through to other languages such as Spanish, where you may have pages meant for the Spanish market showing up in Mexico or Argentina.
Hreflang is the solution that Google built to resolve this problem (along with Yandex) but it is very granular and therefore requires a lot of tag generation.
The mathematics of hreflang can be a little daunting. If you take a site of 100 pages, which has to support 15 languages in 20 countries – you end up with 40k hreflang tags. If you have thousands of pages for each market (such as a support site) then the numbers get very large – a site with 50 markets and 1000 pages requires 2.5 million tags.
We didn’t just jump in, we developed a couple of small pilots to see if there was any clever way of implementing hreflang without having to generate that level of tags but there wasn’t. We came to the conclusion that is you wanted to implement hreflang you have to do it at the most granular level in order for it to work.
We therefore built a tool to generate the sitemaps.
The current version of the tool takes CSV files as input (of any size but remember Google has limits) via a File Open dialogue. The CSV has a particular format and can be built manually or it can be built using some SQL against the CMS database. The output of the tool is a set of sitemaps with the hreflang tags built into them. Using this method you therefore have no need to adjust the code of the page.
Sitemaps are then uploaded to Google Search Console and about 2 weeks later the hreflang tags appear in the International Targeting section of Search Console.
The impact on search engine results pages is immediate once the tag has been processed. Overnight, US pages which have been appearing in UK search results will be replaced, in the same ranking position, by the equivalent UK page.
This also has a very positive impact on indexing, Google no longer sees 10 versions of a page as duplicates but rather as pages for specific markets with small but important amounts of uniqueness.
Page Ranking – Before and After Hreflang
Traffic Distribution – Before and After Hreflang
|Market Region||Traffic Change|
Note: when retrofitting hreflang to existing sites you will get errors as Google has to process each URL in order to process the hreflang tags. This can take time if Google has already deemed them to be duplicates.
Drop me a mail at email@example.com if you want have a hreflang issue you’d like to discuss