网站收录

多语言站点的收录错乱:语言版本、hreflang 与 canonical 的核对顺序

多语言或多地区站点常出现部分语言版本不被索引、搜索结果里只出现一种语言的情况。本文按 URL 结构、hreflang、canonical、入口链接四步拆开核对,说明每一步容易出错的地方,并给出一份可直接照做的自查清单。

网站收录

多语言站点的收录错乱:语言版本、hreflang 与 canonical 的核对顺序

多语言或多地区站点常遇到一类现象:明明每个语言版本都有独立 URL,搜索结果里却只出现其中一两个,或者中文页面出现在英文搜索结果里。这通常不是蜘蛛对你的站有意见,而是语言版本之间的关系没有表达清楚:哪几个是同一份内容的不同版本、哪几个是各自独立的页面,搜索引擎只能从代码和链接里读取答案。

先分清两件事:语言版本不是重复内容

同一个页面翻译成五种语言,本质上是五个面向不同用户群的独立页面,理论上应该各自被索引。但如果处理不当——比如所有语言版本共用同一个 canonical,或者语言版本之间只有 JS 切换、没有独立可访问的 URL——就会被当成一份内容处理。

反过来,同一语言下的不同 URL(带参数、大小写差异、带默认文件名)才是需要收口的重复内容。这两件事的解法刚好相反:前者要突出各自的独立性,后者要合并到唯一地址。混在一起改,往往越改越乱。

第一步:确认 URL 结构是否可被抓取

三种常见结构

  • 子目录:example.com/zh/、example.com/en/,最容易维护,信号集中,适合大多数站点。
  • 子域名:zh.example.com、en.example.com,部署灵活,但常被当成独立站点看待,需要更多信号来关联彼此。
  • 独立域名或地区域名:example.cn、example.com,地区信号最强,但内容同步和运营成本最高。

结构本身没有绝对好坏,问题多出在混用:一部分语言放在子目录,一部分放在子域名,导航又互相跳转。抓取路径越绕,被完整发现的机会就越少。

第二步:hreflang 写对了吗

hreflang 的作用是告诉搜索引擎这几组地址是同一内容的不同语言版本,请分别处理。常见错误有:

  • 只写了单向引用,A 指向 B,B 却没有指回 A。
  • 语言代码格式写错,例如把 zh-CN 写成 zh_CN 或 cn。
  • 指向了会跳转的旧地址,或者指向已经 404 的页面。
  • 只写在 sitemap 里而页面 HTML 里没有,两边说法不一致。
  • 漏写自己指向自己这一条。
hreflang 不解决收录问题,它只负责把语言版本之间的关系说清楚。页面能不能进索引,前提仍然是可被抓取、有内链入口、内容本身站得住。

第三步:canonical 要指向本语言版本

最常见的错误是:所有语言版本的 canonical 全部指向英文或主语言版本。这等于直接声明其他语言页面是副本,长期看这些页面很难稳定留在索引中。

正确做法是每个语言版本的 canonical 指向自身。只有在处理同语言下内容确实相同的变体地址时,才让 canonical 指向另一个地址。

第四步:入口和语言切换方式

  • 语言切换尽量做成可点击的普通链接,而不是纯 JS 下拉或按钮跳转。
  • 每个语言版本都应有对应的导航和栏目页,不要只翻译一个首页。
  • 默认语言入口放在根路径或首页显眼位置,方便顺着链接走。
  • 如使用自动跳转,要提供手动切换,避免跳到无法返回的页面。

自查清单

  1. 每个语言版本是否有稳定、不重叠的 URL,且可直接访问?
  2. hreflang 是否双向、语言代码正确、指向可访问地址、包含自引用?
  3. canonical 是否都指向自身语言版本?
  4. 页面 HTML 与 sitemap 中的 hreflang 是否一致?
  5. 语言切换是否为普通链接,蜘蛛能顺着链接走遍所有版本?
  6. 各语言版本是否有真正的本地化,而不只是机器翻译后一字不改?

收口顺序建议

先解决能不能被抓到(入口与链接),再解决是不是被当成同一份(hreflang 与 canonical),最后才看内容质量与本地化程度。顺序颠倒的话,改完 hreflang 但语言页面根本没有内链入口,短期内很难看到变化。

调整之后建议观察一段时间,用站点日志确认各语言版本的抓取频次,再结合索引状态判断。多语言站点的信号传递本来就比单语言站点慢一些,一次改动之后不必反复来回修改配置。