hreflang 是 HTML 中的一个链接属性,用来告诉搜索引擎同一个页面有哪些不同语言或地区的版本。它的全称是 rel="alternate" hreflang="x",通常放在页面的 <head> 中。

简单说,如果你的网站有中文版和英文版,你需要告诉谷歌:"这两个页面内容一样,只是语言不同,中文用户看中文的,英文用户看英文的。" hreflang 就是干这件事的。

如果没有 hreflang,搜索引擎可能会把不同语言的版本当成重复内容,或者把错误语言的版本展示给用户。比如一个中国用户搜索,结果搜到的是英文页面,体验就很差。

hreflang 的作用

hreflang 标签主要解决以下几个问题:

1. 避免多语言重复内容

同一个内容有多个语言版本时,搜索引擎可能会困惑:这是重复内容吗?哪个版本应该排在前面?hreflang 明确告诉它们:这些都是同一个内容的不同语言版本,不是抄袭,也不是重复内容。

2. 给用户展示正确语言的结果

这是 hreflang 最核心的价值。比如西班牙语用户搜索时,谷歌会优先展示西班牙语版本;中文用户搜索时,展示中文版本。用户看到的是自己熟悉的语言,点击率和体验都会更好。

3. 针对特定地区的用户

除了语言,hreflang 还可以指定地区。比如 zh-cn 是针对中国的中文用户,zh-tw 是针对台湾的繁体中文用户,en-us 是针对美国的英文用户,en-gb 是针对英国的英文用户。

这样可以做到更精细化的地区定向。

4. 集中权重,避免内耗

如果没有 hreflang,多个语言版本可能互相竞争排名,分散权重。有了 hreflang,搜索引擎知道它们是一组的,会把权重合并考虑,整体表现更好。

如何正确使用 hreflang

基本写法

hreflang 标签写在页面的 <head> 里,格式如下:

<link rel="alternate" hreflang="zh" href="https://example.com/zh/page">
<link rel="alternate" hreflang="en" href="https://example.com/en/page">
<link rel="alternate" hreflang="x-default" href="https://example.com/page">

每个语言版本的页面上,都要列出所有语言版本的链接,包括自己。也就是说,中文页面上要有中文和英文的 hreflang,英文页面上也要有中文和英文的。

语言代码和地区代码

hreflang 的值由两部分组成:语言代码和可选的地区代码。

  • 语言代码:必须,使用 ISO 639-1 标准的两位小写字母,如 zhenjafr
  • 地区代码:可选,使用 ISO 3166-1 Alpha 2 标准的两位大写字母,如 CNUSGBTW

组合起来的例子:

hreflang 值含义
zh所有中文用户
zh-CN中国大陆的中文用户
zh-TW台湾地区的中文用户
en所有英文用户
en-US美国的英文用户
en-GB英国的英文用户
ja所有日文用户
de所有德文用户

注意:语言代码是小写,地区代码是大写,中间用连字符分隔。

x-default 的作用

x-default 是一个特殊值,表示"默认版本"。当搜索引擎无法匹配到用户的语言/地区时,就展示这个默认版本。

<link rel="alternate" hreflang="x-default" href="https://example.com/page">

x-default 不是必须的,但通常建议加上,作为兜底版本。一般把流量最大的语言版本设为 x-default。

实现方式

hreflang 有三种实现方式,选一种即可,不要混用:

1. HTML 标签(最常用)

直接在页面 <head> 中加 <link> 标签:

<head>
  <link rel="alternate" hreflang="zh" href="https://example.com/zh/about">
  <link rel="alternate" hreflang="en" href="https://example.com/en/about">
  <link rel="alternate" hreflang="x-default" href="https://example.com/about">
</head>

2. HTTP 响应头

在 HTTP 响应头中设置 Link 字段:

Link: <https://example.com/zh/page>; rel="alternate"; hreflang="zh",
      <https://example.com/en/page>; rel="alternate"; hreflang="en"

这种方式适合非 HTML 文件(如 PDF),或者不方便改 HTML 的情况。

3. sitemap.xml 中声明

在 sitemap.xml 中用 <xhtml:link> 标记不同语言版本:

<url>
  <loc>https://example.com/zh/page</loc>
  <xhtml:link rel="alternate" hreflang="en" href="https://example.com/en/page"/>
  <xhtml:link rel="alternate" hreflang="zh" href="https://example.com/zh/page"/>
</url>

这种方式适合页面数量很多的大型网站,管理起来比较方便。

使用步骤

正确使用 hreflang 的完整步骤:

  1. 确定有哪些语言/地区版本:列出所有版本的 URL
  2. 选择实现方式:HTML 标签、HTTP 头、还是 sitemap
  3. 每个版本页面都加上 hreflang:所有版本的页面上,都要列出全部语言版本
  4. 确认双向标记:A 页面指向 B,B 页面必须指回 A(互指)
  5. 确保 href 是绝对 URL:包含完整的协议和域名
  6. 验证:用 Google 的国际定位工具或第三方工具检查

hreflang 的注意事项

hreflang 看起来简单,但坑很多。以下是一些常见的问题和注意事项:

1. 必须双向互指

这是最常见的错误之一。如果中文页面的 hreflang 指向了英文页面,英文页面的 hreflang 也必须指回中文页面。单向指向是无效的,搜索引擎会忽略。

正确做法:所有语言版本的页面上,都列出所有语言版本的 hreflang。

2. 不要自指矛盾

页面自己的 hreflang 指向的 URL 必须和页面的实际 URL 一致。如果页面的 URL 是 https://example.com/zh/page,但 hreflang 里 hreflang="zh" 对应的 href 是别的地址,就会出问题。

3. 使用绝对 URL

hreflang 的 href 必须是完整的绝对 URL,包含协议和域名。不要用相对路径。

✅ 正确:

<link rel="alternate" hreflang="zh" href="https://example.com/zh/page">

❌ 错误:

<link rel="alternate" hreflang="zh" href="/zh/page">

4. 语言代码格式要正确

  • 语言代码必须是 ISO 639-1 的两位小写字母
  • 地区代码必须是 ISO 3166-1 的两位大写字母
  • 中间用连字符 - 分隔,不是下划线
  • 不能只写地区代码不写语言代码

✅ 正确:zh-CNen-USja

❌ 错误:CNen_usZH-cnzh_CN

5. 不要在 hreflang 中使用重定向 URL

hreflang 指向的 URL 必须是直接返回 200 的页面,不能是 301 或 302 重定向。如果是重定向,搜索引擎可能不认可。

6. 不要在 robots.txt 中禁止抓取 hreflang 指向的页面

如果某个语言版本的页面被 robots.txt 禁止抓取,hreflang 指向它就没意义了,搜索引擎抓不到。

7. 页面内容要和语言匹配

标记为 hreflang="zh" 的页面,内容确实应该是中文的。如果页面内容是英文的,却标记成中文,搜索引擎会认为你在作弊。

8. 避免过度细分地区

如果你的内容对所有英文用户都是一样的,就用 en 就够了,不需要分 en-USen-GBen-CA 等一大堆。过度细分反而增加维护成本,也容易出错。

只有当不同地区的内容确实有差异时,才需要细分。

9. 分页也要正确处理

如果列表页有分页,每个分页的不同语言版本也要对应好。第2页的中文版 hreflang 应该指向第2页的英文版,而不是英文版的第1页。

10. 用工具验证

写完 hreflang 之后,一定要用工具验证:

  • Google Search Console:国际定位 → 语言版本
  • 第三方工具:比如 hreflang.org 的测试工具
  • Screaming Frog:爬虫工具可以检测 hreflang 错误

11. hreflang 不是万能的

hreflang 只是告诉搜索引擎"这些页面是同一个内容的不同语言版本",但它不保证搜索引擎一定会按你的想法展示。最终展示哪个版本,搜索引擎还会综合考虑其他因素。

另外,hreflang 不会直接提升排名,它的作用是确保正确的语言版本被正确的用户看到。

12. 和 canonical 的配合

如果页面上同时有 canonical 和 hreflang,要注意它们之间不要冲突:

  • 每个语言版本的页面,canonical 应该指向自己语言版本的 URL
  • 不要让所有语言版本的 canonical 都指向同一个版本
  • hreflang 负责语言版本的关联,canonical 负责每个版本内部的规范化

两者各司其职,不要搞混。

13. 新增加语言版本时要同步更新

每新增一个语言版本,所有已有版本的 hreflang 都要加上这个新版本。如果漏了某个页面,就会出现单向指向的问题。

14. 注意 URL 结构的一致性

不同语言版本的 URL 结构最好保持一致,比如:

  • example.com/zh/aboutexample.com/en/about
  • example.com/zh/products/123example.com/en/products/123

一致的结构方便管理和验证,也不容易出错。

写在最后

hreflang 是多语言/国际化网站 SEO 中不可或缺的一环。它不难理解,但细节很多,一不小心就容易踩坑。

记住几个核心原则:

  • 所有版本互指,不能单向
  • 用绝对 URL,格式要正确
  • 语言代码和地区代码别写错
  • 用工具验证,不要靠肉眼检查

把这些基础做对,hreflang 就能正确发挥作用,让不同语言的用户都能看到自己熟悉的版本。