判断已覆盖范围,不能只看中断前最后一条结果或进度条停在哪,而要把任务日志、结果集和站点清单三份材料对齐:日志记录处理到哪个输入,结果集记录哪些输入产出了数据,站点清单记录总共应处理多少输入。三者能互相对上的部分才算已覆盖,对不上的部分必须重跑或补扫。
全站扫描中断后,最常见的矛盾是进度条或日志显示已处理大部分输入,但导出的长尾词结果条数远低于预期。这不一定说明工具漏扫,也不一定说明站点本身长尾词少。两种解释都成立:
这两种解释对应的处理动作完全相反:前者要补扫,后者不必补扫。区分它们需要证据,而不是靠感觉。
覆盖范围的分母是输入,不是输出。先取得这次扫描实际提交的输入清单:如果是按站点地图扫描,清单就是地图中的URL集合;如果是按目录或种子页抓取,清单就是抓取队列中已入队的地址。把清单导出为纯文本,一行一个地址,作为基准文件。
然后从任务日志中提取已处理完成的输入,与基准文件做集合比对。比对结果会分成三类:已处理且已产出结果、已处理但无结果、未处理。只有第一类和第二类合计,才是真正的已覆盖范围。第二类同样算覆盖,因为“扫过但没有长尾词”也是一个有效结论,不能因为结果为空就当成没扫。
实际操作中,可以先把基准清单排序去重,再把日志中已完成的行按同样规则排序,用文本比对工具求差集。差集里的地址就是中断造成的缺口,也是下一步补扫的输入。
要判断结果偏少属于哪种情况,看三个可核对的信号:
假设一次扫描提交了一千个地址,前六百个平均每个产出两个长尾词,之后日志显示仍在读取但结果集不再增加,随后任务中断。这时更合理的判断是:已覆盖约六百个输入,剩余约四百个属于缺口,需要补扫。这个数字只是说明比较方法,不代表任何真实项目的产出水平。
确认缺口后,不必重新扫描全站。用上一步得到的差集地址作为新任务的输入,只补扫未覆盖部分。补扫前先检查这些地址是否仍然有效,失效地址应从清单中剔除并单独记录,否则会把无效输入误判为扫描失败。
补扫完成后,把新结果与原有结果合并,再按输入清单做一次最终对齐:每个基准地址都应落入“已覆盖且有结果”或“已覆盖且无结果”之一,不允许存在无法归类的地址。这个对齐动作决定了下一步是继续补扫,还是可以进入结果分析。
中断本身不可怕,可怕的是每次中断后都从零推断。建议在任务开始时就让工具或脚本输出一份可持久化的处理状态文件,至少包含输入地址、处理状态和时间戳三个字段。中断后直接读取该文件,就能得到覆盖范围,而不必依赖进度条。
如果所用长尾关键词工具不提供这种状态导出,可以在扫描前自行保存输入清单,扫描后从结果和日志反推状态。具体工具是否支持状态导出、日志格式如何,需要以实际版本为准,不同版本之间可能存在差异,使用前应核对当前说明。
覆盖范围判断清楚之后,再决定是补扫还是分析,能避免在数据不完整的情况下得出错误的长尾词结论。