多语言或多地区站点的抓取问题,往往不是“抓不到”,而是“只抓到一个版本”。搜索蜘蛛顺着链接走,如果默认首页只暴露一种语言,其他语言的 URL 就只能靠 Sitemap 或外链被发现,速度会慢很多,日志里也容易出现某个语言目录长期空白的情况。下面按入口、标注、核对三步整理一套可落地的做法。
一、先确认每种语言都有可点击的入口
搜索蜘蛛发现 URL 的主要方式仍然是链接。如果语言版本没有静态可点的 a 标签,只能依赖 JS 渲染后的链接,发现速度就会打折扣。
- 语言切换器用 a 标签指向对应语言首页,而不是用脚本直接改写当前页面语言。
- 各语言版本的内链结构尽量保持一致,避免出现中文站有分类页、英文站只剩一个长列表的情况。
- 如果语言版本使用子域名或独立域名,在页脚或主导航中互相链接,不要只藏在一个下拉菜单里。
- 检查切换器链接是否带多余参数,例如每次都追加会话 ID,这会让同一入口出现大量不同地址。
二、hreflang 解决的是归属,不是发现
hreflang 的作用是告诉搜索引擎这些 URL 属于同一内容的不同语言版本,但它本身并不保证每个 URL 都被抓取。常见错误是只写了 hreflang,却没让每个语言版本进入 Sitemap 或内链,结果标注了却始终没有被抓。
- 每个语言版本的 URL 都应出现在 Sitemap 中,可以按语言分片,也可以在同一份文件中成组出现。
- hreflang 建议双向引用:A 指向 B,B 也要指回 A,单向标注容易被忽略。
- 语言代码与地区代码保持一致,zh-CN 与 zh-Hans 混用会明显增加后期核对成本。
- 不要让 hreflang 指向 404、重定向或带有 noindex 的地址,这类指向基本没有意义。
三、抓取路径的核对清单
可以按下面的顺序做一次自查,问题通常集中在前面几步。
- 在抓取日志里按语言目录过滤,例如 /en/、/ja/,看请求次数是否与页面数量大致匹配。
- 核对 Sitemap 中各语言的 URL 数量与实际可访问页面数量是否对齐,差值过大说明有页面没进清单。
- 从默认语言首页出发,数一数到其他语言详情页需要几步,超过四步就考虑补内链或增加语言首页入口。
- 抽查语言切换器,在关闭 JS 的情况下确认仍能看到指向其他语言的链接。
- 确认各语言目录的响应时间接近,避免某个目录因为回源慢而抓取频次偏低。
- 查看是否所有语言版本都返回 200,语言目录首页出现 302 跳回默认语言时要特别留意。
四、容易被忽略的几个点
一是自动跳转。根据 IP 或 Accept-Language 把访客从 /en/ 跳到 /zh/,如果这类跳转对所有访问者生效,搜索蜘蛛也可能看不到英文内容。更稳妥的做法是在页面上给出提示和链接,让用户自己选。二是机器翻译内容的大量铺开,这类页面即使被发现,也很难获得较高的抓取优先级,不如先把核心语言版本做扎实。
发现和抓取是两件事:被 hreflang 标注不等于被抓取,被抓取也不等于会被收录。
五、一个可执行的推进节奏
建议按“新增语言版本先补内链、再进 Sitemap、最后观察日志”的顺序推进。每次上线新语言,先在日志里确认该目录有稳定请求,再考虑扩大内容量。如果某个语言目录长期没有抓取记录,优先检查入口链接、robots.txt 和服务器响应,而不是反复重复提交 Sitemap。