死链接检测工具

我接手过一个企业官网的死链改版项目。旧站有四百多个页面,接检具迁移前用爬虫工具跑了一遍,测工结果吓人——整整六十多个死链接。死链其中一半指向已经下架的接检具“新闻动态”页面,另一半是测工当年外包团队留下的绝对路径,域名都换了,死链链接还硬编码在代码里。接检具

死链接这东西,测工最恶心的死链地方在于它不声不响。用户点下去,接检具转圈,测工然后404。死链轻则骂一句,接检具重则直接关掉网站。测工搜索引擎的爬虫也会被404绊住,降低整站抓取频次,权重慢慢就掉了。我见过最离谱的案例,某电商平台的活动页挂了三年,链接指向的SKU早下架了,但页面没删,用户点进去白屏——这比404还糟,因为连个提示都没有。

检测工具的原理其实不复杂。核心就三步:抓取页面上的所有href、src、action属性,逐个发HTTP请求,根据状态码判断——200正常,301/302要留意重定向目标是否有效,404/410直接报死,还有超时、SSL证书错误、DNS解析失败这些边缘情况。但难点从来不在原理,而在规模。几千个页面互相嵌套,动态加载的内容用JS渲染,这时候静态爬虫就瞎了。我试过好几款开源工具,像Xenu、Screaming Frog,各有短板。Xenu老牌但慢,处理不了SPA;Screaming Frog快,但免费版限制500个URL,够用个屁。

后来我学乖了,用Python自己写脚本。requests库发请求,beautifulSoup解析链接,再用concurrent.futures做多线程并发,几百个链接分分钟跑完。但这只解决了一半问题——动态渲染的页面得用selenium或playwright模拟浏览器。麻烦,但必要。有一次我检测一个用Vue写的单页应用,常规爬虫跑完显示全绿,换playwright一跑,好家伙,二十多个死链全藏在路由切换里。

工具跑完只是第一步,麻烦的是处理结果。死链接的原因五花八门:页面删了但导航栏没更新、外链指向的网站改版了、图片资源被CDN清掉了、甚至有人手滑在后台把URL多打了个斜杠。你得挨个看,分类,然后决定是修复还是删除。修复容易,改个路径就行;删除麻烦,得考虑SEO——如果别的网站引用了这个死链,删了等于浪费外链权重。这时候得做301重定向,把死的指向最相关的活页面。

有个细节很多人忽略:检测工具报的“死链”未必真死。有些服务器对HEAD请求返回403,但GET请求正常。有些网站防爬,看到非浏览器UA就故意返回404。所以我会在工具里加个自定义请求头,伪装成Chrome,再设置重试机制——一次超时不代表链接挂了,可能是网络抖动。判断逻辑要带点容错,不然误报能淹死你。

最让我无语的一次,某客户说网站全是死链,我远程一跑,发现是他们的服务器防火墙把检测工具的IP段封了。工具没毛病,链接全活着。所以现在我都建议客户把检测工具部署在本地或内网,别依赖第三方在线服务——你根本不知道对方的IP会不会被你的安全策略拦。

说到底,死链接检测不是一次性工作。网站天天改,内容年年删,链接自然跟着腐烂。我习惯把检测脚本挂到服务器上,每周自动跑一次,结果推送到邮箱。别指望工具能替你思考,它只负责把烂摊子翻出来,怎么收拾还得靠人。但要是连烂摊子都翻不出来,那才叫真麻烦。