hreflang 多语言 SEO 指南:正确标注语言区域

当你的网站针对不同语言或地区提供多个版本时,需要把"这些页面是同一内容的本地化变体"告诉搜索引擎,否则 Google 可能把翻译版本误判为重复内容,或把用户带到错误语言页面。hreflang 正是用于标注页面语言/区域版本的官方方案。需要说明的是,Google 不会用 hreflang 或 lang 属性来判断页面语言,而是用算法识别,但 hreflang 依然能帮你把合适版本推荐给合适用户。

换句话说,hreflang 解决的是"分发"问题而不是"识别"问题:它不会让一个页面在另一种语言下排名更好,只会帮助搜索引擎在用户搜索时选择更合适的语言版本。理解了这一点,就不会对 hreflang 抱有不切实际的期待。

何时需要 hreflang

官方建议在以下几种情况下明确标注备用版本:

  • 页面主要内容只用单一语言,但模板(导航、页脚)已翻译,例如以用户生成内容为主的论坛;
  • 页面用同一语言为不同区域提供相似内容,且区域性差异细微,例如面向美国、英国、爱尔兰用户的英语内容;
  • 网站内容已完全翻译成多种语言,例如每个页面都有德语与英语版本。

需要特别注意的是:如果页面主要内容并未真正翻译,本地化版本只会被视为重复页面,标注 hreflang 也无法挽回,这一点与重复内容治理直接相关。

三种标注方式

Google 提供三种等效方式,选择最适合你站点架构的一种即可:

  • HTML <link> 标签:在每页 <head> 中加入一组 rel="alternate" hreflang="..."
  • HTTP 响应头:对 PDF 等非 HTML 文件很有效,通过 Link: 头返回所有语言变体。
  • XML 站点地图:在 <xhtml:link> 中声明每个 URL 的全部变体,适合大规模站点。站点地图写法可参考XML 站点地图指南

三种方式的取舍很直接:HTML 标签适合模板可控的中小站点,修改方便、生效直观;HTTP 头适合静态文件或由服务端统一生成的响应,比如 PDF、白皮书;站点地图则适合动辄数千页的多语言站点,可以集中维护、批量生成。实际中很多团队会"HTML 为主、站点地图兜底",双保险。

核心准则

无论采用哪种方式,都要遵守以下规则:

  • 双向互链:每个语言版本都必须列出自身及所有其他版本;如果页面 X 指向 Y,Y 必须指回 X,否则标记可能被忽略。这一点与Canonical 与重复内容处理指南的思路一脉相承。
  • 使用完全限定 URL:必须包含协议,如 https://example.com/foo,不要用相对地址。
  • 使用受支持的代码:语言代码用 ISO 639-1(如 en),区域代码用 ISO 3166-1 Alpha 2(如 US),形如 en-US。不能只写区域代码(be 是白俄罗斯语,不是比利时),也不要用预留代码(EUUK)。
  • 提供 x-default:当用户语言与所有版本都不匹配时,用 x-default 指定后备页面,特别适合语言选择器页。

典型实现示例

假设站点有英文通用版、英式英语、美式英语和德语版,每页 <head> 中都应包含:

<link rel="alternate" hreflang="en" href="https://en.example.com/page.html" />
<link rel="alternate" hreflang="en-gb" href="https://en-gb.example.com/page.html" />
<link rel="alternate" hreflang="en-us" href="https://en-us.example.com/page.html" />
<link rel="alternate" hreflang="de" href="https://de.example.com/page.html" />
<link rel="alternate" hreflang="x-default" href="https://www.example.com/" />

如果内容主要以 PDF 形式分发,则改用 HTTP 响应头:

Link: <https://en.example.com/file.pdf>; rel="alternate"; hreflang="en",
      <https://de.example.com/file.pdf>; rel="alternate"; hreflang="de",
      <https://www.example.com/file.pdf>; rel="alternate"; hreflang="x-default"

大规模站点则可以在站点地图中统一声明:

<url>
  <loc>https://en.example.com/page.html</loc>
  <xhtml:link rel="alternate" hreflang="en" href="https://en.example.com/page.html" />
  <xhtml:link rel="alternate" hreflang="de" href="https://de.example.com/page.html" />
  <xhtml:link rel="alternate" hreflang="x-default" href="https://www.example.com/" />
</url>

注意:hreflang 并不改变页面语言检测结果,且只应标记"主要内容已翻译"的页面;如果只是翻译了模板,本地化版本只会被视为重复页面。

一个排查案例

假设一个德语站上线后,Google 一直把用户导到英语版。用 Merkle hreflang 测试工具检查后发现:德语页面的 <head> 里列了英语版,但英语页面忘了反向列出德语版——典型的"缺返回链接"。补上双向互链并重新提交站点地图后,两周内德语用户被正确分发的比例明显上升。这个案例说明:hreflang 的正确性必须整组校验,单独看某一页没有意义。

常见错误排查

最常出现的三类错误:

  • 缺少返回链接:某个变体没有列出其他变体。
  • 语言代码不正确:只写了区域,或用了不受支持代码(如 es-419 不被支持)。
  • 区域代码不正确:使用了预留或未分配代码。

可以用第三方工具(如 hreflang 标签生成器、Merkle hreflang 测试工具)快速校验。多语言站点在搭建时还要注意整体架构,可参考网站国际化与多语言建站指南;如果是多语言电商,可看多语言电商网站搭建指南。移动站使用单独 URL 时,记得移动版 hreflang 只指向移动版,详见移动优先索引实践指南

原文来源:https://developers.google.com/search/docs/specialty/international/localized-versions
参考:https://www.sistrix.com/blog/hreflang-tutorial-how-to-hreflang/(Sistrix hreflang 教程)