hreflang Tag Generator
Add each language version's locale code and URL, get the full, reciprocal set of
hreflang tags to paste on every one of them.
How it works
For every row you add, the tool outputs one <link rel="alternate" hreflang="..."
href="..." /> tag, and critically, it outputs the entire set on every
generation, one tag per language including a self-referencing one, because that's what
Google's documentation requires: hreflang annotations only count when they're
reciprocal, every page in the cluster linking to every other page in the cluster. Paste
the identical output block into the <head> of each language version;
you don't need to hand-edit which tag points to "itself" on each page.
Locale codes aren't validated against a fixed list (BCP 47 supports many combinations
like en, en-US, pt-BR), so double-check yours
against Google's supported values if you're unsure. Nothing you enter is uploaded.
Common questions
Do hreflang tags need to be reciprocal?
Yes, this is the single most common hreflang mistake: every page in the set must link to every other page, including itself. Google explicitly ignores hreflang annotations that aren't confirmed by a matching return link. This tool always outputs the full set on every generation, including a self-referencing tag, so you can paste the identical block onto each language version.
What's x-default for?
It tells search engines which page to show visitors whose language or region doesn't match any of your specific hreflang entries, typically your default or English version. It's optional but recommended for any multi-language site.
Is my data sent anywhere?
No, the tags are assembled entirely in your browser from the rows you enter. Nothing is uploaded.