改版两次后,老地址 /p/123 跳到 /post/123 再跳到 /article/123 最后到 /a/123,四跳才到终点,蜘蛛日志显示抓到第二跳后停止,新地址一直没被索引。
这类报错背后常见的原因有几处,逐个排除就行。每次改版都新增一层跳转,旧规则没有合并。也可能是中间某一跳返回 302,信号没有传递。
另外,跳转目标带查询串,最终地址每次都不一样。
先打印完整跳转链
curl -sIL https://www.example.com/p/123 | grep -Ei "HTTP/|location"
然后把多跳合并成一次直达
rewrite ^/p/(\d+)$ /a/$1 permanent;
剩下的就是确认全站没有超过两跳的链
for u in $(head -50 urls.txt); do curl -sIL -o /dev/null -w "%{num_redirects} $u\n" $u; done
同一份数据我导出了两份,一份留底,一份拿来试。
这类问题以前遇到过,但这次的触发条件和上次不一样。
恢复的判定其实很直接。抽查的五十条地址 num_redirects 都不超过 1,日志里 301 总次数下降六成,新地址在两周内进入索引。
提醒一点。每做一次改版都要回头收拾旧规则,跳转链一旦超过两跳,权重和抓取预算都在路上消耗掉了。报错文案容易误导,真正的原因往往在相邻那一层的日志里。
