报错是这么冒出来的。改版时按栏目根路径生成了 301 映射,/old/list/ 跳到 /new/list/ 没问题,但 /old/list/page/2/ 没有对应规则,全部 404。Search Console 一周内报了四千条 404。
中间走过弯路,把「改版前没有跑全量爬虫,旧站的分页地址没进清单」当成主因,改完现象没变。
原因不止一个,得分开看。映射表只按栏目根路径生成,没有覆盖分页模式。也可能是分页 URL 的层级和根路径不同,正则只匹配了结尾。
另外,404 出现后没有及时补规则,蜘蛛已经降低了抓取。
从旧 sitemap 里提取分页地址
grep -o '<loc>[^<]*page/[0-9]*/</loc>' old-sitemap.xml | wc -l
补一条分页重写规则
rewrite ^/old/list/page/([0-9]+)/$ /new/list/page/$1/ permanent;
然后逐页验证跳转结果
for p in 1 2 3 4 5; do curl -sI https://www.example.com/old/list/page/$p/ | grep -i location; done
末了用爬虫复查旧站地址
wget --spider -r -nd -nv https://old.example.com/list/ 2>&1 | grep -c '404 Not Found'
别只看报错消失,验证要多做一步。分页地址全部 301 到新目录对应页,Search Console 的 404 增长停止,第二页的收录在两周内恢复。
301 映射要按 URL 模式写而不是逐条列,分页、筛选、标签这些模式最容易漏,改版前先跑一遍全量爬取。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。
