先别急着判定工具报错或站点正常。测试工具成功、真实用户失败,通常意味着两者请求的路径不同:来源IP、地区出口、DNS解析、UA与请求头、是否携带Cookie或登录态、是否走CDN节点,任何一项不同都可能让同一URL得到相反结果。要复现,就得把“工具侧成立”的那组条件逐项替换成“用户侧成立”的条件,直到失败稳定出现。
假设你维护一个商品列表页,用某网站死链检查工具批量跑了两千个链接,全部返回200。但客服反馈,部分用户点击其中一些链接会看到空白页或超时。此时工具的结果并没有错,它只是证明了“从工具所在网络、以工具默认请求头访问这些URL,能得到200”。它没有证明“从用户所在网络、以浏览器请求头访问同一URL”也会得到200。
要复现,先取一个用户明确反馈失败的URL,把它当作样本,而不是继续跑全量。全量结果只能说明规模,不能说明差异来源。
复现的本质是控制变量。把工具侧的请求条件列出来,再逐项替换为用户侧条件,观察哪一项替换后结果翻转。
一个实际动作是:用命令行工具手动构造请求,把UA、Referer、Cookie逐项替换成用户浏览器里抓到的值。如果替换UA后状态码从200变成403,就说明差异来自请求头识别,而不是链接本身失效。下一步就该去查WAF规则或服务端UA过滤,而不是继续改链接。
工具返回成功,可能只是完成了TCP连接,也可能读到了完整响应体,还可能跟随跳转后落在了一个正常页面。这三者对用户的含义完全不同。
因此复现时要记录的不只是状态码,还要记录最终URL、响应体长度、是否包含关键内容片段。如果工具跟随跳转后报200,而用户浏览器在跳转链中途被拦截,两者并不矛盾。
个别样本成立、规模化后出现例外,往往说明工具结论有适用边界。以下情况不能把工具的成功当作全站正常:
这里要提醒一点:robots.txt 的抓取限制不等于可靠的索引移除,站点地图也不保证收录。同理,工具侧的可访问性不代表用户侧的可访问性,两者是不同层面的证据。
假设你替换UA后复现了403,接着应验证该规则是否只对特定路径或特定参数生效:把同一UA用于另一个正常URL,如果仍返回200,说明拦截与URL特征相关;如果全部403,说明是全局UA策略。这个结果决定你是改服务端规则,还是改工具配置。
如果替换网络出口后复现超时,下一步应对比两个出口的DNS解析结果和路由,确认是节点故障还是源站只对部分线路放行。此时工具本身不需要更换,需要更换的是测试条件。
复现的目标不是让工具报出和用户一样的错误,而是找到那个让结果翻转的变量。找到变量后,修复动作才有明确对象:改WAF规则、修DNS、补前端接口、调整CDN回源,而不是笼统地“再检查一遍死链”。