hreflang across the globe
TRANSCRIPT
![Page 1: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/1.jpg)
hreflang across the globe
ISS Munich - #iss #hreflang - @jdevalk
![Page 2: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/2.jpg)
ISS Munich - #iss #hreflang - @jdevalk
![Page 3: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/3.jpg)
Today!• What is hreflang?
• Design choices
• Common issues
• Useful tools
ISS Munich - #iss #hreflang - @jdevalk
![Page 4: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/4.jpg)
What is hreflang?
ISS Munich - #iss #hreflang - @jdevalk
![Page 5: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/5.jpg)
What is hreflang?“Google uses the rel="alternate" hreflang="x" attributes to serve the correct language or regional URL in Search results.”
ISS Munich - #iss #hreflang - @jdevalk
![Page 6: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/6.jpg)
What is hreflang?In short: serve the right language version to the user, based on their locale and location.
ISS Munich - #iss #hreflang - @jdevalk
![Page 7: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/7.jpg)
What is it meant for?
ISS Munich - #iss #hreflang - @jdevalk
![Page 8: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/8.jpg)
What is it meant for?• Fully translated sites
ISS Munich - #iss #hreflang - @jdevalk
![Page 9: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/9.jpg)
What is it meant for?• Fully translated sites
• Sites with regional variation
ISS Munich - #iss #hreflang - @jdevalk
![Page 10: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/10.jpg)
What is it meant for?• Fully translated sites
• Sites with regional variation
• Only the template gets translated, main content is the same (but don’t do this!!)
ISS Munich - #iss #hreflang - @jdevalk
![Page 11: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/11.jpg)
ISS Munich - #iss #hreflang - @jdevalk
English site Dutch siteGerman site
hreflang=“de” href=“http://example.com/de/”hreflang=“en” href=“http://example.com/en/”hreflang=“nl” href=“http://example.com/nl/”
![Page 12: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/12.jpg)
What would happen?• Someone searching in Dutch would get the Dutch site.
• Someone searching in German would get the German site.
• Someone searching in English would get the English site.
ISS Munich - #iss #hreflang - @jdevalk
![Page 13: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/13.jpg)
ISS Munich - #iss #hreflang - @jdevalk
German site for Germany
German site for Switzerland
German site for Austria
href="http://www.example.com/de-de/" hreflang="de-de"href="http://www.example.com/de-at/" hreflang="de-at"href="http://www.example.com/de-ch/" hreflang="de-ch"
![Page 14: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/14.jpg)
What would happen?• Someone searching in German in Germany would get
the /de-de/ site.
• Someone searching in German in Austria would get the /de-at/ site.
• Someone searching in German in Switzerland would get the /de-ch/ site.
ISS Munich - #iss #hreflang - @jdevalk
![Page 15: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/15.jpg)
But beware!
ISS Munich - #iss #hreflang - @jdevalk
![Page 16: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/16.jpg)
But beware!• In the previous example, which page would German
speaking / seeking people in Belgium get?
ISS Munich - #iss #hreflang - @jdevalk
![Page 17: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/17.jpg)
But beware!• In the previous example, which page would German
speaking / seeking people in Belgium get?
• A better solution:
ISS Munich - #iss #hreflang - @jdevalk
![Page 18: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/18.jpg)
ISS Munich - #iss #hreflang - @jdevalk
German site for Germany
& rest of world
German site for Switzerland
German site for Austria
href="http://www.example.com/de-de/" hreflang="de"href="http://www.example.com/de-at/" hreflang="de-at"href="http://www.example.com/de-ch/" hreflang="de-ch"
![Page 19: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/19.jpg)
x-default“The new x-default hreflang attribute value signals to our algorithms that this page doesn’t target any specific language or locale and is the default page when no other page is better suited.”
https://webmasters.googleblog.com/2013/04/x-default-hreflang-for-international-pages.html
ISS Munich - #iss #hreflang - @jdevalk
![Page 20: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/20.jpg)
x-default“The x-default hreflang value signals to our algorithms that such a page doesn’t target a specific language or locale.”
https://webmasters.googleblog.com/2013/04/x-default-hreflang-for-international-pages.html
ISS Munich - #iss #hreflang - @jdevalk
![Page 21: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/21.jpg)
x-default
ISS Munich - #iss #hreflang - @jdevalk
![Page 22: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/22.jpg)
ISS Munich - #iss #hreflang - @jdevalk
English site Dutch siteGerman site
hreflang=“de” href=“http://example.com/de/”hreflang=“en” href=“http://example.com/en/”hreflang=“nl” href=“http://example.com/nl/”hreflang=“x-default” href=“http://example.com/”
Country selector page
![Page 23: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/23.jpg)
What would happen?
ISS Munich - #iss #hreflang - @jdevalk
![Page 24: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/24.jpg)
What would happen?• Someone searching in Dutch would get the Dutch site.
ISS Munich - #iss #hreflang - @jdevalk
![Page 25: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/25.jpg)
What would happen?• Someone searching in Dutch would get the Dutch site.
• Someone searching in German would get the German site.
ISS Munich - #iss #hreflang - @jdevalk
![Page 26: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/26.jpg)
What would happen?• Someone searching in Dutch would get the Dutch site.
• Someone searching in German would get the German site.
• Someone searching in English would get the English site.
ISS Munich - #iss #hreflang - @jdevalk
![Page 27: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/27.jpg)
What would happen?• Someone searching in Dutch would get the Dutch site.
• Someone searching in German would get the German site.
• Someone searching in English would get the English site.
• Someone searching in Spanish would get the country / language selector.
ISS Munich - #iss #hreflang - @jdevalk
![Page 28: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/28.jpg)
ISS Munich - #iss #hreflang - @jdevalk
German site for Germany
& rest of world
German site for Switzerland
German site for Austria
href="http://www.example.com/de-de/" hreflang="de"href="http://www.example.com/de-at/" hreflang="de-at"href="http://www.example.com/de-ch/" hreflang=“de-ch"href="http://www.example.com/de-de/" hreflang=“x-default"
![Page 29: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/29.jpg)
hreflang design choices
ISS Munich - #iss #hreflang - @jdevalk
![Page 30: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/30.jpg)
hreflang implementation options• HTML meta tags
• HTTP headers
• XML sitemap
ISS Munich - #iss #hreflang - @jdevalk
![Page 31: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/31.jpg)
HTML meta tagsEasiest when you’re not in full control of everything:
<link rel="alternate" href="http://example.com/en-gb" hreflang="en-gb" />
<link rel="alternate" href="http://example.com/en-us" hreflang="en-us" />
<link rel="alternate" href="http://example.com/en-au" hreflang="en-au" />
ISS Munich - #iss #hreflang - @jdevalk
![Page 32: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/32.jpg)
HTTP headersVery useful for non HTML content:Link: <http://es.example.com/document.pdf>; rel="alternate"; hreflang="es",
<http://en.example.com/document.pdf>; rel="alternate"; hreflang="en",
<http://de.example.com/document.pdf>; rel="alternate"; hreflang=“de"
Not always as easy to maintain for other stuff.
ISS Munich - #iss #hreflang - @jdevalk
![Page 33: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/33.jpg)
XML Sitemap<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml"><url> <loc>http://www.example.com/english/</loc> <xhtml:link rel=“alternate" hreflang="de" href="http://www.example.com/deutsch/"/> <xhtml:link rel=“alternate" hreflang="de-ch" href="http://www.example.com/schweiz-deutsch/"/> <xhtml:link rel=“alternate" hreflang="en" href="http://www.example.com/english/"/></url>
ISS Munich - #iss #hreflang - @jdevalk
![Page 34: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/34.jpg)
XML Sitemap[…]
<url> <loc>http://www.example.com/deutsch/</loc> <xhtml:link rel=“alternate" hreflang="en" href="http://www.example.com/english/"/> <xhtml:link rel=“alternate" hreflang="de-ch" href="http://www.example.com/schweiz-deutsch/"/> <xhtml:link rel=“alternate” hreflang="de" href="http://www.example.com/deutsch/"/></url>
ISS Munich - #iss #hreflang - @jdevalk
![Page 35: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/35.jpg)
XML Sitemap
ISS Munich - #iss #hreflang - @jdevalk
![Page 36: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/36.jpg)
XML Sitemap• horribly ugly
ISS Munich - #iss #hreflang - @jdevalk
![Page 37: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/37.jpg)
XML Sitemap• horribly ugly
• but easiest to maintain
ISS Munich - #iss #hreflang - @jdevalk
![Page 38: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/38.jpg)
XML Sitemap• horribly ugly
• but easiest to maintain
• doesn’t add kilobytes to each page load
ISS Munich - #iss #hreflang - @jdevalk
![Page 39: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/39.jpg)
hreflang breaks - often
ISS Munich - #iss #hreflang - @jdevalk
![Page 40: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/40.jpg)
Common issuesYes. Common.
This very scientifically correct pie chart from David Sottimano is sadly close to the truth:
ISS Munich - #iss #hreflang - @jdevalk
Hreflang implementation
5%
95%
Screwed upGot it right
![Page 41: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/41.jpg)
1. Broken links / relative URLs
ISS Munich - #iss #hreflang - @jdevalk
![Page 42: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/42.jpg)
1. Broken links / relative URLs
ISS Munich - #iss #hreflang - @jdevalk
If your hreflang href links to:
![Page 43: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/43.jpg)
1. Broken links / relative URLs
ISS Munich - #iss #hreflang - @jdevalk
If your hreflang href links to:
• broken URLs
![Page 44: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/44.jpg)
1. Broken links / relative URLs
ISS Munich - #iss #hreflang - @jdevalk
If your hreflang href links to:
• broken URLs
• URLs that are redirected
![Page 45: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/45.jpg)
1. Broken links / relative URLs
ISS Munich - #iss #hreflang - @jdevalk
If your hreflang href links to:
• broken URLs
• URLs that are redirected
• relative URLs
![Page 46: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/46.jpg)
1. Broken links / relative URLs
ISS Munich - #iss #hreflang - @jdevalk
If your hreflang href links to:
• broken URLs
• URLs that are redirected
• relative URLs
![Page 47: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/47.jpg)
1. Broken links / relative URLs
ISS Munich - #iss #hreflang - @jdevalk
If your hreflang href links to:
• broken URLs
• URLs that are redirected
• relative URLs
It won’t work.
![Page 48: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/48.jpg)
2. Missing return link
ISS Munich - #iss #hreflang - @jdevalk
![Page 49: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/49.jpg)
2. Missing return link
ISS Munich - #iss #hreflang - @jdevalk
If page A says A is English and B is German.
![Page 50: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/50.jpg)
2. Missing return link
ISS Munich - #iss #hreflang - @jdevalk
If page A says A is English and B is German.
Page B needs to say B is German and A is English.
![Page 51: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/51.jpg)
2. Missing return link
ISS Munich - #iss #hreflang - @jdevalk
If page A says A is English and B is German.
Page B needs to say B is German and A is English.
It can not lack the return link.
![Page 52: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/52.jpg)
3. Wrong country / region code
ISS Munich - #iss #hreflang - @jdevalk
![Page 53: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/53.jpg)
3. Wrong country / region code
ISS Munich - #iss #hreflang - @jdevalk
Language and Country / Region codes follow strict ISO specs.
![Page 54: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/54.jpg)
3. Wrong country / region code
ISS Munich - #iss #hreflang - @jdevalk
Language and Country / Region codes follow strict ISO specs.
The first bit is the language, two letters, in ISO 639-1 format.
![Page 55: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/55.jpg)
3. Wrong country / region code
ISS Munich - #iss #hreflang - @jdevalk
Language and Country / Region codes follow strict ISO specs.
The first bit is the language, two letters, in ISO 639-1 format.
The second (optional) bit is the region. In ISO 3166-1 Alpha 2 format.
![Page 56: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/56.jpg)
3. Wrong country / region code
ISS Munich - #iss #hreflang - @jdevalk
So Ferrari got it slightly wrong:
<link rel="alternate" hreflang="en-en" href="http://www.ferrari.com/en_en/" /><link rel="alternate" hreflang="fr-fr" href="http://www.ferrari.com/fr_fr/" /><link rel="alternate" hreflang="de-de" href="http://www.ferrari.com/de_de/" /><link rel="alternate" hreflang="es-es" href="http://www.ferrari.com/es_es/" /><link rel="alternate" hreflang="it-it" href="http://www.ferrari.com/it_it/" /><link rel="alternate" hreflang="en-us" href="http://www.ferrari.com/en_us/" /><link rel="alternate" hreflang="ja-jp" href="http://www.ferrari.com/ja_jp/" /><link rel="alternate" hreflang="zh-cn" href="http://www.ferrari.com/zh_cn/" /><link rel="alternate" hreflang="nl" href="http://www.ferrari.com/nl_nl/" />
This was on their nl page.
![Page 57: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/57.jpg)
3. Wrong country / region code
ISS Munich - #iss #hreflang - @jdevalk
![Page 58: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/58.jpg)
3. Wrong country / region code
ISS Munich - #iss #hreflang - @jdevalk
![Page 59: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/59.jpg)
3. Wrong country / region code
ISS Munich - #iss #hreflang - @jdevalk
![Page 60: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/60.jpg)
3. Wrong country / region code
ISS Munich - #iss #hreflang - @jdevalk
![Page 61: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/61.jpg)
3. Wrong country / region code
ISS Munich - #iss #hreflang - @jdevalk
This is btw quite a common issue:
<link href="http://www.independent.co.uk/"
rel="alternate" hreflang="en-uk" />
This should be en-gb of course!
![Page 62: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/62.jpg)
4. Canonical interference
ISS Munich - #iss #hreflang - @jdevalk
![Page 63: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/63.jpg)
4. Canonical interference
ISS Munich - #iss #hreflang - @jdevalk
![Page 64: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/64.jpg)
4. Canonical interference
ISS Munich - #iss #hreflang - @jdevalk
Each language should have a canonical that points to itself.
![Page 65: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/65.jpg)
4. Canonical interference
ISS Munich - #iss #hreflang - @jdevalk
Each language should have a canonical that points to itself.
If it doesn’t follow that simple rule, it’ll prevent hreflang from working.
![Page 66: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/66.jpg)
4. Canonical interference
ISS Munich - #iss #hreflang - @jdevalk
Each language should have a canonical that points to itself.
If it doesn’t follow that simple rule, it’ll prevent hreflang from working.
So, in our earlier example:
![Page 67: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/67.jpg)
ISS Munich - #iss #hreflang - @jdevalk
English site Dutch siteGerman site
<link rel=“alternate” hreflang=“de” href=“http://example.com/de/”><link rel=“alternate” hreflang=“en” href=“http://example.com/en/”><link rel=“alternate” hreflang=“nl” href=“http://example.com/nl/”><link rel=“canonical” href=“http://example.com/en/”>
Correct implementation:
![Page 68: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/68.jpg)
ISS Munich - #iss #hreflang - @jdevalk
English site Dutch siteGerman site
Correct implementation:
<link rel=“alternate” hreflang=“de” href=“http://example.com/de/”><link rel=“alternate” hreflang=“en” href=“http://example.com/en/”><link rel=“alternate” hreflang=“nl” href=“http://example.com/nl/”><link rel=“canonical” href=“http://example.com/de/”>
![Page 69: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/69.jpg)
ISS Munich - #iss #hreflang - @jdevalk
English site Dutch siteGerman site
Correct implementation:
<link rel=“alternate” hreflang=“de” href=“http://example.com/de/”><link rel=“alternate” hreflang=“en” href=“http://example.com/en/”><link rel=“alternate” hreflang=“nl” href=“http://example.com/nl/”><link rel=“canonical” href=“http://example.com/nl/”>
![Page 70: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/70.jpg)
5. It looks fine but it says it’s broken!
ISS Munich - #iss #hreflang - @jdevalk
Maybe you have two implementations? If so… Get rid of one!
![Page 71: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/71.jpg)
Useful tools
![Page 72: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/72.jpg)
hreflang tag generator
http://yoa.st/hreflanggenerator
ISS Munich - #iss #hreflang - @jdevalk
![Page 73: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/73.jpg)
hreflang XML sitemap generatorhttp://www.themediaflow.com/tool_hreflang
ISS Munich - #iss #hreflang - @jdevalk
![Page 74: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/74.jpg)
hreflang XML sitemap generatorhttp://www.themediaflow.com/tool_hreflang
ISS Munich - #iss #hreflang - @jdevalk
![Page 75: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/75.jpg)
hreflang tag validator
http://flang.dejanseo.com.au/
ISS Munich - #iss #hreflang - @jdevalk
![Page 76: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/76.jpg)
ISS Munich - #iss #hreflang - @jdevalk
http://yoa.st/hreflangchrome
hreflang tag recognition
![Page 77: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/77.jpg)
ISS Munich - #iss #hreflang - @jdevalk
hreflang tag recognition
![Page 78: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/78.jpg)
Keep auditing
![Page 79: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/79.jpg)
It works now!
ISS Munich - #iss #hreflang - @jdevalk
![Page 80: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/80.jpg)
It works now!No. It works now.
ISS Munich - #iss #hreflang - @jdevalk
![Page 81: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/81.jpg)
It works now!No. It works now.
It will break.
ISS Munich - #iss #hreflang - @jdevalk
![Page 82: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/82.jpg)
Common reasons for breakage
ISS Munich - #iss #hreflang - @jdevalk
![Page 83: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/83.jpg)
Common reasons for breakagePages that are redirected, but the hreflang wasn’t updated.
ISS Munich - #iss #hreflang - @jdevalk
![Page 84: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/84.jpg)
Common reasons for breakagePages that are redirected, but the hreflang wasn’t updated.
Pages that have been deleted in one language but not in the other(s).
ISS Munich - #iss #hreflang - @jdevalk
![Page 85: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/85.jpg)
Common reasons for breakagePages that are redirected, but the hreflang wasn’t updated.
Pages that have been deleted in one language but not in the other(s).
A developer thought “this can be done so much simpler”, and breaks it all.
ISS Munich - #iss #hreflang - @jdevalk
![Page 86: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/86.jpg)
Regular audits
ISS Munich - #iss #hreflang - @jdevalk
![Page 87: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/87.jpg)
Regular auditsTo prevent breakage, you need to audit regularly.
ISS Munich - #iss #hreflang - @jdevalk
![Page 88: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/88.jpg)
Regular auditsTo prevent breakage, you need to audit regularly.
If you have continuous integration, add hreflang tests.
ISS Munich - #iss #hreflang - @jdevalk
![Page 89: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/89.jpg)
Setup (regular) testsManually with Screaming Frog, or automated.
ISS Munich - #iss #hreflang - @jdevalk
![Page 90: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/90.jpg)
Audit source code
ISS Munich - #iss #hreflang - @jdevalk
![Page 91: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/91.jpg)
Audit source codeMake sure the code that generates hreflang:
ISS Munich - #iss #hreflang - @jdevalk
![Page 92: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/92.jpg)
Audit source codeMake sure the code that generates hreflang:
• has documentation that explains why;
ISS Munich - #iss #hreflang - @jdevalk
![Page 93: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/93.jpg)
Audit source codeMake sure the code that generates hreflang:
• has documentation that explains why;
• points to documentation on the how;
ISS Munich - #iss #hreflang - @jdevalk
![Page 94: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/94.jpg)
Audit source codeMake sure the code that generates hreflang:
• has documentation that explains why;
• points to documentation on the how;
• explains special cases like x-default;
ISS Munich - #iss #hreflang - @jdevalk
![Page 95: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/95.jpg)
Audit source codeMake sure the code that generates hreflang:
• has documentation that explains why;
• points to documentation on the how;
• explains special cases like x-default;
• explains relationship to canonical.
ISS Munich - #iss #hreflang - @jdevalk
![Page 96: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/96.jpg)
Regular audits
ISS Munich - #iss #hreflang - @jdevalk
Regular audits and smart code
documentation will keep your
hreflang happy!
![Page 97: hreflang across the globe](https://reader031.vdocument.in/reader031/viewer/2022022412/58f9b355760da3da068bd51a/html5/thumbnails/97.jpg)
Questions?Follow along:
• https://yoast.com/
• @jdevalk & @yoast on Twitter
• facebook.com/yoast
ISS Munich - #iss #hreflang - @jdevalk