不能把所有参数组合都当成有效地址。有效地址集合应当由“能返回独立内容、且被允许抓取”的规则来定义,而不是由参数有多少种取值来决定。具体做法是:先选一个你手头已有的页面样本,把它的参数按功能分类,再为每类写一条“保留或忽略”的判定规则,最后用规则去核对样本里哪些地址真正值得进入收录批量查询的范围。
同一个页面上的参数,作用往往完全不同。常见的有三类:影响内容主体的(如商品编号、文章ID)、只影响展示方式的(如排序、每页条数、语言切换)、以及纯追踪用途的(如来源标记、会话标识)。只有第一类通常会产生需要独立收录的地址;后两类大多指向同一份内容,属于同一有效地址的变体。
判断依据可以落到一个可核对的证据上:把参数去掉后,页面主体内容是否发生实质变化。如果排序参数从 ?sort=price 改成 ?sort=time,商品列表还是那批商品,只是顺序不同,这通常不构成独立地址;如果分类参数从 ?cat=shoes 改成 ?cat=bags,商品集合整体换了一批,这才接近独立地址。
多个角色对“哪些地址算有效”有不同理解时,争论往往停留在口头。更有效的做法是拉出一张判定表,每一行是一个参数,每一列是一个判定条件,让分歧变成可以逐格核对的事实。
这张表的价值在于:任何人不同意某个结论,都可以指出是哪一格的事实判断有误,而不是重新争论整体原则。
参数组合会无限增长,逐条列举不可行。可行的是为每一类参数写一条生成规则,让有效地址集合可以被规则描述出来。例如:
假设某列表页同时有分类和排序两个参数,分类有 20 个取值,排序有 5 个取值。如果全部保留,候选地址是 100 个;如果只保留默认排序,候选地址降到 20 个。这个数字只是用来说明规则如何压缩集合规模,不代表实际站点会有同样的量级。压缩之后,你才有一个可以实际执行批量查询的范围。
规则写完后,不要直接全量执行。先取一个已知的样本页面,按规则推导出它应该产生哪些地址,再与实际能访问到的地址对照。如果规则推导出的地址里,有一部分返回的是空结果、错误页或与主地址完全相同的内容,说明这条规则还需要收紧。
这一步的实际动作是:把样本对照中发现的偏差记录下来,回到判定表修改对应那一行,然后重新推导。只有当样本上的偏差收敛到可接受范围,才把规则应用到全量。这样做的影响是,后续批量查询拿到的结果才有稳定的解释口径——哪些地址本来就不该被期待收录,哪些地址是规则遗漏导致的,两者不会混在一起。
如果某个参数类别的批量查询结果全部为零,不要立刻断定是规则写错了或页面出了问题。至少还有几种合理解释:这些地址本身就不该被独立收录,所以零是正确结果;查询用的地址形态与线上实际形态不一致;或者查询范围没有覆盖到实际被抓取的路径。把这几条逐一排除之后,剩下的才可能是真正需要处理的异常。有效地址集合的定义,最终要能解释“为什么这一类是零”,而不只是给出一个数字。