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

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

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

对动态页面做死链检测时,不能只看HTTP状态码,因为返回200的页面也可能因为接口失败、脚本未执行或内容被替换而实际不可见。确认可见内容的关键是:在禁用脚本和启用脚本两种条件下分别抓取DOM快照,对比页面中真正渲染出的文本、链接和关键元素,再判断该链接是否应视为失效。

从一个假设例子看动态页面为什么容易误判

假设有一个商品详情页,地址是 /product?id=1001,服务器始终返回200。页面加载后由前端脚本请求接口,再把商品名称、价格和“加入购物车”按钮渲染出来。如果接口返回空数据,页面可能只剩页头和页脚,正文区域是空白或一句“暂无数据”。

此时用只看状态码的检测工具,会把这个地址记为正常;但用户点进去看不到任何商品内容,从死链治理的角度它已经是无效页面。这说明动态页面的“可见内容”不等于“服务器有响应”,而要落到渲染结果上。

确认可见内容的具体步骤

  1. 先取原始HTML:用抓取工具请求页面,保存未执行脚本时的响应体,记录状态码、响应大小和 canonical、robots 等标签。
  2. 再取渲染后DOM:用支持JavaScript执行的无头浏览器打开同一地址,等待网络空闲或指定选择器出现,保存渲染后的HTML。
  3. 提取可见文本:去掉 script、style、noscript 内容,取正文区域的实际文本长度和关键字段。
  4. 对比两次结果:如果原始HTML里没有正文内容,而渲染后也没有,说明内容确实缺失;如果渲染后有内容,说明该页面依赖脚本,检测必须用渲染模式。
  5. 检查关键链接:对正文中的内链逐个请求,区分“状态码正常但目标页无有效内容”和“状态码为404或410”两种情况。

判断标准可以设成:正文可见文本少于某个阈值,且缺少标题、主体描述或主要操作入口,就标记为疑似失效,交给人工复核。阈值要按站点类型定,列表页和详情页不能用同一个数字。

常见错误与检查项

不同检测方式的适用条件

纯HTTP请求适合静态页面和接口层排查,速度快、成本低,但无法确认前端渲染结果。无头浏览器适合依赖脚本的动态页面,能拿到真实DOM,但资源消耗更高,需要控制并发和等待策略。两者结合使用,才能既覆盖数量又保证准确性。

如果页面内容由服务端直出,原始HTML里就能看到正文,用第一种方式即可;如果正文必须靠脚本请求接口后生成,就必须用第二种方式,否则检测结论不可靠。

下一步可以怎么做

先挑一批动态页面,分别保存原始HTML和渲染后DOM,统计正文文本长度和关键元素命中情况,把差异明显的地址列成待复核清单,再决定哪些需要修复接口、哪些需要改成服务端渲染或返回正确的404状态。

图1 图2

nginx