The document discusses 8 things to check if Google is ignoring your hreflang tags, including: 1) codes and tags that are plain wrong, 2) missing tags, 3) mismatching tags, 4) using canonical and hreflang tags within the same cluster, 5) language tag mismatches, 6) disagreements between on-page and sitemap tags, and 7) vastly different link equity or user experience between versions. It provides examples of common mistakes and emphasizes that hreflang is a signal, not a directive, so Google may still show the wrong version if one is more established or has better user experience.
3. obaninternational.com
obaninternational.com
Why Hreflang Matters
• Google may try and guess, but wrong
• Different link equity
• Historic CTR
• Duplicate content
• Users care, & don’t want to waste time:
• Moving between versions
• Going to a site that not be relevant
• Free boost of Hreflang Clusters
5. obaninternational.com
obaninternational.com
• Invalid ISO codes
• Language & Country Order
• e.g “gb-en”
• Non-Countries
• e.g. California, Wales
• Non-Supported Languages
• e.g. Northern Thai, Scots
• Country only tags
• e.g “gb”
ISO 639-1 2 letter Language codes
en.wikipedia.org/wiki/List_of_ISO_639-1_codes
ISO 3166-1 2 letter Country/Territory codes
en.wikipedia.org/wiki/ISO_3166-1_alpha-2
1. Codes and tags that are just plain wrong
Common Mistakes
6. obaninternational.com
6
Website targeting Arabic users
What’s wrong with this example?
<link rel="alternate" href="http://example.com/ar" hreflang=“ar-ar" />
1. Codes and tags that are just plain wrong
Common Mistakes
7. obaninternational.com
7
Website targeting Arabic users
<link rel="alternate" href="http://example.com/ar" hreflang=“ar-ar" />
AR is a country BUT it’s Argentina
AR is a language though and it is Arabic
1. Codes and tags that are just plain wrong
Common Mistakes
Only 2% of
Argentines
speak Arabic
9. obaninternational.com
9
Website targeting Austria
<link rel="alternate" href="http://example.com/at" hreflang="at-at" />
AT is a location
AT isn’t a language
DE is the language (Austrians speak German)
1. Codes and tags that are just plain wrong
Common Mistakes
10. obaninternational.com
obaninternational.com
• Formatting
• Using Relative or Root Relative URLs: Only use Absolute
<link rel="alternate" href="http://example.com/en-ie" hreflang="en-ie" />
<link rel="alternate" href="http://example.com/en-ca" hreflang="en-ca" />
<link rel="alternate" href="http://example.com/en-gb" hreflang="en-gb" />
<link rel="alternate" href="http://example.com/en-gb" hreflang="en" />
• Related country and languages with different codes
1. Codes and tags that are just plain wrong
Common Mistakes
15. obaninternational.com
obaninternational.com
Using UK for Ukraine.
UK is correct for Ukrainian but UA is correct for Ukraine
<link rel="alternate" href="http://example.com/uk-ua" hreflang=“uk-ua"/>
1. Codes and tags that are just plain wrong
Common Mistakes
17. obaninternational.com
obaninternational.com
For Japanese use JA for Japan use JP
For Swedish use SV, for Sweden use SE
For Danish use DA, for Denmark use DK
<link rel="alternate" href="http://example.com/ja-jp" hreflang=“ja-jp"/>
<link rel="alternate" href="http://example.com/sv-se" hreflang=“sv-se"/>
<link rel="alternate" href="http://example.com/da-dk" hreflang=“da-dk"/>
1. Codes and tags that are just plain wrong
Common Mistakes
18. obaninternational.com
obaninternational.com
• Non-indexable URLs
• incl. SPAs
• Language doesn’t match content
• Using homepages or similar where local
version doesn’t exist
• Mapping clearly unrelated URLs into a
cluster
• Content doesn’t have to match, it
should be localised
1. Codes and tags that are just plain wrong
Plain Stupid Mistakes
19. obaninternational.com
obaninternational.com
• If one URL is nice enough to give a shout
out to another in its cluster
• URLs should be polite and return the
compliment
Shoes
Shoes
2. Missing Tags
Missing Return Tags
20. obaninternational.com
obaninternational.com
• If one URL is nice enough to give a shout
out to another in its cluster
• URLs should be polite and return the
compliment
Shoes
Shoes
2. Missing Tags
Missing Return Tags
21. obaninternational.com
obaninternational.com
• You really do need self
referencing tags
• Yes all (indexable) pages do
need tags, yes even the
privacy policy
2. Missing Tags
Lack of Any Tags No hreflang? Shame, I guess you
might be relevant to English speakers
but I’m not sure where?
Hey, I just added an EN Tag
Ok, you’re relevant to Global users with
English Browser Language
Hey, I just added an EN-GB Tag too
Ok, you’re especially relevant to users
with a UK IP address
22. obaninternational.com
obaninternational.com
• Should be simple to get right
• Two URLs just need to agree to reference
each other
• And themselves
• With matching tags
• And no one else
Shoes
Shoes
Shoes
Shoes
Dress
3. Mismatching Tags
1:1 Mismatches
23. obaninternational.com
obaninternational.com
• Should be simple to get right
• Two URLs just need to agree to reference
each other
• And themselves
• With matching tags
• And no one else
Shoes
Shoes
Shoes
Shoes
3. Mismatching Tags
1:1 Mismatches
24. obaninternational.com
obaninternational.com
• Slightly more tricky
• So much easier where everything is
mapped and automated
• Use testing tools
• e.g. https://technicalseo.com/tools/hreflang/
Shoes
Shoes
3. Mismatching Tags
>2 URL Hreflang Clusters
25. obaninternational.com
obaninternational.com
• Slightly more tricky
• So much easier where everything is
mapped and automated
• Use testing tools
• e.g. https://technicalseo.com/tools/hreflang/
Shoes
Shoes
3. Mismatching Tags
>2 URL Hreflang Clusters
26. obaninternational.com
obaninternational.com
• 2 URLs for 1 tag in 1 cluster is definitely
Wrong
• e.g. 2 “fr” pages or 2 “en-us” pages
• Only use 1 URL for per tag per cluster
• Same language in multiple different tags, on
multiple URLs is all good
• e.g. “fr-fr”, “fr-ca” & “fr”
Shoes
Shoes
Dress
3. Mismatching Tags
More than one URL for 1 tag
27. obaninternational.com
obaninternational.com
Shoes
Shoes
3. Mismatching Tags
More than one URL for 1 tag
• 2 URLs for 1 tag in 1 cluster is definitely
Wrong
• e.g. 2 “fr” pages or 2 “en-us” pages
• Only use 1 URL for per tag per cluster
• Same language in multiple different tags, on
multiple URLs is all good
• e.g. “fr-fr”, “fr-ca” & “fr”
28. obaninternational.com
obaninternational.com
• 1 URL mapped to >1 Incompatible tags is also
Wrong
• e.g 1 URL with a “da-dk” and “en-us” tag
• Avoid incompatible tags
• 1 URL used for >1 country is all good
• e.g. 1 URL for “en-gb” & “en-ie”
• >1 language is Wrong
• Except Macro and ‘sub’ languages e.g Norwegian
and Norwegian Bokmål
Shoes
Shoes
3. Mismatching Tags
One URL for multiple incompatible tags
29. obaninternational.com
obaninternational.com
• 1 URL mapped to >1 Incompatible tags is also
Wrong
• e.g 1 URL with a “da-dk” and “en-us” tag
• Avoid incompatible tags
• 1 URL used for >1 country is all good
• e.g. 1 URL for “en-gb” & “en-ie”
• >1 language is Wrong
• Except Macro and ‘sub’ languages e.g Norwegian
and Norwegian Bokmål
Shoes
Shoes
3. Mismatching Tags
One URL for multiple incompatible tags
30. obaninternational.com
obaninternational.com
• Don’t use Hreflang tags &
Canonicals within a cluster
• Stop confusing Google with
conflicting tags
• Google may prioritise
Canonicals as a priority over
Hreflang
• This DOES NOT mean Don’t use
Canonicals at all
• For duplicates (within a
country/language site) ONLY add
Hreflang to Canonical URL
/en-
gb/
/en-
gb/
/en-
gb/
4. Canonicals & Hreflang
Ah thanks, I will not index this and
show /en-us/ instead
el="alternate" href=http://example.com/ en-gb
hreflang=en-gb"/>.
Oh wait, but you told me to show /en-us/
instead?
Ok ok, I made the Canonical self-referencing
Humm, you’re an idiot but I’ll think about
it
rel="canonical" href="https://example.com/en-
us/"
31. obaninternational.com
obaninternational.com
• Lang tags:
• Less important signal
• Can cause issues when contradictory
• ‘Lang tag’ of the URL should:
• Match 1 tag
• Not contradict any others
• Look out for multilingual sites with 1 lang tag
for all pages
<html lang=“da-dk">
<link rel="alternate"
href="https://example.com/
" hreflang="en-US"/>
<link rel="alternate"
href="https://example.com/
" hreflang="en" />
5. Lang Tag Mismatches
32. obaninternational.com
obaninternational.com
• Lang tags:
• Less important signal
• Can cause issues when contradictory
• ‘Lang tag’ of the URL should:
• Match 1 tag
• Not contradict any others
• Look out for multilingual sites with 1 lang tag
for all pages
<html lang="en-GB">
<link rel="alternate"
href="https://example.com/
" hreflang="en-US"/>
<link rel="alternate"
href="https://example.com/
" hreflang="en" />
5. Lang Tag Mismatches
33. obaninternational.com
obaninternational.com
• Lang tags:
• Less important signal
• Can cause issues when contradictory
• ‘Lang tag’ of the URL should:
• Match 1 tag
• Not contradict any others
• Look out for multilingual sites with 1 lang tag
for all pages
<html lang="en-US">
<link rel="alternate"
href="https://example.com/
" hreflang="en-US"/>
<link rel="alternate"
href="https://example.com/
" hreflang="en" />
5. Lang Tag Mismatches
34. obaninternational.com
obaninternational.com
• Only have either on-page tags or sitemap
hreflang
• At least each cluster in one place
• Also make sure the source and initial DOM
match
6. On-Page & Sitemap Tag disagreements
35. obaninternational.com
obaninternational.com
• Technically all good?
• Google might ignore it anyway
• Hreflang is a Signal not a Directive
• If one version was:
• Established before Hreflang setup,
• Has great CTR or
• Has great Link Equity
• It may still show for the wrong countries
7. Vastly different link equity or user
experience
36. obaninternational.com
obaninternational.com
• Google has trust issues
• Just like the time you screwed up Canonicals, or had
out of date XML Sitemaps
• If you got one or some of the first 6 wrong:
• Across a chunk of your pages
• For a long period of time
• Google may decide you can’t be trusted to do your own Hreflang
• It can take a significant amount of time to rebuild trust
• and for Google to decide you have learnt from your mistakes and
move past it
8. Give it time, Google
takes time to trust again
38. obaninternational.com
obaninternational.com
Crawl
• Screaming Frog
• Sitebulb
Migrations
• Plan ahead
• Make sure everything is mapped
• Futureproof
• Test in staging
Support
• I love a challenge so get in touch
linkedin.com/in/davecousin
@davetheseo
@obanintl
obaninternational.com
Webinar 20/09/23:
An Early look at
Organic Search in 2024
Some Final Tips
Ok so I say 8 but as you will see some of these can be broken down further, if I said 24 maybe that would scare some of you away, most of these are easy enough to fix though so don’t panic
2% is 1million speakers
Something along the lines of this Japanese page on my favourite cas is definitely my English homepage and so is this Swedish page on how to change an air filter on a 1986 Ford Sierra
Correct Hreflang tells Google
“these are near duplicates but for different countries so please index them”
Adding a Canonical between the same URLs tells Google
“these are duplicates (or near duplicates) so show this instead as a directly comparable page that doesn’t need indexing”
Checking in GSC
Performance
Filter by URL (/property)
View by Country of origin
Filter to see queries/URLs by country
Checking in Analytics
(GA4) Demographic details
Filter by URL (/property) & Channel
Checking in Ahrefs/SEMRush etc. (incl. Competitors)
Enter URL
View keywords by Country
Check SERPs
VPN or AWR Search Anywhere or similar