换名或迁更好的 TLD 感觉早就该做——直到你想起每条外链、每个 Google 排名、每个书签都还指向老名。换域名可行、常见、能活下来。但 301、Search Console、sitemap 这套动作必须做对,本文就是这套动作,加上真实命令。
问题背景
搜索引擎把权威性绑在 URL 上。oldsite.com/foo 排得好,权威绑在这个精确 URL。干净的 301 能把绝大部分权威传给 newsite.com/foo——几周内通常 95%+。烂迁移(不做 301、URL 不对应、canonical 错、Search Console 没迁)让排名搁浅在死站上。
判断标准
- 换品牌,老名不合适了。
- 多个域名合并成一个。
- 买到更好的域名(比如
.co升.com)。 - 一个站要拆成两个,需要重新分配排名信号。
快速结论
排名重要就不要为了好看换。必须换就全套 playbook:每个老 URL 301 到对应新 URL、更新 Search Console、重提 sitemap、永久保留重定向。任何一步省了都是排名掉了爬不回来的原因。
开始前准备
- 新域名已注册、DNS 准备好、SSL 已签发,再动任何东西。
- 新旧域名都已在 Search Console 验证(首选 Domain property)。
- 老 URL 清单完整——导出老 sitemap + Search Console “Pages” 列表。
实操步骤
-
新域名备好。 先在新域名上把 SSL 签发——
curl -vI https://newdomain.com返回 HTTP/2 和有效证书之前不要切 DNS。 -
每个老 URL 映射到新 URL。 导出老 sitemap 建 CSV:
curl -s https://oldsite.com/sitemap.xml \
| grep -oE '<loc>[^<]+</loc>' \
| sed -E 's/<\/?loc>//g' > old-urls.txt
awk '{ sub(/oldsite\.com/, "newsite.com"); print $0 "," $0 }' old-urls.txt > url-map.csv
# 路径要改的 URL 手工调一下
- 每个老 URL 配 301 到新对应。 简单情况用通配符,特殊情况打补丁。老域名上 Firebase 配置:
{
"hosting": {
"redirects": [
{ "source": "**", "destination": "https://newsite.com:dest", "type": 301 }
]
}
}
Vercel vercel.json:
{
"redirects": [
{ "source": "/(.*)", "destination": "https://newsite.com/$1", "permanent": true }
]
}
Apache .htaccess:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?oldsite\.com$ [NC]
RewriteRule ^(.*)$ https://newsite.com/$1 [R=301,L]
Nginx:
server {
listen 443 ssl;
server_name oldsite.com www.oldsite.com;
return 301 https://newsite.com$request_uri;
}
curl抽样验证:
while read url; do
printf '%s -> ' "$url"
curl -sI "$url" | awk 'tolower($1)=="location:"{print $2}'
done < <(shuf -n 20 old-urls.txt)
# 每行输出都该是对应新 URL,不能有链
-
Search Console 加新域名 property 并验证。 Domain property + TXT,HTTP/HTTPS/www 各变体一次性覆盖。
-
老 property 用「Change of address」工具。 Settings → Change of address → 选新 property。Google 会等工具确认 301 已生效。
-
新 sitemap 提交,老 sitemap 重提。 Search Console → Sitemaps。新域
robots.txt指新 sitemap:
# newsite.com 上的 robots.txt
User-agent: *
Allow: /
Sitemap: https://newsite.com/sitemap-index.xml
- 新站 canonical 全指新域。 Astro layout 里:
<link rel="canonical" href={`https://newsite.com${Astro.url.pathname}`} />
然后 grep build 产物确认:
grep -ROIE 'rel="canonical"' dist | grep -v newsite.com
# 任何输出都是漏到非主域的 canonical,必须修
-
老域名至少续 2 年,重定向永久保留。 给续费设日历提醒——老域名失效那一刻,转移过来的权威立刻死。
-
每周看 Search Console。 4-8 周会先掉再回。Performance → 对比前 90 天。前两周尽量不要发新内容,让信号干净。
执行检查清单
- 301 规则覆盖
**,至少 20 条随机 URL 用curl -I验证过。 - 新站 canonical 只指新域——
grepbuild 产物验证。 - 老 Search Console property 已经提交「Change of address」。
- 新 sitemap 已提交;老 sitemap 重提以触发重爬。
- 老域名开了自动续费,付到 2 年以上。
- 切换前 48 小时把两边 DNS TTL 调到 300s。
上线后验证
- 老 URL 抽样在 Search Console URL Inspection 应显示 “Page with redirect”。
- 新域 coverage 上升,老域 coverage 同步下降——这是迁移生效的样子。
- 老 / 新 property 的 clicks/impressions 每周对比——总和应在 8 周内回到迁前水平。
容易踩的坑
- 忘做 301——每条外链撞 404,权威化为乌有。
- 用 302(临时)替 301(永久)——搜索引擎区别对待,302 不传权威。检测:
curl -I看到HTTP/2 302。 - 搬家同时重构 URL——两件大事叠在一起,恢复更乱更慢。先搬家,后重构。
- Search Console 没用「Change of address」——Google 最终能搞明白,但慢。
- 老域名让它过期——域名失效 301 就死,转移过来的权威也跟着死。
- 新站 canonical 标签没更新——
og:url和<link rel="canonical">都要指新域。 - 长链 redirect(
old→中转→new)。永远只跳一次。
FAQ
- 恢复要多久?: 多数站 4 周恢复 80%,8 到 12 周完全恢复。权威能传但 Google 要时间重新排名。
- 外链会丢吗?: 直接访问会,但 301 保留几乎全部 SEO 价值。原站上的链接还在,301 让它们仍然算数。
- 一年后能下老站吗?: 不要。域名和重定向永久保留——除非把每个老 URL 都通过 Search Console 走完移除流程。
- 社媒和邮件里的提到怎么办?: 能改的改(资料、简介),剩下的没事——301 透明转发。
- HTTPS 到 HTTPS 有讲究吗?: 有。从
https://oldsite.com直接 301 到https://newsite.com,不要走 HTTP 中转。浏览器会拦截混合协议链。
相关阅读
标签: #独立开发 #域名 #SEO #Technical SEO