报错是这么冒出来的。WAF 加了一条「无 Referer 视为异常」的规则,本意是挡采集。蜘蛛抓取时不带 Referer,整站请求被判异常,百度抓取诊断连续 403,收录两天掉了 2000 条。

中间走过弯路,把「规则没有排除已知搜索引擎 UA」当成主因,改完现象没变。

真正麻烦的地方在于,几个原因的现象几乎一样。规则把 Referer 为空当成唯一判断条件。少数情况下是蜘蛛请求本来就不带 Referer,属于正常行为。

另外,403 页面返回 200 状态,站长平台看不到真实错误。

带蜘蛛 UA 且不带 Referer 试一次

curl -s -o /dev/null -w '%{http_code}\n' -A 'Baiduspider' https://www.example.com/p/1

接着看 WAF 命中日志里的规则编号

grep 'referer' /var/log/waf/rule.log | tail -10

再往下换 Bingbot 再验证一次

curl -s -o /dev/null -w '%{http_code}\n' -A 'Bingbot' https://www.example.com/p/1

末了确认 403 页面返回的是真实状态码

curl -sI -A 'Baiduspider' https://www.example.com/p/1 | head -1

同一份数据我导出了两份,一份留底,一份拿来试。

恢复的判定其实很直接。蜘蛛 UA 的空 Referer 请求返回 200,站长平台抓取诊断恢复,收录止跌。

补一句。空 Referer 是蜘蛛的常态,判断异常要看组合特征,不能只看一个头。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。

作者 9823189