.hl-row { display: grid; grid-template-columns: 1.5fr 1.5fr 3fr 40px 40px; gap: 10px; margin-bottom: 8px; align-items: center; } .hl-row .form-input, .hl-row .form-select { height: 40px; font-size: 13px; } .hl-row .hl-check { display: flex; align-items: center; justify-content: center; } .hl-row .btn-del { padding: 0; width: 38px; height: 38px; display: flex; align-items: center; justify-content: center; background: var(--bg3); border: 1px solid var(--border); border-radius: 8px; color: var(--muted); cursor: pointer; transition: all 0.15s; font-size: 16px; } .hl-row .btn-del:hover { background: rgba(248,81,73,0.08); border-color: rgba(248,81,73,0.3); color: var(--red); } .hl-row .preview-code { font-family: 'SF Mono', Menlo, Consolas, monospace; font-size: 11px; color: var(--muted); padding: 0 6px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .hl-row-head { display: grid; grid-template-columns: 1.5fr 1.5fr 3fr 40px 40px; gap: 10px; padding-bottom: 6px; border-bottom: 1px solid var(--border); margin-bottom: 10px; } .hl-row-head > div { font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.4px; color: var(--muted); } .hl-row-head .hl-center { text-align: center; } @media (max-width: 760px) { .hl-row { grid-template-columns: 1fr 1fr 30px; grid-template-rows: auto auto; } .hl-row .form-input.url-input { grid-column: 1 / 3; grid-row: 2; } .hl-row .btn-del { grid-column: 3; grid-row: 1 / 3; height: 100%; } .hl-row .hl-check { display: none; } .hl-row-head { display: none; } } .output-tabs { display: flex; gap: 6px; border-bottom: 1px solid var(--border); margin-bottom: 12px; } .output-tab { padding: 9px 14px; font-size: 13px; font-weight: 700; color: var(--muted); border-bottom: 2px solid transparent; cursor: pointer; } .output-tab.on { color: var(--purple); border-bottom-color: var(--purple); } .code-out { background: #0d1117; color: #e6edf3; padding: 14px 18px; border-radius: 10px; font-size: 13px; line-height: 1.6; overflow-x: auto; font-family: 'SF Mono', Menlo, Consolas, monospace; max-height: 480px; overflow-y: auto; white-space: pre; } .validation-list { margin-top: 10px; } .validation-item { padding: 8px 12px; border-radius: 6px; font-size: 13px; margin-bottom: 5px; } .validation-item.error { background: rgba(248,81,73,0.08); color: #8b1d1a; border-left: 3px solid var(--red); } .validation-item.warn { background: rgba(234,179,8,0.08); color: #713f12; border-left: 3px solid var(--yellow); } .validation-item.ok { background: rgba(63,185,80,0.08); color: #14532d; border-left: 3px solid var(--green); } Skip to content
RankCause

Hreflang Tag Generator

Build a valid hreflang cluster for any number of language + region combinations. ISO 639-1 language codes, ISO 3166-1 alpha-2 regions, automatic x-default, return-link validation, and both HTML <link> + XML sitemap output.


Your language + region variants
Language
Region (optional)
URL for this variant
x-default
Hreflang rules we enforce for you
• Self-referencing tag. Every page must include itself in its hreflang set — we add it automatically.
• Return links. If page A lists page B, page B must list page A. Otherwise Google silently ignores both.
• Language-only vs language-region. en (language only) is valid; en-US targets US English. Region without language (-US alone) is invalid.
• x-default. Pick the fallback URL for users whose language/region doesn't match any variant. Google strongly prefers this.
• Duplicate locales. Two en-US URLs = Google throws out the whole cluster. We flag duplicates.
These tools are free and need no account. They check one page at a time. RankCause itself does the thing they can’t: it watches your pages over time and tests whether a change you made actually moved a ranking.
Start free All free tools