处理 Baiduspider 抓取中重复或冲突信号的核心做法是:先确定冲突发生在哪一层(URL 可访问性、页面内容声明、还是抓取入口),再让同一层内的信号只保留一个明确结论。假设一个例子:某站点同一篇内容有 /article?id=123 和 /article/123 两个可访问地址,页面里 canonical 指向后者,但站点地图只提交了前者,内链又混用两者。Baiduspider 会看到多个入口和多个“哪个是正本”的说法,这就是典型的重复与冲突并存。第一步不是改代码,而是把同一内容的所有可访问 URL 列出来,标注每个 URL 被谁引用、返回什么状态码、页面内声明了什么。
第一类是 URL 层重复:同一内容能通过多个地址打开,包括参数、大小写、带不带斜杠、http 与 https 并存。第二类是声明层冲突:canonical、robots meta、页面标题各自指向不同版本,或者 canonical 指向一个 404 或跳转地址。第三类是入口层冲突:站点地图、内链、外链分别指向不同版本,甚至有的入口被 robots.txt 屏蔽,有的没有。这三类的处理顺序不同,混改容易按下葫芦浮起瓢。
curl -I 看响应头,用页面源码看声明。常见错误有三个:只加 canonical 却保留 200 状态的多地址;canonical 指向跳转链中间地址;站点地图提交了重复 URL 而正本没提交。判断是否处理到位,看同一内容是否只剩一个返回 200 的地址,其余要么 301,要么 404/410。
上述处理适用于内容相同、只是地址不同的重复。如果两个地址内容其实不同,就不该合并,而应各自明确主题、互相区分。如果冲突来自分页、筛选参数或打印版,优先用 canonical 指向主列表页,并确认参数不会生成无限可抓取地址。判断结果的标准不是“提交后立刻变化”,而是正本地址能被稳定抓取、重复地址逐步减少出现在抓取记录中。站点地图不保证收录,HTTPS 也不等于没有安全问题,这两点不要当作冲突已解决的依据。
下一步:从服务器日志或抓取统计中筛出 Baiduspider 实际访问过的重复 URL,按上面三类归档,先处理返回 200 的重复地址,再统一入口声明。