你刚把新网站上线,结果第二天打开百度站长平台——收录掉了大半,关键词全掉出首页,自然流量直接“失联”。别慌,这事儿太常见了。干SEO十年,我帮几十个团队做过改版,八成以上的流量崩塌,不是设计问题、不是内容问题,就是301没设对。

今天不讲原理,只说你能立刻上手的操作:怎么把旧站辛辛苦苦攒下的权重,一克不漏地搬进新站。

为什么你改版后流量会断崖式下跌?

改版不是换套皮肤那么简单。搜索引擎记的不是“这个页面讲什么”,而是“这个URL有没有人点、有没有人链、有没有被收录”。
你把/product-123.html改成/items/123/,蜘蛛再爬过来,发现老地址返回404——它不会猜,也不会等,直接把这条链接的权重清零。

有个做家居电商的朋友,改版时技术同事说“URL结构统一重写就行”,没加任何跳转。一周后,他主推的“北欧风沙发”关键词从第2名掉到第9页,自然流量缩水了一大截。补上301后,花了两个多月才回到原来七成的水平。
这不是技术问题,是信任问题:你得让搜索引擎相信,“那个老页面没死,只是搬了家”。

怎么正确设置301重定向?3个核心方法

方法1:用.htaccess文件做Apache服务器跳转

Apache用户,直接改根目录下的.htaccess文件(没有就新建一个)。每条跳转单独写,像这样:

RewriteEngine On
RewriteRule ^old-page\.html$ http://www.yournewdomain.com/new-page/ [R=301,L]

R=301表示永久跳转,L代表“到此为止”,后面规则不再执行。
重点来了:不能偷懒写通配符。旧站有500个页面?那就老老实实列500条。我习惯先在Excel里拉一张新旧URL对照表,再用查找替换批量生成规则——比手动敲快,也比漏掉强。

方法2:用Nginx的rewrite模块

Nginx用户,在server块里加一行rewrite就行:

server {
    listen 80;
    server_name olddomain.com;
    rewrite ^/old-page\.html$ http://newdomain.com/new-page/ permanent;
}

permanent = 301。注意分号不能少,括号要配对,写错一个字符,Nginx reload就会报错。建议先在测试环境跑通,再上生产。

方法3:用PHP或JavaScript做备选方案

没服务器权限?或者只改了三五个页面?可以用PHP硬跳:

<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://newdomain.com/new-page/");
exit();
?>

这段代码要放在旧页面最开头,<head>之前。
JS跳转别用——window.location.href对搜索引擎基本无效,只能当用户体验补丁,千万别指望它传权重。

改版前必须做的3步准备工作

第一步:用工具抓取全站URL清单

别靠记忆,也别靠CMS后台导出。用Screaming Frog(免费版够用)或Ahrefs Site Audit,把全站所有可访问的URL都扒下来,导出为CSV。
这就是你的“跳转地图”。我每次改版前,都会把这份CSV打印出来,在旁边打钩:跳了、验证了、没问题。漏一条,就等于丢掉一个可能带来订单的入口。

第二步:制作新旧URL对应表

逐条对照,精确到斜杠和结尾反斜杠。比如:

  • 旧:http://old.com/product?id=123
  • 新:http://new.com/products/123/

如果旧站是参数型URL(比如?category=sofa),而新站用目录结构,那就把整个分类下的所有参数页,统一跳到新分类页。宁可多跳一次,也别留404。

第三步:在测试环境验证跳转

上线前,拿几条典型URL测一遍。用命令行最简单:

curl -I http://old.com/old-page.html

看返回头里有没有 HTTP/1.1 301 Moved Permanently,以及 Location: 后面是不是你填的新地址。
我见过最惨的一次:.htaccess里把newdomain.com拼错成newdomian.com,结果所有跳转都指向一个不存在的域名——蜘蛛爬过去,直接404,白忙活。

上线后怎么监控301是否生效?

别等数据变差才反应。上线当天就要做三件事:

  1. 登百度站长平台,进「网站改版」工具,上传你做好的新旧URL映射表。这是百度认的“搬家声明”,能加快识别速度。
  2. 登Google Search Console,在「设置」→「变更网址」里提交旧域名和新域名,告诉Google:“我们搬这儿了”。
  3. 每天翻一下服务器日志(或者用宝塔、cPanel里的访问日志功能),搜404和旧URL关键词。如果发现大量旧URL返回404,说明跳转漏了,马上补。

我自己的习惯是:上线头三天,每天随机点开10个旧链接,看是不是秒跳、跳得对不对、新页面能不能正常加载。自动化工具会漏掉带特殊符号的URL,人眼反而更靠谱。

遇到这3个常见坑,你的跳转就白做了

坑1:用了302而不是301

302是“我暂时去隔壁坐坐”,301才是“我正式落户了”。
有人图快,在Nginx里写了redirect(默认302),结果三个月后新页面还是没排名。判断很简单:用浏览器打开旧链接,按F12 → Network → 刷新 → 看Status Code是不是301

坑2:跳转链形成了死循环

比如:旧A页跳到新B页,新B页又通过<meta http-equiv="refresh">或JS跳回旧A页。蜘蛛进去就出不来,最后两个页面全被放弃索引。
检测方法:用Redirect Checker(在线小工具)输入旧URL,看它最终停在哪——如果绕一圈又回来,赶紧查源码。

坑3:忽略了带参数的URL

CMS生成的分页、筛选、UTM追踪链接,比如/list.php?page=2&sort=price,经常被忽略。
解决办法:在.htaccess里加两行,把所有带问号的请求,统一去掉参数再跳:

RewriteCond %{QUERY_STRING} .
RewriteRule ^(.*)$ http://newdomain.com/$1? [R=301,L]

末尾的?很重要,它能清空原参数。但如果你的新站也靠参数分页(比如/products/?page=2),就得单独写规则,不能一刀切。

今天就能执行的3个操作

别收藏吃灰,现在就打开电脑做:

  1. 打开百度站长平台,点左侧菜单「网站改版」→「创建改版任务」。如果没有旧URL清单,先点「抓取诊断」或「索引量」看看当前有哪些收录URL,截图保存。
  2. 下载Screaming Frog SEO Spider(官网免费),运行后输入你旧站域名,等它跑完,点「Export」→「Export All」→ 保存为CSV。
  3. 打开这个CSV,新建一列叫“新URL”,对照你新站的实际路径,一条一条填。填完10条,就复制第一行旧URL,粘贴到浏览器地址栏回车——看它跳不跳、跳得对不对。

这三步做完,你已经避开了80%的改版翻车现场。剩下的,就是上线后每天花5分钟盯日志、查跳转、补漏项。301不是设完就结束的事,是改版期间你最该盯紧的那根线。