唯一责任方应当落在“最终输出规范网址的那一层”:谁在响应前把URL改写成可被抓取的规范形式,谁就对收录检查中出现的不一致负责。若多个系统都能生成网址,例如CMS、路由中间件和前端渲染层各有一套规则,就必须指定其中一个为权威来源,其余系统只消费它的输出,而不是各自维护一份规则。判断依据不是哪个系统更“核心”,而是哪个系统的输出最接近爬虫实际请求到的地址。
第一种条件:网址规则在请求进入应用之前就已确定,比如反向代理或CDN层完成规范化。此时责任方是代理配置的维护者,应用层不应再生成另一套规范。第二种条件:网址由应用内部根据内容关系动态生成,比如详情页的路径依赖分类或参数。此时责任方是应用内负责路由与链接生成的模块,代理层只做透传。两者的分界点是:最终写进响应体或重定向Location头的那个URL,由谁决定。
选择依据可以简化为一个动作:抓取一个样本页,查看返回的HTML中链接的href、canonical以及任何重定向目标。如果这三者中的规范形式由不同系统产生,冲突就已经存在。此时不要先改规则,先确定哪一层的输出被爬虫当作入口,把责任方定在那一层,其他层改为读取或透传。
具体动作是让非责任方停止生成规范网址,只保留原始标识。例如路由中间件不再拼接带参数的路径,改为输出内部ID;由责任方统一映射为对外URL。这个动作的结果是:收录检查中出现的地址数量会减少,且每个地址都能追溯到同一份规则。下一步的检查对象也随之明确——只需核对责任方的规则与爬虫实际抓取到的地址是否一致,不必再逐层比对。
假设一个场景:列表页链接由前端模板生成,站点地图由后端任务生成,两者对分页参数的处理不同。此时不能同时修改两处,而应选定后端任务为责任方,前端模板改为读取同一份分页规则。这只是说明比较方法的假设例子,不代表任何真实项目的现状。
个别样本的规范地址正确,不能证明所有页面都由同一层输出。规模化后常见的例外包括:部分页面走了缓存,绕过了责任方的改写;或某些内容类型由独立子系统发布,未接入统一规则。识别这类例外的方法是按内容类型或模板分组抽样,而不是随机抽URL。如果某一组的规范地址全部来自非责任方,说明责任方定义需要扩展到该组,或者该组必须接入责任方。
另一个例外是抓取限制与索引状态被混为一谈。robots.txt 的抓取限制不等于可靠的索引移除,站点地图也不保证收录。因此当收录检查发现某类地址缺失时,不能仅凭robots或站点地图的存在就判定责任方已正确处理,还要确认该地址是否被实际请求、返回状态是什么。
完成上述动作后,如果规范URL仍出现多个来源,说明责任方定义过窄,需要把产生最终响应URL的那一层重新指定。责任方一旦确定,后续的收录检查就只针对这一层的输出做核对,其他系统的问题转为接入问题,而不是规则冲突问题。