先别急着把某个状态码写进死链清单。同一地址在不同设备或登录状态下返回不同内容,通常说明你拿到的是多个“视图”,而不是一个稳定结论。正确做法是先固定对照条件,再分别取证,最后判断差异属于内容分支、权限分支还是缓存分支。
同一地址可能对应至少三层结果:服务器实际返回的响应、页面渲染后的可见内容、以及搜索引擎或平台最终采用的那一版。设备与登录状态最容易影响前两层,第三层则可能滞后。若只截一张手机端页面就判定死链,后续处理很可能打偏。
把待查地址先写成一行记录,包含完整路径、查询参数和协议。然后列出你手上的观察来源:桌面浏览器未登录、桌面浏览器已登录、移动设备未登录、移动设备已登录、命令行请求、站点日志。不是每个地址都要跑全,但至少要覆盖产生矛盾的那两种状态。
设备差异常来自 User-Agent、Accept-Language、Cookie 或客户端渲染;登录差异常来自会话 Cookie、Token、IP 归属或账号权限。把这两类变量混在一起测,就无法解释为什么同一地址一会儿正常、一会儿像死链。
假设一个地址在桌面未登录时返回 200 且正文完整,在移动端已登录时返回 404。可以按下面顺序做对照:
每次只改一个变量,并把结果写回同一行记录。若更换 User-Agent 后状态码从 404 变 200,说明设备识别参与了内容分支;若清除 Cookie 后才恢复,说明登录态或权限判断才是主因。这个动作会直接决定下一步:前者要检查服务端设备适配逻辑,后者要检查权限与重定向规则。
有时服务器本身返回一致,但 CDN、反向代理、浏览器缓存或服务端缓存让不同设备看到不同版本。判断方法不是反复刷新,而是对比响应头中的缓存标识、Age、Vary 以及实际响应时间。若同一请求在短时间内状态码跳动,缓存分片或缓存键设计错误比“链接已死”更值得先排查。
这一步的实际动作是:对可疑地址连续发起多次相同请求,记录每次状态码与缓存命中迹象。若结果在 200 与 404 之间摆动,就不要把它直接标为死链,而应标为“状态不稳定”,并先处理缓存键或回源策略。只有稳定复现的 404 或 410,才适合进入死链处置队列。
你自己的浏览器结果不等于搜索引擎或平台抓取时看到的结果。查站点日志或抓取记录,重点看抓取时使用的 User-Agent、来源 IP、请求路径和返回状态。若日志显示抓取端长期拿到 404,而你的已登录浏览器看到 200,那么对用户可见并不等于对抓取可见。
这里要避免一个常见误判:robots.txt 的抓取限制不等于可靠的索引移除,站点地图也不保证收录。若某地址被 robots.txt 阻止,你无法用“抓取量归零”单独证明它已被正确处理,因为归零还可能来自抓取预算分配、链接发现减少或服务端屏蔽。需要结合日志、响应状态和页面可见性分别核查。
对照结束后,把每个地址归入以下一种结论,并写明依据:
归类之后再决定动作:稳定死链才进入替换或重定向;权限分支先确认是否应对公开访问;设备分支检查适配逻辑;缓存分支先修缓存键;抓取视图差异则分别核查抓取限制与索引状态。若跳过归类直接批量提交死链,很可能把仍可访问的权限页或设备页误删,后续恢复成本更高。
最后,把对照条件、请求结果和结论一起存档,并注明假设与未验证项。这样下一次同一地址再出现矛盾时,你能直接复用对照方法,而不是重新猜测它到底算不算死链。