先给结论:中断后不要凭“跑了多久”或“看到多少条”判断覆盖范围,而要用扫描起点、游标位置、分段边界和去重键四个证据交叉确认。只要其中一项缺失,就只能把已覆盖范围标成“不确定”,并设计一次小范围补扫来验证,而不是直接续跑。
假设你正在用某类热词查询工具对店铺做一次全站扫描,中途网络断开或页面刷新。此时工具显示已处理 1200 条、进度约 60%。这个进度数字本身不能说明问题,因为它至少对应三种状态:
这三种状态对应的补扫动作完全不同,所以第一步不是续跑,而是判断你处于哪一种。
全站扫描必须有一个可复述的起点,比如“从店铺首页类目入口开始,按类目树逐层展开”。如果起点只是“打开工具点开始”,那中断后你无法保证补扫不会漏掉某个入口。起点明确时,你可以从起点重新走一遍,只补缺失分支。
很多工具用页码、偏移量或时间戳作为游标。中断后要找到最后一条成功写入记录的游标值,而不是最后一条请求的游标值。两者可能相差一整页。如果工具不暴露游标,只能靠导出文件的最后一条记录反推,这时覆盖范围要打折扣。
把全站按类目、价格带或销量区间切成若干段,每段单独记录状态。中断后你能清楚看到哪些段是“完整”、哪些是“部分”、哪些是“未开始”。这比一个总进度百分比有用得多,因为补扫可以只针对“部分”和“未开始”的段。
热词在不同入口可能重复出现。如果去重键是“词本身”,那么覆盖范围按独立词计算;如果去重键是“词+来源入口”,覆盖范围按记录数计算。两种口径下的“已覆盖”含义不同,混用会导致补扫重复或遗漏。中断后应先确认去重键,再统计已覆盖数量。
假设你导出中断前的数据,得到 1200 条记录,去重后是 860 个独立词。此时不要直接说“覆盖了 860 个词”。先做一步:随机抽取 20 个已覆盖的词,回到工具里单独查询,看它们是否仍能被检索到,以及来源入口是否与记录一致。
如果 20 个里有多数能对上,说明已落库数据基本可信,补扫可以只针对未完成分段。如果对不上,说明部分记录是中间态,需要把对应分段整体重扫。这个动作的结果直接决定下一步是“补扫”还是“重扫”,而不是凭感觉续跑。
补扫不是把全站再跑一遍,而是设定明确的停止条件:
当这三个条件都满足时,才能把覆盖范围标成“完整”。如果补扫后仍有分段状态不明,就保留“不确定”标记,并在后续查询中优先复查这些分段,而不是假装全站已覆盖。
补扫后请求量归零、抓取量下降或进度条走满,都不能单独证明覆盖正确。请求量归零可能只是因为工具对重复请求做了拦截;进度条走满可能只是前端动画结束;抓取量下降可能只是分段本身词量就少。这些现象需要和游标位置、分段边界、去重结果一起看,才能作为判断依据。
归根结底,中断后的覆盖范围判断是一个证据链问题:起点、游标、分段、去重键缺一不可。缺哪一项,就在那一项上做小范围验证,再决定补扫还是重扫。这样即使工具本身不提供断点续传,你也能把覆盖范围控制在可解释的范围内。