先别急着改链接或回退配置。测试工具能访问、实际用户失败,通常说明失败条件不在“目标地址是否存在”这一层,而在请求被发出的方式上。要复现的是:从哪些网络位置、带哪些请求头、以什么身份、按什么顺序访问时才会失败。把这几项固定下来,再让死链工具按同一条件重跑,结果才有可比性。
测试工具与真实用户之间,差异来源可以粗略分成两处。请求侧包括出口 IP、DNS 解析结果、User-Agent、Referer、Cookie 或登录态、HTTP 版本、是否跟随跳转、超时阈值、并发数。目标侧包括源站是否按 IP 或区域返回不同内容、CDN 缓存命中哪一份副本、WAF 是否拦截了某个特征、是否只对特定 UA 返回 403 或验证页。
判断顺序建议先请求侧、后目标侧,因为请求侧更容易在本地复现。如果同一 URL 换一个出口网络就失败,问题多半在解析或边缘节点;如果换 UA 就失败,问题多半在源站规则或防护策略。这一步的意义是缩小范围,而不是立刻下结论。
条件一:能固定出口、请求头和身份。此时优先做“同条件重放”,让死链工具用与失败用户一致的参数去访问。可执行的动作是把失败请求的原始信息整理成一份最小复现集:完整 URL、请求方法、UA 字符串、Cookie 或登录态是否携带、来源页、发生时间与时区。拿到后,用工具按同一组参数扫描单个 URL,而不是整站扫描。结果若稳定复现失败,说明失败可归到请求特征上,下一步就去比对源站或边缘规则里与这些特征相关的部分。
条件二:无法固定出口或身份。例如失败只发生在某些地区、某些运营商或登录后。此时不要追求一次性复现,而是做“分层对照”:先用工具从至少两个不同网络位置访问同一 URL,记录各自的状态码与响应体片段;再让失败用户提供同一时间的访问结果。若只有特定位置失败,重点转向 DNS 解析、CDN 节点与区域规则;若所有位置都失败但工具此前成功,重点转向缓存过期或源站刚刚变更。这个动作的结果决定下一步是查解析链路还是查发布记录。
需要注意,工具报出的状态码归零或抓取量下降,本身不能单独证明处理正确。它也可能来自超时阈值设置过短、并发过高触发限流、扫描被中途终止,或目标站点临时不可用。要排除这些解释,可以降低并发、延长超时后重跑同一批 URL,看结果是否变化。
假设某列表页在工具里返回 200,但部分用户点击后看到空白页。第一步,取一位失败用户的完整 URL 与来源页,用工具按相同 UA 和登录态访问该 URL,若仍返回 200 但响应体为空,说明状态码不能代表内容可用。第二步,换用不带登录态的请求重试,若返回跳转或 403,则问题在身份校验而非链接。第三步,把这两次结果与失败用户的实际截图时间对齐,确认是否同一时段。这个例子只用于说明比较方法:固定变量、逐项替换、记录差异,数字和结论都取决于实际观测,不预设结果。
复现成立的前提是你能拿到失败请求的真实参数,并且工具允许你修改这些参数。如果工具只能按默认 UA 和默认超时扫描,它的“成功”只代表默认条件下可达,不能代表所有用户可达。另外,robots.txt 的抓取限制不等于可靠的索引移除,站点地图不保证收录,这些与本次复现无直接关系,不要混进排查结论里。不同搜索引擎和不同防护产品对请求特征的处理方式不同,涉及具体平台时应分别核查其文档,而不是套用同一套判断。
把复现条件写清楚之后,再决定改链接、改缓存还是改防护规则,改动才有可验证的对照基准。