网页重定向 301、302、307、308 的区别

网页重定向主要有 301、302、307 和 308,它们的主要区别在于 是否永久重定向是否改变请求方法(GET/POST 等)

1. 301 永久重定向(Moved Permanently)

  • 作用:表明资源的 URL 永久改变,搜索引擎会更新索引。
  • 影响
    • SEO 友好,权重会传递给新 URL。
    • 浏览器缓存(可能不会再请求旧 URL)。
    • GET/HEAD 请求:自动变更为新 URL。
    • POST 请求:会变成 GET,即请求方法可能改变。

2. 302 临时重定向(Found)

  • 作用:资源的 URL 临时变更,以后可能恢复,搜索引擎不会更新索引。
  • 影响
    • SEO 不友好,不会传递权重。
    • GET/HEAD/POST 请求:可能会变成 GET(浏览器行为不一致)。
    • 常用于 A/B 测试、网站维护等场景。

3. 307 临时重定向(Temporary Redirect)

  • 作用:类似 302,但明确要求不改变请求方法
  • 影响
    • SEO 同 302,不会传递权重。
    • 请求方法不变,POST 仍然是 POST,不会变成 GET。
    • 推荐使用 307 代替 302,以确保请求方法一致。

4. 308 永久重定向(Permanent Redirect)

  • 作用:类似 301,但不允许改变请求方法
  • 影响
    • SEO 友好,权重会传递给新 URL。
    • 请求方法不变,POST 仍然是 POST,不会变成 GET。
    • 适用于 Web API 迁移等场景。

总结对比

状态码 是否永久 是否改变请求方法 SEO 影响
301 ✅ 是 POST 变 GET ✅ 传递权重
302 ❌ 否 POST 变 GET(取决于浏览器) ❌ 不传递权重
307 ❌ 否 不改变方法 ❌ 不传递权重
308 ✅ 是 不改变方法 ✅ 传递权重

使用建议

  • 网站永久迁移:用 301 或 308(308 保持请求方法)。
  • 临时调整 URL(维护等):用 307(保持方法)或 302
  • API 迁移:用 308,避免请求方法改变。