结论先说:中断后的覆盖范围不能只看扫描进度条或“已抓取 URL 数”,而要同时核对任务日志、导出结果和站点自身的 URL 清单。如果工具在中断时已经写出了可下载的明细文件,且文件内带有抓取时间或状态字段,那么可以把这份明细当作“已覆盖”的起点;如果导出文件为空、字段缺失或只有汇总数字,就不能用进度百分比推断覆盖范围,只能重新扫描或改成分段扫描。
全站扫描通常分三层:URL 发现、页面抓取、结果写入。中断可能只发生在其中一层。例如工具已经发现并列出全部 URL,但在抓取阶段停止,此时“覆盖范围”指已抓取的 URL,而不是已发现的 URL。判断方法是查看任务日志里最后一条记录的时间戳和状态:若最后一条是“发现”类记录,说明 URL 清单可能完整但抓取未开始或刚开始;若最后一条是“抓取”类记录,则要按 URL 明细逐条核对。
一个实际动作是:把工具导出的 CSV 按状态列排序,统计状态为成功、超时、被拒绝、待抓取的行数。如果“待抓取”行数大于零,说明覆盖范围是部分覆盖;如果所有行都有终态,只是任务被手动停止,那么已覆盖范围等于导出行数。这个结果决定下一步是补扫还是重扫。
工具导出的数量不能单独作为覆盖依据,因为同一工具可能把参数不同的 URL 合并,也可能把重定向链中的中间地址计入。更可靠的做法是拿站点自身的 URL 来源做交叉核对,例如 XML 站点地图、数据库里的内容表、或服务器访问日志中近期出现过的路径。把这三类来源去重后得到一个基准集合,再用工具导出明细与之比对。
这一步的结果直接影响下一步动作:缺失集中就补扫,缺失分散就重扫,基准不完整就先修基准再扫。
有一种情况会让“导出明细等于已覆盖”这个结论失效:工具在中断时已经写入了行,但行内字段是占位值或空值。例如状态列全部显示“待处理”,标题和状态码为空。此时行数虽然等于抓取队列长度,但不代表页面已被实际抓取。区分方法是随机抽取若干行,用浏览器或命令行请求对应 URL,对比工具记录的状态码和标题是否一致。如果大量不一致,导出明细只能算“已排队”,不能算“已覆盖”。
另一个反例是扫描目标在中断后发生了变化,例如旧内容被下线、旧系统被替换、旧合作关系对应的页面被删除。此时即使工具记录显示已覆盖,当前站点状态也已经不同,覆盖范围需要按新状态重新界定。适用条件是:中断与站点变更之间的时间间隔足够短,且没有发生批量上下线;否则应把工具结果当作历史快照,而不是当前覆盖。
综合以上判断,可以按以下顺序执行:
假设一次扫描在 40% 处中断,导出明细有 1200 行,其中 300 行状态为空。此时不能认为已覆盖 1200 个页面,而应先排除空状态行,再与基准集合比对。如果基准集合有 2000 个 URL,实际有效覆盖可能是 900 个,缺口 1100 个且分布分散,那就选择分段重扫,而不是继续补扫。这个判断只依赖导出字段和基准集合,不依赖工具界面上的进度数字。
最后要核对的是工具本身对“已抓取”的定义。不同工具对超时、被拒绝、重定向的处理方式不同,具体字段含义需要以该工具的文档或导出说明为准;在未核对前,不要把行数直接当成覆盖范围。