一个改了域名就丢了搜索排名的故事
某网站把 example.com 全部迁到 example.net,用了平台默认的跳转。三个月后流量掉了一半——因为默认跳转是 302(临时),搜索引擎没有把旧域名的权重转移给新域名,反而认为这是临时的借用。一句话点破:永久改变用 301,临时借用用 302,要保方法用 307/308。本文把四者讲清,并带你避开 SEO 与表单跳转的坑。
四张状态码一张表
| 状态码 | 名称 | 语义 | 是否缓存 | 方法变化 |
|---|---|---|---|---|
| 301 | Moved Permanently | 永久 | ✅(浏览器+SEO) | POST→GET |
| 302 | Found | 临时 | ❌ | 历史实现 POST→GET |
| 303 | See Other | 请用 GET 查看 | ❌ | 有意转 GET |
| 307 | Temporary Redirect | 临时且保方法 | ❌ | 保持方法 |
| 308 | Permanent Redirect | 永久且保方法 | ✅ | 保持方法 |
要点:301/308 会被缓存且是永久语义;302/307 不缓存是临时语义;303 明确“重定向后请用 GET”。最常踩的坑就是 301/302 把 POST 悄悄变成 GET。
Location 头与链条
重定向通过响应头告诉客户端要去哪:
HTTP/1.1 301 Moved Permanently
Location: https://new.example.com/path/to/page
- 客户端必须读 Location 决定下一跳;
- 相对 Location 会被按当前 URL 解析成绝对地址;
- 一条链接可能经过多跳(A→B→C→最终),浏览器默认踩到底,但超过约 20 跳会放弃并报错;
- 链条越长,对用户与爬虫都越不友好(多一次往返),能用一条就达成的尽量一条。
SEO 陷阱:权重该不该转移
301 → 把旧地址的链接权重尽量转给新地址(推荐做永久迁移)
302 → 不转权重,只是临时借用(适合 A/B、上线过渡)
- 大改版『内容不同』却 301 → 会被视为降级;
- 全站 301 到首页 → SEO 视为死链聚合,宁可逐条映射;
- 无法补齐的旧链接,至少保留 301 表并维护,别让地图上缺页。
重定向环:怎么回事
A→B→A、或 A→A 自指都是环。诱因多在中介层:尾斜杠规则、http/https 互跳、www 规范化、CDN 与源站规则打架。防御与排查:
# 观察跳到第几步回原点
curl -I -L --max-redirs 10 https://old.example.com
客户端一般自适应约 20 跳后放弃;服务端应在规范化后再决定是否跳,避免二义规则互踩。
自查
给下面三种需求各选一个状态码,并说明理由:
- 老页面全部移入
archive/,旧地址永久弃用; - 上线前用新设计稿做一天灰度,随时可能回滚;
- 用户提交表单后跳转回列表页。
(答案:①301;②302 或 307;③303 或 307/302——前两者把权益/流程说清就够。)能把理由讲清,重定向的语义边界就过关了。