301 看起来简单:把旧地址跳到新地址。但实际配置里,六个错误反复出现,而且多数人不知道自己错了。
错误一:跳转链太长
A → B → C → D。每跳一次,权重都会衰减,而且蜘蛛要多抓几次。
正确做法:所有旧地址直接跳到最终地址,一步到位。
# 错误
/old-a → /old-b → /new
# 正确
/old-a → /new
/old-b → /new
错误二:循环跳转
A 跳 B,B 又跳 A。用户看到"重定向次数过多",蜘蛛直接放弃。
检测:用 curl -I 跟几次,看是否回到原点。
错误三:用 302 代替 301
302 是临时跳转,权重传递很弱。改版、换域名必须用 301。
注意:有些 CDN 或面板默认用 302,要检查返回头。
错误四:跳转到不相关页面
把删除的产品页全部 301 到首页。蜘蛛会认为这是"软 404",权重不传递,还可能降低信任。
正确做法:跳到最相关的分类页或替代产品页;确实没有替代的,返回 410。
错误五:HTTPS 与 www 跳转冲突
同时存在四条规则:http→https、www→非www,配置顺序不对就会互相跳。
# Nginx 正确写法:一次跳到位
server {
listen 80;
server_name example.com www.example.com;
return 301 https://example.com$request_uri;
}
错误六:跳转后 canonical 还指向旧地址
页面 301 到新地址,但新页面的 canonical 写着旧地址。信号矛盾,蜘蛛不知道该收录哪个。
正确做法:新页面的 canonical 指向自己。
怎么系统检测
- 导出全站旧 URL(从 sitemap、日志、统计)。
- 批量
curl -I检查返回码和 Location。 - 确认每条都是一步跳转、目标 200、无循环。
- 用爬虫工具跑一遍,看有没有跳转链超过一跳的。
curl -I -s https://example.com/old-page | grep -E "HTTP|Location"
改版时的 301 清单
| 场景 | 处理 |
|---|---|
| URL 规则变化 | 逐条映射,一步到位 |
| 栏目合并 | 子页跳到新栏目对应位置 |
| 页面删除 | 跳到上级栏目或 410 |
| 域名更换 | 全站 301,保留至少一年 |
| http→https | 一次跳到最终版本 |
改版时的 301 优先级
不是所有旧 URL 都值得一条条映射。按流量排序:有自然搜索流量的页面必须精确映射;有外链但没流量的映射到最相关页面;两者都没有的,统一跳到上级栏目即可。
几千个 URL 的站,先处理前 200 个高流量页面,就能保住八成的权重。剩下的用规则批量处理,别为了完美卡住上线。
上线后怎么验证
用爬虫工具跑一遍旧 sitemap 里的 URL,检查每条是否一跳到达 200 页面。列表里出现 302、404、或两跳以上的,逐个修。
一条 301 应该怎么验证
用 curl -I 看状态码和 Location,只允许跳一次,最终落到 200。HTTPS 和 www 要统一,路径和参数尽量保留,不要全部跳到首页。批量迁移时写一个脚本,把旧 URL 和新 URL 做成两列表,逐条跑一遍。
上线后一周每天看 404 日志,发现漏映射的立刻补。拖过一个月,蜘蛛已经把旧地址标记为失效,再跳效果会差很多。
跳转链超过一跳,蜘蛛和用户都会损耗。用工具跑一遍全站,把 A 跳 B、B 再跳 C 的链路改成 A 直接跳 C。上线后每周看一次 301 日志,确认没有新的链路。
跳转只允许一跳,A 跳 B、B 跳 C 会损耗权重;用工具跑一遍全站,把链路压平。
跳转只允许一跳,把链路压平。
常见问题
301 要保留多久
至少半年,建议永久。搜索引擎需要时间把权重和排名迁移过去。
301 会不会丢权重
会有一小部分损耗,但远小于不跳转。规范配置能把损耗降到很低。
能不能用 JS 跳转代替
不能。JS 跳转对搜索引擎几乎不传递权重。
改版的完整流程,见官网改版不丢排名。