先给结论:当源站直接返回正常而通过边缘节点访问出现 4xx/5xx 或超时,不要只保留“页面打不开”的截图。你至少应保留同一 URL 在源站直连与边缘节点两条路径上的响应头、时间戳、节点标识、请求方法与完整重定向链,并把这些记录固定到同一个可复现的请求上。这样做的目的不是证明谁对谁错,而是把“源站正常、边缘异常”的分歧变成可核对的项目。
假设某站点的产品页 /p/example 被内链引用。运维在源站服务器上直接请求,得到 200;SEO 通过公网域名请求,连续两次得到 404,且响应来自边缘节点。此时团队里可能出现三种说法:页面确实被删了、边缘缓存没刷新、源站某次发布把文件删了又恢复。三种说法对应的证据不同,不能靠一句“我这边是好的”结束。
把分歧转成项目,第一步是固定请求条件:同一 URL、同一方法(GET 或 HEAD 要写清楚)、同一 Host 头、是否带 Cookie、是否跟随重定向。第二步是同时采集两条路径的证据。第三步才是判断死链是否存在,以及是否需要清理内链或改配置。
源站侧要保留的是原始响应,而不是经过代理后的结果。建议记录:请求时间(含时区)、请求 URL、请求方法、源站返回的状态码、响应头中的 Content-Type、Cache-Control、ETag 或 Last-Modified、响应体前若干字节或明确的空响应标记。如果源站有访问日志,同时保留该次请求在日志中的对应行,用来核对是否真的到达了应用层。
边缘节点侧要保留的是路径信息。建议记录:边缘节点标识或机房标识、边缘返回的状态码、Age、X-Cache 一类缓存命中标记(若存在)、Via 或类似代理链字段、Location(若发生重定向)、以及边缘节点回源时看到的源站状态。若边缘节点没有暴露这些字段,就把“缺少哪些字段”本身作为证据写下来,而不是用推测补全。
两条路径的记录必须能对齐到同一次或同一组请求。做法可以是在短时间内连续发起,并保留请求发出的时间戳。若两次请求间隔过长,源站可能已经发生变化,证据的可比性会下降。
下面是一组可区分原因的证据对照,仍以上面的假设为例:
这里要强调一个动作及其影响:如果你先按“死链”处理,把内链删掉或改成 301,那么边缘异常的证据会被覆盖,后续再排查时很难还原当时两条路径的差异。相反,先保留证据再决定是否改链接,能让后续动作有依据。
记录不必复杂,但要能让另一个人复现。可以按下面顺序整理:
如果团队要把这条记录交给开发或运维,最好附上可执行的请求命令或检查项,而不是只给结论。命令中的域名、路径和请求头应使用实际值;若涉及内部地址,按团队规范处理,不要写进公开文档。
只有当源站和边缘节点在多次、可比的请求下都返回表示资源不存在的状态,并且排除了缓存、回源改写和发布时序之后,才适合按死链处理。若只有边缘节点异常,而源站持续正常,更合理的动作是修边缘配置或刷新缓存,而不是删内链。若边缘节点异常是间歇性的,应保留多次请求的时间序列,观察是否与发布、缓存过期或节点切换相关。
另外,抓取工具或监控里某条 URL 的请求量归零,不能单独证明死链已被正确处理。它也可能是抓取频率调整、监控规则变更或该 URL 不再被引用所致。判断时要回到响应证据本身。robots.txt 的限制不等于索引移除,站点地图也不保证收录;这些规则不能替代对源站与边缘响应差异的核对。若站点同时使用 HTTPS,也不要因为证书正常就认为边缘回源一定没有问题,两者需要分别检查。
把上面的记录做完后,你会得到一个明确的分岔:证据指向边缘缓存或回源配置,就按边缘问题处理;证据指向源站资源确实不存在,才进入死链清理流程。这样,多个角色对同一事实的不同理解,就变成了可以逐项核对的项目。