How it works Features Pricing Live sites
Dashboard
FREE · RUNS IN YOUR BROWSER · NO URL LIMIT

One site, five languages.
Tell Google which page goes where.

Paste your URLs, drop your site’s ZIP or paste sitemap.xml. Languages are read from /hi/, fr.example.com or your domains, translations of the same page are grouped, and every URL gets a self-referencing tag, a full return set and x-default — nothing uploaded, no signup, no cap.

Site address
One URL per line, all languages
0 lines Paths resolve against your site address
sitemap.xml

          
Your hreflang sitemap appears here
Add URLs in every language on the left
0 pages · 0 languages · 0 URLs · 0 KB Each URL will link to every other language and to itself
NEXT 01
Put it in your site root

Save the file next to your index.html and point robots.txt at it so every crawler finds it:

Sitemap: https://example.com/sitemap.xml
NEXT 02
Submit it in Search Console

Sitemaps › Add a new sitemap. Google reads the alternates from the file; no change to your pages is needed.

https://example.com/sitemap.xml
NEXT 03
Keep canonicals in step

Every <loc> must be that page’s canonical URL. A canonical pointing elsewhere makes Google drop the whole set. Use Link tags only if you skip the sitemap; never both with different sets.

No hosting yet?

Drop your language folders and sitemap.xml in one ZIP and upload to Fylo. Served from 330+ cities, ~100ms TTFB.

Host on Fylo free
Builds live as you type Nothing leaves your browser Self-referencing, reciprocal sets
Free tool by Fylo.Host, the fast static hosting for HTML sites.
What you get — and what we do not do
URL limit
None
Every URL in every language. Google caps one file at 50,000 URLs; we warn you when you cross it.
Bytes uploaded to us
0
Your URLs and ZIP are read in your browser. Nothing is sent.
If you host on Fylo
~100ms
Median TTFB measured on real sites we host.
The problem

You translated the site. Google still shows the wrong one.

Without hreflang, a search engine guesses which language page to show, and it usually guesses the one it crawled first. The fix is simple to describe and painful to write by hand.

The English page ranks in Hindi search

Someone searching in Hindi lands on your English page, sees nothing they can read and leaves. Your Hindi page exists; nobody told Google it is the same page in another language.

Each set names every language version, so the right one is shown.

“No return tags” — and the set is ignored

Hreflang only counts when every page in a set points back to every other page, including itself. One missing pair and the whole set is dropped. It is the most common hreflang error there is.

Every URL carries the full set. Return tags cannot be missing.

40 pages × 5 languages = 200 tags to type

A CMS plugin bolts it on. A static site has nothing. Writing it by hand means one link per language on every page, each URL exact, each code valid, and doing it again whenever a page is added.

Paste URLs or drop the ZIP. Grouped, validated, written for you.
How it works

URLs to hreflang sitemap in three steps

STEP 01

Add your URLs

Paste every URL in every language, one per line. Or drop the ZIP of your site, or paste your existing sitemap.xml. The language is read from each URL.

/about en
/hi/about hi
fr.example.com/about fr
example.de/ueber-uns de (map)
STEP 02

Check the sets

Translations of one page are grouped. The Table view lays every page against every language, so a missing translation or a bad code shows up before it becomes a Search Console error.

Pageenhifr
/
/about
/services/mri-scan
STEP 03

Download and submit

Save sitemap.xml to your site root, add it to robots.txt, submit it in Search Console. Every URL now links to every language and to itself.

<url>
  <loc>https://example.com/about</loc>
  <xhtml:link hreflang="en" .../>
  <xhtml:link hreflang="hi" .../>
  <xhtml:link hreflang="x-default" .../>
</url>
What a good one looks like

Six rules. Break one and the set is ignored.

Google is strict about hreflang because a half-right set is worse than none. Every file this tool writes follows all six.

Rules the file follows

  • Self-referencing — each URL’s set includes the URL itself. Without it the set does not validate.
  • Reciprocal — if A lists B, B lists A. Every URL in a set gets the identical alternate list, so return tags are never missing.
  • Absolute URLshttps://example.com/hi/about, never /hi/about. Relative paths in a sitemap are dropped.
  • Valid codes — ISO 639-1 language (hi, en), optional ISO 3166-1 region (en-IN, pt-BR), optional script (zh-Hant). Codes are checked; en-UK and eng are flagged.
  • One x-default per set — the page to show when no language matches. Usually the default language; never two.
  • Within limits — 50,000 URLs and 50 MB uncompressed per file. Past that, split by language and list the files in a sitemap index.
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml">namespace <url> <loc>https://example.com/about</loc> <xhtml:link rel="alternate" hreflang="en" href="https://example.com/about"/>self <xhtml:link rel="alternate" hreflang="hi" href="https://example.com/hi/about"/> <xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/about"/>fallback </url> <url> <loc>https://example.com/hi/about</loc> ... same three links againreturn tags </url> </urlset>
Built for

Whose hreflang sitemaps get built here

Indian businesses in two scriptsEnglish plus Hindi, Tamil or Bengali. Show the reader the one they searched in.
Stores selling to several countriesen-IN, en-GB and en-US pages with different prices and the same product.
Tourism & hospitalityGuests search in their own language before they book in yours.
Docs & help centresTranslated docs that keep ranking the English original everywhere.
WordPress migrationsExported to static? The translation plugin’s hreflang went with it.
How we compare

Most generators want a form per page. This one reads your URLs.

An hreflang file is only right if every set is complete. That takes grouping and checking, not a text box per language.

FeatureFylo.HostOnline generatorsCMS pluginsWritten by hand
Whole site at oncePaste every URL, or drop the ZIP One page at a time
Detects language from path, subdomain or domain Its own structure
Self-referencing and reciprocal sets VariesIf you remember
Flags missing translations and bad codes
Reads existing hreflang from pages or sitemap
Sitemap and link tags from the same sets Tags onlyTags only
No URL limit on the free tier VariesYour patience
Runs in your browserYour site is never uploaded
Hosts the site for you With your site, free
Generate your hreflang sitemap now No signup. No URL limit.
FAQ

Got questions?

A normal XML sitemap where each <url> also lists every language version of that page as <xhtml:link rel="alternate" hreflang="...">. It tells search engines which URL to show to which language or country, without adding tags to every page. Need a plain one first? Use the XML Sitemap Generator.
All three are valid and equal to Google. A sitemap keeps every set in one file, which is easiest to maintain on a static site and adds no bytes to your pages. Link tags in <head> work when you cannot edit the sitemap; the Link tags view writes them from the same sets. HTTP headers are for non-HTML files like PDFs. Pick one method; do not mix them with different sets.
The URL to show when none of the listed languages matches the visitor: usually the default-language page or a language selector. It is optional but recommended, and each set should have exactly one. The x-default option picks the default-language URL in each set; switch it off if you handle this elsewhere.
A two-letter ISO 639-1 language code (en, hi, ta, fr), optionally followed by an ISO 3166-1 alpha-2 region (en-IN, pt-BR) and optionally an ISO 15924 script (zh-Hant). Region alone is not valid, and neither is en-UK (it is en-GB) or eng. Invalid codes are flagged in the Table view. To turn a detected en into en-IN, add en=en-IN to the Map box.
That is what region codes are for. If example.com/in/ and example.com/uk/ are both English, map them: in=en-IN, uk=en-GB in the Map box, and set Detect from to path prefix. Set x-default so one of them is the fallback for everyone else.
Hreflang only counts when every page in a set points back to every other page in the set, including itself. If the English page lists the Hindi page but the Hindi page does not list the English one, Google ignores both. This tool writes the complete set on every URL, so the error cannot come from the sitemap. If it persists, check that no page has a canonical pointing somewhere else.
No. Hreflang is for pages that exist in more than one language or for more than one country. A single-language site needs a plain sitemap; single-language pages on a multilingual site are kept in the file as ordinary entries when Keep single-language pages is on, without alternates.
Yes. Put your language folders and sitemap.xml in one ZIP and upload it. It is served from Cloudflare’s edge across 330+ cities, with median TTFB of about 100ms on real sites we host.

Every language linked. Now host the site
they live on.

Drop your ZIP. We handle the milliseconds.

Upload your site free No signup. No server setup. Live in seconds.
Copied!