hreflang 加了,为什么搜索引擎还是选错语言版本?
最常被忽略的一条:A 指向 B,B 必须指回 A,缺一条可能整组注解一起被忽略。
先查返回链接。hreflang 是一组互相确认的声明:页面 A 声明了 B 是它的语言版本,页面 B 也必须声明 A。返回标签缺一个,搜索引擎就可能忽略整组注解,等于白配。
其次是三类写法问题:代码格式(语言用两字母的 ISO 639-1,地区用 ISO 3166-1 的两字母代码,且必须语言在前、只写地区无效);地址必须是带协议的绝对地址;每个版本都要包含指向自己的那一条。
hreflang 是最容易被误解的一段标签。它不做翻译,不控制浏览器显示什么语言,也不是排名因素——它只做一件事:告诉搜索引擎「同一份内容还有这些语言或地区版本,请把对的那个交给对的人」。
也正因为职责单一,它的失效方式很安静:配错了不会有任何报错,页面照常访问,只有多语言流量悄悄流向错误的版本。所以只能靠规则去核对,而不能靠肉眼观察效果。
1最容易犯的四个错误
按出现频率排,前两条就能解释大部分失效案例。
| 错误 | 具体表现 | 后果 |
|---|---|---|
| 缺返回链接 | A 指向 B,B 没有指回 A | 可能整组注解被忽略 |
| 缺少自引用 | 每个版本没有列出自己 | 该组声明不完整 |
| 代码写错 | 用三字母语言码,或下划线连接,或只写地区 | 部分或全部注解被忽略 |
| 地址非绝对 | 写成相对地址 | 无法解析,注解失效 |
还有一个隐藏杀手:把某个语言版本的 canonical 指向了主语言版本。这等于告诉搜索引擎忽略该版本,会把 hreflang 的努力直接抵消。
2代码与写法规则
这部分是纯格式要求,逐条对一遍即可。
- 语言代码用两字母
- 采用 ISO 639-1,例如中文写
zh、英文写en,不是三字母缩写。 - 地区代码可选但格式固定
- 采用 ISO 3166-1 的两字母代码,用连字符与语言连接。下划线写法无效。
- 只写地区无效
- 必须语言在前。单独一个地区代码不构成合法的目标声明。
- 保留码会被忽略
- 留给其他用途的代码写在标签里会被直接忽略。要指向英国,用的是两字母的国家代码,而不是常见的那个缩写。
- 地址必须绝对
- 要带协议,形如完整的
https://开头的地址,不能写成相对路径。 - 别和其它属性混写
- 一个标签只承载一条 hreflang 声明,不要和别的替代关系属性混在一起。
代码写错属于「静默失效」里最冤的一类:标签在那,看着没毛病,搜索引擎却直接跳过。写完用工具逐条核一遍最省事。
3按顺序自查
不需要工具也能查出大部分问题,照下面走一遍。
- 列出站内所有语言或地区版本,做成一张对照表,先确认每一对「谁指向谁」都成对。
- 打开每个版本,确认它的标签集合里包含自己,并且和对照表完全一致。
- 逐条核对语言与地区代码,特别注意有没有误用保留码。
- 检查地址是否都是带协议的绝对地址。
- 检查每个版本的 canonical 是否指向自己。
- 最后确认只用了一种实现方式(页面标签、响应头、站点地图),不要在多个位置同时维护同一组声明。
顺着这个问题往下用
全部工具总览 →相关疑问
配了 hreflang 但流量没变化,是不是没生效?
hreflang 不会带来可见的排名提升,它只是把用户导向更合适的版本。想验证效果,看的是各语言版本的展示量与跳出率变化,而不是总流量。
必须加默认兜底的那一条吗?
不是强制要求,但强烈建议。缺少它时,语言匹配不上任何版本的访客只能由搜索引擎自行猜测,猜错时会把用户送到不合适的语言页。
可以用站点地图代替页面标签吗?
可以,两种方式地位等价。页面数量很多时用站点地图更好维护,但要保证声明完整且双向。关键是选定一种并保持一致,不要混用。
内容翻译得不完整,也算重复内容吗?
只有主体内容未翻译时才会被视作重复。只翻译导航和页脚这类框架内容的情形,恰恰是这类注解的典型适用场景。
继续看:相关问题与资料
全部问题解答 →内容说明:本页针对具体使用问题作答,方法步骤与数值由本站自行整理与复算,事实性内容以对应官方规范与文档为准。内容最后核对日期:2026-10-08。若发现错误,欢迎通过页脚反馈入口告知。
速查在线工具箱