现场是这样的。Search Console 覆盖率里「因其他 4xx 问题被屏蔽」一天涨了三千条,抽查几个地址浏览器能打开,Nginx 日志里对应请求是 400,UA 却是 Googlebot。试过重提交 sitemap,条目还在涨。

中间走过弯路,把「站点对空 Referer 的请求做了拦截,蜘蛛正好不带 Referer」当成主因,改完现象没变。

真正麻烦的地方在于,几个原因的现象几乎一样。URL 里的 & 没转义被 WAF 判成参数注入,请求直接回 400;请求头带了超长 Cookie,头缓冲不够被 Nginx 拒掉;反向代理把 %2F 解码成路径分隔符,路由匹配失败。

上来先用蜘蛛 UA 复现一次

curl -sI -A "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" "https://www.example.com/a?x=1&y=2"

从日志里挑 400 的样本

grep ' 400 ' /var/log/nginx/access.log | tail -20

接着放宽请求头缓冲

large_client_header_buffers 4 16k;

剩下的就是把误报的规则编号临时放行

SecRuleRemoveById 942100

怎么算真的好了,看的是同一批现象。报告里新增的 4xx 条目停止增长,日志中 Googlebot 的 400 归零,原本正常的文章页重新回到已编入索引。

补一句。这个分类不区分 400、401、403,必须回日志看真实状态码,否则容易一直在错误的方向上改配置。报错文案容易误导,真正的原因往往在相邻那一层的日志里。

作者 9823189