hreflang 标签多语言网站 SEO 配置避坑指南
hreflang 解决什么问题
多语言或跨地区站点常有多份内容相同、语言不同的页面。没有 hreflang 时,谷歌可能把美国用户送到中文页,或把几个版本当成重复内容处理。hreflang 的作用就是告诉谷歌:这个页面有哪些语言/地区版本,该给什么用户看哪一个(来源见文末)。
三种写法
| 方式 | 写法 | 适用 |
|---|---|---|
| HTML head | <link rel="alternate" hreflang="en-us" href="https://a.com/us/" /> | 最常用,页面级 |
| HTTP 响应头 | Link: <https://a.com/us/>; rel="alternate"; hreflang="en-us" | PDF 等非 HTML 文件 |
| Sitemap | <xhtml:link rel="alternate" hreflang="en-us" href="..."/> | 站点很大、改模板困难 |
三选一即可,不要混用,混用容易互相冲突。
代码怎么填
- 语言:ISO 639-1,如
en、zh、de、ja; - 地区(可选):ISO 3166-1 Alpha-2,如
us、gb、de,必须跟在语言后面; - 只写语言:
zh覆盖所有中文用户;zh-cn只覆盖中国内地用户; - x-default:没有匹配版本时的兜底页,通常指向语言选择页或默认国际版。
必须遵守的规则
- 自引用:每个页面都要列出包括自己在内的一组 hreflang;
- 双向确认:A 页面声明 B 是它的英文版,B 页面也必须声明 A 是它的中文版,缺一边谷歌可能忽略整组;
- 指向规范化 URL:href 里必须填该页面的 canonical 地址,别填带参数或被跳转的 URL;
- 返回 200:被声明的页面必须可抓取且返回 200,跳到别处的 URL 无效;
- 每个语言版本自成一组:一组里的 URL 必须一一对应,不能多一个少一个。
示例
中文页 head 里应写:
- <link rel="alternate" hreflang="zh-cn" href="https://a.com/zh/" />
- <link rel="alternate" hreflang="en-us" href="https://a.com/en/" />
- <link rel="alternate" hreflang="x-default" href="https://a.com/" />
英文页里则把同样三条原样再写一遍,这就是自引用加双向确认。
常见错误
| 错误 | 后果 |
|---|---|
| 只有单向声明,没有回链 | 整组 hreflang 可能被忽略 |
| 地区代码写错(如 en-UK、zh-CN 写成 cn) | 指令无效 |
| 漏了自引用 | 谷歌不确定该页属于哪一组 |
| href 填了带参数或 301 的地址 | 与 canonical 冲突,信号丢失 |
| x-default 指向某个具体语言页 | 兜底失效,用户体验错乱 |
| 用 JS 动态注入 hreflang | 渲染不可靠,建议写在 HTML 里 |
| 按 IP 重定向且屏蔽爬虫 | 谷歌只能抓到其中一个版本 |
怎么自查
- GSC 的国际化报告看有没有 hreflang 错误;
- 网址检查工具查看谷歌识别到的 hreflang 组;
- 抽查几个页面源码,确认自引用与双向确认齐全。
来源:https://developers.google.com/search/docs/specialty/international/localized-versions
来源:https://developers.google.com/search/docs/specialty/international/use-hreflang
