How to Use Hreflang Tags: Complete Guide + Free Tool

If your site serves more than one language or country, hreflang tags tell search engines which URL belongs to which audience. A valid cluster helps Google show the right version to each audience; a broken one leaves Google swapping between duplicates or ranking the wrong version. This guide covers the syntax, return tags, x-default and the mistakes that silently invalidate an annotation set, plus a free hreflang tag generator outputting valid tags and an XML sitemap alternative.

What Are Hreflang Tags?

Hreflang is an attribute on the HTML <link> element that marks a group of URLs as localized versions of the same content:

<link rel="alternate" hreflang="de-DE" href="https://example.com/de/" />

The tag goes in the <head> of every language version.

Two facts matter: hreflang is a hint, not a directive — a valid set helps Google show the right version, it does not force one. And Google does not use hreflang (or the lang attribute) to detect a page’s language; it determines that algorithmically.

Hreflang Syntax: Language, Script, and Region Codes

The value follows a fixed order — language, optional script, optional region — from ISO 639-1, ISO 15924 and ISO 3166-1 Alpha 2. Codes are case-insensitive; convention is lowercase language, uppercase region.

Valid codes:

  • en-GB — English for UK users
  • zh-Hans — Chinese, Simplified script

The traps, called out in Google’s documentation:

  • en-UK — invalid: UK is not an officially assigned ISO 3166-1 element, so Google ignores it (same for EU and UN); use en-GB.
  • gb-en — wrong order: the language always comes first.
  • es-419 — numeric UN region codes are unsupported; only ISO 3166-1 Alpha 2.
  • be as “Belgium” — a region alone is invalid, and be is the Belarusian language; use nl-BE, fr-BE or de-BE.

Google’s guidance for multi-locale languages: if you target several locales of one language (en-IE, en-CA, en-AU), provide a generic en catch-all for everyone else. Google calls this “a good idea,” not a requirement, and the catch-all may share a URL with one of the regional versions — en can point at the same URL as en-IE.

Return Tags: Why Every Version Must Point Back

Return tags are the reciprocity rule. If page X links to page Y, Y must link back to X — and every version must also list itself. Google’s rule: if two pages don’t both point to each other, the annotations are ignored. The commonly given rationale: without return links, anyone could declare their page an alternate of yours. On a site with English and German versions, the <head> of both pages contains the same set of tags:

<link rel="alternate" hreflang="en" href="https://example.com/" />
<link rel="alternate" hreflang="de-DE" href="https://example.com/de/" />

Both pages carry these two lines; omit the set on any version and the cluster starts to break. Google’s documented relaxation: when a complete bidirectional set becomes hard to maintain, omit some languages on some pages — pairs that still point at each other keep working. The stated priority: link newly added language versions bidirectionally to your site’s originating (dominant) language — a site that grew from French .fr pages wires new Spanish versions back to the French pages first, to each other second.

What Is x-default and When Do You Need It?

x-default is a reserved value naming the URL to serve when none of your listed languages match the user’s browser settings — one extra link tag, no language code:

<link rel="alternate" hreflang="en-GB" href="https://example.com/uk/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/select-language/" />

x-default is optional but recommended — designed for language-selector pages and auto-redirecting homepages. Pointing it at your default language version is the other standard pattern, and what the generator expects.

Three Ways to Implement Hreflang Tags

Google treats three methods as exactly equivalent; its documentation says using all three at once brings “no benefit in Search” and is harder to manage than picking one.

1. HTML link tags in the head

For small sites: put the full set inside a well-formed <head> on every version. Two Google rules: the tags must actually be inside the head (validate rendered HTML if your CMS rewrites markup), and don’t merge hreflang with attributes like media in one tag.

2. XML sitemap annotations

At scale, keep hreflang out of the HTML: add an xhtml:link child for every version, including itself, inside each <url> entry, alongside <loc>:

<url>
  <loc>https://example.com/</loc>
  <xhtml:link rel="alternate" hreflang="en" href="https://example.com/" />
  <xhtml:link rel="alternate" hreflang="de-DE" href="https://example.com/de/" />
</url>

Declare the xmlns:xhtml="http://www.w3.org/1999/xhtml" namespace and repeat a <url> block for every version. Child order doesn’t matter, and Google confirms the xhtml:link children don’t count toward the sitemap URL limit — the protocol’s 50,000-URL cap counts <url> entries.

3. HTTP Link headers

For non-HTML files like PDFs, set a Link header where the file is served — in nginx, an add_header rule on its location:

add_header Link '<https://example.com/file.pdf>; rel="alternate"; hreflang="en",
                <https://example.com/de/file.pdf>; rel="alternate"; hreflang="de"';

Apache’s Header set or a CDN response-header rule does the same.

How to Generate Hreflang Tags with the Free Tool

The hreflang tag generator builds the set and validates as you type — no signup, runs in your browser.

Step 1: Build the complete set

Add one row per version — language code left, absolute URL right — including a row where the page you are annotating points at itself. The self-reference is required, and this identical set gets pasted into every version’s head (Step 4) — build it once, complete. Codes are validated live against the language-script-region pattern — en, pt-BR and zh-Hans pass, gb-en is flagged — and case is normalized (en-gb becomes en-GB).

Step 2: Set the x-default URL

Enter the fallback URL — your default language version or selector page — or leave it empty to skip x-default. A warning fires when the URL falls outside the set: normal and correct for a selector page, which sits outside the language cluster by design; without one, it usually means a typo.

Step 3: Generate and review the checks

Click Generate hreflang tags. The checklist flags duplicate language codes as errors, rejects non-absolute URLs, and warns about self-references and single-entry sets. A single entry usually means the other versions are missing — add them, since hreflang pays off only when two or more versions reference each other; a page with no equivalents needs no hreflang at all. Fix anything red, regenerate.

Step 4: Copy the output in the format you need

Two tabs hold the output. HTML link tags is ready for your <head> — paste the identical block into every version. XML sitemap emits a <url> block, not a complete sitemap: paste it inside a full sitemap’s <urlset> element (namespaces above), for instance the base file from the XML sitemap generator. Copy code and Download file move the output; the meta tag generator covers the rest of a multilingual head.

Common Hreflang Mistakes (and How to Fix Them)

Mistake 1: Omitting the self-referencing entry

The most common error: every version listed except the page itself. Google’s rule is the opposite — every version must list itself plus all others. Fix: add a row for the current page.

Mistake 2: One-way annotations (missing return tags)

Your German page lists the English page, but the reverse was never added — Google ignores one-way pairs. Fix: the identical set on every version; re-check both sides after any launch or URL change.

Mistake 3: Invalid or misordered codes

en-UK, es-419, gb-en or a region alone — Google ignores the invalid region or malformed code, quietly disabling that part of the cluster. Fix: language first (ISO 639-1), region second (ISO 3166-1 Alpha 2); the generator validates codes live.

Mistake 4: Hreflang fighting your canonical

Each version should carry a self-referencing canonical. If the German page canonicals to the English one, you call it a duplicate at the exact moment hreflang calls it an equal alternate — conflicting signals that can stop the set working. Fix: self-canonicals everywhere; let hreflang group.

Mistake 5: Redirecting or relative URLs in the set

Alternate URLs must be fully qualified — https://example.com/de/, never /de/ or //example.com/de/ — and should return a 200, not a redirect chain: a de-DE entry that 301s elsewhere forces Google to resolve the chain first. Run URLs through the redirect chain checker at audit time; confirm the tags sit inside a well-formed head in rendered source.

Frequently Asked Questions

Do hreflang tags improve rankings?

Not directly — hreflang is a routing signal that helps Google serve the right version, not a ranking boost. The gain is indirect but real: fewer duplicate versions competing, and users landing in their own language.

Do hreflang tags have to go in the head?

Only with the HTML method — there they must sit inside a well-formed head; sitemap and HTTP header methods are equivalent alternatives when you cannot control head markup.

Is x-default mandatory?

No. It is optional and works best on language-selector pages and auto-redirecting homepages. Most other sites point it at the default language version, a safe pattern.

Can hreflang URLs live on different domains?

Yes — alternate URLs need not share a domain, which is why hreflang is standard for ccTLDs like example.de and example.co.jp. A ccTLD or country subdomain gives Google geo hints, but not which URLs are alternates of each other: map every version explicitly.

How do I check my hreflang tags, and how long do fixes take?

View the rendered source of each version and confirm the full set, including the self-reference, sits inside the head. Third-party hreflang testers validate live pages (Google names Aleyda Solis’s generator and the Merkle hreflang tester), and crawlers scale the check site-wide; Search Console’s International Targeting report was retired in 2022, so there is no dedicated hreflang error report there. Fixes land as every URL in the cluster is recrawled — typically days to weeks.

Can I use hreflang for same-language pages like en-US and en-GB?

Yes — Google’s own use cases include regional variation in one language: English content targeted at the US, GB and Ireland. Translation is not required; the tags tell Google which regional variant to serve — the difference can be currency or shipping details alone.

What happens if one version in the set is noindexed or blocked?

Every URL in a cluster should be crawlable and indexable: a noindexed or blocked page cannot be shown as an alternate, and the dead entry weakens the pairing for the rest. Lift the block, or drop that version from every page’s set.

Must the hreflang URL match the canonical URL exactly?

It should: each entry names the URL that version’s canonical points to — same protocol, host and trailing slash. Entries must be fully-qualified URLs, and a non-canonical target (tracking parameter, stray trailing slash) forces Google to resolve duplicates before pairing. Exact-match URLs plus self-canonicals keep the cluster clean.

如何使用 hreflang 标签:完整指南 + 免费工具

如果你的网站面向多种语言或多个国家/地区,hreflang 标签会告诉搜索引擎哪个 URL 对应哪类受众。一组有效的标签能帮助 Google 向不同受众展示正确的版本;一旦出错,Google 就可能在重复页面之间来回切换,甚至给错误的版本排名。本指南讲解 hreflang 的语法、返回标签(return tags)、x-default,以及那些会让整组注解悄悄失效的错误,并附上一款免费的 hreflang 标签生成器,可输出有效标签以及 XML sitemap 替代方案。

什么是 hreflang 标签?

hreflang 是 HTML <link> 元素上的一个属性,用于将一组 URL 标记为同一内容的不同本地化版本:

<link rel="alternate" hreflang="de-DE" href="https://example.com/de/" />

这个标签要放在每个语言版本的 <head> 中。

有两点很关键:hreflang 是一种提示(hint)而非指令(directive)——一组有效的标签能帮助 Google 展示正确版本,但无法强制它这么做。另外,Google 并不依靠 hreflang(或 lang 属性)来识别页面语言,而是通过算法自行判定。

hreflang 语法:语言、文字与地区代码

其取值遵循固定顺序——语言、可选的文字(script)、可选的地区(region)——分别取自 ISO 639-1、ISO 15924 和 ISO 3166-1 Alpha 2。代码不区分大小写;惯例是语言用小写、地区用大写。

有效代码示例:

  • en-GB — 面向英国用户的英语
  • zh-Hans — 中文,简体文字

以下是 Google 文档明确指出的陷阱:

  • en-UK — 无效:UK 不是正式分配的 ISO 3166-1 代码,因此 Google 会忽略它(EU 和 UN 同理);请使用 en-GB。
  • gb-en — 顺序错误:语言代码永远排在最前面。
  • es-419 — 不支持联合国数字地区代码,只支持 ISO 3166-1 Alpha 2。
  • 用 be 表示”比利时”——只写地区是无效的,而且 be 是白俄罗斯语的语言代码;应使用 nl-BE、fr-BE 或 de-BE。

对于同一语言的多个语言区域(locale),Google 的建议是:如果你面向同一种语言的多个区域(en-IE、en-CA、en-AU),就再提供一个通用的 en 兜底版本给其余所有用户。Google 称这”是个好主意”,但并非硬性要求;而且这个兜底版本可以与某个区域版本共用同一个 URL——en 可以与 en-IE 指向同一个 URL。

返回标签(Return Tags):为什么每个版本都必须互相指向

返回标签是一条互惠规则:如果页面 X 链接到页面 Y,Y 就必须链接回 X——而且每个版本还必须列出自身。Google 的规则是:两个页面若不互相指向,这些注解就会被忽略。业界常给出的理由是:如果没有返回链接,任何人都可以把自己的页面声明为你页面的备用版本。对于一个同时提供英语和德语版本的网站,两个页面的 <head> 中都包含同一组标签:

<link rel="alternate" hreflang="en" href="https://example.com/" />
<link rel="alternate" hreflang="de-DE" href="https://example.com/de/" />

两个页面都带有这两行;任何一个版本漏掉这组标签,整个集群就会开始失效。Google 文档也给出了一项放宽:当维护一套完整的双向标注变得困难时,可以在部分页面上省略部分语言——仍然互相指向的配对会继续生效。Google 明确给出的优先级是:把新增的语言版本与网站的源起(主导)语言双向关联——一个从法语 .fr 页面起家的网站,应先把新的西班牙语版本与法语页面互链,其次再让新版本之间互链。

什么是 x-default?什么时候需要它?

x-default 是一个保留值,用于指定当所列语言都与用户浏览器设置不匹配时应展示的 URL——只需额外加一个 link 标签,不带语言代码:

<link rel="alternate" hreflang="en-GB" href="https://example.com/uk/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/select-language/" />

x-default 是可选项,但值得使用——它专为语言选择器页面和自动跳转的首页而设计。让它指向默认语言版本是另一种标准做法,也是本站生成器的预设。

实现 hreflang 标签的三种方法

Google 认为这三种方法完全等效;其文档指出,三种同时使用对搜索”没有任何好处”,而且比只用一种更难管理。

1. 放在 head 中的 HTML link 标签

适合小型网站:在每个版本的、格式规范的 <head> 中放入完整的一组标签。Google 有两条规则:标签必须真正位于 head 内部(如果你的 CMS 会改写标记,请以渲染后的 HTML 为准进行校验);不要把 hreflang 与 media 等属性合并进同一个标签。

2. XML sitemap 标注

规模较大时,建议不要把 hreflang 写进 HTML:在每个 <url> 条目内、<loc> 旁边,为每个版本(包括自身)各添加一个 xhtml:link 子元素:

<url>
  <loc>https://example.com/</loc>
  <xhtml:link rel="alternate" hreflang="en" href="https://example.com/" />
  <xhtml:link rel="alternate" hreflang="de-DE" href="https://example.com/de/" />
</url>

记得声明 xmlns:xhtml="http://www.w3.org/1999/xhtml" 命名空间,并为每个版本重复一个 <url> 块。子元素的顺序无关紧要;Google 也确认 xhtml:link 子元素不计入 sitemap 的 URL 数量上限——协议规定的 50,000 条 URL 上限只统计 <url> 条目。

3. HTTP Link 响应头

对于 PDF 等非 HTML 文件,在提供文件的位置设置 Link 响应头——以 nginx 为例,在该文件的 location 上加一条 add_header 规则:

add_header Link '<https://example.com/file.pdf>; rel="alternate"; hreflang="en",
                <https://example.com/de/file.pdf>; rel="alternate"; hreflang="de"';

Apache 的 Header set 或 CDN 的响应头规则也能实现同样效果。

如何用免费工具生成 hreflang 标签

hreflang 标签生成器会一边输入一边构建并校验标签组——无需注册,直接在浏览器中运行。

第 1 步:构建完整的标签组

每个版本添加一行——左侧填语言代码,右侧填绝对 URL——其中必须包含一行,让正在标注的页面指向它自己。自引用是必需项,而且这组完全相同的标签会被粘贴到每个版本的 head 中(见第 4 步)——所以请一次性把它构建完整。代码会按”语言-文字-地区”格式实时校验——en、pt-BR 和 zh-Hans 可以通过,gb-en 会被标出——大小写也会自动规范化(en-gb 会变成 en-GB)。

第 2 步:设置 x-default URL

输入兜底 URL——即你的默认语言版本或语言选择器页面——也可以留空以跳过 x-default。当该 URL 不在标签组内时会触发警告:如果它是选择器页面,这正常且正确,因为选择器页面本来就设计在语言集群之外;若并非选择器页面,则通常是 URL 拼写错误。

第 3 步:生成并查看检查结果

点击 Generate hreflang tags(生成 hreflang 标签)按钮。检查清单会把重复的语言代码标为错误,拒绝非绝对 URL,并就自引用和单条目的标签组发出警告。只有一条记录通常意味着其他版本还没加上——请补全它们,因为 hreflang 只有在两个或更多版本互相引用时才有意义;没有对应版本的页面根本不需要 hreflang。修正所有标红项,然后重新生成。

第 4 步:按所需格式复制输出

输出分为两个标签页。HTML link tags 可直接用于你的 <head>——把这份相同的代码块粘贴到每个版本里。XML sitemap 输出的是一个 <url> 块,而不是完整的 sitemap:请把它粘贴进完整 sitemap 的 <urlset> 元素内(命名空间见上文),例如 XML sitemap 生成器生成的基础文件。Copy code(复制代码)和 Download file(下载文件)用来导出结果;多语言 head 的其余部分可交给 meta 标签生成器。

hreflang 常见错误(及修复方法)

错误 1:漏掉自引用条目

最常见的错误:列出了所有版本,唯独漏了页面自己。Google 的规则恰恰相反——每个版本都必须列出自己以及其他所有版本。修复方法:为当前页面添加一行。

错误 2:单向标注(缺少返回标签)

德语页面列出了英语页面,反向链接却从未添加——Google 会忽略单向配对。修复方法:在每个版本上放置同一组标签;每次上线或更改 URL 后,重新检查两侧。

错误 3:无效或顺序错误的代码

en-UK、es-419、gb-en 或单独的地区代码——Google 会忽略无效地区或格式错误的代码,悄悄让集群的这一部分失效。修复方法:语言在前(ISO 639-1),地区在后(ISO 3166-1 Alpha 2);生成器会实时校验代码。

错误 4:hreflang 与 canonical 相互冲突

每个版本都应带有指向自身的 canonical。如果德语页面的 canonical 指向英语页面,就等于在 hreflang 宣称两者是平等备用版本的同时,又宣称其中一个是重复页面——两种信号相互冲突,可能让整组标签失效。修复方法:所有页面一律使用自指向 canonical,分组交给 hreflang。

错误 5:标签组中出现重定向或相对 URL

备用 URL 必须是完整限定(fully qualified)的——形如 https://example.com/de/,绝不能是 /de/ 或 //example.com/de/——而且应返回 200,而不是重定向链:如果 de-DE 条目 301 到了别处,Google 就得先解析这条重定向链。审计时用 重定向链检查器跑一遍所有 URL;并确认在渲染后的源代码中,标签位于格式规范的 head 之内。

常见问题

hreflang 标签能提升排名吗?

不能直接提升——hreflang 是一种路由信号,帮助 Google 展示正确的版本,而不是排名加分项。收益是间接的,但真实存在:互相竞争的重复版本更少,用户也能直接落到自己语言的页面上。

hreflang 标签必须放在 head 里吗?

只有采用 HTML 方法时才需要——此时它们必须位于格式规范的 head 内;当你无法控制 head 标记时,sitemap 和 HTTP 响应头方法是等效的替代方案。

x-default 是必需的吗?

不是。它是可选项,在语言选择器页面和自动跳转的首页上效果最佳。大多数其他网站让它指向默认语言版本,这是一种稳妥的做法。

hreflang 的 URL 可以分属不同域名吗?

可以——备用 URL 不必共用一个域名,这正是 hreflang 成为 example.de、example.co.jp 这类 ccTLD 标配的原因。ccTLD 或国家子域名能给 Google 提供地理提示,却无法说明哪些 URL 互为备用版本:请把每个版本都明确标注出来。

如何检查 hreflang 标签?修复需要多长时间生效?

查看每个版本渲染后的源代码,确认包括自引用在内的完整标签组都位于 head 内。第三方 hreflang 检测工具可以校验在线页面(Google 点名了 Aleyda Solis 的生成器和 Merkle 的 hreflang 检测工具),爬虫则能把检查扩展到整站;Search Console 的 International Targeting(国际定位)报告已于 2022 年下线,因此那里不再有专门的 hreflang 错误报告。修复会随着集群中每个 URL 被重新抓取而逐步生效——通常需要几天到几周。

可以为 en-US 和 en-GB 这类同语言页面使用 hreflang 吗?

可以——Google 自己举的用例就包括同一种语言的区域变体:面向美国、英国和爱尔兰的英语内容。翻译并非必需;这些标签只是告诉 Google 该展示哪个区域变体——有时两者的差异仅仅在货币或配送信息上。

如果标签组中某个版本被设置了 noindex 或被屏蔽,会怎样?

集群中的每个 URL 都应可抓取、可索引:设置了 noindex 或被屏蔽的页面无法作为备用版本展示,而且这条死条目会削弱其余版本的配对关系。要么解除屏蔽,要么把它从每个页面的标签组中删掉。

hreflang 的 URL 必须与 canonical URL 完全一致吗?

应当一致:每个条目填写的都是该版本 canonical 所指向的 URL——协议、主机名和末尾斜杠都要相同。条目必须是完整限定的 URL,非规范目标(如跟踪参数、多余的末尾斜杠)会迫使 Google 先解析重复页面再进行配对。完全一致的 URL 加上自指向 canonical,才能让集群保持干净。

hreflangタグの使い方:完全ガイドと無料ツール

サイトが複数の言語や国に向けてコンテンツを提供しているなら、hreflangタグは、どのURLがどの読者向けのものかを検索エンジンに伝える役割を持ちます。正しく機能するクラスターは、Googleが各読者に適切なバージョンを表示する助けになります。壊れたクラスターでは、Googleが重複ページの間を行き来したり、誤ったバージョンをランク付けしたりする事態になりかねません。このガイドでは、構文、リターンタグ(相互参照)、x-default、そしてアノテーションセットを知らぬ間に無効化するミスを解説します。加えて、有効なタグを出力する無料のhreflangタグジェネレーターと、XMLサイトマップによる代替方法も紹介します。

hreflangタグとは何か?

hreflangは、HTMLの<link>要素に指定する属性で、一連のURLが同じコンテンツのローカライズ版であることを示すものです。

<link rel="alternate" hreflang="de-DE" href="https://example.com/de/" />

このタグは、すべての言語バージョンの<head>内に記述します。

押さえておくべき事実が2つあります。1つは、hreflangはヒントであって指令(ディレクティブ)ではないということ——有効なセットはGoogleが適切なバージョンを表示する助けにはなりますが、強制はしません。もう1つは、Googleはページの言語の検出にhreflang(やlang属性)を使わないということです。言語の判定はアルゴリズムで行われます。

hreflangの構文:言語・文字・地域コード

値は「言語、任意の文字(スクリプト)、任意の地域」という固定の順序に従い、それぞれISO 639-1、ISO 15924、ISO 3166-1 Alpha 2から採ります。コードの大文字・小文字は区別されませんが、慣例では言語を小文字、地域を大文字で書きます。

有効なコードの例:

  • en-GB——英国ユーザー向けの英語
  • zh-Hans——中国語(簡体字)

Googleのドキュメントが指摘する落とし穴:

  • en-UK——無効。UKはISO 3166-1で正式に割り当てられた要素ではないため、Googleはこれを無視します(EUやUNも同様)。en-GBを使いましょう。
  • gb-en——順序の誤り。言語は必ず先に来ます。
  • es-419——数字のUN地域コードには未対応。有効なのはISO 3166-1 Alpha 2だけです。
  • beを「ベルギー」の意味で使うケース——地域だけの指定は無効で、しかもbeはベラルーシ語という言語コードです。nl-BE、fr-BE、de-BEを使いましょう。

1つの言語の複数ロケールに関するGoogleのガイダンスはこうです。1つの言語の複数のロケール(en-IE、en-CA、en-AUなど)をターゲットにするなら、それ以外の全員向けに汎用のenを包括的に用意すること。Googleはこれを「良いアイデア」と呼んでおり、必須要件ではありません。また、この包括用エントリは地域版のいずれかとURLを共有してかまいません——enはen-IEと同じURLを指していても大丈夫です。

リターンタグ:すべてのバージョンが参照し返さなければならない理由

リターンタグとは相互参照のルールです。ページXがページYにリンクしているなら、YはXへリンクし返す必要があります——さらに、各バージョンは自分自身もリストに入れなければなりません。Googleのルールでは、2つのページが互いを指し合っていなければ、そのアノテーションは無視されます。よく挙げられる根拠は、返しのリンクがなければ、誰でも自分のページをあなたのページの代替版だと主張できてしまうというものです。英語版とドイツ語版を持つサイトでは、両ページの<head>に同じタグセットが入ります。

<link rel="alternate" hreflang="en" href="https://example.com/" />
<link rel="alternate" hreflang="de-DE" href="https://example.com/de/" />

どちらのページにもこの2行が入ります。どれか1つのバージョンでセットを省くと、クラスターは崩れ始めます。Googleのドキュメントには緩和策も記載されています。完全な双方向セットの維持が難しくなったら、一部のページで一部の言語を省略してよい——その場合も、互いを指し合っているペアは機能し続けます。優先順位に関するGoogleの方針は、新しく追加する言語バージョンは、サイトの起点となった(主要な)言語と双方向にリンクすることです。フランス語の.frページから成長したサイトなら、新しいスペイン語版はまずフランス語ページとリンクを結び、次に互い同士を結びます。

x-defaultとは何か、いつ必要か?

x-defaultは予約値で、リストした言語のどれもユーザーのブラウザ設定と一致しないときに提供するURLを指定します——linkタグを1つ追加するだけで、言語コードは付きません。

<link rel="alternate" hreflang="en-GB" href="https://example.com/uk/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/select-language/" />

x-defaultは任意ですが、設定が推奨されます——言語選択ページや自動リダイレクトするホームページ向けに設計されたものです。デフォルト言語版を指すのがもう1つの定番パターンで、ジェネレーターもこちらを想定しています。

hreflangタグを実装する3つの方法

Googleはこの3つの方法をまったく同等に扱います。ドキュメントには、3つすべてを同時に使っても「検索面でのメリットはなく」、1つに絞るより管理が難しくなるだけだと記載されています。

1. head内のHTML linkタグ

小規模サイト向けの方法です。すべてのバージョンの整形式な<head>内に、完全なセットを配置します。Googleのルールが2つあります。1つは、タグが必ずheadの中に実在すること(CMSがマークアップを書き換える場合は、レンダリング後のHTMLを検証してください)。もう1つは、hreflangをmediaなどの属性と1つのタグに併記しないことです。

2. XMLサイトマップによるアノテーション

規模が大きくなったら、hreflangをHTMLの外に出しましょう。各<url>エントリの中に、<loc>と並べて、自分自身を含むすべてのバージョンぶんのxhtml:link子要素を追加します。

<url>
  <loc>https://example.com/</loc>
  <xhtml:link rel="alternate" hreflang="en" href="https://example.com/" />
  <xhtml:link rel="alternate" hreflang="de-DE" href="https://example.com/de/" />
</url>

xmlns:xhtml="http://www.w3.org/1999/xhtml"名前空間を宣言し、バージョンごとに<url>ブロックを繰り返します。子要素の順序は問わず、Googleはxhtml:linkの子要素がサイトマップのURL上限に数えられないことも明言しています——プロトコルの50,000 URL上限が数えるのは<url>エントリだけだからです。

3. HTTP Linkヘッダー

PDFなどのHTML以外のファイルには、ファイルを配信する箇所でLinkヘッダーを設定します——nginxなら、対象のロケーションへのadd_headerルールで書きます。

add_header Link '<https://example.com/file.pdf>; rel="alternate"; hreflang="en",
                <https://example.com/de/file.pdf>; rel="alternate"; hreflang="de"';

ApacheのHeader setやCDNのレスポンスヘッダールールでも同じことができます。

無料ツールでhreflangタグを生成する方法

hreflangタグジェネレーターはセットを組み立て、入力しながら検証を行います——登録不要で、ブラウザ内で動作します。

ステップ1:完全なセットを組み立てる

バージョンごとに1行追加します——左に言語コード、右に絶対URL——注釈を付けるページ自身を指す行も含めます。自己参照は必須で、この同一のセットをすべてのバージョンのheadに貼り付けます(ステップ4)。つまり、一度だけ、完全な形で作ります。コードは「言語 – 文字 – 地域」のパターンに対してリアルタイムに検証され、en、pt-BR、zh-Hansは通り、gb-enにはフラグが立ちます。大文字・小文字は正規化され、en-gbはen-GBに変換されます。

ステップ2:x-defaultのURLを設定する

フォールバックURL(デフォルト言語版または選択ページ)を入力するか、空のままにしてx-defaultを省略します。URLがセットの外を指していると警告が出ます。選択ページであれば、言語クラスターの外に置くのが設計どおりですから、正常かつ正しい警告です。選択ページでないのに警告が出るなら、たいていは入力ミスです。

ステップ3:生成してチェック結果を確認する

Generate hreflang tagsをクリックします。チェックリストは、重複した言語コードをエラーとして指摘し、絶対URLでないURLを拒否し、自己参照と1エントリだけのセットについて警告を出します。1エントリだけというのは、たいてい他のバージョンの入れ忘れです——hreflangは2つ以上のバージョンが互いを参照してはじめて価値が出るので、追加しましょう。対応する版が存在しないページには、そもそもhreflangは不要です。赤い項目を修正したら、再生成します。

ステップ4:必要な形式で出力をコピーする

出力は2つのタブに分かれています。HTML link tagsはそのまま<head>に使えます——同一のブロックをすべてのバージョンに貼り付けてください。XML sitemapは完全なサイトマップではなく<url>ブロックを出力します。完全なサイトマップの<urlset>要素の中(名前空間は上記のとおり)に貼り付けてください。XMLサイトマップジェネレーターで作ったベースファイルなどが使えます。Copy codeとDownload fileで出力を移します。多言語headの残りの部分は、メタタグジェネレーターでまかなえます。

よくあるhreflangのミス(と修正方法)

ミス1:自己参照エントリの入れ忘れ

最も多いエラーです。ページ自身を除くすべてのバージョンがリストされている状態です。Googleのルールは逆で、各バージョンは自分自身と他のすべてをリストしなければなりません。修正方法:現在のページの行を追加します。

ミス2:片方向のアノテーション(リターンタグの欠落)

ドイツ語ページが英語ページをリストしているのに、逆方向は一度も追加されていない——Googleは片方向のペアを無視します。修正方法:すべてのバージョンに同一のセットを置くこと。リリースやURL変更のあとは、両側を再確認します。

ミス3:無効または順序の誤ったコード

en-UK、es-419、gb-en、地域だけの指定——Googleは無効な地域や不正な形式のコードを無視し、クラスターのその部分を静かに無効化します。修正方法:言語を先に(ISO 639-1)、地域を後に(ISO 3166-1 Alpha 2)。ジェネレーターはコードをリアルタイムに検証します。

ミス4:hreflangがcanonicalと衝突する

各バージョンは自己参照のcanonicalを持つべきです。ドイツ語ページが英語ページにcanonicalを向けていると、hreflangがそのページを「対等な代替版」と呼ぶまさにその瞬間に、canonicalが「重複」と宣言することになります——セットの機能を止めかねない、矛盾したシグナルです。修正方法:どこも自己canonicalにして、グループ化はhreflangに任せます。

ミス5:セット内のリダイレクトURL・相対URL

代替URLは完全修飾でなければなりません——https://example.com/de/はOK、/de/や//example.com/de/は不可——そして、リダイレクトチェーンではなく200を返すべきです。de-DEエントリがどこかへ301リダイレクトしていると、Googleはまずそのチェーンを解決するよう強制されます。監査のときにはリダイレクトチェーンチェッカーにURLを通し、レンダリング後のソースでタグが整形式のheadの中に載っていることを確認します。

よくある質問

hreflangタグはランキングを改善しますか?

直接は改善しません——hreflangは、Googleが適切なバージョンを提供するのを助けるルーティングシグナルであって、ランキングの押し上げではありません。効果は間接的ですが本物です。競合する重複バージョンが減り、ユーザーが自分の言語のページにたどり着くようになります。

hreflangタグはheadに入れなければなりませんか?

HTMLメソッドを使う場合だけです。この方法では、タグは整形式のheadの中に置かなければなりません。headのマークアップを制御できない場合は、サイトマップとHTTPヘッダーのメソッドが同等の代替手段になります。

x-defaultは必須ですか?

いいえ。任意の項目で、言語選択ページや自動リダイレクトするホームページで最も効果を発揮します。他の大半のサイトはデフォルト言語版を指しており、これも安全なパターンです。

hreflang URLは異なるドメインに置けますか?

はい。代替URLはドメインを共有する必要がなく、だからこそhreflangはexample.deやexample.co.jpのようなccTLDで標準的な手法です。ccTLDや国サブドメインはGoogleに地理的なヒントを与えますが、どのURL同士が互いの代替版かまでは教えません。すべてのバージョンを明示的にマッピングしましょう。

hreflangタグを確認する方法と、修正の反映までの期間は?

各バージョンのレンダリング後のソースを確認し、自己参照を含む完全なセットがheadの中に載っていることを確かめます。サードパーティのhreflangテスターはライブページを検証します(GoogleはAleyda SolisのジェネレーターとMerkleのhreflangテスターを挙げています)。クローラーを使えば、このチェックをサイト全体に拡大できます。Search Consoleのインターナショナルターゲティングレポートは2022年に廃止されたため、そこに専用のhreflangエラーレポートはもうありません。修正は、クラスター内の各URLが再クロールされるたびに反映されていきます——通常は数日から数週間です。

en-USとen-GBのような同一言語ページにhreflangを使えますか?

はい。1つの言語内の地域差は、Google自身のユースケースに含まれています。米国、英国、アイルランドに向けた英語コンテンツがその例です。翻訳は必須ではなく、タグはGoogleにどの地域バリアントを提供すべきかを伝えます——違いが通貨や配送情報だけということもあります。

セット内の1つのバージョンがnoindexまたはブロックされているとどうなりますか?

クラスター内のすべてのURLは、クロール可能かつインデックス可能であるべきです。noindexまたはブロックされたページは代替版として表示できず、死んだエントリは残りのバージョンのペアリングを弱めます。ブロックを解除するか、すべてのページのセットからそのバージョンを外しましょう。

hreflang URLはcanonical URLと完全に一致しなければなりませんか?

一致させるべきです。各エントリが指すのは、そのバージョンのcanonicalが指すURL——同じプロトコル、ホスト、末尾のスラッシュです。エントリは完全修飾URLでなければならず、非正規のターゲット(トラッキングパラメータ、うっかり混入した末尾のスラッシュ)は、Googleにペアリングの前に重複の解決を強制します。完全一致のURLと自己canonicalの組み合わせが、クラスターをきれいに保ちます。

hreflang 태그 사용법: 완벽 가이드 + 무료 도구

사이트가 두 개 이상의 언어나 국가를 대상으로 운영된다면, hreflang 태그는 검색 엔진에 어떤 URL이 어떤 독자층용인지 알려줍니다. 유효한 클러스터는 Google이 각 독자층에 알맞은 버전을 보여 주도록 돕지만, 깨진 클러스터는 Google이 중복 페이지 사이를 오가거나 엉뚱한 버전을 노출하게 만듭니다. 이 가이드에서는 문법, 리턴 태그, x-default, 그리고 어노테이션 세트를 소리 없이 무효화하는 실수들을 다루고, 유효한 태그와 XML 사이트맵 대안 형식까지 출력해 주는 무료 hreflang 태그 생성기를 함께 소개합니다.

hreflang 태그란 무엇인가요?

hreflang은 HTML <link> 요소의 속성으로, URL 한 그룹을 같은 콘텐츠의 현지화 버전으로 표시합니다:

<link rel="alternate" hreflang="de-DE" href="https://example.com/de/" />

이 태그는 모든 언어 버전의 <head> 안에 들어갑니다.

중요한 사실이 두 가지 있습니다. hreflang은 지시(directive)가 아니라 힌트입니다 — 유효한 세트는 Google이 올바른 버전을 보여 주는 데 도움을 줄 뿐, 특정 버전을 강제하지 않습니다. 그리고 Google은 페이지의 언어를 감지할 때 hreflang(또는 lang 속성)을 사용하지 않습니다. 언어는 알고리즘으로 판단합니다.

hreflang 문법: 언어, 문자, 지역 코드

값의 순서는 고정되어 있습니다 — 언어, 선택적 문자(script), 선택적 지역 — 각각 ISO 639-1, ISO 15924, ISO 3166-1 Alpha 2를 따릅니다. 코드는 대소문자를 가리지 않으며, 관례상 언어는 소문자, 지역은 대문자로 씁니다.

유효한 코드:

  • en-GB — 영국 사용자를 위한 영어
  • zh-Hans — 중국어, 간체 문자

Google 문서가 특별히 짚는 함정들입니다:

  • en-UK — 잘못된 코드: UK는 공식적으로 할당된 ISO 3166-1 요소가 아니라서 Google이 무시합니다(EU, UN도 마찬가지). en-GB를 사용하세요.
  • gb-en — 순서 오류: 언어가 항상 먼저 옵니다.
  • es-419 — 숫자 형식의 UN 지역 코드는 지원되지 않습니다. ISO 3166-1 Alpha 2만 가능합니다.
  • “벨기에”를 뜻하려고 쓴 be — 지역만 단독으로 쓰는 것은 유효하지 않고, be는 벨라루스어 코드입니다. nl-BE, fr-BE, de-BE를 사용하세요.

다중 로캘 언어에 대한 Google의 안내: 하나의 언어로 여러 로캘(en-IE, en-CA, en-AU)을 타깃한다면, 나머지 모든 사용자를 위한 일반 en 코드(catch-all)를 제공하세요. Google은 이를 “좋은 방법”이라고 말할 뿐 필수 요건은 아니며, 이 catch-all URL은 지역 버전 가운데 하나와 공유해도 됩니다 — en은 en-IE와 같은 URL을 가리킬 수 있습니다.

리턴 태그: 모든 버전이 서로를 가리켜야 하는 이유

리턴 태그는 상호 참조 규칙입니다. 페이지 X가 페이지 Y를 가리키면 Y도 X를 다시 가리켜야 하고, 모든 버전은 자기 자신도 목록에 넣어야 합니다. Google의 규칙: 두 페이지가 서로를 가리키지 않으면 어노테이션은 무시됩니다. 흔히 드는 근거: 리턴 링크가 없다면 누구나 자기 페이지를 당신 페이지의 대체 버전이라고 선언할 수 있기 때문입니다. 영어 버전과 독일어 버전을 갖춘 사이트라면 두 페이지의 <head>에 같은 태그 세트가 들어갑니다:

<link rel="alternate" hreflang="en" href="https://example.com/" />
<link rel="alternate" hreflang="de-DE" href="https://example.com/de/" />

두 페이지 모두 이 두 줄을 담습니다. 어느 한 버전에서라도 세트를 빠뜨리면 클러스터가 깨지기 시작합니다. Google 문서의 완화 안: 완전한 양방향 세트를 유지하기 어려울 때는 일부 페이지에서 일부 언어를 생략해도 됩니다 — 여전히 서로를 가리키는 쌍은 계속 작동합니다. 명시된 우선순위는 새로 추가하는 언어 버전을 사이트의 원래(주력) 언어와 양방향으로 연결하는 것입니다 — 프랑스어 .fr 페이지에서 시작해 성장한 사이트라면 새 스페인어 버전을 프랑스어 페이지와 먼저 연결하고, 그다음 서로 연결하세요.

x-default란 무엇이고 언제 필요한가요?

x-default는 예약된 값으로, 나열한 언어 중 어느 것도 사용자의 브라우저 설정과 일치하지 않을 때 제공할 URL을 지정합니다 — link 태그 하나만 추가하고 언어 코드는 없습니다:

<link rel="alternate" hreflang="en-GB" href="https://example.com/uk/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/select-language/" />

x-default는 선택 사항이지만 권장됩니다 — 언어 선택 페이지와 자동 리디렉션 홈페이지를 위해 설계되었습니다. 기본 언어 버전을 가리키는 것 역시 표준 패턴이며, 생성기가 기본으로 예상하는 방식이기도 합니다.

hreflang 태그를 구현하는 세 가지 방법

Google은 이 세 가지 방법을 완전히 동등하게 취급합니다. 공식 문서에서는 세 가지를 동시에 사용해도 “검색에서 이득은 없다(no benefit in Search)”고 말하며, 하나만 선택하는 것보다 관리가 더 어렵다고 덧붙입니다.

1. head 안에 넣는 HTML link 태그

소규모 사이트를 위한 방법입니다. 모든 버전의 잘 구성된(well-formed) <head> 안에 전체 세트를 넣으세요. Google의 규칙 두 가지: 태그는 실제로 head 안에 있어야 합니다(CMS가 마크업을 재작성한다면 렌더링된 HTML을 검증하세요). 그리고 hreflang을 media 같은 속성과 한 태그에 함께 넣지 마세요.

2. XML 사이트맵 어노테이션

규모가 클 때는 hreflang을 HTML 바깥으로 빼세요. 각 <url> 항목 안에 <loc>와 함께, 자기 자신을 포함한 모든 버전의 xhtml:link 자식 요소를 추가합니다:

<url>
  <loc>https://example.com/</loc>
  <xhtml:link rel="alternate" hreflang="en" href="https://example.com/" />
  <xhtml:link rel="alternate" hreflang="de-DE" href="https://example.com/de/" />
</url>

xmlns:xhtml="http://www.w3.org/1999/xhtml" 네임스페이스를 선언하고, 모든 버전에 대해 <url> 블록을 반복하세요. 자식 요소의 순서는 상관없습니다. Google은 xhtml:link 자식 요소가 사이트맵 URL 제한에 포함되지 않는다고 확인해 줍니다 — 프로토콜의 URL 상한 50,000개는 <url> 항목만 셉니다.

3. HTTP Link 헤더

PDF처럼 HTML이 아닌 파일에는 파일이 제공되는 지점에서 Link 헤더를 설정하세요 — nginx라면 해당 location에 add_header 규칙을 추가합니다:

add_header Link '<https://example.com/file.pdf>; rel="alternate"; hreflang="en",
                <https://example.com/de/file.pdf>; rel="alternate"; hreflang="de"';

Apache의 Header set이나 CDN의 응답 헤더 규칙으로도 같은 결과를 얻을 수 있습니다.

무료 도구로 hreflang 태그 생성하기

hreflang 태그 생성기는 세트를 만들고 입력하는 동시에 검증합니다 — 가입이 필요 없고 브라우저에서 바로 실행됩니다.

1단계: 완전한 세트 만들기

버전마다 한 행씩 추가하세요 — 왼쪽에 언어 코드, 오른쪽에 절대 URL — 어노테이션을 다는 페이지가 자기 자신을 가리키는 행도 반드시 포함합니다. 자기 참조는 필수이고, 이렇게 만든 동일한 세트를 모든 버전의 head에 붙여넣습니다(4단계) — 그러니 한 번만, 완전한 상태로 만들어 두세요. 코드는 언어-문자-지역 패턴으로 실시간 검증됩니다 — en, pt-BR, zh-Hans는 통과, gb-en은 경고 표시 — 대소문자도 자동으로 정규화됩니다(en-gb는 en-GB로 바뀝니다).

2단계: x-default URL 설정

폴백 URL을 입력하세요 — 기본 언어 버전 또는 언어 선택 페이지 — 비워 두면 x-default를 생략합니다. URL이 세트 바깥에 있으면 경고가 뜹니다. 언어 선택 페이지라면 설계상 언어 클러스터 밖에 있으므로 정상이고 올바른 동작입니다. 선택 페이지가 아닌데 경고가 뜬다면 대개 오타입니다.

3단계: 생성하고 검증 결과 확인하기

Generate hreflang tags를 클릭하세요. 체크리스트는 중복 언어 코드를 오류로 표시하고, 절대 URL이 아니면 거부하며, 자기 참조와 항목이 하나뿐인 세트에 경고를 보냅니다. 항목이 하나뿐이라면 대개 다른 버전이 빠진 것입니다 — 추가하세요. hreflang은 두 개 이상의 버전이 서로를 참조할 때만 효과가 있고, 대체 버전이 없는 페이지에는 hreflang이 아예 필요 없습니다. 빨간 표시를 모두 수정한 뒤 다시 생성하세요.

4단계: 필요한 형식으로 출력 복사하기

출력은 두 개의 탭에 담깁니다. HTML link tags는 <head>에 바로 쓸 수 있습니다 — 동일한 블록을 모든 버전에 붙여넣으세요. XML sitemap은 완전한 사이트맵이 아니라 <url> 블록을 출력합니다. 전체 사이트맵의 <urlset> 요소 안에 붙여넣으세요(네임스페이스는 위 참고). 예를 들어 XML 사이트맵 생성기로 만든 기본 파일을 사용할 수 있습니다. Copy code와 Download file 버튼으로 출력을 옮기고, 다국어 head의 나머지 부분은 meta 태그 생성기가 책임집니다.

hreflang에서 흔히 하는 실수와 해결 방법

실수 1: 자기 참조 항목 누락

가장 흔한 오류입니다. 페이지 자신만 빼고 모든 버전을 나열하는 경우죠. Google의 규칙은 정반대입니다 — 모든 버전은 자기 자신과 다른 모든 버전을 나열해야 합니다. 해결: 현재 페이지의 행을 추가하세요.

실수 2: 단방향 어노테이션 (리턴 태그 누락)

독일어 페이지가 영어 페이지를 나열했는데 반대 방향은 추가하지 않은 경우입니다 — Google은 단방향 쌍을 무시합니다. 해결: 모든 버전에 동일한 세트를 넣고, 출시나 URL 변경 후에는 양쪽을 다시 확인하세요.

실수 3: 잘못되거나 순서가 틀린 코드

en-UK, es-419, gb-en, 지역만 단독으로 쓴 코드 — Google은 유효하지 않은 지역이나 형식이 틀린 코드를 조용히 무시해서 클러스터의 그 부분을 사용 불가로 만듭니다. 해결: 언어가 먼저(ISO 639-1), 지역이 그다음(ISO 3166-1 Alpha 2). 생성기가 코드를 실시간으로 검증합니다.

실수 4: canonical과 충돌하는 hreflang

각 버전은 자기 참조 canonical을 가져야 합니다. 독일어 페이지의 canonical이 영어 페이지를 가리키면, hreflang이 그 페이지를 대등한 대체 버전으로 부르는 바로 그 순간 중복이라고 선언하는 셈입니다 — 이렇게 상충하는 신호는 세트 전체가 작동을 멈추게 만들 수 있습니다. 해결: 모든 페이지에 self-canonical을 두고, 그룹화는 hreflang에 맡기세요.

실수 5: 세트 안의 리디렉션 URL 또는 상대 URL

대체 URL은 반드시 완전한 절대 URL이어야 합니다 — https://example.com/de/처럼 쓰고 /de/나 //example.com/de/는 쓰지 마세요 — 그리고 리디렉션 체인이 아니라 200을 반환해야 합니다. 다른 곳으로 301 리디렉션되는 de-DE 항목은 Google이 먼저 체인을 해석하게 만듭니다. 점검 시 리디렉션 체인 검사기로 URL을 확인하고, 렌더링된 소스에서 태그가 잘 구성된 head 안에 있는지 확인하세요.

자주 묻는 질문

hreflang 태그가 순위를 높여 주나요?

직접적으로는 아닙니다 — hreflang은 순위 상승 요소가 아니라 Google이 올바른 버전을 제공하도록 돕는 라우팅 신호입니다. 이득은 간접적이지만 분명합니다. 중복 버전끼리 경쟁하는 일이 줄고, 사용자가 자기 언어로 된 페이지에 도착합니다.

hreflang 태그는 반드시 head 안에 넣어야 하나요?

HTML 방식을 쓸 때만 그렇습니다 — 이 방식에서는 태그가 잘 구성된 head 안에 들어가야 하고, head 마크업을 제어할 수 없다면 사이트맵 방식과 HTTP 헤더 방식이 동등한 대안입니다.

x-default는 필수인가요?

아니요. 선택 사항이며 언어 선택 페이지와 자동 리디렉션 홈페이지에서 가장 잘 작동합니다. 그 외 대부분 사이트는 기본 언어 버전을 가리키는데, 이 역시 안전한 패턴입니다.

hreflang URL은 서로 다른 도메인에 있어도 되나요?

네 — 대체 URL이 도메인을 공유할 필요는 없습니다. 그래서 example.de나 example.co.jp 같은 ccTLD에서 hreflang이 표준입니다. ccTLD나 국가별 서브도메인은 Google에 지리적 힌트를 줄 뿐, 어떤 URL이 서로의 대체 버전인지는 알려 주지 않습니다. 모든 버전을 명시적으로 매핑하세요.

hreflang 태그는 어떻게 확인하고, 수정에는 얼마나 걸리나요?

각 버전의 렌더링된 소스를 보고 자기 참조를 포함한 전체 세트가 head 안에 있는지 확인하세요. 서드파티 hreflang 테스터가 실제 페이지를 검증합니다(Google은 Aleyda Solis의 생성기와 Merkle hreflang 테스터를 언급합니다). 크롤러를 쓰면 사이트 전체 검사로 확장할 수 있습니다. Search Console의 International Targeting 리포트는 2022년에 폐지되어 전용 hreflang 오류 리포트는 더 이상 없습니다. 수정 사항은 클러스터의 모든 URL이 다시 크롤링될 때 적용됩니다 — 보통 며칠에서 몇 주 걸립니다.

en-US와 en-GB처럼 같은 언어 페이지에도 hreflang을 쓸 수 있나요?

네 — Google의 공식 사용 사례에도 한 언어의 지역 변형이 포함됩니다. 미국, 영국, 아일랜드를 각각 타깃하는 영어 콘텐츠가 그렇습니다. 번역은 필요하지 않습니다. 태그는 Google에 어느 지역 변형을 보여 줄지 알려 줄 뿐이며, 차이가 통화나 배송 정보뿐인 경우도 있습니다.

세트의 한 버전이 noindex이거나 차단되어 있으면 어떻게 되나요?

클러스터의 모든 URL은 크롤링과 색인이 가능해야 합니다. noindex이거나 차단된 페이지는 대체 버전으로 표시될 수 없고, 죽은 항목 하나가 나머지 연결까지 약화시킵니다. 차단을 해제하거나, 모든 페이지의 세트에서 그 버전을 빼세요.

hreflang URL은 canonical URL과 정확히 일치해야 하나요?

그래야 합니다. 각 항목은 해당 버전의 canonical이 가리키는 URL을 나열합니다 — 프로토콜, 호스트, 트레일링 슬래시까지 같아야 합니다. 항목은 완전한 절대 URL이어야 하고, 정규 URL이 아닌 대상(트래킹 매개변수, 잘못 붙은 트레일링 슬래시)은 Google이 쌍을 만들기 전에 중복을 먼저 해석하게 만듭니다. 정확히 일치하는 URL과 self-canonical이 클러스터를 깨끗하게 유지합니다.