根域名和 www 怎么选(2026)

根 vs www 看似只是审美,直到两边都发同一内容、把 SEO 权重劈成两半。用这套已核实的 DNS 表(Vercel、Firebase、Cloudflare)、跳转配置和 curl 验证一次锁定。

截至 2026 年 6 月,www 和根域名之间的选择几乎纯粹是审美问题。真正的麻烦从这一刻开始:你在 yoursite.comwww.yoursite.com 上发了同样的页面,两者之间又没有跳转——Google 这时看到的是两个站点,本该叠在一个 URL 上的外链权重被劈成了两半。决策很小,执行必须精确,因为 DNS、host 的主域设置、canonical 标签和 Search Console 这四处都得对齐。

一句话总结

  • 选一个 host 作主域。新独立站通常选根域名(yoursite.com),更短、更符合输入习惯;只有当 www 已经攒了外链时才留 www
  • 另一个版本 301(或 308)跳过来。Google 把两者都当作强力的永久 canonical 信号;真正伤 SEO 的只有”完全不跳转”或”信号混乱”。
  • 目标是一跳。http://www 应该直接落到 https://apex,而不是先经过 http://apex 绕一圈。
  • 每页设同一个 canonical 标签,用 curl -sI 验证只有一跳,并注册一个 Search Console Domain property,让 apex 和 www 一起被覆盖。

问题背景

历史上 www 是一个 hostname 约定,指向 web 服务器,而根域名可能服务于邮件、FTP 等。现代托管把这个区分塌缩了:两个名字都能指向同一个 web 服务。如今关键是选一个做规范,让另一个 301 重定向过来,让搜索引擎、浏览器和复制粘贴的用户都收敛到一个 URL 上。

有一个技术上的不对称至今仍在。你随时可以给 www 这样的子域名设 CNAME,但多数 registrar 不允许在 apex(@)上设 CNAME。那些只给你 CNAME 目标的 host(Vercel、Netlify)靠厂商专用 A 记录或 Cloudflare 的 CNAME flattening 绕开这个限制。这让 apex 配置时略微麻烦一点,但用起来并不更差。

判断标准

  • https://yoursite.comhttps://www.yoursite.com 都能加载站点(之间没重定向)。
  • Search Console 两个 property,或者同一内容的曝光分裂。
  • 外链一半指 root 一半指 www
  • canonical 标签指向另一版本。
  • dig +short 两个 hostname 各自独立返回 IP。

各家 host 怎么处理跳转

如今你基本不用自己写跳转。截至 2026 年 6 月,下面是各家替你代劳的方式:

Host内置 apex↔www 跳转你需要配置
Vercel是,自动两个域名都加,把一个标 Primary,另一个自动 301
Firebase Hosting是,勾选启用在连接域名向导里勾选”将所有请求重定向到第二个域名”
Cloudflare Pages是,用 Redirect Rules加一条 Redirect Rule(见步骤 4)
Netlify是,自动设主域,别名自动 301
裸 VPS / nginx写一个 server 块把另一个 host 301 过去

快速结论

选一个。多数现代独立站选根域名(yoursite.com),因为更短、也符合大家敲域名的习惯。把另一个版本 301 重定向到所选域名,然后让 DNS、host 的主域设置和 canonical 标签三处一致。

开始前准备

  • 改之前 24 小时把 DNS TTL 调到 300s。
  • 选好主域(apex 或 www),写下来。
  • 知道 DNS 是 registrar 管还是 Cloudflare 管。

实操步骤

  1. 决定并写下来。 新站默认 apex。已有 www 站且外链多就留 www

  2. 两个名字都加 DNS 记录,最终解析到同一处。 Vercel(apex 作主域),截至 2026 年 6 月:

Type   Name        Value                   TTL
A      @           76.76.21.21             300
CNAME  www         cname.vercel-dns.com.   300

较新的 Vercel 项目会拿到一个项目专属的 CNAME 目标,形如 xxxxxxxx.vercel-dns-016.com,而不是共享的 cname.vercel-dns.com。旧值仍可解析,但粘贴前先跑 vercel domains inspect yoursite.com 确认你项目实际要求的记录。

Firebase Hosting 给你 apex 的 IP 199.36.158.100,外加一条 IPv6 的 AAAA 记录。把 @www 都指到同一条 A 记录;加完 TXT 后 Firebase 会显示要用的验证值:

Type   Name        Value                   TTL
A      @           199.36.158.100          300
A      www         199.36.158.100          300
AAAA   @           2620:0:890::100         300
  1. host 里把一个标 primary。 Vercel:Project → Domains → 把 yoursite.comPrimarywww.yoursite.com 自动 301。Firebase:在 Hosting → 添加自定义域名时,勾选”将所有请求重定向到第二个指定域名”,让 apex 和 www 合并到一个上。

  2. host 不自动跳转(Cloudflare 前置)时,加 Page Rule 或 Redirect Rule:

# Cloudflare Bulk Redirects(CSV 导入)
source_url,target_url,status,preserve_query_string,preserve_path_suffix
https://www.yoursite.com/*,https://yoursite.com/$1,301,true,true

或者 Cloudflare Redirect Rules UI:

当请求匹配
  Hostname 等于  www.yoursite.com

  类型:         Static
  URL 重定向: https://yoursite.com${uri.path}${uri.query}
  状态码:      301
  保留 query string: ON
  1. 每页 canonical 指主域。 Astro layout 里:
<link rel="canonical" href={`https://yoursite.com${Astro.url.pathname}`} />

部署后验证:

grep -R 'rel="canonical"' dist | grep -v 'https://yoursite.com' | head
# 有输出 = 漏到非主域
  1. Search Console 加主域为 property。 用 Domain property(TXT)覆盖 apex 和 www,sitemap 提交的 URL 用主域。

  2. curl 验证跳转:

curl -sI https://www.yoursite.com         | head -3
# HTTP/2 301
# location: https://yoursite.com/

curl -sI http://yoursite.com              | head -3
# HTTP/1.1 301 Moved Permanently
# Location: https://yoursite.com/

curl -sI https://yoursite.com             | head -3
# HTTP/2 200

理想是一跳:http://wwwhttps://apex 不应先经过 http://apexhttps://www。Google 大约能跟到十跳,但它更偏好一跳,SEO 实践也建议控制在三跳以内,所以发现链条就把它压平。

  1. 更新你能改的外链(社媒资料、GitHub README、邮件签名)。301 处理搜索引擎可见的入站链接;人眼看得到跳转闪一下。

执行检查清单

  • DNS 同时有 apex 和 www 记录,最终指同一 host。
  • host 的 “primary domain” 与所选主域一致。
  • curl -sI 显示非主域到主域一跳 301。
  • 每页 canonical 指主域。
  • Search Console Domain property + sitemap 用主域。

上线后验证

  • dig +short A yoursite.comdig +short A www.yoursite.com 都能解析。
  • 两个 URL 各跑一次 Lighthouse:一个返回 200,一个显示跳转。
  • 4 周后 Search Console Performance 显示流量只在主域上。

容易踩的坑

  • apex 和 www 都发同一内容、互不重定向。Google 眼里就是重复内容,权重也被劈开。
  • apex 和 www 指向不同 build(一个 staging 一个 prod)。重定向只配了一半时常见。
  • 选了 www,却照着默认 apex 的 DNS 文档配,结果配出错记录。
  • canonical 标签和实际地址不一致:apex 页面 canonical 写 www,或反过来。这种不一致会让 Google 对你选的 URL 犯嘀咕。
  • 一个版本提交 Search Console,canonical 标签却指向另一个。选一个,全站统一。
  • 多跳跳转(http://wwwhttp://apexhttps://apex)。它仍然能用,但每多一跳都更慢、信号也更弱。压成一跳。

FAQ

  • Google 在意我选哪个吗? 不在意。Google 官方建议是选一个、把另一个跳过去,apex 和 www 它没有偏好。伤 SEO 的是信号混乱,而不是你选了哪个。
  • 跳转用 301 还是 308? 都行。Google 把两者都当作强力的永久 canonical 信号。一般用 301,除非你的框架默认 308(有些框架在 HTTPS 升级时会用);只是别拿临时的 302 或 307 来做永久迁移。
  • www 过时了吗? 审美上基本是,多数新站不用。技术上仍然没问题,而且 DNS 上略占优:www 子域名上的 CNAME 普遍支持,而 apex 上的 CNAME 不行。
  • 后面能换吗? 能,但当作一次迷你域名迁移来办:配好 301、更新 Search Console property、改掉每一处 canonical 标签。恢复期会有小幅排名波动。
  • Host 只支持一个名字怎么办? 现代 host(Vercel、Firebase、Netlify、Cloudflare Pages)多数两个都支持并自动重定向。不支持的话,用 Cloudflare 前置域名再加一条 Redirect Rule。
  • Cloudflare CNAME flattening 在 apex 上行吗? 行。当 host 要求 CNAME 目标、而 registrar 不让在 @CNAME 时,这就是标准做法。Cloudflare 解析这个 CNAME 后对外提供 A 记录,所以仍然符合规范。

Google 关于合并重复 URL 的权威说明,见 Google 官方 canonicalization 文档

相关阅读

标签: #独立开发 #域名 #DNS #Canonical #SEO