源数据缺项时,最危险的不是缺项本身,而是用默认值、猜测值或旧值把它填满,然后让这份“完整”数据继续流向模板、结构化数据和索引。处理原则是:先判断缺项会不会改变页面结论,再决定保留、改写还是退出。会改变结论的缺项必须显式暴露,不会改变结论的缺项可以保留占位但禁止参与派生计算。
手机端页面通常把同一份源数据渲染到列表、详情、结构化数据和筛选项里。缺项在不同位置的影响不同,所以要先分类:
判断动作很简单:把缺项字段逐个标注为阻断、降级或派生,然后检查每个字段的下游用途。一个字段可能同时属于两类,这时按更严格的一类处理。
多个角色对同一事实理解不同,往往是因为各自看到的字段不同。与其争论“这条到底能不能发”,不如把分歧写成一张对照表,让每个人在同一组证据上表态。假设某条记录缺少“上市时间”,运营认为可以按“即将上市”展示,编辑认为应隐藏,开发认为字段为空就不输出。可以这样核对:
这张表的作用不是追求所有人同意,而是让“谁在什么条件下做什么”可以被复查。下一次同类缺项出现时,直接按表执行,不再重新争论。
错误扩散通常发生在数据进入模板之后。如果模板里写了 <span>{{price}}</span>,而 price 为空,页面就会出现空价格标签,结构化数据也可能输出空值。更稳妥的做法是在数据进入模板前增加一层校验:
这个动作的结果会直接影响下一步:如果跳过记录后页面列表变短,你需要决定是接受变短,还是补充其他来源。接受变短通常比展示错误信息更安全,因为错误信息会同时污染用户判断和后续数据统计。
如果缺项已经被默认值填满,不要只看页面能不能打开。可以按下面的顺序排查:
需要说明的是,请求量下降、抓取量变化或某个统计归零,不能单独证明是缺项导致的。搜索需求变化、采集口径调整、页面改版都可能产生类似现象。判断时要结合改动时间和数据采集方式一起看。
假设某手机站点的商品列表用“更新时间”决定排序,而部分记录缺少该字段。如果按 0 处理,这些记录会排到最后,看起来像“最旧”。但真实情况是“未知”,不是“最旧”。此时正确动作是把缺该字段的记录从排序集合中排除,而不是给它们一个默认时间。排除后列表顺序会变化,你需要确认这种变化是否符合业务预期;如果不符合,就应补充真实更新时间,而不是恢复默认值。
这个例子的重点不是排序本身,而是缺项一旦被当成真实值参与计算,错误就会沿着排序、筛选和展示继续传播。把缺项显式暴露出来,才能在下一次改动前知道哪些结论是可靠的。