对动态页面做死链检测时,不能只看HTTP状态码,因为返回200的页面也可能因为接口失败、脚本未执行或内容被替换而实际不可见。确认可见内容的关键是:在禁用脚本和启用脚本两种条件下分别抓取DOM快照,对比页面中真正渲染出的文本、链接和关键元素,再判断该链接是否应视为失效。
假设有一个商品详情页,地址是 /product?id=1001,服务器始终返回200。页面加载后由前端脚本请求接口,再把商品名称、价格和“加入购物车”按钮渲染出来。如果接口返回空数据,页面可能只剩页头和页脚,正文区域是空白或一句“暂无数据”。
此时用只看状态码的检测工具,会把这个地址记为正常;但用户点进去看不到任何商品内容,从死链治理的角度它已经是无效页面。这说明动态页面的“可见内容”不等于“服务器有响应”,而要落到渲染结果上。
canonical、robots 等标签。script、style、noscript 内容,取正文区域的实际文本长度和关键字段。判断标准可以设成:正文可见文本少于某个阈值,且缺少标题、主体描述或主要操作入口,就标记为疑似失效,交给人工复核。阈值要按站点类型定,列表页和详情页不能用同一个数字。
纯HTTP请求适合静态页面和接口层排查,速度快、成本低,但无法确认前端渲染结果。无头浏览器适合依赖脚本的动态页面,能拿到真实DOM,但资源消耗更高,需要控制并发和等待策略。两者结合使用,才能既覆盖数量又保证准确性。
如果页面内容由服务端直出,原始HTML里就能看到正文,用第一种方式即可;如果正文必须靠脚本请求接口后生成,就必须用第二种方式,否则检测结论不可靠。
先挑一批动态页面,分别保存原始HTML和渲染后DOM,统计正文文本长度和关键元素命中情况,把差异明显的地址列成待复核清单,再决定哪些需要修复接口、哪些需要改成服务端渲染或返回正确的404状态。