网站收录

多语言版本互相抢收录:语言 URL 与 hreflang 的核对顺序

同一份内容的多个语言版本,常常只有一个能稳定出现在搜索里,另一个长期不露面,或者两个版本轮流顶替。本文从 URL 清单入手,梳理子目录、子域名、参数三种组织方式的差异,给出 hreflang 互相回指、canonical 归属、抓取与收录状态分开核对的具体顺序,帮助判断该收敛还是该保留多版本。

网站收录

多语言版本互相抢收录:语言 URL 与 hreflang 的核对顺序

同一份内容做了英文版、繁体版或面向不同地区的版本,搜索里却总是只出现其中一个,另一个长期不露面,或者两个版本轮流顶替。这种情况常被笼统归为“重复内容”,但更实际的第一步,是弄清楚有哪几个 URL 在争同一个入口,以及哪一个是主版本。

先把 URL 清单列出来,而不是先改代码

很多人一发现问题就去动 hreflang,结果越改越乱。更稳的顺序是先做清单:把同一份内容对应的所有地址整理成一行,包括语言子目录、子域名、参数形式,以及可能被外部引用过的旧地址。清单里每一项都要标注:返回状态码、canonical 指向、hreflang 指向、是否在 sitemap 里、是否有内链入口。这份表做出来,问题往往已经能看出七八成。

常见的三种组织方式,各自的坑不一样

  • 子目录(/en/、/zh-tw/):结构清楚,权重集中在主域,最容易处理。风险是漏配 hreflang 互相回指,或者某一语言目录没有内链入口,变成半孤立页面。
  • 子域名(en.example.com):技术上更独立,但容易被当成不同站点,收录和权重各自计算。要额外确认子域是否已被验证、是否单独提交过 sitemap。
  • 参数形式(?lang=en):最容易被当作同一页面的变体处理,也最容易出现参数顺序不一致而衍生出多份 URL。

hreflang 的核对顺序

  1. 每个版本都要指向自己,并且互相指回其他所有版本,单向指向通常不生效。
  2. 语言代码用规范写法,地区可选。写错或不存在的代码,等于没写。
  3. 需要有一个 x-default,指向默认版本或语言选择页。
  4. hreflang 里的 URL 必须是绝对地址、可抓取、返回 200,并且与 canonical 不冲突。
  5. 检查 canonical 是否横向乱指:A 语言页面 canonical 到 B 语言页面,等于主动把两个版本合并成一个,通常不是本意。
hreflang 是给搜索引擎的提示,不是强制指令。它解决不了“两份内容几乎一样”这个问题本身,只能帮助判断该给哪个地区的用户看哪一版。

内容本身是否真的不同

如果几个语言版本只是把模板头尾换了语言,正文仍然靠机器翻译逐句对应,甚至部分段落直接沿用原文,那么被合并、或者只保留一个版本,是常见结果。判断方法很朴素:把两个版本的正文各取一段,去掉导航和页脚,看信息是否等价。如果只是词对词的翻译,谈不上差异化。

抓取与收录状态要分开看

某个语言版本没有出现在搜索结果里,可能是三种情况:没被抓取、抓取了没进索引、进了索引但当前查询不展示。核对方式是对每个版本单独查状态,而不是只看主版本。常见误区是主版本收录良好,就默认其他版本也正常,结果等到流量明显偏向一侧才发现问题。

一份可以照着走的自查清单

  • 每个语言版本的 URL 都能直接打开,返回 200,不经过多级跳转。
  • hreflang 双向回指完整,语言代码正确,包含 x-default。
  • canonical 指向自身,不横向指向其他语言版本。
  • 各版本在 sitemap 中都有条目,并标注对应的语言关系。
  • 站内导航或语言切换器提供真实可抓取的链接,而不是纯 JS 下拉。
  • 旧的语言地址如果不再使用,做 301 指向对应的新版本,而不是直接 404。

处理完之后不要期待立刻变化。语言版本的归并和替换通常需要几轮抓取周期,期间保持 URL 稳定、不要再频繁调整 hreflang 指向,否则等于每次都在重置判断依据。