站点按 IP 归属地做语言跳转,海外 IP 一律跳到 /en/。Googlebot 主要从美国节点抓取,每次都拿到 302,中文内页的收录量两个月掉了四成。
真正麻烦的地方在于,几个原因的现象几乎一样。跳转是按 IP 判断的,蜘蛛的出口 IP 与页面语言没有关系;302 是临时跳转,canonical 仍指向中文页,信号互相打架;跳转脚本由 JS 执行,蜘蛛拿到两份内容都算候选;hreflang 声明的版本和跳转落地的版本不一致。
动手时先用海外出口请求看返回码
curl -sI -A 'Googlebot' https://www.example.com/a/ | head -3
接着确认跳转是按什么条件触发的
grep -rn 'geoip\|GEOIP_COUNTRY' /etc/nginx/conf.d/
再往下对蜘蛛 UA 关闭地理跳转
if ($http_user_agent ~* 'Googlebot|Baiduspider') { set $skip_geo 1; }
复查中文页返回 200
curl -s -o /dev/null -w '%{http_code}\n' -A 'Googlebot' https://www.example.com/a/
恢复的判定其实很直接。蜘蛛请求中文页直接返回 200,GSC 里被排除的重定向条目停止增长,中文页收录量三周内回到原水平。
这里还有个坑。按 IP 跳转几乎都会误伤蜘蛛,要做多语言就用 hreflang 加显式切换入口,别让服务端替用户猜语言。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。
