响应头不同,页面内容相同,百度仍可能把它们当作不同结果处理:关键不在“内容是否一致”,而在响应头传递的抓取与索引信号是否一致。若一个地址返回 200 且可缓存,另一个地址对同一内容返回 301、302 或 X-Robots-Tag 限制,判断就不能只看正文比对。
第一种条件:内容相同,响应头也基本一致,只有缓存、编码、服务器标识等非索引信号不同。这类差异通常不会改变百度对页面主体的判断,可以继续观察抓取和展现,不必立即改结构。
第二种条件:内容相同,但响应头在状态码、跳转目标、X-Robots-Tag、内容类型或字符集上不同。此时要优先处理信号冲突,因为百度看到的是“同一份正文,却收到不同指令”。
状态码最直接。一个地址返回 200,另一个返回 301,百度通常会把后者视为跳转关系,而不是两个等价页面。若返回 302 或 307,临时跳转的语义又不同,后续是否稳定归并要看跳转是否长期保持。
X-Robots-Tag 也容易造成分歧。假设 A 页面响应头带 noindex,B 页面不带,即使正文完全一样,百度也可能只保留 B 而放弃 A。若 A 还带 noarchive,影响的是快照类展示,不等于必然不收录,但会改变你对该地址可用性的判断。
Content-Type 与字符集同样不能忽略。同一段 HTML 被声明为 text/html; charset=utf-8 和 text/plain,百度对页面类型的识别会不同;字符集声明错误还可能让正文变成乱码,导致内容比对本身失真。
个别样本上,响应头差异可能被正文相似度、内链关系或历史抓取结果抵消,看起来“没影响”。但规模化后,例外往往来自三类边界:
X-Robots-Tag 作用于整个响应,页面内 meta robots 只作用于 HTML 解析阶段,两者冲突时不能按同一规则推断。因此,样本成立不代表可以照搬。先确认响应头差异是否触及索引指令,再决定是合并地址、统一响应,还是保留差异并观察。
假设同一批商品页有 A、B 两个地址,正文一致。A 返回 200 且无限制头,B 返回 301 指向 A。此时应把 B 当作跳转地址处理,检查内链和站点地图是否仍大量指向 B;若仍指向 B,百度可能继续抓取 B 并消耗抓取预算,而不是直接归并到 A。
若 B 返回 200 但带 X-Robots-Tag: noindex,则应先确认这是否为有意设置。若是误配,移除该响应头后,下一步不是立刻要求收录,而是观察百度是否重新抓取 B、是否仍把 A 作为主地址。这个动作的结果会决定你继续保留双地址,还是做规范化合并。
curl -I 或等效方式分别取响应头,记录状态码、跳转目标、X-Robots-Tag、Content-Type。200,检查是否同时存在 canonical、内链和站点地图指向不一致;不要只凭正文相同就认定百度会自行选主。需要提醒的是,robots.txt 的抓取限制不等于可靠的索引移除;站点地图不保证收录;HTTPS 也不保证安全无漏洞或排名。响应头只是判断链中的一环,最终仍要结合抓取日志、展现数据和页面实际返回状态一起看。