扫描中断后,不要只看“完成百分比”,而要先确定中断发生在哪个阶段、已产出的行对应哪些URL、这些行的字段是否完整。判断覆盖范围的核心依据是:任务日志里的起止时间、已写入结果表的URL集合、以及每个URL的状态字段是否齐全。如果结果表只写了一半字段,那部分URL只能算“部分覆盖”,不能直接用于保留或退出决策。
全站扫描被中断后,已覆盖范围通常落在三种状态之一。第一种是完整行覆盖:某个URL的抓取状态、标题、正文摘要、内链数、外链数等字段都已写入,且没有空值。第二种是部分行覆盖:URL已经进入结果表,但部分字段为空,例如只记录了HTTP状态,没有记录页面标题或内容长度。第三种是未覆盖:URL从未进入结果表,或只出现在待抓队列里。
区分这三种状态的实际动作是:把结果表按“字段完整度”排序,先筛出所有存在空值的行。如果空值集中在同一批字段上,说明中断发生在某个处理阶段之后;如果空值随机分布,则更可能是写入过程被打断。这个动作的结果会直接影响下一步:完整行可以进入取舍判断,部分行需要补扫或标记为不确定,未覆盖的URL不能凭猜测归类。
“已扫描3000条”这个数字本身不能说明覆盖了哪些页面。你需要把结果表中的URL与站点地图、站内链接列表或旧系统导出的URL清单做交集和差集。交集是已覆盖部分,差集是未覆盖部分。如果结果表里存在大量带参数的URL、重复URL或已跳转URL,实际覆盖的独立页面数会小于行数。
假设一个站点有A、B、C三个栏目,扫描中断后结果表里A栏目URL完整,B栏目只有列表页没有详情页,C栏目完全没有出现。此时合理的判断是:A栏目可以进入保留或退出评估,B栏目需要补扫详情页后再判断,C栏目不能因为“扫描过全站”就被当作已处理。这个假设只用于说明比较方法,不代表任何真实站点的扫描结果。
中断原因不同,已覆盖范围的可信度也不同。如果中断是因为网络超时或目标站点临时不可访问,已写入的完整行通常仍然可用,但需要核对中断时间点前后的行是否出现集中失败。如果中断是因为本地进程被杀死或存储写入失败,结果表末尾可能出现不完整行,这时要检查最后若干行的字段是否闭合。
一个可操作的做法是:先取中断前最后100条完整行和中断后最早100条记录做对比。如果中断后的记录大量缺失标题或正文摘要,说明写入链路没有恢复完整,已覆盖范围应只取中断前的完整行。如果中断后记录仍然字段齐全,只是数量少,说明覆盖范围可以延续,但需要补扫剩余URL。这个动作的结果决定了你是从断点继续,还是回退到上一个稳定批次。
已覆盖范围确定后,取舍判断才成立。保留适用于:URL有稳定流量入口、内容与当前业务仍然相关、且没有明显的重复或失效信号。改写适用于:URL仍有外部链接或历史收录价值,但内容主题已经偏移,需要更新标题、正文和内部链接指向。退出适用于:URL长期没有有效入口、内容与现有业务无关、且保留只会增加维护成本。
这里的关键不是“扫描到了就一定要处理”,而是扫描结果提供了哪种证据。如果完整行里只有HTTP状态和标题,没有流量或链接数据,那它只能支持“页面是否存在”的判断,不能单独支持退出决策。如果完整行里包含内链数、外链数和最后修改时间,就可以结合业务优先级做取舍。缺少的字段需要补查,而不是用其他页面的平均值代替。
补扫前先列出缺失字段清单,再按URL分组。比如缺失的是“正文摘要”,那就只需要补抓正文,不需要重新抓取HTTP状态和标题。如果缺失的是“外链数”,而外链数据来自另一个接口,那就单独补那个接口,而不是重跑全站。这样做的结果是:补扫量变小,已覆盖的完整行不会被重复覆盖,判断周期也更短。
补扫完成后,把新写入的行与旧结果表按URL合并,并保留一个“数据来源批次”字段。这样下次再中断时,你能知道每一行来自哪次扫描,而不是把不同批次的字段混在一起。合并后如果仍有URL缺失关键字段,就把它标记为“待人工确认”,不要直接进入自动退出列表。整个判断过程结束的标志不是扫描进度到100%,而是每个待决策URL都有足够的字段支撑保留、改写或退出的结论。