用日志做死链检测时,最该先核对的是状态码、请求URL、来源页URL和User-Agent这四类字段。状态码决定“是不是死链”,请求URL决定“死的是哪个地址”,来源页URL决定“从哪里发现它”,User-Agent决定“这条记录值不值得优先处理”。只看状态码会把大量正常跳转和权限拦截误判为死链,只看URL又无法判断影响范围。
服务器访问日志和搜索引擎抓取日志经常被混在一起看,但它们的字段结构不一样。
如果你要判断“某个死链是从哪个页面被发现的”,服务器日志里的Referer更有用;如果你要判断“爬虫是否还在反复抓这个死链”,抓取日志更直接。两者不能互相替代。
状态码是最核心的字段,但“非200就是死链”是错的。按处理优先级可以这样分组:
核对时建议把状态码和请求URL放在一起看,因为同一个URL在不同时间可能返回不同状态码。如果某URL在日志里既出现200又出现404,说明它可能是间歇性故障,而不是稳定死链。
请求URL告诉你“哪个地址被请求了”,来源页URL告诉你“谁在引用它”。这两个字段成对出现,才能判断死链的影响路径。
实际操作时,可以按下面的顺序核对:
这里有一个常见坑:URL里的查询参数会让同一个页面产生大量不同记录。比如/page?id=1和/page?id=2可能指向同一模板。核对时可以先去掉无意义参数再聚合,否则会把一个死链误判成几十个。
User-Agent能区分请求来自普通用户、搜索引擎爬虫还是监控工具。同样一个404,来自真实用户的请求通常比来自爬虫的请求更值得优先修。
判断时可以这样用:
需要注意,User-Agent可以被伪造,不能只凭它下结论。它更适合作为排序依据,而不是唯一证据。
面对日志里筛出的一批死链,通常有两种处理方案:直接删除或屏蔽,以及修复或做301跳转。
选择步骤可以简化为:先看该URL是否有站外来源或站内重要入口,再看是否有主题一致的新页面。两者都有,选301;两者都没有,选删除或410。如果只是临时故障导致的5xx,先不处理,观察是否恢复。
另外要注意,robots.txt的抓取限制不等于可靠的索引移除。屏蔽一个URL后,它仍可能因为外链被索引;站点地图也不保证收录。HTTPS同样不保证安全无漏洞或排名。这些都不能替代对日志字段本身的核对。
下一步,建议你先从服务器日志中导出最近一段时间的404和410记录,按请求URL聚合,再对照Referer和User-Agent排出优先级,然后对排名靠前的死链逐条决定是删除还是跳转。