现场是这样的。站上用 cookie 记住访客语言,第一次来按 Accept-Language 跳转,蜘蛛没有这个头,每次都被落到中文首页,英文目录三周没新增收录。

中间走过弯路,把「sitemap 里英文地址和中文地址输出成了同一批 URL」当成主因,改完现象没变。

把日志和配置对完,能解释这个现象的基本就这几处。按 cookie 和请求头做 302 分流,蜘蛛每次都拿不到英文地址;英文页没有独立可访问的入口链接,全靠前端按钮写 cookie;CDN 把带 Vary: Accept-Language 的响应缓存串了版本。

第一件事是用纯英文请求头复现蜘蛛视角

curl -sI -H 'Accept-Language: en-US' https://www.example.com/

随后确认是否返回 302 而不是 200

curl -s -o /dev/null -w '%{http_code} %{redirect_url}' https://www.example.com/en/

接着把语言选择改成目录直链不写 cookie

add_filter('locale', function(){ return 'en_US'; });

剩下的就是检查 CDN 是否按语言头分缓存

curl -sI https://www.example.com/en/ | grep -i vary

恢复的判定其实很直接。英文目录从站内导航可直接点到,日志里开始出现对 /en/ 的 200 请求,两周后英文页收录数从两位数涨到四位数。

补一句。cookie 分流对用户友好但对抓取极不友好,多语言最好一个语言一个固定目录,切换只做链接不做重定向。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。

作者 9823189