如果两个地址返回的正文完全相同,只有响应头不同,robots.txt规则本身通常不会告诉你该留哪一个。真正需要先判断的是:差异发生在抓取层还是索引层。若差异来自Content-Type、X-Robots-Tag、状态码或Vary,处理顺序和代价完全不同;先改robots.txt往往解决不了问题,甚至会让本来可被抓取的版本一起消失。
假设一个情境:同一段产品说明分别由/item?id=42和/item/42返回,正文逐字相同,但前者响应头带X-Robots-Tag: noindex,后者没有;两个地址都不在robots.txt的禁止路径中。此时若只改robots.txt,把/item?id=整体禁止抓取,结果是抓取器不再读取该地址,也就看不到那条noindex,已经进入索引的旧记录不会因此自动消失。这就是抓取限制与索引移除之间的常见错位。
反过来,如果响应头差异只是Content-Type从text/html变成application/octet-stream,问题更接近解析层:抓取可能成功,但内容不会被当作普通网页处理。此时改robots.txt同样无效,应该先修正响应头,再观察地址是否重新进入可解析状态。
做法一:保留两个地址,用rel=canonical或X-Robots-Tag表达偏好。它成立的条件是两个地址都能稳定返回正文、响应头差异可控、且你愿意长期维护重复内容。代价是判断分散在页面标记和响应头两处,任何一边被改坏都可能让偏好失效。
做法二:只保留一个地址,另一个做301或410。它成立的条件是你能确认旧地址没有独立外链、没有站内入口依赖、也没有用户收藏价值。代价是迁移期间可能丢失部分历史信号;若旧地址仍有外部链接,直接410比301更激进。
选择依据不是“哪个更干净”,而是响应头差异是否已经影响可索引性。若差异是noindex,优先统一响应头;若差异是状态码或内容类型,优先修正服务端;只有在两个地址都正常、仅路径重复时,才轮到robots.txt和canonical配合。
Content-Type和状态码,不要先动robots.txt。X-Robots-Tag、canonical和页面内的meta robots。Vary且值不同:检查是否因UA、Cookie或语言分流导致同一地址返回不同头,这类差异不能靠删一个路径解决。这些证据只能说明“哪一层更可疑”,不能单独证明处理正确。抓取量下降也可能来自站点整体流量变化、抓取预算调整或外部链接减少,不能把归零直接当成修复成功的证据。
把两个地址的响应头完整记录下来,逐项对照状态码、Content-Type、X-Robots-Tag、Location和Vary。先只改一项,例如移除多余的noindex,然后等待下一次抓取,再核对被抓取地址的响应头是否与预期一致。若一致,下一步才处理canonical或robots.txt;若不一致,说明服务端还有分流逻辑,继续改robots.txt只会掩盖问题。
需要提醒的是,robots.txt的抓取限制不等于可靠的索引移除;站点地图不保证收录;HTTPS也不保证安全无漏洞或排名。不同搜索引擎对响应头和robots.txt的支持情况须分别核查,不能用一个平台的表现推断全部。