Generate hreflang link tags
Build rel=alternate hreflang tags for every language variant. ISO 639-1 codes, optional ISO 3166 region. All assembly runs locally.
ISO 639-1 lang optionally with ISO 3166 region — e.g. en, en-US, zh-Hant. Include x-default for the fallback.
<link rel="alternate" hreflang="en" href="https://example.com/"> <link rel="alternate" hreflang="es" href="https://example.com/es/"> <link rel="alternate" hreflang="fr" href="https://example.com/fr/"> <link rel="alternate" hreflang="x-default" href="https://example.com/">
How to declare hreflang
Hreflang annotations tell search engines which URL to serve which audience. Every page must reference every variant including itself.
- 01
List variants
Add a row for each language/region — both the language code and absolute URL.
Lookups reference the IANA registries (MIME, HTTP status, TLDs) bundled at build time — no live network calls, no rate limits, no leaked queries.
listIANAregistryofflinelivevariants · query4 · IANAen, es, fr, x-default
loaded · IANA bundlespec · ready - 02
Include x-default
Fallback for browsers that don't match any specific code — usually the English version.
Builders emit canonical syntax per the relevant RFC (9110 for HTTP, 5322 for headers, 3986 for URLs) so the output passes spec-compliant parsers.
defaultRFC 9110canonicalspec-compliantlivex-default · optionsset · livehreflang="x-default"
options applied · livecanonical - 03
Self-reference
Each variant page must list every variant — including itself.
Validation flags common pitfalls — uppercase header names, smart quotes inside
Content-Type, missing;charset=utf-8— before they bite production.selfvalidationlintpitfallsliveself-ref · looked upyes · ready<link … hreflang="es" …>
result · livevalidated - 04
Place in head
Drop the link tags into <head> on every variant — or send via HTTP Link header.
Copy writes the snippet directly into your clipboard; downloads emit the right extension and MIME so curl/httpie pick them up correctly.
shipclipboardMIME-correctblobcurl-readyok · copiedhead · done✓ Copied
shipped · ready to shipsuccess
Web-spec details that bite later
Idempotency saves retries
POST/PUT/DELETE should be safely retried. Use idempotency keys and return the same response on duplicate requests.
Match RFC 9110 status codes
Don’t invent codes. 422 for validation errors, 409 for conflicts, 429 for rate limits. Standard codes work with off-the-shelf clients.
Set <code>Cache-Control</code> deliberately
Default browser caching is conservative. Use max-age + stale-while-revalidate for hot endpoints.
Validate Open Graph in dev
OG tags break silently. Use a previewer like OG Generator + Facebook’s debugger before launch.
CORS is a server concern
The browser sends the preflight; the server decides. Wildcard origins disable credentials — be explicit.
MIME drives behaviour
Servers must send the right Content-Type. Browsers sniff but the spec says they shouldn’t — be explicit to avoid surprises.
When to declare hreflang
Internationalisation, regional SEO, multi-locale sites.
Multi-locale
Show es-MX vs es-ES variants to the right audience. Bundled from IANA registries at build time — no live network call, no rate limit, no leaked queries. The MIME, TLD, and status-code tables are baked in so the tool works offline once loaded.
spec-compliantccTLD/Subfolder
Annotate /en/ vs /es/ paths regardless of structure. Output is canonical per the relevant RFC (9110 for HTTP, 5322 for headers, 3986 for URLs), so spec-compliant parsers accept it as-is. Cross-browser and cross-library behaviour stays consistent.
offlineEditorial regions
Hreflang prevents duplicate-content penalties. Pairs with the curl-to-fetch converter for end-to-end test stubs — copy the curl from DevTools, paste, get an idiomatic fetch() body. Drop into Playwright/Vitest fixtures without manual translation.
IANA-backedCurrency switch
Different price/locale pages need self-referencing tags. Catches common pitfalls (uppercase header names, smart quotes inside Content-Type, missing ;charset=utf-8) before they bite production. Validation flags rather than auto-corrects so you stay in control.
RFC-alignedMigration
Verify variants link to each other after a re-platform. Validation runs as you type — copy only when the output is shaped correctly. The output drops directly into nginx, Apache, or CDN configs without re-formatting or re-quoting.
production-gradex-default fallback
Catch-all language for non-matching visitors. Same input plus same options always produces identical canonical output, so the tool is safe to embed in CI scripts that diff against expected configs.
curl-readyFrequently asked questions
Something missing?
Tell us what you need. We ship the top requests every two weeks.