结论先给:只要站点地图和页面内链由同一个发布系统生成,就把这两类网址规则的唯一责任方定为发布系统;只有当站点地图由独立调度服务生成、且它无法读取发布系统的路由表时,才改由调度服务负责,并要求发布系统把路由表以只读方式暴露给它。判断依据不是哪个团队人手多,而是谁掌握“一条内容应该对应哪个规范网址”的权威数据。选错责任方,蜘蛛抓取频率的波动会变得无法归因。
多系统并存时,常见分工是:CMS 负责内容与页面路由,站点地图服务负责汇总 URL,CDN 或边缘层负责重写和跳转。三者都可能输出网址规则,但只有一方能回答“这条内容此刻的规范网址是什么”。把唯一责任方定在掌握这份权威数据的一侧,其余系统只做投影,不自行拼装 URL。
一个可以落地的动作:让候选责任方导出一份“内容 ID → 规范网址”的映射文件,交给另外两方比对。如果只有一方的映射能覆盖全部已发布内容且无冲突,责任方就基本确定。这个动作的结果直接影响下一步——映射存在冲突时,先解决冲突再谈抓取频率,否则后续所有排查都在错误前提下进行。
责任方唯一,意味着其他系统必须放弃“顺手生成 URL”的能力。站点地图服务不再根据栏目结构自行拼接路径,CDN 不再根据参数组合重写目标,前端不再用相对路径临时拼链接。这些行为看起来无害,却会让同一内容出现多个候选网址,蜘蛛抓到哪个、抓多频繁就变成随机结果。
假设一个场景:某栏目改版后,CMS 把详情页路径从 /a/123 改为 /topic/123,站点地图服务仍按旧模板生成 /a/123,内链已全部指向新路径。此时蜘蛛会同时遇到新旧两类地址,抓取预算被分散。若责任方是 CMS,正确做法是让站点地图服务直接读 CMS 的新路由表,而不是各自维护模板。改完之后,观察抓取分布是否收敛到新路径,再决定是否需要进一步处理旧地址。
反例是:责任方虽然掌握权威数据,但它的输出存在延迟或不完整。例如 CMS 路由表每几小时才同步一次,而内容发布是分钟级的,站点地图服务若严格等待,会长期落后于实际可抓页面。这时“唯一责任方”仍然成立,但需要补一条:责任方必须提供增量变更接口,而不是只提供全量快照。如果做不到,唯一责任方就会变成瓶颈,反而让抓取频率在发布高峰期异常下降。
另一个失效条件是责任方本身也在被重构。若 CMS 正在迁移路由方案,把责任方定在它身上会让规则频繁变动。此时可临时把责任方上移到调度服务,条件是调度服务能读取 CMS 的迁移中间态,并在迁移结束后交还责任。这不是长期方案,只是过渡。
口头约定不足以支撑排查。把责任方落实为一条可检查的规则:只有责任方可以新增或修改网址生成逻辑,其他系统的相关代码路径必须标注为只读或消费方。每次变更后,用同一份映射文件做回归比对,确认没有第二方偷偷生成 URL。
要注意,robots.txt 的抓取限制不等于可靠的索引移除,站点地图也不保证收录;抓取频率的变化可能来自这些因素,不能因为责任方已统一就认定问题已解决。把这些检查分开做,才能让责任方约定真正发挥作用。
先确认候选责任方能否导出覆盖全部已发布内容的“内容 ID → 规范网址”映射。能导出且无冲突,就把它定为唯一责任方,其余系统改为只读消费;不能导出,就先补这个导出能力,再谈抓取频率的归因。这一步做完之后,你才有条件判断抓取异常是规则冲突造成的,还是抓取限制、站点地图或服务器响应造成的。