报错是这么冒出来的。整理跳转规则时把 /old-a/ 指到 /new-b/,另一条规则又把 /new-b/ 指回 /old-a/,日志里这两个地址被反复请求,GSC 报重定向错误,同目录的正常页面抓取也变少。
中间走过弯路,把「旧站和新站的跳转配置各写一半,合并后成了环」当成主因,改完现象没变。
原因不止一个,得分开看。两条 rewrite 互相指向,没有任何一条落到 200。也可能是规则按顺序匹配,后写的规则覆盖了前面设置的落地页。
另外,监测脚本只检查单跳 301,没有跟随完整链条。
跟随完整跳转链看落到哪里
curl -sIL https://www.example.com/old-a/ | grep -Ei 'HTTP/|location'
接着列出所有相关 rewrite
grep -rn 'old-a\|new-b' /etc/nginx/conf.d/
保留一条直达 200 的规则并删掉回指
rewrite ^/old-a/$ /new-b/ permanent;
复查同目录其他地址
curl -s -o /dev/null -w '%{http_code} %{num_redirects}\n' https://www.example.com/old-c/
恢复的判定其实很直接。链条长度变为 1 且落地页返回 200,日志里循环请求消失,该目录的抓取量一周内恢复。
重定向监测只看首跳会漏掉环路,脚本要带 L 参数并限制最大跳数,超限就当失败处理。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。
