先给结论:源数据缺项时,不要用补全后的值直接覆盖原字段,而应把缺项标记为“未知”,并让下游环节显式处理“未知”。这样做的目的是阻止一个猜测值被后续流程当作事实继续传播。你手里的页面、表格或接口数据都可以按同一原则处理:先隔离缺项,再决定哪些动作可以在缺项条件下安全执行。
缺项至少分三种,处理方式不同。第一种是必填项缺失,例如页面标题、规范链接、目标查询词之一没有值;这类缺项会改变页面含义,应阻断自动写入。第二种是可选字段缺失,例如作者、更新时间、栏目分类;这类缺项通常不影响主体判断,可以标记为未知后继续。第三种是采集或权限导致的暂时缺失,例如某个接口没有返回字段、某个后台账号看不到完整报表;这类缺项要记录采集时间和来源,不能直接当作“该数据不存在”。
判断依据不是字段名,而是这个字段一旦被猜错,会不会改变后续动作。如果会,就阻断;如果不会,就标记后继续。例如,缺少规范链接会影响页面聚合判断,属于第一类;缺少更新时间只影响展示,属于第二类。
以你手中的一张页面清单为例,假设它有“页面地址、标题、规范链接、主要查询词、更新时间”五列,其中“主要查询词”和“更新时间”出现空白。可按以下步骤处理:
这个动作的结果是:缺项行被挡在自动修改之外,完整行可以继续处理。下一步取决于缺项是否被补齐,而不是取决于你已经做了多少次检查。
假设你负责一批页面,准备根据主要查询词批量改写标题。清单中有一部分行的主要查询词为空。如果直接把空值当成“无查询词”并跳过这些行,表面上看没有错误扩散,但后续统计“已处理页面数”时,这些行会被算作已处理,导致你误以为整批完成。更稳妥的做法是:在清单中增加一列“处理状态”,缺项行写“待补数据”,完整行写“可处理”。批量操作只读取“可处理”行。操作结束后,分别统计“可处理已执行”和“待补数据未执行”的数量。这样,缺项不会伪装成已完成,也不会让一个猜测的查询词进入标题。
这个例子是假设的,数字只用于说明比较方法:如果可处理行有八十行、待补数据有二十行,那么执行后应看到八十行被修改、二十行未修改。若看到一百行都被标记为已处理,就说明缺项没有被正确隔离。
在缺少完整数据或权限时,仍可执行的最小动作包括:检查页面是否返回正常状态、检查链接是否可访问、记录当前字段值、标记缺项位置、把缺项行隔离到待处理表。这些动作不依赖缺失字段,也不会把猜测值写入正式数据。
不能推出的结论包括:缺项等于零、缺项等于无需求、缺项等于页面质量差、缺项等于已经处理完成。请求量、抓取量或某项统计归零,也不能单独证明缺项处理正确,因为还可能是采集时间不同、权限范围变化、接口返回延迟或统计口径调整。若要把改动前后做比较,需要同时考虑季节、搜索需求变化和数据采集差异,不能把一次改动直接当作唯一原因。
最后,把缺项标记为“未知”并隔离,不是拖延,而是阻止错误扩散的最低成本动作。只有补齐关键字段后,才把对应行放回主流程,并重新判断下一步该做什么。