报错是这么冒出来的。整理跳转规则时把 /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 参数并限制最大跳数,超限就当失败处理。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。

作者 9823189