搜索抓取

多语言站点的 URL 结构与蜘蛛抓取:语言版本怎么被找到

多语言站点常出现主语言被抓、其他语言版本长期未抓取的情况。本文从 URL 结构、hreflang、语言切换器内链、Sitemap 拆分和自动跳转等角度,说明蜘蛛是如何发现并走到各语言版本的,以及可以用哪些方式自查覆盖情况。

搜索抓取

多语言站点的 URL 结构与蜘蛛抓取:语言版本怎么被找到

多语言或多地区站点有一个常见现象:主语言目录被蜘蛛抓得很勤,其他语言版本却长期停留在“已发现、未抓取”的状态。原因通常不在服务器,而在 URL 结构和内链——蜘蛛不会因为页面上写着“这是英文版”,就自动去抓另一种语言。

每个语言版本都是独立 URL,需要独立的入链

不管是 /en/、en.example.com 还是 ?lang=en,在蜘蛛眼里都是各自独立的地址。它们之间如果没有可点击的真实链接,发现路径就断了。默认语言版本往往占据首页和导航的主要位置,其他语言版本只靠 hreflang 标注关联,这时蜘蛛知道“关系存在”,却未必有理由马上抓取。

三种常见做法的抓取差异

  • 子目录(example.com/en/):与主站共享域名权重,链接传递最直接,蜘蛛沿站点结构就能走到。
  • 子域名(en.example.com):会被当作相对独立的站点,需要单独维护 Sitemap 和内链,抓取节奏可能和主域名不同。
  • 参数(example.com/page?lang=en):地址容易因参数顺序、大小写产生多个变体,蜘蛛需要额外判断是否同一个页面,抓取效率通常最低。

这里没有绝对的对错,但结构越接近普通目录,蜘蛛的理解成本越低。

hreflang 是关联说明,不是发现通道

hreflang 的作用是告诉蜘蛛这几个 URL 是同一内容的不同语言版本,它本身不负责“带路”。因此需要满足几点:各语言版本互相引用、每个版本包含自引用、必要时用 x-default 指向默认版本。如果只有单向标注,蜘蛛可能无法完整理解这组页面之间的关系。

把 hreflang 当成关系描述,把内链当成发现路径,两者缺一不可。

语言切换器要能被爬到

很多站点的语言切换器是 select 下拉或 JS 事件,蜘蛛点不动。更稳妥的做法是用真实的 a 标签:

  • 每个语言版本的导航或页脚,都放指向其他语言对应页面的链接;
  • 切换器用普通链接,而不是按钮触发;
  • 深层页面也要有出口,不要只让首页互相链接。

如果站内只有首页互链,深层语言页面很容易变成孤岛。

Sitemap 的分法

常见做法有两种:每个语言单独一个 Sitemap,在索引文件里汇总;或者在同一个 Sitemap 里用 xhtml:link 标注各语言版本。前者实现简单、排查直观,后者信息集中在一条记录里。选择哪一种主要看维护成本,关键是别漏掉语言目录下的深层 URL。

自动跳转与服务器的坑

按访问者 IP 或浏览器语言自动 302 跳转,是常见但容易出问题的做法:蜘蛛从一个固定 IP 抓取时可能只看到一种语言,其他版本就更难被发现。如果必须做跳转,至少保证不跳转时页面自身可访问,并提供手动切换入口。另外,多语言站点往往部署了多套服务或 CDN 规则,返回 5xx 或超时的比例上升时,蜘蛛会放慢抓取速度,语言目录这类“次要路径”通常最先被减少访问。

怎么检查

  1. 按语言目录拆分服务器日志,对比各目录的抓取次数和状态码分布;
  2. 抽查几个深层语言页,看它们在站内是否有对应的语言链接;
  3. 检查 hreflang 是否互相回指、是否有自引用;
  4. 确认各语言 Sitemap 是否被提交并能正常访问。

多语言站点的 URL 发现,本质上还是“有没有路可走”的问题。结构清晰、内链到位、服务器稳定,蜘蛛会按自己的节奏覆盖更多语言版本;反过来,只靠 hreflang 和自动跳转硬凑,效果往往有限。