Hreflang 完整指南:实施、代码与调试
通过 HTML、HTTP 标头或站点地图配置 hreflang:涵盖页面集群规则、语言地区代码、x-default、规范化设置及调试检查清单。

Hreflang 是国际 SEO 中最重要、也最容易出错的信号之一。团队添加标注,希望 Google 能“将用户引导至正确的语言版本”,却在几个月后才发现缺少返回链接、地区代码无效,或 canonical 标签与页面集群相互矛盾。
本指南是一份实用的实施参考,涵盖 hreflang 的作用与局限、适用场景、三种受支持的实施方式、真正关键的集群规则、代码与 x-default 的用法、如何让 hreflang 与 canonical 标签保持一致,以及如何排查导致标注被忽略的错误。文中论述均以 Google 官方文档为依据,不作任何排名保证。
本指南将解答的问题
- 什么是 hreflang?它解决什么问题?
- 网站何时应该实施 hreflang?
- 受支持的三种实施方式是什么?团队该如何选择?
- 每个 hreflang 集群都必须遵循哪些规则?
- 语言代码、地区代码及 x-default 如何使用?
- hreflang 应如何与 canonical 标签配合?
- 最常见的 hreflang 错误有哪些?如何排查?
- hreflang 能识别页面语言或代替翻译吗?
快速解答:hreflang 的作用
Hreflang 用于告知 Google 某个页面有哪些语言或地区版本,以便 Google 搜索将用户引导至最合适的版本。即使没有标注,Google 仍可能找到部分其他语言版本,但依然建议明确标注。
Hreflang 不能:
- 识别页面语言(Google 使用算法分析可见内容,而非依据 hreflang 或 HTML 的
lang属性) - 代替翻译或本地化工作
- 保证在任何国家或语言的搜索结果中获得排名
应将它视为各替代版本 URL 之间的关系图,而不是语言检测工具或提升排名的手段。
何时需要 hreflang
Google 建议在以下场景中为替代页面添加标注:
- 仅翻译页面模板,主要内容仍保持同一种语言
- 同一语言的不同地区版本仅有细微差异,例如货币、联系方式或法律文案
- 内容已完整翻译为多种语言
只有在主要内容未翻译时,本地化版本才会被视为重复内容。这一区别很重要:针对某个国家进行少量本地化的同语言页面,仍可作为有效的替代版本;而仅“翻译”少量界面元素的页面,不应被视为完整的语言版本。
如果不同语言或国家的用户在具有相同意图时,应访问不同的可抓取 URL,通常就需要 hreflang。对于仅面向单一语言、单一市场的网站,或者你有意只发布一个全球通用 URL、让所有用户获得相同体验的情况,则可能不需要。
仅有文件夹名称和子域名标签(/de/、de.example.com)并不足够。除非你明确建立目标受众映射,否则 Google 不会依据这些路径或子域名代码判断目标受众;而 hreflang 就是建立这种映射的常用方式。
集群核心规则
每套正确的 hreflang 配置都会构成一个集群:一组互相声明为替代版本的 URL。Google 的规则相当严格,不完整的集群往往会在没有任何提示的情况下失效。
| 规则 | 操作要求 | 为何重要 |
|---|---|---|
| 自引用 | 每个版本都要列出自身及所有其他版本 | 自引用映射不完整会破坏集群 |
| 双向引用 | 如果 A 指向 B,B 也必须指回 A | 未双向引用的页面对会被忽略 |
| 绝对 URL | 使用包含 http/https 的完整 URL | 相对 URL 不能作为有效的替代版本地址 |
| 允许跨域 | 替代版本无需使用同一域名 | 适用于采用国家和地区代码顶级域名(ccTLD)的方案 |
| 采用单一方式 | 建议从 HTML、HTTP 标头或站点地图中选择一种方式 | 同时维护三种方式容易导致配置不一致 |
如果难以大规模维护完整的双向引用关系,Google 仍会处理相互指向的页面对,但新增语言版本应与原始语言或主要语言版本建立双向链接。不要将“部分双向引用”视为长期策略,而应将其视为迁移过程中的风险。
语言和地区代码
Hreflang 值使用 ISO 639-1 语言代码,也可选择搭配 ISO 3166-1 Alpha 2 地区代码。
| 模式 | 示例 | 含义 |
|---|---|---|
| 仅指定语言 | en, fr, de | 指定语言,不限定具体国家 |
| 语言 + 地区 | en-US, en-GB, fr-CA | 特定国家使用的语言 |
| 文字变体 | zh-Hans, zh-Hant | 简体中文与繁体中文(ISO 15924) |
| 文字 + 地区 | zh-Hans-US | 需要时,在文字代码后加上国家代码 |
| 回退选项 | x-default | 没有其他匹配的语言或地区 |
应避免的无效或不起作用的写法:
- 仅使用地区代码(
US)——无效 - 将
EU、UN或UK当作会影响 Google 搜索的地区代码——它们并不起作用 - 使用不受支持的格式,例如
es-419
当多个地区 URL 使用同一种语言时(例如 en-IE、en-CA、en-AU),还应提供一个通用语言版本(如 en),用于覆盖使用该语言但未指定地理位置的用户。
当没有其他匹配的语言或地区时,使用 x-default 作为回退选项,尤其适用于语言选择页面或自动重定向的首页。x-default 并不代表“英语”,而是表示“没有更合适的匹配项”。
实施方式 1:HTML 链接标签
将替代版本链接标签放在格式正确的 <head> 中。不要在同一个链接标签上,将 hreflang 与其他用于描述替代呈现形式的属性(如 media)混用。
小型页面集群示例(en-US、en-GB、fr、x-default):
<link rel="alternate" hreflang="en-US" href="https://example.com/en-us/pricing" />
<link rel="alternate" hreflang="en-GB" href="https://example.com/en-gb/pricing" />
<link rel="alternate" hreflang="fr" href="https://example.com/fr/pricing" />
<link rel="alternate" hreflang="x-default" href="https://example.com/pricing" />
集群中的每个页面都需要包含同一组标注(包括页面自身的 URL)。在 CMS 或静态网站生成器中,根据共享的语言地区配置表生成标签,比手动编辑页面更稳妥。
实施方式 2:HTTP 标头
对于非 HTML 文件,或更适合在边缘服务/CDN 技术栈中注入标头的情况,Google 支持使用 HTTP Link 标头,其语义相同:
Link: <https://example.com/en-us/pricing>; rel="alternate"; hreflang="en-US",
<https://example.com/en-gb/pricing>; rel="alternate"; hreflang="en-GB",
<https://example.com/fr/pricing>; rel="alternate"; hreflang="fr",
<https://example.com/pricing>; rel="alternate"; hreflang="x-default"
当不便注入 HTML <head> 时,使用标头很有帮助,但内容团队更难检查。如果使用标头,请记录负责生成标头的服务,并在质量保证(QA)流程中加入标头检查。
实施方式 3:XML 站点地图
站点地图可以通过 xhtml:link 条目声明其他语言或语言地区版本。每个 URL 条目都应列出所有替代版本,包括自身。
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>https://example.com/en-us/pricing</loc>
<xhtml:link rel="alternate" hreflang="en-US" href="https://example.com/en-us/pricing"/>
<xhtml:link rel="alternate" hreflang="en-GB" href="https://example.com/en-gb/pricing"/>
<xhtml:link rel="alternate" hreflang="fr" href="https://example.com/fr/pricing"/>
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/pricing"/>
</url>
<!-- Repeat a <url> block for each alternate, each listing the full set -->
</urlset>
对于大型目录,生成站点地图的方式具有良好的可扩展性,但前提是:每当添加或移除语言地区版本时,处理流程都能重新生成完整的双向引用集。
选择一种方式
在 Google 看来,HTML 标签、HTTP 标头和站点地图的作用是等同的。同时使用这三种方式不会改善搜索表现,反而会成倍增加配置不一致的风险。
| 方式 | 适用场景 | 注意事项 |
|---|---|---|
HTML <link> | 页面模板已控制 <head> | 模板缺陷可能导致遗漏自引用 |
HTTP Link | PDF 文件或由边缘服务控制的响应 | 运维责任归属不明确;编辑人员难以核验 |
| XML 站点地图 | URL 数量庞大,且语言地区配置表集中管理 | 新语言地区版本上线后,站点地图未及时更新 |
选定唯一的权威数据源。许多工程团队在大规模网站中更倾向于使用站点地图,而对于语言地区版本较少的营销网站,则更倾向于使用 HTML。只要双向引用始终正确,两种方式都可以。
hreflang 与 canonical 标签
hreflang 和 canonical 解决的是不同的问题。hreflang 用于映射不同语言或地区的替代版本。canonical 则用于在内容高度相似的页面中指定首选 URL。
确保两者保持一致的规则:
- 使用 hreflang 时,应指定相同语言的规范页面;如果不存在相同语言的规范页面,则选择尽可能合适的替代语言版本。
- 不要在单个
rel="canonical"链接上叠加 hreflang、lang、media或type属性——这些组合标注不会用于规范化处理。请将替代版本标注单独设置。 - 在选择规范 URL 时,相比条件相似但未纳入集群的 URL,Google 更倾向于选择加入了双向引用 hreflang 集群的 URL。
- 如果多个地区 URL 上存在相似或重复的同语言内容,请选择一个首选版本,并结合使用
rel="canonical"和 hreflang。
同语言、不同国家页面的实用配置方式:每个国家的 URL 都可以作为 hreflang 替代版本(en-US、en-CA),同时每个页面的 canonical 指向自身(如果确实希望合并,也可以指向经过慎重选择的首选 URL)。不要把所有国家页面的 canonical 都指向同一个全球英语版 URL,却又期望各国 URL 继续作为对应的替代版本展示——这些信号会相互冲突。
完整示例:语言 + 地区集群
假设某个定价页面有以下版本:
- 美国英语:
https://example.com/en-us/pricing→en-US - 英国英语:
https://example.com/en-gb/pricing→en-GB - 全球通用法语:
https://example.com/fr/pricing→fr - 语言选择器 / 默认回退页面:
https://example.com/pricing→x-default - 可选的通用英语版本:
https://example.com/en/pricing→en(存在英语地区版本时建议使用)
在上述每个 URL 上输出完整的双向链接集。美国版页面的 HTML 应包含自引用,以及指向英国版、法国版、x-default 和通用英语版(如已发布)的链接。
维护建议:将矩阵存储为数据(locale → url),根据矩阵生成注解,并在任何语言区域版本缺少返回链接时让 CI 检查失败。等到第三种语言上线时,手动编辑标签就难以为继了。
常见错误与调试
Google 明确指出了几类常见错误:缺少返回链接、语言代码错误,以及地区代码错误。在实际生产环境中,大多数问题都属于以下情形:
| 问题表现 | 可能原因 | 解决方法 |
|---|---|---|
| 注解被忽略 | 链接对未形成双向关联 | 重建页面集群,确保各 URL 之间双向链接 |
| 显示了错误的国家版本 | 代码无效或含义不明确(UK、仅含地区的代码) | 使用有效的 ISO 语言代码和语言-地区代码 |
| 上线后页面集群不完整 | 仅在一个模板中添加了新的语言区域版本 | 根据矩阵重新生成完整集合 |
| 索引指令冲突 | canonical 不当指向其他语言的页面 | 优先将 canonical 指向同语言页面 |
“加上 /de/ 就大功告成了” | 只有路径标识,没有 hreflang 注解 | 通过注解明确标明面向的受众 |
| 三种实现方式不同步 | HTML、HTTP 标头和站点地图中的信息不一致 | 选择一种实现方式 |
调试步骤:
- 导出预期的语言区域 × URL 矩阵。
- 选取一个示例 URL,获取其渲染后的 HTML、HTTP 标头或站点地图条目,并列出所有
hreflang目标。 - 确认页面包含自引用。
- 确认每个目标页面都提供相同的链接集(迁移期间至少应形成双向链接对)。
- 对照 ISO 列表验证代码;不允许将
UK、EU或UN用作地区代码。 - 确认 canonical 指向的页面语言一致。
- 下一个语言区域版本上线后再次检查,而不是只在首次上线时检查。
第三方验证工具可以提供帮助,但它们并非由 Google 维护。与其只看某个工具给出的绿色对勾,不如优先参考 Google 文档,并自行测试链接的双向性。
实施清单
Hreflang 与 AI 答案引擎
Hreflang 是 Google 搜索使用的一种注释(也适用于其他支持替代页面信号的搜索引擎),用于向爬虫说明不同语言和地区版本之间的关系。它并不能保证 ChatGPT、Claude、Gemini、Perplexity、Copilot 或 Google AI Overviews 在回答中选用“正确”的语言版本。
对答案引擎仍有帮助的是:每个语言版本都可供抓取和索引,主要内容已充分本地化,并且对同一实体的描述保持一致。即使助手忽略了 hreflang 本身,这些特征仍有助于内容被发现和选作信息来源。不要将 Google 的 hreflang 调试方法当作适用于所有 AI 的排名控制手段。
如需深入了解特定搜索引擎的实施细节,仍应参阅专门针对 Google 和 Bing 的多语言 SEO 指南。
针对 Google 搜索进行优化(hreflang)
Google 搜索是 hreflang 注释的主要使用方。请严格遵循 Google 文档,构建相互引用的页面集群,使用有效的代码,并确保 canonical 标记保持一致。在相关报告可用时,可通过 Search Console 的国际定位报告进行调试。
针对 Bing 进行优化(替代页面)
Bing 对替代页面信号的处理方式可能与 Google 不同。请确保各语言和地区版本的 URL 可供抓取,并通过 Bing Webmaster Tools 验证索引覆盖情况,而不是假定 Google 的 hreflang 集群机制可以一比一套用。
平台指南:ChatGPT
Hreflang 无法强制 ChatGPT 选择某个语言版本。真正有帮助的是提供可供抓取、内容充分本地化的 URL,以便在需要依据外部来源生成回答时引用或用作信息来源。请将回答中的语言版本选择视为不确定因素。
平台指南:Gemini
可供索引的各语言版本仍有助于 Gemini 和 Google 的 AI 体验。不要将 hreflang 当作 AI Overview 的语言切换开关,而应持续提供以用户为本、Google 可抓取的本地化页面。
平台指南:Google AI Overviews
AI Overviews 可能会链接到提供佐证的页面。仅靠 hreflang 无法指定概览的语言。经过本地化且可供索引的页面仍是实际操作中的前提条件,但不能保证被收录。
GlotEO 如何发挥作用
正确实施 hreflang 是一项涉及工程和内容运营的工作:随着市场拓展,语言与地区版本的对应矩阵必须始终与调研、内容简报及已发布的语言版本保持一致。GlotEO 的多语言 SEO 平台可为多语言项目的编辑工作流程提供支持,但不能替代上述注释规则。
需要统一管理各语言和地区版本编辑工作的团队,可以使用 GlotEO 的多语言 SEO 解决方案,然后比较 GlotEO 的价格与套餐。
如需了解按语言定位与按国家定位的策略差异,请参阅国际 SEO 与多语言 SEO 的区别。URL 架构以及选择翻译还是本地化的决策,都应与上述注释规则保持一致。
参考文献
- 为本文引用的建议提供依据(如何使用 rel=canonical 及其他方法指定规范网址)
- 为本文引用的建议提供依据(告知 Google 您网页的本地化版本)
- 为本文引用的建议提供依据(管理多区域和多语言网站)