Hreflang Language and Region Codes Reference
Complete reference for hreflang language and region codes. ISO 639-1 language codes and ISO 3166-1 alpha-2 country codes with examples.
Hreflang codes follow a specific format: language code alone, or language code combined with a region code. Using the wrong code -- or making up a plausible-sounding one -- means Google ignores your tag entirely.
Here's what you need to know, plus a reference table for the most common codes.
How the codes work
Hreflang uses two separate standards:
- Language codes follow ISO 639-1 -- two-letter lowercase codes like
en,fr,de - Region codes follow ISO 3166-1 alpha-2 -- two-letter codes like
US,GB,AU
When you combine them, language comes first, separated by a hyphen: en-GB, es-MX, zh-CN. The region code is case-insensitive in practice -- en-gb and en-GB are both valid -- but uppercase is the standard convention for region codes.
You can use language alone (hreflang="es") or language plus region (hreflang="es-MX"). You cannot use region alone.
Common language codes
| Language | Code | Example usage |
|---|---|---|
| English | en | hreflang="en" |
| Spanish | es | hreflang="es" |
| French | fr | hreflang="fr" |
| German | de | hreflang="de" |
| Portuguese | pt | hreflang="pt" |
| Italian | it | hreflang="it" |
| Dutch | nl | hreflang="nl" |
| Russian | ru | hreflang="ru" |
| Japanese | ja | hreflang="ja" |
| Korean | ko | hreflang="ko" |
| Chinese (Simplified) | zh | hreflang="zh" |
| Arabic | ar | hreflang="ar" |
| Hindi | hi | hreflang="hi" |
| Swedish | sv | hreflang="sv" |
| Polish | pl | hreflang="pl" |
| Turkish | tr | hreflang="tr" |
Common combined language + region codes
| Target audience | Code | Notes |
|---|---|---|
| English (United States) | en-US | US English |
| English (United Kingdom) | en-GB | British English |
| English (Australia) | en-AU | Australian English |
| English (Canada) | en-CA | Canadian English |
| Spanish (Spain) | es-ES | Castilian Spanish |
| Spanish (Mexico) | es-MX | Mexican Spanish |
| Spanish (Argentina) | es-AR | Argentine Spanish |
| French (France) | fr-FR | Metropolitan French |
| French (Canada) | fr-CA | Canadian French |
| French (Belgium) | fr-BE | Belgian French |
| Portuguese (Brazil) | pt-BR | Brazilian Portuguese |
| Portuguese (Portugal) | pt-PT | European Portuguese |
| German (Germany) | de-DE | Standard German |
| German (Austria) | de-AT | Austrian German |
| German (Switzerland) | de-CH | Swiss German |
| Chinese (Simplified, China) | zh-CN | Mainland China |
| Chinese (Traditional, Taiwan) | zh-TW | Taiwan |
| Chinese (Traditional, Hong Kong) | zh-HK | Hong Kong |
Generate hreflang with correct codes automatically
No more looking up ISO codes. Paste your URLs, pick your languages, and get the tags ready to use.
Common code confusions
uk is not English. uk is the ISO 3166-1 alpha-2 code for Ukraine. English in the UK is en-GB. Using hreflang="uk" targets a language that doesn't exist in ISO 639-1 -- Google will ignore it.
sp is not Spanish. The correct code for Spanish is es. There's no sp in ISO 639-1.
en vs. en-US -- which to use? Use en if your English content isn't targeted at a specific country. Use en-US or en-GB only when your content genuinely differs between those markets. Using region-specific codes when the content is the same creates unnecessary complexity.
es vs. es-ES -- Similarly, es means "Spanish for all Spanish speakers." es-ES specifically targets Spain. If your Spanish content is the same for all Spanish-speaking countries, use es. If you have Mexico-specific pricing or content, use es-MX.
Chinese needs clarification. zh alone isn't enough for most sites. Chinese speakers in mainland China use Simplified characters (zh-CN); those in Taiwan use Traditional (zh-TW); Hong Kong (zh-HK) also uses Traditional with local variations. These are meaningfully different audiences.
Invalid codes Google rejects
| Wrong | Correct | Why |
|---|---|---|
| uk | en-GB | uk = Ukraine (country code, not language) |
| sp | es | sp doesn't exist in ISO 639-1 |
| br | pt-BR | br = Brazil (country), not a language |
| cn | zh-CN | cn = China (country), not a language |
| jp | ja | jp = Japan (country), not a language |
| kr | ko | kr = Korea (country), not a language |
Google silently ignores invalid codes
If you use a code Google doesn't recognise, it won't surface an error in Search Console. The tag is simply ignored. This is why auditing your hreflang implementation matters -- invalid codes fail silently.
The x-default special value
x-default is not a language code -- it's a special hreflang value that designates the fallback page for users whose language isn't matched by any other tag. It doesn't map to any ISO standard.
<link rel="alternate" hreflang="x-default" href="https://example.com/" />
Finding codes for less common languages
For languages not in the table above, the definitive reference is:
- ISO 639-1 language codes: loc.gov/standards/iso639-2/php/code_list.php
- ISO 3166-1 alpha-2 country codes: iso.org/iso-3166-country-codes.html
Use the two-letter ISO 639-1 codes for languages, not the three-letter ISO 639-2 codes. Both exist, but hreflang requires the two-letter variant.
Related Articles
Part of Boring Tools -- boring tools for boring jobs.
Generate perfect hreflang tags
Create and validate hreflang markup for your multilingual site. Free.