consolelog.tools

Hreflang Tag Generator

Build correct hreflang annotations for international SEO — define your locale↔URL map once and get a complete, bidirectional set (self-referencing + x-default) that's valid by construction. Full ISO language/region database, a linter for the mistakes Google flags (en-UK, underscores, missing return tags), and four output formats: HTML, XML sitemap, HTTP header, and Next.js metadata.

About this ToolHow it works, benefits & use cases

Hreflang annotations tell Google which language and regional version of a page to serve to which users — and getting the codes, the x-default, and the bidirectional structure right is what separates a working international setup from a broken one. This generator builds those annotations from a list of language/region/URL entries. Pick a language from a built-in list (English, Spanish, French, German, Chinese, Japanese, Arabic, and more) and an optional region (US, GB, DE, JP, …); the tool formats each into a proper code like en or en-US (lowercase language, uppercase region). Choose your output: HTML <link rel="alternate"> tags for the page head, or an XML sitemap using the xhtml:link namespace. You can include an x-default entry for users whose language you do not target. On generation it runs validation and warns about duplicate hreflang codes, a missing x-default, invalid URLs, and mixed HTTP/HTTPS protocols. It all runs in your browser.

How to Use

  1. 1Choose your "Output format": HTML <link> tags or XML Sitemap.
  2. 2Decide on x-default — leave "Include x-default" checked and enter the x-default URL, or uncheck it.
  3. 3Add language entries: for each, pick a Language (required), an optional Region, and enter the URL. Use "Add entry" for more and the trash icon to remove.
  4. 4Click "Generate Hreflang Tags".
  5. 5Review any warnings shown, then copy or download the output (hreflang-tags.html or hreflang-sitemap.xml).

Key Benefits

  • Two output formats from the same entries: HTML <link> tags or an XML sitemap with the xhtml namespace
  • Built-in language and region pickers that format codes correctly (lowercase lang, uppercase region)
  • Optional x-default entry for untargeted languages, placed first in the output
  • Validation warnings for duplicate codes, missing x-default, invalid URLs, and mixed protocols
  • XML output groups multiple language alternates under each unique URL automatically
  • Best-practices guidance shown alongside the generator
  • Runs entirely in the browser — nothing is uploaded

Common Use Cases

  • Annotating a page that exists in several languages so each ranks for the right audience
  • Targeting regional variants like en-US and en-GB that share a language
  • Producing an XML sitemap with hreflang alternates to submit to Search Console
  • Adding an x-default fallback for international visitors you do not specifically target
  • Catching duplicate or mismatched hreflang codes before they cause indexing problems

Put this identical block on every listed page

<link rel="alternate" hreflang="en-US" href="https://example.com/" />
<link rel="alternate" hreflang="en-GB" href="https://example.com/uk/" />
<link rel="alternate" hreflang="es-ES" href="https://example.com/es/" />
<link rel="alternate" hreflang="fr-FR" href="https://example.com/fr/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/" />

Valid hreflang set (4 locales)

Bidirectional by design — put this same 4-locale block on every listed page and return tags are guaranteed.

Locales (4)

English (United States)
English (United Kingdom)
Spanish (Spain)
French (France)
Quick add
ISO code reference (154 languages · 188 regions)
Languages (ISO 639-1) · 154
abAbkhazian
aaAfar
afAfrikaans
akAkan
sqAlbanian
amAmharic
arArabic
anAragonese
hyArmenian
asAssamese
ayAymara
azAzerbaijani
bmBambara
euBasque
beBelarusian
bnBengali
bhBihari
bsBosnian
brBreton
bgBulgarian
myBurmese
caCatalan
chChamorro
ceChechen
zhChinese
cvChuvash
kwCornish
coCorsican
hrCroatian
csCzech
daDanish
nlDutch
dzDzongkha
enEnglish
eoEsperanto
etEstonian
eeEwe
foFaroese
fjFijian
fiFinnish
frFrench
fyFrisian
glGalician
kaGeorgian
deGerman
elGreek
gnGuarani
guGujarati
htHaitian Creole
haHausa
heHebrew
hiHindi
hoHiri Motu
huHungarian
isIcelandic
igIgbo
idIndonesian
iaInterlingua
ieInterlingue
iuInuktitut
ikInupiaq
gaIrish
itItalian
jaJapanese
jvJavanese
klKalaallisut
knKannada
krKanuri
ksKashmiri
kkKazakh
kmKhmer
kiKikuyu
rwKinyarwanda
kyKyrgyz
kvKomi
kgKongo
koKorean
kuKurdish
loLao
laLatin
lvLatvian
lnLingala
ltLithuanian
lbLuxembourgish
mkMacedonian
mgMalagasy
msMalay
mlMalayalam
mtMaltese
miMaori
mrMarathi
mnMongolian
naNauru
nvNavajo
neNepali
noNorwegian
nbNorwegian Bokmål
nnNorwegian Nynorsk
nyNyanja
ocOccitan
orOriya
omOromo
psPashto
faPersian
plPolish
ptPortuguese
paPunjabi
quQuechua
rmRomansh
roRomanian
ruRussian
smSamoan
sgSango
saSanskrit
gdScottish Gaelic
srSerbian
snShona
sdSindhi
siSinhala
skSlovak
slSlovenian
soSomali
stSouthern Sotho
esSpanish
suSundanese
swSwahili
ssSwati
svSwedish
tlTagalog
tgTajik
taTamil
ttTatar
teTelugu
thThai
boTibetan
tiTigrinya
toTongan
tsTsonga
tnTswana
trTurkish
tkTurkmen
twTwi
ugUyghur
ukUkrainian
urUrdu
uzUzbek
veVenda
viVietnamese
cyWelsh
woWolof
xhXhosa
yiYiddish
yoYoruba
zuZulu
Regions (ISO 3166-1) · 188
ADAndorra
AEUnited Arab Emirates
AFAfghanistan
AGAntigua and Barbuda
ALAlbania
AMArmenia
AOAngola
ARArgentina
ATAustria
AUAustralia
AZAzerbaijan
BABosnia and Herzegovina
BBBarbados
BDBangladesh
BEBelgium
BFBurkina Faso
BGBulgaria
BHBahrain
BJBenin
BNBrunei
BOBolivia
BRBrazil
BSBahamas
BTBhutan
BWBotswana
BYBelarus
BZBelize
CACanada
CDDR Congo
CFCentral African Republic
CGCongo
CHSwitzerland
CICôte d'Ivoire
CLChile
CMCameroon
CNChina
COColombia
CRCosta Rica
CUCuba
CVCape Verde
CYCyprus
CZCzechia
DEGermany
DJDjibouti
DKDenmark
DMDominica
DODominican Republic
DZAlgeria
ECEcuador
EEEstonia
EGEgypt
EREritrea
ESSpain
ETEthiopia
FIFinland
FJFiji
FMMicronesia
FRFrance
GAGabon
GBUnited Kingdom
GDGrenada
GEGeorgia
GHGhana
GMGambia
GNGuinea
GQEquatorial Guinea
GRGreece
GTGuatemala
GWGuinea-Bissau
GYGuyana
HKHong Kong
HNHonduras
HRCroatia
HTHaiti
HUHungary
IDIndonesia
IEIreland
ILIsrael
INIndia
IQIraq
IRIran
ISIceland
ITItaly
JMJamaica
JOJordan
JPJapan
KEKenya
KGKyrgyzstan
KHCambodia
KPNorth Korea
KRSouth Korea
KWKuwait
KZKazakhstan
LALaos
LBLebanon
LCSaint Lucia
LILiechtenstein
LKSri Lanka
LRLiberia
LSLesotho
LTLithuania
LULuxembourg
LVLatvia
LYLibya
MAMorocco
MCMonaco
MDMoldova
MEMontenegro
MGMadagascar
MKNorth Macedonia
MLMali
MMMyanmar
MNMongolia
MOMacao
MRMauritania
MTMalta
MUMauritius
MVMaldives
MWMalawi
MXMexico
MYMalaysia
MZMozambique
NANamibia
NENiger
NGNigeria
NINicaragua
NLNetherlands
NONorway
NPNepal
NZNew Zealand
OMOman
PAPanama
PEPeru
PGPapua New Guinea
PHPhilippines
PKPakistan
PLPoland
PRPuerto Rico
PSPalestine
PTPortugal
PYParaguay
QAQatar
RORomania
RSSerbia
RURussia
RWRwanda
SASaudi Arabia
SCSeychelles
SDSudan
SESweden
SGSingapore
SISlovenia
SKSlovakia
SLSierra Leone
SNSenegal
SOSomalia
SRSuriname
SSSouth Sudan
SVEl Salvador
SYSyria
SZEswatini
TDChad
TGTogo
THThailand
TJTajikistan
TLTimor-Leste
TMTurkmenistan
TNTunisia
TOTonga
TRTurkey
TTTrinidad and Tobago
TWTaiwan
TZTanzania
UAUkraine
UGUganda
USUnited States
UYUruguay
UZUzbekistan
VAVatican City
VCSaint Vincent
VEVenezuela
VNVietnam
VUVanuatu
WSSamoa
YEYemen
ZASouth Africa
ZMZambia
ZWZimbabwe

Get return tags right the first time

Hreflang’s most common failure — and the error Google Search Console reports most — is missing return tags: page A points to B, but B never points back. This tool removes that whole class of bug. You describe each language/region version once with its URL, and we emit the complete, symmetric annotation set — every locale, self-referencing, plus x-default. Put that identical block on every listed page and reciprocity is guaranteed by construction.

What the linter catches

  • en-UK instead of en-GB — “UK” isn’t an ISO region code.
  • Underscores (en_US) instead of hyphens, and wrong casing.
  • Region-only codes — hreflang must always start with a language.
  • Duplicate locales, mixed http/https, and missing x-default.

Which format should I use?

Use HTML <link> tags for normal pages, an XML sitemapwhen you’d rather centralize annotations (great for large sites), an HTTP Link headerfor non-HTML files like PDFs, or the Next.js metadata.alternates block in the App Router. All four describe the same set.

Was this tool helpful?

Share Your Experience

Help others discover this tool!

Related tools