先给结论:测试工具能访问、实际用户失败,通常不是“工具骗人”,而是两者请求的条件不同。要复现,先把差异拆成可验证的几项——来源IP段、DNS解析结果、请求头(尤其是UA和Accept-Encoding)、协议版本、是否带Cookie或登录态、以及访问路径是否经过CDN或WAF。逐项对齐后,再决定保留现有配置、改写规则,还是退出当前方案。
测试工具往往从固定机房出口发起请求,DNS走的是权威解析或公共解析,UA是工具默认值,通常不带Cookie,也不执行JS。真实用户则可能走本地递归DNS、运营商缓存、浏览器完整请求头、登录态,还会执行页面脚本。这些差异里任何一项都可能让结果分叉。
可操作的第一步:在服务器访问日志里,按时间窗口筛出“工具成功”和“用户失败”两类请求,对比它们的User-Agent、来源IP、请求路径和返回状态码。如果失败请求根本没进日志,问题在到达源站之前(DNS、CDN、WAF);如果进了日志但返回403/404/5xx,问题在源站规则或应用逻辑。这个判断直接决定下一步查哪里,避免在错误层面反复改。
要复现,至少对齐以下几项,缺一项都可能复现失败:
假设一个场景:工具请求https://example.com/page返回200,用户访问同一地址返回403。日志显示用户请求带了某个特定Cookie,而工具没带。此时先不要改WAF全局规则,而是用带该Cookie的请求重放一次——如果复现403,说明规则与登录态相关;如果不复现,继续查IP段或地域规则。这个动作的结果会直接缩小范围。
保留现有配置适用于:差异只出现在少数用户、且能定位到具体规则(如某条UA黑名单误伤)。前提是你有权限调整该规则,并能用对齐后的请求验证放行。保留的代价是规则复杂度上升,需要后续持续观察同类请求。
改写规则或链路适用于:失败集中在某一类条件(如某地区、某运营商、某协议版本),且现有规则本身设计有缺陷。改写前先记录当前规则命中的请求样本,改完后用同样的样本重放,对比状态码变化。注意:robots.txt的抓取限制不等于可靠的索引移除,如果你改的是抓取相关规则,要清楚它影响的是抓取而非索引结果,站点地图也不保证收录。
退出当前方案适用于:差异无法稳定复现、规则来源不明、或维护成本已超过收益。退出的前提是先确认替代方案不会引入同类问题,而不是单纯关掉规则了事。
复现成功后,把“失败条件”写成可重复的步骤:解析到的IP、完整请求头、是否带Cookie、协议版本、返回状态码。这份记录的价值在于,下次同类问题出现时可以直接比对,而不必从零排查。如果复现失败,也要记录尝试过的条件组合,说明哪些差异被排除了——这同样是有效证据。
需要提醒的是:请求量或抓取量归零,不能单独证明某项处理正确。它可能是规则生效,也可能是解析变更、抓取预算调整或对方主动降频。要把日志中的状态码、请求头和解析结果一起看,才能区分原因。不同搜索引擎对协议、请求头和抓取策略的支持情况须分别核查,不能把一家的复现结论直接套用到另一家。
最终判断标准很简单:你能用一组明确的条件,稳定地让“失败”再次出现,也能通过改变其中一个条件让它消失。做到这一步,保留、改写还是退出,就有了可依据的取舍基础。