唯一责任方应当定义为“最终决定线上URL形态的那一个系统”,而不是生成URL数量最多的系统。判断依据是:谁把结果写入可被百度抓取的HTML、跳转响应或站点地图,谁就对百度收录负责。其他系统即使也在拼URL,只要其输出不直接面向爬虫,就只能算上游建议方。缺少完整数据或权限时,仍可先做一件事:抓取线上实际返回的URL样本,按来源标记归类,看哪套规则真正决定了最终地址。
常见情形是,页面A在列表页里是带参数的动态地址,进入详情后又变成静态化路径,站点地图里还出现第三种写法。三个系统都声称自己按规则生成了网址,于是出现“谁都没错、收录却混乱”的局面。
这时先不要急着改规则,而要确认最终响应。百度抓取的是服务器实际返回的内容和状态码,不是各系统日志里的字符串。如果动态地址返回301指向静态地址,那么动态系统只是中间环节;如果静态地址返回200且内容完整,静态系统就是最终责任方。
例如CMS生成静态路径,前端路由又追加查询参数,CDN或网关再做一次重写。三者叠加后,最终URL取决于执行顺序。此时责任方是执行顺序中最后写入响应的那一层,而不是规则最完整的那一层。
比如商品系统输出带参数的内部链接,但对外模板统一替换为静态地址,站点地图也由该模板生成。这种情况下,内部引用再多也不改变百度看到的地址,责任方依然是模板层。
能区分解释的证据不是“谁生成了多少URL”,而是以下三类可验证信号:
curl -I或浏览器网络面板查看最终URL返回的是200、301还是302。301指向的目标才是百度最终可能收录的地址。<link rel="canonical">指向哪个地址,往往暴露了模板层的真实意图。若canonical与站点地图不一致,说明至少两个系统在争夺定义权。假设某站点有A、B两个系统:A生成带?id=的地址,B生成/item/路径。抓取发现?id=返回301到/item/,且canonical也指向/item/。此时可以判定B为唯一责任方,A应改为直接输出最终地址或停止对外暴露。这个判断只说明当前响应关系,不能推出百度一定收录/item/,因为收录还受内容质量、抓取配额和站点整体状态影响。
如果没有服务器配置权限,也没有日志访问权限,仍然可以执行一个最小动作:用公开可访问的页面做样本,手动记录每个URL的最终状态码、canonical和站点地图出现情况,形成一张对照表。
这张表的作用是缩小范围:如果所有样本的canonical都指向同一形态,那么责任方大概率在模板层;如果canonical分散在两种形态,说明至少两个系统都在输出规范信号,需要先统一canonical再谈责任归属。完成这一步后,下一步动作是拿着对照表找对应系统的负责人确认:谁有权修改最终响应,谁就承担唯一责任。
需要明确的是,robots.txt限制抓取不等于能可靠移除已收录页面,站点地图提交也不保证收录。上述对照表只能帮助定位责任方,不能用来推断百度一定会怎么处理。若涉及具体平台的接口或后台入口,应以该平台当前实际文档为准,不同搜索引擎的支持情况也需分别核查。
把责任方写进流程时,建议用一条可执行的规则代替口头约定:谁控制最终HTTP响应中的URL形态,谁就是百度收录的唯一责任方。其他系统只能作为建议方,其输出若与最终响应不一致,应视为缺陷而非并行规则。
这条规则的好处是,它不依赖日志完整性,也不依赖各系统自述。只要抓取一次线上响应,就能确认责任方。确认之后,修改动作也有了明确归属:由责任方统一输出URL,其他系统改为引用该输出。这样下一步的验证也变得简单——再次抓取同一批样本,看最终URL是否只剩一种形态。若仍有两种,说明还有未识别的写入层,需要继续向上游排查,而不是回到“谁生成得多谁负责”的循环里。