做死链查询时,日志里最该先核对的是请求状态码、请求URL、来源页URL(Referer)、User-Agent、请求时间、响应字节数这几个字段。它们能帮你判断一条链接是“真的死了”,还是只是被临时拒绝、被爬虫跳过、或由页面自身跳转造成。只看状态码一项,很容易把可恢复的访问失败误判成死链。
死链查询的目标是找出指向已失效资源的链接。日志中同一现象可能有多个解释,不能一看到4xx就下结论:
404:资源不存在,最接近通常说的死链,但也要看是否由错误拼写、大小写、路径变更引起。410:资源被明确移除,语义上比404更确定,但仍需核对URL是否为目标资源。403:可能是权限或防盗链拦截,不代表资源消失,不能直接当死链处理。429、503:多为限流或服务不可用,属于临时状态,应结合时间与重复次数判断。301、302:是跳转,不是死链;但如果跳转终点又是404,问题出在终点。因此,核对字段的意义在于把“状态”还原成“哪条链接、从哪来、被谁请求、何时发生”。
以常见的服务器访问日志(如 Nginx、Apache 的 combined 格式)为例,逐项核对:
如果日志里没有Referer,说明该请求可能是直接访问、来自隐私设置屏蔽了来源,或由脚本发起,这时不能仅凭缺失Referer断定没有来源页。
假设你在日志中筛出若干条404记录,可以按下面顺序处理:
这个步骤的代价是需要能访问原始日志并具备筛选能力;如果只有汇总报表,字段不全,判断精度会下降。
robots.txt 的抓取限制不等于可靠的索引移除,日志里因robots被拒的请求也不能当作死链证据。站点地图不保证收录,地图里列出的URL仍可能在日志中返回404。HTTPS 不保证安全无漏洞或排名,它和死链判断没有直接关系。不同搜索引擎对状态码和跳转的处理须分别核查,不要用一家爬虫的表现推断全部。
下一步:从日志中导出最近一周的状态码为4xx的记录,按请求URL和Referer两列做透视,先修来源页上指向404的链接,再复看日志验证。