死链检测:动态页面怎样确认可见内容

📍 WDQWDWQD987AAAAA:216.73.217.19
📱 Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
🔗 /8c9561ef243f.html
📄

死链检测:动态页面怎样确认可见内容

动态页面做死链检测时,不能只看HTTP状态码。状态码200只说明服务器接受了请求,不代表页面渲染后用户能看到有效内容。要确认“可见内容”,需要把原始HTML、渲染后DOM和实际可见文本三层结果放在一起比对,再判断链接是否真的可用。

先明确“可见内容”在检测中的定义

动态页面的内容通常由JavaScript在浏览器端生成。检测工具若只抓取原始HTML,可能拿到一个空壳:<div id="app"></div>,而真实文字、链接和商品信息都在脚本执行后才出现。因此“可见内容”至少包含三类证据:

如果只依据原始HTML判断,动态页面里由前端路由生成的链接很容易被误判为死链;反过来,原始HTML里存在但渲染后被移除的链接,又会被误判为正常。

用渲染式抓取收集证据

可执行的步骤是:对目标URL发起一次带JavaScript渲染的抓取,等待网络空闲或指定选择器出现,再导出渲染后的HTML。以命令行工具为例,假设使用支持渲染的抓取方式,核心检查项如下:

  1. 请求页面并等待主内容容器出现,而不是固定等待几秒。
  2. 导出渲染后DOM,搜索页面内所有<a>标签。
  3. 逐个提取href,过滤掉javascript:、#和空值。
  4. 对每个目标URL发起请求,记录状态码、最终跳转地址和响应内容长度。
  5. 把状态码非2xx、跳转到错误页、或响应正文明显为“页面不存在”的链接标记为疑似死链。

这里的关键是第4步不能只记录状态码。有些站点对不存在的页面返回200并展示“未找到”文案,这种情况需要结合响应正文中的特征词判断。反之,返回404也可能只是权限控制,需要人工复核。

区分“可能原因”与“已定位原因”

一个链接在检测中失败,可能有多种解释,不能直接断言页面已删除。常见情况包括:

判断方法是做对照实验:同一URL在浏览器中手动打开,观察Network面板中接口状态;再用同一抓取配置重跑一次,看结果是否稳定。如果两次结果不一致,优先怀疑渲染时序或接口波动,而不是直接判定死链。

验收时该看哪些结果

一份可用于定位问题的死链检测结果,至少应包含:检测时间、原始URL、渲染后发现的链接、每个链接的状态码、最终URL、响应长度,以及判定为疑似死链的依据。缺少渲染证据的报告,无法区分“页面没这个链接”和“脚本没跑完”。

下一步可以固定一个页面样本,分别用原始HTML抓取和渲染式抓取各跑一次,对比两次得到的链接数量与状态码差异。差异最大的那部分,就是动态内容检测中最需要人工复核的区域。

图1 图2

nginx