先看现象。站点上线五年的技术博客,百度蜘蛛一天只有 42 次请求,同期 Googlebot 有 1600 次。日志里 92% 的百度请求打在 /uploads/2019/ 下的老图片地址,返回全是 404,正文页一次都没被抓。

这类报错背后常见的原因有几处,逐个排除就行。图片目录按年份搬家后旧地址没做映射,外链和采集站还指着老路径。还有一种是404 页面返回 200 状态码并且带完整导航,蜘蛛反复重试同一批地址。

少数情况下是sitemap 里仍列着三万条已经删除的附件地址。

不容易想到的是,CDN 对 404 响应做了十分钟缓存 排查时看到的状态一直是旧的。

动手时先按状态码拆分百度请求量

awk '$0 ~ /Baiduspider/ {print $9}' access.log | sort | uniq -c | sort -rn | head

再往下把老图片目录整体重写到新路径或返回真实 404

location /uploads/2019/ { return 404; }

生成 sitemap 时过滤掉不存在的附件

SELECT ID FROM wp_posts WHERE post_type='attachment' AND post_status='inherit';

等前面都确认过,再重新提交 sitemap 并在抓取诊断里复验

curl -s https://www.example.com/sitemap_index.xml | head -5

改完先别撤,确认这几项。十天后 404 请求占百度抓取量的比例降到 11%,正文页日均抓取从零升到 300 次以上,索引量开始回升。

这里还有个坑。让已删除的目录一律返回真实 404,不要 301 到首页,否则会被判成软 404,预算照样被那条重定向链耗掉。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。

作者 9823189