栏目重构时把 /old/a/ 301 到 /mid/a/,再由 /mid/a/ 301 到 /new/a/,还有一层从 http 到 https。日志里同一批内页的抓取耗时稳定在 2.4 秒,超时阈值是 3 秒。

一开始怀疑是「没有对跳转链做批量抽检,只有被投诉的那几条才发现问题」,查了一圈,方向不对。

这类报错背后常见的原因有几处,逐个排除就行。旧规则没有清理,新规则直接叠加,跳转链越滚越长。还有一种是内链模板里输出的还是中间层地址,蜘蛛每次都要多走一次。

少数情况下是重写规则写在 location / 里 静态资源走另一条 location 没有命中。

上来先抽样看跳转链到底有几跳

curl -sIL https://www.example.com/old/a/ | grep -iE '^(HTTP|location)'

再往下把中间层直接重写到最终地址

rewrite ^/mid/(.*)$ https://www.example.com/new/$1 permanent;

全站扫一遍超过两跳的地址

for u in $(cat urls.txt); do n=$(curl -sIL $u | grep -c '^HTTP'); [ $n -gt 2 ] && echo $u $n; done

末了把内链模板换成最终地址后复查

grep -rn "/mid/" wp-content/themes/ | head

改完先别撤,确认这几项。清理后抽检的两百条地址都只剩一跳,日志里内页抓取耗时回落到 0.3 秒,蜘蛛单日抓取条数涨了三成。

提醒一点。301 链每多一跳就多一次 TCP 往返,移动网络上后果更明显,改版时顺手清旧规则比事后扫链省事。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189