报错是这么冒出来的。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 是蜘蛛的常态,判断异常要看组合特征,不能只看一个头。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。
