用死链接检测工具抓动态页面时,得到的往往只是初始 HTML,而不是浏览器里最终看到的内容。要确认可见内容,核心做法是让工具或脚本在页面执行完 JavaScript 后再取 DOM,并把“链接存在”与“链接可点击、指向有效地址”分开判断。第一次接触这个问题,可以先明确起点:普通抓取看源码,动态页面必须看渲染后的结果。
动态页面的内容通常分三层,确认方式不同:
死链接检测工具如果只处理第一层,就会漏掉动态注入的链接,也可能把模板里的空 href 误判为有效。判断依据很简单:在浏览器开发者工具里查看元素,如果链接不在初始 HTML 中,就必须用能渲染页面的方式检测。
假设你要检查一个商品列表页,链接是滚动后异步加载的。可以按下面的顺序执行:
a[href]。这里的关键是等待条件。固定等待几秒并不可靠,应等待某个具体元素出现,或等待网络空闲。判断结果时注意:返回 200 不代表内容有效,返回 404 或 410 才更接近死链接;返回 301/302 要跟到最终地址再判断。
动态页面容易产生几类误报,需要逐项排除:
# 后面的片段由前端处理,服务器请求可能无意义,应按路由规则单独验证。适用条件是:页面依赖 JavaScript 生成导航、分页或内容卡片。若页面是服务端直出、链接就在初始 HTML 里,普通检测工具已经够用,渲染式检测反而增加时间和资源成本。
不同方案没有绝对优劣,按下面几点权衡:
如果只是偶尔抽查几个动态页面,浏览器手动检查加单页脚本就够;如果要持续监控整站,才值得投入可渲染的爬虫或检测服务。注意 robots.txt 只约束抓取行为,不等于把页面从索引中移除;站点地图也不保证收录。检测动态页面时同样要遵守目标站点的抓取规则。
选一个你熟悉的动态页面,先用浏览器开发者工具确认目标链接是否在初始 HTML 中。如果不在,就写一段最小脚本:打开页面、等待指定元素出现、提取所有链接、逐个请求并记录状态码,再与源码抓取结果对比。跑通这一条链路后,再决定是否扩大到整站或接入持续检测。