thinkphp5.1路由重定向默认为302临时跳转,seo场景下须按迁移性质显式指定301(永久)或302(临时):301传递全部权重并更新索引,适用于域名更换、url结构调整等;302不传权重,适用于登录跳转、a/b测试等短期场景。

ThinkPHP5.1 中的路由重定向默认使用 302(临时重定向),但 SEO 场景下必须根据迁移性质显式选择 301 或 302,否则可能造成权重丢失、收录混乱或排名下滑。
301 与 302 的核心区别
301 表示资源已永久迁移,搜索引擎会把旧 URL 的全部链接权重(Link Juice)转移至新地址,并更新索引;浏览器也会缓存该跳转,后续访问直接跳转,不经过原地址。302 表示临时变动,搜索引擎仍视旧地址为主入口,不会转移权重,也不鼓励长期缓存——适合登录跳转、A/B 测试等短期场景。
错误混用后果明显:比如域名更换却用了 302,半年后旧域名仍被收录、新站难起量;而维护页面误配 301,则搜索引擎可能永久剔除原页,恢复后也难召回。
ThinkPHP5.1 中配置 301/302 的方法
框架通过 redirect() 方法实现重定向,支持传入状态码参数:
- 默认行为:
return redirect('/new-path');→ 发送 302 状态码 - 强制 301:
return redirect('/new-path', 301); - 带参数的 301:
return redirect('index/index', ['id' => 123], 301); - 跨域外部跳转同样适用:
return redirect('https://new-site.com/article/1', 301);
注意:301 跳转需确保目标地址可访问且内容匹配,否则会被搜索引擎判定为“软404”,反而损害 SEO。
SEO 关键场景下的选择建议
以下情况应使用 301:
- 网站整体迁移到新域名(如 old.com → new.com)
- URL 结构调整(如 /article/123 改为 /news/detail/123)
- HTTP 升级 HTTPS(全站统一跳转)
- 合并重复内容页(如带参数的分页页统一指向无参主 URL)
以下情况应使用 302:
- 用户未登录时跳转至登录页(登录成功后需返回原路径)
- 后台发布前的预览页临时跳转
- 灰度发布或 A/B 测试中的流量分流
- 节假日活动页的短期替代(活动结束后恢复原逻辑)
补充:避免常见陷阱
ThinkPHP5.1 路由重定向易忽略的细节:
- 不要在 redirect() 前有任何输出(包括空格、echo、var_dump),否则触发 Headers already sent 错误
- 使用 301 时,务必保留原始查询参数(如搜索词、UTM 标记),否则丢失来源信息;可用
request()->param()手动拼接 - 避免重定向链:/old → /mid → /new,应直连 /old → /new;多层跳转会显著增加加载延迟并稀释权重
- 上线前用 curl 或 Chrome DevTools 检查响应头:
curl -I http://yoursite.com/old,确认返回状态码和 Location 头准确无误
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











