多语言或地区化站点常有几套入口:子目录 /en/、/zh/,子域名 en.example.com,或者带语言参数的同一路径。这些入口在视觉上各自成立,但在蜘蛛看来,如果彼此之间没有清晰的关系说明,就容易被当作互不相关的站点分别抓取。结果是同一份内容被多次发现、多次回访,抓取预算被摊薄,新页面被发现的节奏也随之变慢。
入口分散通常表现在哪里
- 日志里同一篇内容出现多组路径前缀,抓取时间错开但频率接近;
- 某个语言版本的内链只指向自己这一套路径,跨语言入口靠外链或跳转维持;
- Sitemap 按语言拆成多份,但每份之间没有相互引用,也没有列出对应关系;
- 页面上的语言切换使用 JavaScript 或 302 跳转,蜘蛛不一定能顺着走完。
这些现象单独看都不算错误,合在一起就会让入口识别变得模糊。
排查顺序:从确认对应关系开始
- 先确认每个 URL 是否有唯一的主版本。 如果同一内容在多个路径下都能完整访问,需要决定哪一个是主要入口,哪一些是给用户看的语言版本。
- 核对 hreflang 标注是否双向且完整。 A 页面指向 B,B 页面也应当指回 A,指向自身的 x-default 不要遗漏。单向标注等于没有标注。
- 检查 canonical 与 hreflang 是否互相矛盾。 如果 hreflang 声明了多个语言版本,canonical 又把它们全部指向同一个 URL,说明信息本身就冲突。
- 抽查日志中这些 URL 的抓取频次。 观察是否出现同一内容多入口并行抓取的情况,以及哪种路径被抓得最多。
- 检查语言切换链接的实现方式。 用可以直接抓取的 a 标签,比依赖脚本或跳转更稳定。
内链与导航的引导方式
语言版本之间的互链应当落在正文之外的稳定位置:页头语言切换、页脚站点地图、栏目的语言列表。这几个位置的链接通常是全站模板,蜘蛛顺着任意一个页面都能走到其他语言入口。
需要注意的是,不要把语言切换做成“当前页 + 后缀”的临时拼接。若某些页面在某个语言下并不存在,拼接出来的地址会直接落到 404 或软 404,反而制造出无效入口。较稳妥的做法是维护一份语言与 URL 的对应表,切换时按表取地址。
Sitemap 与 URL 发现
多语言站点的 Sitemap 可以有两种处理:合并成一份,用 hreflang 标注在每条 URL 上;或者按语言拆分,每份 Sitemap 内部同样带标注。两种方式都可以,关键是别让同一批 URL 在多份 Sitemap 里重复出现且标注不一致。
另外,Sitemap 只列语言主入口,不列带参数的排序页、筛选页。参数入口交给内链自然发现即可,不必全部塞进 Sitemap,否则会让入口集合变得臃肿。
收敛后值得观察的指标
- 同一内容的多路径抓取次数是否下降,主入口的回访是否变得更规律;
- 新页面在主要语言入口下的首次发现时间是否趋于稳定;
- 日志里 404、301 的比例是否下降,尤其是语言切换产生的跳转;
- Sitemap 中 URL 数量与日志中实际被抓取的 URL 数量是否接近。
入口收敛是一个逐步调整的过程。改动后不要急着下结论,给蜘蛛一到两个抓取周期去反映变化,再对比日志中的路径分布。
如果站点同时使用蜘蛛池或其他外部入口做牵引,注意外部入口尽量直接指向语言主入口,而不是指向带参数的中间页或跳转页。入口越干净,路径判断越简单。