结论先说:中断后不能靠“进度条停在哪”或“已抓取数量”单独判断覆盖范围,而要把扫描状态拆成三个可核对的事实——哪些URL被明确处理过、哪些只是被发现、哪些从未进入队列。只有拿到这三类清单,覆盖范围才可判定。一个会让结论失效的反例是:扫描工具在中断时没有持久化队列,重启后从头开始,此时“已抓取数量”只反映本次运行,不代表全站实际覆盖。
多数扫描流程存在两个容易混淆的阶段:发现URL(进队列)和处理URL(抓取并分析)。中断往往发生在两者之间,队列里积压了大量“已发现未处理”的地址。判断覆盖范围时,已处理才是有效覆盖,仅发现只是待办。
实际操作:中断后先导出工具的队列快照和已处理清单,按URL去重后做差集。差集结果直接决定下一步——如果“仅发现”占比高,重启后应优先续跑队列而非全量重扫;如果“已处理”清单本身不完整,说明工具没有可靠持久化,需要换用支持断点续扫的方式。
只信工具自己的计数容易自证循环。更可靠的做法是拿一份独立于扫描工具的站点清单做分母,例如从服务器访问日志、站内链接导出或站点地图汇总出的URL集合。把工具已处理清单与这份基准取交集,才能算出真实覆盖率。
假设某站基准清单有1000个可索引URL,中断后工具报告已处理600个。若这600个全部落在基准清单内,覆盖率约60%;若其中有200个是重定向或参数变体,实际覆盖的独立页面只有400个,覆盖率降到40%。这个假设说明:分母和去重规则不同,同一份扫描数据能得出完全不同的覆盖结论,所以核对前必须先固定基准口径。
开发、SEO和内容角色常对“扫了多少”各执一词:开发看服务器请求数,SEO看工具报告,内容看页面是否被分析过。分歧的根源通常是各自用了不同的计数口径。解决办法不是争论数字,而是把分歧拆成一张核对表:
这张表让每个数字都有来源和口径。若某一方无法提供清单,只给出一个总数,该数字就不能作为判断依据,应降级为参考。
前面结论成立的前提是:工具在中断时保留了队列和已处理记录。反例是工具采用纯内存队列,进程结束后状态丢失。此时重启会重新发现并重新抓取,之前“已处理600个”的记录无法与新一轮结果对应,覆盖范围判断失效。识别信号包括:重启后已处理数量从零开始、日志中没有断点标记、导出清单缺少时间戳。
确认前提成立后,下一步动作是:以基准清单减去已处理清单,得到剩余待处理集合,只对这一集合续跑,而不是全站重扫。续跑完成后再次取差集,若剩余集合为空,覆盖范围可判定为完整;若仍有残留,检查这些URL是否被规则排除(如robots限制或状态码过滤),再决定是调整规则还是接受该盲区。这个动作的结果直接决定覆盖判定是“已完成”还是“存在已知例外”,避免把一次中断后的补扫误当成全站结论。