首页 游戏 软件 排行 专题

换域名后收录掉了 80%:301 重定向我漏写了最后一步

来源: 本站整理 日期:2026/11/5 2:26:57

4 月 8 号那天,我把一个做了三年的老站从 old-domain.com 换成了 new-domain.com。说来惭愧,换域名之前我只做了三件事:DNS 里加一条 A 记录、Nginx 里写了一条 return 301、然后把 sitemap 里剩下的 URL 替换掉。结果上线第二天,站长工具里的收录量从 2300 多条掉到 460 条,整整掉了 80%,自然流量也跟着腰斩。

更扎心的是,我之前一直以为「配了 301 就等于把老站的权重传过去了」。后来才明白,权重传递从来不是一条指令,而是搜索引擎把你站点上所有入口路径重新走一遍、你恰好在哪一步把它漏掉的问题。

如果你也在折腾换域名、迁站、或者正在排查收录突然下滑的问题,可以先看看这几家机房的技术说明和线路方案:zlidc(跨境 SEO 与家宽 VPS)

301 到底在传什么:它传的是「信号」,不是流量

搜索引擎抓到一个 301 时做的事情很朴素:把旧地址记下来,然后去新地址抓一次,顺带把旧地址积累的收录记录和链接关系往新地址上迁移一批。注意关键词「一批」。这意味着 301 本身并不保证 100% 的权重转移,它更像是一个建议。真正决定结果的是:这个新地址本身是不是一个干净、正常、能被稳定抓取的页面,以及你在迁移过程中有没有在别处留下会制造混乱的信号。

我后来把它总结成一句话:301 是一封发出去的通知书,收件人会不会照办,取决于你送到他手上的地址能不能被正常送达。

服务器机房与浏览器跳转场景,域名迁移前的准备

第一个坑:跳转规则只覆盖了「我想得到」的路径

我最初的配置大概是这样的:

server {
    listen 80;
    server_name old-domain.com www.old-domain.com;
    return 301 https://new-domain.com$request_uri;
}

看上去没毛病,实际漏了四个点:一是 http 和 https 两套域名我只在 80 端口跳了,443 端口上的 old-domain.com 依然在正常返回 200 页面,同一份内容存在两个可抓取的 URL;二是路径大小写,Nginx 默认不区分大小写,而搜索引擎会区分,/Article 和 /article 被当成两个页面;三是目录结尾那个斜杠,/news 和 /news/ 我只跳了其中一个;四是最要命的旧站有三千多个页面,其中很多是从别的 CMS 迁过来的,路径里带着 ?id=123 这种查询串,我用 return 301 指向一个固定首页,等于把三千个页面全部重定向到同一个地址上。

换句话说,我以为自己在做搬家,实际上在做清仓。爬虫爬到一个跳首页的 301,会认为这条路径已经不存在,跟着消失的还有这条路径上的链接权重。

桌面上的 Nginx 配置窗口与运维笔记,记录 301 跳转规则的排查过程

第二个坑:跳转链多了一跳

第二周我补齐了路径规则,但流量只回来一半。查日志的时候发现,从 old-domain.com 到 new-domain.com,中间隔着一个 jump.mycdn.cn那是之前接 CDN 时加的一层跳转。等于现在是 old 到 jump 再到 new,爬虫要爬两次才到终点,每一跳都会损耗一部分权重,链条越长损耗越明显。

更常见的链路是 http 到 https 到 www 再到新域名,四跳。我见过最离谱的一条是五跳,最后一跳还指向一个中间页。改法其实很直接:把所有中间层的跳转全部关掉,让老域名直接 301 到新域名的最终地址,一跳到位;中间域名继续保留 DNS 解析,但只做一次跳转,不做任何缓存、不做任何中间页面。

多个箭头节点串成的链条结构示意图,形容跳转链多一跳的损耗

第三个坑:sitemap、canonical、内部链接全都还指着老域名

这个坑最隐蔽。我把 sitemap.xml 换成了新域名,却忘了页面模板里的 canonical 标签还写着老域名,忘了文章正文里的内链还是旧地址,忘了面包屑,忘了页脚的法律声明链接。结果搜索引擎同时看到三个互相矛盾的说法:sitemap 说新地址是权威的,canonical 说老地址才是,页面内链又指向老地址。

搜索引擎遇到这种自相矛盾的情况,处理方式通常是最保守的那种:谁都不完全信,把这批页面先标记成待观察,收录节奏直接放慢。这就是我那 80% 消失之后迟迟不回来的原因。

正确的 Nginx 写法:一条规则匹配全部老 URL

修好之后我的配置是这样:

server {
    listen 80;
    listen 443 ssl;
    server_name old-domain.com www.old-domain.com;
    # 一跳直达最终地址,且保留原路径与查询串
    return 301 https://new-domain.com$request_uri;
}

关键在 $request_uri:它保留了原始路径和查询参数,这样旧站三千多个具体页面才能一一对应到新站的对应页面,而不是全部砸到首页。如果新旧站的路径结构不一样,就要在跳转前做一次路径映射,比如用 map 指令或 location 精确匹配,把 /index.php?id=123 映射到 /news/123。

另外别忘了把新站 sitemap 里的域名全部替换、canonical 改成新域名、正文内链和页脚链接全部换掉;上线后把旧域名继续解析到这台机器至少三个月,不要马上停掉 DNS很多爬虫的缓存和外部链接指向的旧 IP 还没更新完。

迁移后 48 小时的验证清单

我后来把这套流程写成了 checklist,每次换域名就跑一遍:

一、curl -I 逐个抽查:老域名首页、带参数的深层页面、大小写混合的页面、结尾带斜杠的页面,确认都返回 301,且 Location 直指最终地址。

二、确认跳转链只有一跳,用 curl -sIL 一直跟到终点,看看中间有没有别人偷偷加的层。

三、检查新站的 canonical、sitemap、内链三处域名一致,别再出现自相矛盾。

四、在站长平台提交新 sitemap,旧 sitemap 也提交一次并标注迁移。

五、抓 24 小时访问日志,统计 301 命中路径的 TOP 50,看看有没有本该返回 200 的页面被误跳走。

六、给新站跑一遍 SEO 审计,重复标题、失效链接和死链一次性抓出来,比手工翻要快得多。这一条我一开始是手工做的,几十个页面翻到凌晨两点还没查完,后来用工具扫了不到十分钟,直接列出了 41 条失效内链,其中 6 条还指向已经下线的旧栏目页。

站长工作台上的网站分析仪表盘,用于迁移后的收录与死链审计

写在最后

这次事故之后我明白了一件事:换域名不是改一行 DNS 配置,而是给整个站点做一次外科手术,301 只是其中一把刀。真正决定成败的,是你在每一个可能残留旧地址的地方,都把话说清楚,而且说成同一句话。

如果你正打算换域名,或者正在排查收录突然下滑,先按上面这份清单把现状摸一遍再动手。另外,301 之后能不能尽快恢复,和服务器本身的稳定性、线路质量也有关系同样的配置放在不同机房,抓取频次和响应速度可能有肉眼可见的差别,选机器别只看价格,也可以对比一下 speedonline(网站与应用快速加载方案) 这类以响应速度为卖点的方案。

玩家留言 跟帖评论
查看更多评论
相关文章
猜你喜欢
同类下载