网站收录

hreflang 标了却仍互相顶替:多语言版本的收录取舍与自查顺序

多语言站点常见的情况是,hreflang 都写了,索引里却只剩一个语言版本。本文从抓取路径、canonical 指向、双向标注和内容差异几个角度,梳理语言版本在收录上互相顶替的原因,并给出一条可执行的自查顺序,帮你在动标签之前先弄清问题卡在哪一段。

网站收录

hreflang 标了却仍互相顶替:多语言版本的收录取舍与自查顺序

先把 hreflang 的位置摆正

hreflang 的作用是告诉搜索引擎:这几个 URL 是同一内容的不同语言或地区版本,请按用户的语言给出合适的那个。它处理的是对应关系与展示的问题,不负责让页面进索引。一个语言版本能不能被收录,仍然取决于它能否被抓到、是否允许索引、以及内容本身值不值得留。

所以当你发现“只收录了英文版,中文版没进索引”时,先别急着改 hreflang,问题多半出在更前面的环节。

语言版本被顶替的常见原因

1. 蜘蛛根本走不到其他版本

不少站点用 JS 读取浏览器语言或 cookie,再跳到对应语言。对真实用户很方便,但蜘蛛通常没有语言偏好,可能永远只落在一个版本上。其他语言版本的 URL 没有被任何站内链接指向,就只能靠站点地图被发现。

  • 语言切换器是按钮加脚本,没有真正的 a 链接
  • 切换后 URL 不变,只是前端替换文案
  • 其他语言版本只出现在站点地图里,站内没有任何入口

2. canonical 把语言版本“降级”了

另一种常见写法是:所有语言版本的 canonical 都指向默认语言版本。这等于告诉搜索引擎“我只是它的副本”,那它自然不会单独留在索引里。如果每个版本都是独立内容,canonical 应该自指,语言对应关系交给 hreflang 表达。

3. hreflang 只标了单向

hreflang 需要成对出现:A 版本声明 B 是它的英文版,B 版本也要声明 A 是它的中文版。只在一侧标注,另一侧毫无说明,对应关系就是残缺的,搜索引擎可能只认它先看到的那一侧。

4. 各语言版本差异太小

如果几个版本是机器翻译直出、正文结构完全一致,只换了十几个词,那么从索引角度看它们高度相似。这种情况下,即使 hreflang 写得再完整,也可能只有一个版本被保留下来。hreflang 不会让重复内容变得不重复。

5. 语言代码与 URL 写法不统一

语言代码用错、大小写混乱、有的用子目录有的用子域名,或者 hreflang 值写成相对路径,都会削弱标签的可识别度。建议统一使用绝对 URL,语言代码遵循规范写法,例如 zh-Hans、zh-Hant、en、en-US。

hreflang 是“说明关系”,不是“强制保留”。它无法对抗 canonical、noindex、抓取不到这些更硬的条件。

一条可执行的自查顺序

  1. 能否直接访问:关掉 JS、清空 cookie,逐个粘贴每个语言版本的 URL,确认都能返回 200 且正文完整。
  2. 有没有站内入口:在不依赖脚本的前提下,页面里是否有指向其他语言版本的 a 链接。没有就补上,放在页脚通常最省事。
  3. canonical 是否自指:每个语言版本指向自己,不要把整组都指到默认版本。
  4. hreflang 是否双向:抽查两三个页面,确认 A 指向 B、B 也指向 A,并包含 x-default。
  5. 是否被禁止:检查这些 URL 有没有被 robots.txt、noindex 误挡,尤其是测试期留下的规则。
  6. 内容差异:随机抽一段正文对比,判断是“翻译”还是“换词”。差异不足的页面,考虑合并或明确指定保留哪个版本。
  7. 站点地图:确认各语言版本都在 sitemap 中,且与页面上的 hreflang 保持一致。

如果确实只想保留一个版本

有些站点的多语言版本只是过渡产物,维护成本高、内容又接近。这时应该明确表态,而不是靠 hreflang 指望搜索引擎自己挑:

  • 保留的版本:canonical 自指,正常参与索引
  • 不保留的版本:用 canonical 指回保留版本,或直接 noindex,两者选一,不要同时用
  • 如果该版本还要给用户看,就保留可访问性,只是不进索引

需要提醒的是,这类调整从生效到索引中反映出来需要时间,通常以周为单位。改完之后留出观察窗口,不要因为一两天没变化就反复切换标签。

观察什么,别盯什么

比起天天数“收录了几个语言版本”,更有价值的是看:每个语言版本是否有稳定抓取、搜索结果里是否出现了错误语言的版本、点击后是否跳到了用户看不懂的语言。抓取记录稳定、用户能落到正确语言,说明配置方向是对的;索引数量本身会有波动,不必因为短期起伏就大改结构。