先给结论:如果旧地址有明确、内容稳定的新对应页,优先用 301 逐条指向新页;如果旧地址对应的是一整类已不存在的栏目,且没有单一等价目标,才考虑在 robots.txt 中屏蔽该路径前缀,但必须接受它只阻止抓取、不负责移除已有索引的代价。判断的关键不是哪种写法更“干净”,而是旧地址是否还存在一个能承接原意图的页面。
迁移后处理旧地址,第一个动作是抽样打开旧 URL,看它当前返回什么。把旧地址分成两组:一组是能找到一个内容主题一致、层级合理的新页;另一组是原栏目整体下线,任何单个新页都只能承接其中一部分意图。
如果混淆这两组,常见后果是把本可承接权重的旧文章也一并屏蔽,或者把大量无等价目标的参数页全部 301 到首页,让搜索引擎把不相关跳转当成软 404 处理。
当旧地址能一对一对上新地址,301 是更合适的选择,因为它同时完成三件事:把用户带到新内容、告诉搜索引擎旧地址已永久迁移、让已积累的外部链接指向新目标。robots.txt 的 Disallow 做不到后两点,它只阻止抓取,不会把已有索引里的旧 URL 替换成新 URL。
实施动作可以按这个顺序:
curl -I 或浏览器开发者工具确认状态码,而不是只看页面能否打开。这个动作的结果会直接影响下一步:如果抽查发现某条 301 指向的新页主题明显不符,应把它退回“无等价目标”组,而不是继续保留错误跳转。错误跳转比暂时不处理更难纠正,因为搜索引擎可能已经把旧地址和新目标关联起来。
当一整类旧地址确实没有等价页,且这些 URL 数量大、内容无保留价值时,可以在 robots.txt 中写 Disallow 规则阻止继续抓取。写法上要注意路径前缀的边界,避免误伤同前缀下的有效页面。
假设旧站有一批带 /old-tag/ 前缀的标签页,全部废弃,而 /old-tag-guide/ 这个正常栏目仍需抓取。此时写 Disallow: /old-tag/ 只影响以该前缀开头的路径,不会波及 /old-tag-guide/;如果误写成 Disallow: /old-tag,就会把两者一起挡住。这是假设示例,用于说明前缀末尾斜杠对匹配范围的影响,实际匹配规则需按目标搜索引擎的文档核对。
需要明确代价:Disallow 只限制抓取,不保证旧 URL 从索引中消失。已收录的旧地址可能仍出现在结果里,只是描述信息逐渐过时。如果目标是移除索引,robots.txt 不是可靠手段,应优先考虑 404/410 让页面自然失效,或对确有必要的 URL 使用移除工具,并分别核查不同搜索引擎的支持情况。
真实迁移往往不是非此即彼。更稳妥的做法是按“是否有等价目标”切分,而不是按 URL 前缀一刀切。可以这样操作:
这样分配后,robots.txt 只承担“阻止抓取”的职责,不承担“移除索引”的职责。判断是否奏效时,不要只看抓取量下降就认定处理正确——抓取量归零也可能是因为屏蔽规则写得太宽,把有效页面一起挡掉了。更可靠的验证是分别抽查:被屏蔽的 URL 是否确实无保留价值,未被屏蔽的旧地址是否已正确返回 301 或 404。
有几种情况需要单独判断。旧地址对应的新页如果还在频繁调整、URL 可能再次变化,先不要急着批量 301,否则会形成重定向链,增加后续维护成本。旧地址如果涉及登录后内容或个性化参数,屏蔽前要确认不会影响正常用户可访问的公开页。
另外,robots.txt 的抓取限制不等于可靠的索引移除,站点地图也不保证收录,这两点不能互相替代。无论选择 301 还是屏蔽,都应保留一份旧地址到处理方式的对照表,迁移后定期抽查状态码和索引表现。当发现某条规则误伤有效页面时,修正 robots.txt 并重新抓取验证,是比继续追加规则更有效的下一步。