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 标准的两位小写字母,如
zh、en、ja、fr - 地区代码:可选,使用 ISO 3166-1 Alpha 2 标准的两位大写字母,如
CN、US、GB、TW
组合起来的例子:
| 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 的完整步骤:
- 确定有哪些语言/地区版本:列出所有版本的 URL
- 选择实现方式:HTML 标签、HTTP 头、还是 sitemap
- 每个版本页面都加上 hreflang:所有版本的页面上,都要列出全部语言版本
- 确认双向标记:A 页面指向 B,B 页面必须指回 A(互指)
- 确保 href 是绝对 URL:包含完整的协议和域名
- 验证:用 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-CN、en-US、ja
❌ 错误:CN、en_us、ZH-cn、zh_CN
5. 不要在 hreflang 中使用重定向 URL
hreflang 指向的 URL 必须是直接返回 200 的页面,不能是 301 或 302 重定向。如果是重定向,搜索引擎可能不认可。
6. 不要在 robots.txt 中禁止抓取 hreflang 指向的页面
如果某个语言版本的页面被 robots.txt 禁止抓取,hreflang 指向它就没意义了,搜索引擎抓不到。
7. 页面内容要和语言匹配
标记为 hreflang="zh" 的页面,内容确实应该是中文的。如果页面内容是英文的,却标记成中文,搜索引擎会认为你在作弊。
8. 避免过度细分地区
如果你的内容对所有英文用户都是一样的,就用 en 就够了,不需要分 en-US、en-GB、en-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/about↔example.com/en/aboutexample.com/zh/products/123↔example.com/en/products/123
一致的结构方便管理和验证,也不容易出错。
写在最后
hreflang 是多语言/国际化网站 SEO 中不可或缺的一环。它不难理解,但细节很多,一不小心就容易踩坑。
记住几个核心原则:
- 所有版本互指,不能单向
- 用绝对 URL,格式要正确
- 语言代码和地区代码别写错
- 用工具验证,不要靠肉眼检查
把这些基础做对,hreflang 就能正确发挥作用,让不同语言的用户都能看到自己熟悉的版本。