网站死链的访问、抓取和索引是三个不同阶段的结果:访问看的是用户或爬虫请求时服务器返回什么状态码,抓取看的是爬虫是否真的请求了这个 URL,索引看的是搜索引擎是否把这个 URL 收录进可检索库。要区分它们,不能只看一个数字,而要分别收集服务器日志、抓取统计和索引状态三类证据,再交叉比对。
要查的是死链 URL 的 HTTP 状态码和响应头。怎么查:用 curl -I 请求该 URL,或打开浏览器开发者工具的 Network 面板刷新页面,记录状态码、Location 头和响应时间。结果说明什么:返回 404 或 410,说明访问层已经明确告知资源不存在;返回 301 或 302,说明访问层仍在跳转,死链判断要跟随 Location 继续看最终地址;返回 200,说明访问层正常,问题不在访问阶段,应继续查抓取和索引。注意区分“可能原因”和“已经定位的原因”:状态码是 404 只说明访问层结果,不能直接断定搜索引擎已经把它从索引里移除。
要查的是服务器访问日志中该 URL 的爬虫请求记录。怎么查:在日志里按 URL 路径过滤,同时匹配常见爬虫 User-Agent,统计请求次数、首次和最后请求时间、返回状态码。结果说明什么:日志里有请求且状态码为 404,说明抓取阶段已经发生,死链已被爬虫发现;日志里完全没有请求,说明抓取阶段尚未覆盖该 URL,此时谈索引结果没有意义;日志里只有用户访问没有爬虫请求,同样说明抓取未发生。这里要区分搜索引擎、网页搜索、平台推荐和付费广告:广告落地页被访问不等于自然搜索爬虫抓取过,两者日志来源不同,不能混为一谈。
要查的是该 URL 在目标搜索引擎中的索引状态。怎么查:使用搜索引擎官方提供的站点索引查询方式,或搜索 site: 加具体 URL 做核对,同时查看站点地图提交后的覆盖报告(如果使用了搜索控制台类工具)。结果说明什么:显示已收录,说明索引阶段已完成,即使访问层曾返回 404,也可能存在索引滞后;显示未收录或已移除,说明索引阶段没有保留该 URL。这里必须分清不同搜索引擎的支持情况:一个搜索引擎未收录,不代表另一个搜索引擎也未收录,需要分别核查,不能用一个平台的结果推断全部。
要查的是 robots.txt 是否屏蔽了该 URL,以及站点地图是否仍包含它。怎么查:读取 robots.txt 中相关 Disallow 规则,确认该路径是否被禁止抓取;再检查站点地图文件里是否还列着这个死链。结果说明什么:robots.txt 的抓取限制不等于可靠的索引移除,被禁止抓取只影响爬虫能否请求,已经索引的 URL 仍可能留在索引里;站点地图不保证收录,列在站点地图中只表示你希望被抓取,不代表爬虫一定会抓、更不代表一定会索引。如果 robots.txt 屏蔽且站点地图仍包含,说明抓取和索引信号互相矛盾,应优先修正其中一项。
curl -I 或开发者工具记录状态码和跳转链。判断规则可以简化为:访问层 404 且抓取层有请求且索引层未收录,说明死链已被发现并移除;访问层 404 但索引层仍收录,说明索引尚未更新,需要等待或主动提交移除请求;访问层正常但抓取层无请求,说明问题在抓取覆盖而非死链本身。假设某页面返回 410,日志显示爬虫三天前请求过一次,索引查询显示未收录,这组证据指向“访问层已明确、抓取层已发生、索引层已移除”,可以判定该死链处理完成。
下一步:选一个你实际遇到的死链 URL,按上面五步记录访问、抓取、索引和规则四类证据,再根据判断规则决定是修复跳转、提交移除,还是先解决抓取覆盖问题。