输 https://yourdomain.com——站打开。输 https://www.yourdomain.com——站也打开、内容一模一样。两个都返回 200。对你看着没事;对 Google 的去重和任何跟踪外链的工具来说,你有两个内容一样的站,链接权重被分、canonical 混乱。修法直接:选一个 canonical,另一个 301,在平台层做(不只是 HTML canonical 标签)。跟 www vs root redirect 类似但专门讲两个都已经在跑、内容都加载的更难清理的情况。
常见原因
按命中率从高到低。
1. 主机里加了两个版本但没配重定向
你在 Vercel/Netlify 把 yourdomain.com 和 www.yourdomain.com 当独立域名都加了。主机愿意都服务但默认不配重定向。
怎么判断:平台控制台 → Domains → 两个都是 “primary” 或都已配置。应该一个主、一个 redirect。
2. CDN 把两者都直接代理到源站
Cloudflare 或别的 CDN 把两条 A/CNAME 都设了代理,两个都到源站、都服务内容。CDN 不重定向除非你告诉它。
怎么判断:
curl -sI https://yourdomain.com | head -3
curl -sI https://www.yourdomain.com | head -3
两个都返回 200 = 都直接服务内容。
3. 主机平台不自动跨绑定重定向
一些平台支持加两个但要手动配重定向。它们不会推断”你大概想要一个作 primary”。
怎么判断:平台文档可能说”加两个然后设其中一个为 primary”——如果你跳过了”设 primary”那一步,就没重定向。
4. 设了 canonical 标签但没 HTTP 重定向
你给所有页加了 <link rel="canonical" href="https://yourdomain.com/...">。标签对 Google 有用,但访客还是看到他们输入的 URL。直接外链可能还是指向非 canonical。
怎么判断:两个 URL 都 200(不是 301)。光 canonical 标签不重定向。
5. 旧设置或手写 nginx 同时服务两者
自托管或老共享主机可能配了 nginx:server_name yourdomain.com www.yourdomain.com; 没单独的重定向规则。两个都通但有重复内容问题。
怎么判断:SSH 到服务器看 nginx 配置。server_name 列了两个但没单独的重定向 server block 就是这条。
最短修复路径
第 1 步:选 canonical
SEO 上两个都行。选:
- Apex(
yourdomain.com):想要更短 URL,且 DNS 提供商支持 ALIAS/ANAME。 - www(
www.yourdomain.com):CDN 上 CNAME 处理更方便。
选完写下并坚持。
第 2 步:配主机
Vercel — Project → Settings → Domains:
- 加
yourdomain.com和www.yourdomain.com两个 - 点非 canonical 那个 → “Redirect to” → 选 canonical
- Vercel 自动签发 301
Netlify — Site settings → Domain management:
- 加两个
- 点 canonical 上的 “primary” toggle
- Netlify 自动重定向另一个
Firebase — firebase.json:
{
"hosting": {
"redirects": [
{ "source": "/(.*)", "destination": "https://yourdomain.com/:1", "type": 301 }
]
}
}
(Firebase 如果要求独立 app,在非 canonical 站上配。)
Cloudflare — Rules → Redirects:
URL pattern: https://www.yourdomain.com/*
Forwarding URL: https://yourdomain.com/$1
Status: 301
第 3 步:验证
curl -sI https://www.yourdomain.com | head -5
应返回:
HTTP/2 301
Location: https://yourdomain.com/
返回 200 就是没配重定向。
第 4 步:更新 HTML canonical 标签
模板里 canonical 指向 canonical 版本:
<link rel="canonical" href="https://yourdomain.com/your-article/" />
不是 alternative 版本。
第 5 步:更新 Search Console
如果两个版本之前都分别验证过,Search Console 可能有两个 property。两个都留(监控仍有用),但把 canonical 当 primary。
重定向上线后,非 canonical property 的索引 URL 会逐渐减少。
第 6 步:等 Google 合并
2-4 周内,Google 把链接权重合并到 canonical。Search Console → Performance → Pages 显示非 canonical URL 减少。
哪些情况可能不是你操作错了
某些平台有特定怪癖(Firebase 的 primary-site 模型、Cloudflare 的 apex vs subdomain 处理)。平台行为跟文档不一致,附细节提工单。
容易误判的情况
只设 canonical link tag 不能阻止双服务。平台层 301 才能让 Google 合并理解。
预防建议
- 任何新域名第一天就决定 www vs apex。
- 永远在平台/CDN 层做重定向,不只是 canonical 标签。
- 任何 DNS 或主机变更后用
curl -sI重新验证一个版本 301 到另一个。 - 团队管理的域名,在
DOMAIN.md里记下 canonical 选择。
FAQ
- www 还是 apex 更好? SEO 没差别。按技术偏好选。
- 以后能切换吗? 能,但需要 301 链(老 canonical → 新 canonical)、canonical 标签更新、4-8 周让 Google 完全切换。别随便切。