搜索抓取

多语言站点的抓取路径:语言目录、hreflang 与入口链接怎么摆

多语言站点常出现只有默认语言被频繁抓取、其他语种迟迟不进队列的情况。本文从语言目录的摆法、hreflang 的用法、语言切换器与内链入口、Sitemap 分片几个角度,说明怎样让蜘蛛顺着可点的链接走到每个语言版本,并给出按语言分组核对日志的思路。

搜索抓取

多语言站点的抓取路径:语言目录、hreflang 与入口链接怎么摆

先分清“语言版本”和“语言入口”

多语言站点常见的日志形态是:默认语言一天被访问几百次,/en/、/ja/ 这类目录几天才出现一次。多数时候不是蜘蛛对语种有偏好,而是入口不可见——语言切换器是一个 button,或者靠 JS 拼出 URL 再跳转,机器拿不到可点的链接,自然走不到那个语言版本。

切换器要用真实链接

语言切换写成一排普通的 a 标签,指向各语言首页或当前页面对应的语言版本;每个语言页面都能链到其他语言版本,形成互链;切换器出现在 HTML 里,不要依赖异步插入。这三条做到,多语言抓取的问题会少掉一大半。

语言目录怎么摆:子目录、子域名还是参数

  • 子目录(example.com/en/):权重集中,内链传递直观,是多语言站点里比较常见的选择。
  • 子域名(en.example.com):抓取上更接近独立站点,需要各自准备入口和 Sitemap,跨站内链的传递会弱一些。
  • 参数(example.com/?lang=en):容易和其他参数搅在一起,规范化处理更麻烦。
  • 独立域名:运营成本高,抓取上也各管各的,适合本地化程度很深的场景。

用哪种形式没有标准答案,关键在一致性:每种语言版本都要有一个稳定、唯一、不带多余参数的 URL,并且这个 URL 从入口到详情页一路都能点得到。前缀一变、尾斜杠一变、大小写一变,日志里就会拆成好几份,核对起来非常费劲。

hreflang 不是抓取指令

hreflang 表达的是几个 URL 之间的语言与地区关系,它影响展示和归并判断,但不会替代入口链接。常见的写法问题有:

  • 只写单向:A 指向 B,B 没有指回 A,双向缺失容易被忽略。
  • 语言代码写错,或者在 zh-CN 与 zh-Hans 之间混用,地区代码本身不存在。
  • 指到的地址是 404、跳转目标,或者又被 canonical 指到了另一个 URL。
  • 缺少 x-default,默认语言版本没有被标注。
  • 试图用 hreflang 去纠正 canonical,两者指向不一致时信号互相抵消。

比较稳妥的做法是:每个语言页面在 head 里列全所有语言版本(包含自身)加 x-default;改版换目录后回头核对一遍,别留下指向旧路径的标注。

让每种语言都有可走的路径

  1. 导航和页脚放语言入口,链接分别指向各语言首页,而不是一个切换按钮。
  2. 每个语言版本都有自己的栏目页和列表页,不要只翻译首页,栏目页仍停留在默认语言。
  3. 语言内部做好内链:相关阅读、上下篇、标签页,让蜘蛛顺着链接能走进详情层。
  4. 面包屑带上语言前缀,逐级可点,层级关系更清楚。

Sitemap 按语言分片,核对更方便

  • 每个语言一个 Sitemap,只放该语言的 URL,避免一个文件里混着几十个语种。
  • 再用 Sitemap index 汇总,提交后可以按语言分别观察抓取情况。
  • Sitemap 里的 hreflang 标注(xhtml:link)可以和页面上的标注互相印证,但不要只依赖它。
  • 内容更新频繁时,分片也方便单独调整 lastmod,不用整包重写。

怎么核对:从日志看每种语言的抓取

  • 按路径前缀(/en/、/ja/)分组统计蜘蛛访问量,看是不是只有默认语言有量。
  • 看被抓 URL 的来源:如果其他语种页面的日志里几乎没有站内来源,说明内链入口太弱,只有 Sitemap 在推。
  • 确认语言切换器是不是唯一入口——它一旦是 JS 按钮,等于没有入口。
  • 检查默认语言的 canonical 是否覆盖到了其他语言版本,导致别的语种被抓却不被当作独立页面。
  • 看状态码:语言目录 302 回默认语言、参数版本反复 301 跳转,都会让抓取分散在无效地址上。
多语言站点的抓取问题,多数不是“机器不懂语言”,而是“找不到可点的路”。先把链接做出来,再谈各种标注信号。

落地顺序可以这样安排:先保证每种语言有独立且可点的入口目录;再补齐导航、面包屑和列表页内链;然后处理 hreflang 与 canonical 的一致性;最后用 Sitemap 分片和日志分组做核对。抓取是逐步推进的过程,改完之后按路径前缀看趋势,比只盯总量更有参考价值。