404 not found 的意思是服务器收到请求后,明确告诉你这个地址上现在没有可返回的资源。迁移后旧地址找不到完全等价的新页面时,核心选择只有两类:让它返回 404 或 410,承认内容已不存在;或者用 301 指向一个真正相近、能满足原访问意图的目标。判断依据不是“新站有没有一个看起来相关的页面”,而是旧地址当初承载的意图能否被新目标基本承接。能承接就做 301,不能承接就让它干净地 404,不要用首页或栏目页兜底。
迁移中最常见的误判,是拿旧 URL 的目录层级去匹配新 URL。比如旧地址是 /guide/install-old,新站有一个 /guide/ 栏目页,路径上确实相关,但栏目页并不回答“怎么安装旧版本”这个问题。此时做 301 会把带着明确意图的访问者送进一个泛列表,他们大概率立刻返回并离开。
可承接的判断标准可以落到三个可核对的问题上:旧页面解决的具体问题,新目标是否也解决;旧页面里的关键步骤、参数或结论,新目标是否仍能找到;访问者到达新目标后,是否需要再次搜索才能完成原本的动作。三个都偏向“是”,301 成立;任一明显偏向“否”,就应倾向 404 或 410。
当旧页面的主题被新站某个页面完整覆盖时,301 是正确动作。要点是不要图省事全部指向首页或一级栏目。假设旧站有 30 个产品型号页,新站合并成了 3 个系列页,那么每个型号页应 301 到包含该型号的系列页,而不是统一到首页。这样访问者到达后仍能看到对应型号的信息,下一步才可能继续浏览或询价。
实施后要做的核对:随机抽取若干旧地址,确认返回的是 301 而不是 302,确认跳转终点是 200 状态且内容确实相关。如果跳转链出现 301 接 301 的多跳,应把中间环节去掉,直接指向最终目标,减少访问者和抓取端的损耗。
当旧内容已经彻底下线、新站没有对应主题时,让它返回 404 是诚实且可维护的选择。410 表达的是“曾经存在、现已永久移除”,语义更明确,但并非所有场景都必须用 410;如果无法确认内容是否还会恢复,404 更稳妥。关键是不要为了“避免 404”而把这类地址强行 301 到首页——这会让访问者以为进了错页,也会让后续排查失去真实信号。
一个常见的例外:如果旧地址本身有外部链接或长期直接访问,且新站确实有主题相近但不等价的页面,可以考虑 301,但要在页面顶部明确说明内容已调整、原信息现在在哪里。这种处理只适用于“相近但不完全等价”且访问者仍能获得部分价值的情况,不能滥用成惯例。
迁移项目里,开发、内容、SEO 三方对“这个旧地址该怎么办”经常各执一词:开发看状态码,内容看主题,SEO 看流量。与其争论,不如把每个旧地址变成一行可核对的记录,字段包括:旧 URL、旧页面主题、是否存在承接页、承接页 URL、建议动作、核对结果。三方对同一行给出判断,分歧点自然浮现,且可以逐条验证。
执行顺序建议是:先处理有明确承接者的地址并完成 301,再集中处理无承接者的地址,最后统一抽查。抽查时至少覆盖三类:跳转终点是否为 200、404 是否真的返回 404 而非软 404、以及是否存在跳转链。软 404 指页面返回 200 但内容显示“未找到”,它会让状态判断失效,必须通过响应状态确认,而不是只看页面文字。
假设一个迁移场景:旧站有 200 个文章页,新站保留 150 个主题相近的页面,另外 50 个主题取消。合理的做法是前 150 个逐个映射到最具体的对应页并做 301,后 50 个返回 404 或 410。如果把这 50 个也 301 到首页,短期看似“没有 404”,但访问者到达首页后仍需重新寻找,这一步的失败会直接影响后续是否继续访问。做完映射后,下一步应抽查跳转终点状态和内容相关性,而不是只看跳转数量是否覆盖了全部旧地址。