先给结论:对象格式变化时,不要重写整套输入规范,只改“标识层”和“解析层”。标识层决定每个对象怎么被唯一指认,解析层决定字段怎么被读取和校验。假设一个情境:你原本给工具喂的是整站URL列表,现在上游只能提供站点地图文件,里面混着带参数的详情页、分页和标签页。此时可执行的最小动作是保留原有字段名,只把输入源的取值规则换成“从站点地图逐条抽取loc,再按路径模式打标”,先跑通分区,再决定是否扩展字段。
格式变化通常落在三种情况上,处理方式不同。第一种是对象没变、载体变了,例如同一批页面从CSV换成JSON,字段含义不变,只需换解析入口。第二种是对象粒度变了,例如从“页面”变成“页面加查询词组合”,这时必须新增标识字段,否则同一URL的多条记录会被合并。第三种是对象边界变了,例如原来只处理已发布页面,现在要纳入草稿或已下线页面,这时要新增状态字段,并明确哪些状态不进入后续分析。
判断方法很直接:拿变化前后的各两条样例记录,逐字段对齐。如果某条记录在新格式里找不到唯一对应,问题就在标识层;如果字段能对上但取值含义变了,问题在解析层。这个判断决定了你接下来是改主键,还是只改取值映射。
标识层的最小改动原则是:不新增主键,除非旧主键在新格式里不再唯一。以上面的站点地图情境为例,站点地图里的loc本身可以作为页面级主键,但一旦要按查询词拆分,loc就不够用,需要组合成“loc加查询词”。此时的动作是新增一个组合键字段,而不是把原URL字段改写成拼接字符串,因为改写会让后续按URL聚合变得困难。
可执行的检查顺序如下:
这一步的结果会直接影响下一步:如果组合键无法唯一指认,就不要继续调字段映射,先回到上游确认是否缺少区分维度。
解析层最容易出问题的地方,是把“字段存在”当成“字段可用”。新格式里可能仍有标题字段,但取值从纯文本变成了带HTML标签的片段。这时规范里要补的不是新字段,而是清洗规则:先剥离标签,再截断,再判断是否为空。规则写进规范后,任何输入源都按同一套规则处理,避免同一批数据在不同来源下口径不一致。
假设情境继续:站点地图里没有标题字段,只有loc。此时可执行的最小动作是先用loc跑通分区和去重,把标题留空并标记为“待补”,而不是从URL猜标题。这样做的结果是,后续分析可以正常进行页面级判断,但无法进行标题相关性判断。这个限制必须写进规范,避免下游把空值当成真实取值。
缺少完整字段或抓取权限时,仍可执行的最小动作是:只处理已有字段,按对象粒度分区,输出一份带“字段完整度”标记的结果。例如把记录分成“标识完整”“标识完整但属性缺失”“标识不完整”三类。字段完整度只说明当前输入能支撑哪些判断,不能推出页面质量、收录状态或排名表现。抓取量或请求量下降也不能单独证明规范改对了,它还可能来自上游数据量减少、去重变严或过滤条件变化。
具体信息需要核对:如果你使用的是某个具体工具,其当前支持的输入格式、字段上限和校验方式应以该工具的实际文档或界面为准,不要按旧版本推测。
规范改完后,至少留下三样东西:一份字段对照表,写明旧字段、新字段、是否必填、取值示例;一条去重规则,写明按什么字段组合去重;一条缺失处理规则,写明缺失时是跳过、留空还是标记待补。假设情境里,如果站点地图新增了lastmod字段,而你的规范里没有定义它的用途,就不要默认把它当作更新时间使用,先标记为“未使用字段”。
这样做的结果是,下一次对象格式再变时,你只需要改对照表和去重规则,而不必重新设计整套输入。规范的稳定性来自标识层和解析层的分离,而不是来自字段数量。