先给结论:旧地址没有完全等价目标时,不要用 robots.txt 的 Disallow 去“代替”跳转或 410。robots.txt 只能阻止抓取,不能可靠地把已收录 URL 从索引里移除;如果旧地址仍有外链或用户入口,屏蔽抓取反而会让搜索引擎看不到你的处置信号。更稳的顺序是:能一对一映射的做 301;确实没有等价内容的做 410 或保留一个最接近的聚合页做 301;只有那些无搜索价值、又不想被持续抓取的参数或内部路径,才考虑写进 robots.txt。
下面用一个假设情境把决策过程串起来,便于团队把分歧变成可核对的项目。
假设某站点从 /old-a、/old-b、/old-c 迁移到新结构,产品、运营、开发三方对处理方式意见不一。产品认为都该跳首页;运营担心旧地址失效影响流量;开发想直接在 robots.txt 里全部 Disallow,理由是“最快让它们消失”。
先别投票,先把三条地址分别核对三件事:旧地址是否有外链或站内入口;旧内容是否真的不存在;是否存在一个语义最接近的新页面。核对结果不同,处理方式就不同。
/old-a:旧内容整体并入新页面 /new-a,语义基本一致。处理:301 到 /new-a。/old-b:旧内容已彻底下线,没有任何近似主题的新页面,但有外部链接指向它。处理:返回 410,让抓取方明确知道内容已永久移除。/old-c:旧内容是筛选参数组合,没有独立价值,站内也没有入口。处理:可以返回 410;若这类 URL 数量极大且持续被抓取,再评估是否用 robots.txt 限制抓取,但要接受它不等于移除索引。robots.txt 的 Disallow 只表达“不要抓取这个路径”。如果旧 URL 已经被收录,抓取被阻止后,抓取方可能无法读到 301、410 或 noindex,移除判断就缺少依据。更麻烦的是,不同搜索引擎对同一份 robots.txt 的支持细节并不完全一致,必须分别核查,不能假设一处生效就处处生效。
因此,当“没有完全等价目标”时,优先顺序通常是:
注意,站点地图不保证收录,把新地址放进站点地图也不能替代对旧地址的处置。HTTPS 同样不解决迁移映射问题。
动作一:建一张旧地址清单,标注“有无等价目标”。不要只写“失效”,要写清是否有语义最接近的新 URL。结果会直接决定是 301 还是 410;如果这一步含糊,后面所有争论都会反复。
动作二:对候选目标做一对一核对。假设把 /old-a 跳到首页,用户和抓取方都无法判断旧内容去了哪里,这种“软 404 式跳转”通常不如 410 清晰。核对结果若是“没有真正对应”,就不要为了减少 404 数量而强行跳首页。
动作三:先上线 HTTP 状态处理,再考虑 robots.txt。用 curl -I 或等价方式检查旧地址返回的是 301、410 还是 200。如果返回 200,说明旧地址仍在提供内容,此时写 Disallow 只会让抓取方看不到真实状态。这个动作的结果决定下一步:状态正确后再观察抓取与索引变化,状态不对就先修状态。
动作四:把 robots.txt 变更单独记录,并保留回滚点。如果确实要为参数 URL 加限制,先保存当前文件,再小范围验证。结果若显示目标 URL 仍出现在索引中,不能据此断定“处理失败”,因为索引更新有滞后,且抓取限制本就不等于移除。此时应检查是否缺少 410、canonical 或 noindex 等更直接的手段,而不是继续加严 robots.txt。
当旧地址没有等价目标时,团队常想“既然不想让人看到,就 Disallow”。但 Disallow 之后,抓取方可能连 410 都读不到,旧 URL 可能长期留在索引里,用户从搜索结果点进来还会看到错误页或空白页。更合理的判断是:这个 URL 是否还需要向抓取方传达“已永久移除”?如果需要,就不要用 robots.txt 挡住它。
反过来,如果某类 URL 数量巨大、无外链、无用户入口、也没有任何搜索价值,且抓取预算被明显消耗,那么用 robots.txt 限制抓取可以作为辅助手段。但前提是:你已接受它不负责移除索引,并且对已收录部分另有处置方案。
最后提醒一点:请求量下降、抓取量归零,都不能单独证明处理正确。它们也可能来自抓取频率正常波动、其他路径被优先抓取,或抓取方暂时降低了该站点的整体抓取。要结合 HTTP 状态、索引表现和站内入口一起核对,再决定是否调整下一步。