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. For a complete walkthrough of hreflang from basics to validation, see our comprehensive hreflang guide.
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, combined according to RFC 5646:
- 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. This is one of the most frequent hreflang mistakes.
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. See do you need hreflang for a single language for guidance on when regional codes are worth the effort.
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. Read the full x-default guide for implementation details.
<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 references are:
- 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
- RFC 5646 (language tag format): datatracker.ietf.org/doc/html/rfc5646
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. See hreflang HTML examples for how these codes are used in practice.
Related Articles
References
- Google Search Central: Localized Versions
- RFC 5646: Tags for Identifying Languages
- ISO 639-1 Language Codes
- ISO 3166-1 Alpha-2 Country Codes
Generate perfect hreflang tags
Create and validate hreflang markup for your multilingual site. Free.
Try Hreflang Generator