搜索抓取

多语言站点的抓取路径:蜘蛛怎么找到并区分各个语言版本

多语言站点的次要语言版本长期不被抓取,往往不是服务器问题,而是入口断了。本文梳理蜘蛛发现语言版本的几种途径、hreflang 与内链各自的分工、URL 结构对抓取路径的影响,以及 canonical 与 hreflang 冲突带来的常见问题。

搜索抓取

多语言站点的抓取路径:蜘蛛怎么找到并区分各个语言版本

多语言或多地区站点常见的困境是:主语言页面抓得挺勤,其他语言版本却长期停留在“已发现未抓取”。问题往往不在服务器,而在于蜘蛛从入口到各语言版本的路径不通,或者被自身的规范化设置绕晕。

蜘蛛从哪里发现语言版本

蜘蛛不会“翻译”页面,它只是沿着链接和文件清单走。多语言站点的语言版本,通常通过以下几个入口被发现:

  • Sitemap:每个语言目录如果有独立的 sitemap,蜘蛛可以直接从清单拿到 URL,不必依赖内链。
  • HTML 链接:导航栏、页脚、语言切换器里真实可点的链接。
  • hreflang 标签:标注各语言版本之间的对应关系。
  • Sitemap 中的 hreflang 标注:与页面上的 hreflang 同源,只是表达位置不同。

hreflang 不是抓取入口

很多人以为页面上写了 hreflang,蜘蛛就会顺着它去抓其他语言版本。实际上 hreflang 的主要作用是告诉搜索引擎“这几个 URL 是同一内容的不同语言版本,请分别展示给对应语言的用户”,它更接近一种关联声明,而不是一条可点击的抓取路径。真正把蜘蛛带进语言版本的,仍然是 HTML 里的链接和 sitemap 里的 URL。

所以会出现这种情况:A 语言页面在 hreflang 里指向 B 语言,但 B 语言页面没有任何站内链接指向,sitemap 里也没列,结果 B 语言版本迟迟不被抓取。稳妥的做法是让 hreflang、sitemap 和站内链接三者指向同一批 URL。

语言切换器最容易断链

语言切换器是蜘蛛进入其他语言版本最自然的入口,也是最容易出问题的地方:

  • 用 JS 下拉菜单渲染,切换项在原始 HTML 里根本不存在;
  • 切换器只保留当前页面的语言版本,其他语言需要用户操作后才生成链接;
  • 切换器链到语言首页,而不是当前页面的对应语言版本,导致深层内容缺少入口;
  • 切换器链接被加上 nofollow,或放在被 robots.txt 屏蔽的路径下。

把切换器写成一排普通链接,并尽量让它指向当前页面的对应语言版本,深层页面的语言版本才会有稳定入口。

URL 结构决定抓取路径的分叉方式

子目录

例如 /en/、/jp/ 这类结构,主域权重集中,站内互链方便,蜘蛛从首页就能走到各语言目录。缺点是所有语言版本共享同一套域名下的抓取资源,某个语言目录内容多时容易挤在一起。

子域名或独立域名

例如 en.example.com,抓取上更接近独立站点,需要各自准备 sitemap,也更容易出现某个语言站长期抓取量偏低。此时跨语言互链和 hreflang 的准确性会更关键。

小心语言版本互相抢占

canonical 与 hreflang 冲突,是多语言站点最常见的自伤方式:hreflang 说“这是英文版”,canonical 却指回中文主版,等于告诉蜘蛛这个英文 URL 不是独立页面。结果是蜘蛛要么不抓,要么抓了也不长期保留。两者要保持一致:canonical 指向自己,hreflang 指向对应语言版本。

判断标准很简单:把每个语言版本当成独立页面来对待。它有自己的 URL、自己的内容、自己的内链入口和 sitemap 记录,就不容易被当成重复内容处理。

上线前后可以做的检查

  1. 关掉 JS,看语言切换器里是否还有可点击的链接;
  2. 抽查几个深层页面,确认每种语言都有对应 URL,且能通过站内链接到达;
  3. 确认每个语言目录的 sitemap 已提交,且其中 URL 可以正常访问;
  4. 检查 hreflang 是否成对出现,返回链接是否完整;
  5. 确认 canonical 与 hreflang 不互相矛盾;
  6. 观察服务器日志里各语言目录的抓取分布,找出长期没有蜘蛛访问的目录。

多语言站点的抓取问题,多数不是抓取速率不够,而是路径本身不通。把入口补上、把规范化设置理顺,剩下的交给时间。