你买了 yourbrand.com,也”以防万一”买了 yourbrand.net。两个都返回一样的内容。AdSense 申请被拒,理由是”这个内容已经在另一个站点通过了”,或者审核一直挂。或者你的 www 和 apex 各自独立返回内容,没相互 301。AdSense 审核员看到两份一模一样的站不知道该批哪个。解决办法不是把两个变体改成”独特”——是选一个 canonical,把其它全部 301 过去。
这条同样适用于 apex/www 拆分、.com/.net 配对、不小心被收录的 staging 子域名、改名后没 301 的旧域名。
常见原因
按命中率从高到低。
1. 防御性备用域名也在服务
为防身买了 yourbrand.net 和 .org,指向同一托管。三个都能访问、返回一样的页面。AdSense 看到两三个内容一模一样的 property。
怎么判断:
for d in yourbrand.com yourbrand.net yourbrand.org; do
echo -n "$d: "
curl -sI "https://$d" | head -1
done
如果都返回 200(不是 301 到 canonical),就是重复。
2. 改名后旧域名还在服务
从 oldbrand.com 改名到 newbrand.com。新站上线了。旧 DNS 还指着托管;旧域名还在用旧 URL 返回内容。
怎么判断:curl -sI https://oldbrand.com。返回 200 就是没真改完。应该是 301 到 newbrand.com。
3. www 和 apex 各自独立服务
www.yourdomain.com 和 yourdomain.com 都能解析、都返回页面。AdSense 把两个分别当 property 收。
怎么判断:
curl -sI https://yourdomain.com | head -3
curl -sI https://www.yourdomain.com | head -3
其中一个应该 301 到另一个(你选哪个 canonical)。
4. staging 子域名被公开收录
你有个 staging.yourdomain.com 做 QA。没设 auth。Google 找到了、收录了。AdSense 把它当生产的重复。
怎么判断:Google 搜 site:staging.yourdomain.com。有结果就是 staging 被公开收录了。
5. Vercel / Netlify 的预览部署被收录
Vercel yourapp-randomhash.vercel.app 预览和 Netlify deploy preview 没禁就会被爬。每个预览都是生产的近重复。
怎么判断:Google 搜 site:vercel.app yourbrand 和 site:netlify.app yourbrand。出来收录的预览就要去拦。
6. AdSense Sites 里同一个 property 加了多个
你把 yourdomain.com、www.yourdomain.com、https://yourdomain.com/ 分别加进了 AdSense → Sites。AdSense 把它们当独立但同内容的站。
怎么判断:AdSense → Sites。一个站出现多条就是重复条目。
最短修复路径
第 1 步:选定一个 canonical 域名
通常选最短、最常对外宣传的、最老的版本。常见选择:
yourbrand.com(你实际在推广的 .com)www.yourbrand.com如果 SSL 或 CDN 配置更适配 www- apex(裸域)如果你的 CDN 在根支持
ALIAS/ANAME
定一个就别再换。在 CANONICAL_DOMAIN.md 里写明,免得未来自己又纠结。
第 2 步:所有其它域名 301 到 canonical
Cloudflare — Page Rules 或 Rules → Redirects:
URL pattern: https://yourbrand.net/*
Redirect: https://yourbrand.com/$1
Status: 301 (permanent)
Vercel — vercel.json:
{
"redirects": [
{ "source": "/:path*", "destination": "https://yourbrand.com/:path*", "permanent": true }
]
}
只配在备用域名的项目上;canonical 项目不加任何重定向。
Netlify — _redirects:
https://yourbrand.net/* https://yourbrand.com/:splat 301!
第 3 步:禁止 staging 和预览被收录
staging 用 basic auth 或 robots.txt 拦:
User-agent: *
Disallow: /
外加每页都加 <meta name="robots" content="noindex"> 兜底。
Vercel — 用 VERCEL_ENV 检查,在预览发 noindex:
<meta name="robots" content="noindex" v-if="process.env.VERCEL_ENV !== 'production'">
第 4 步:清理 AdSense Sites 里的重复条目
AdSense → Sites。canonical 域名只留一条。移除 www、https://、带尾斜杠的变体。
第 5 步:用 curl 验证
for d in yourbrand.net yourbrand.org www.yourbrand.com staging.yourbrand.com; do
echo "=== $d ==="
curl -sI "https://$d" | head -3
done
每个都应返回 HTTP/2 301 和 Location: https://yourbrand.com/...。
第 6 步:等 2-4 周 Google 合并
Google 要重新爬所有重复并跟随 301。Search Console → URL 检查 → 对 canonical 请求收录加速。AdSense 下次审核时会发现合并完成。
第 7 步:如果还需要,重交 AdSense
合并完成后,AdSense → Sites,对 canonical 那一条请求审核。
哪些情况可能不是你操作错了
AdSense 对合并的检测有延迟。哪怕 301 都设好、AdSense Sites 只剩一条,审核队列也可能还要几周。
容易误判的情况
把所有变体都加进 AdSense Sites “覆盖”——反而帮倒忙。这是告诉 AdSense 你一个站有 2-3 个内容一模一样的 property,会触发重复标记。AdSense Sites 永远只放真正独立的域名。
预防建议
- 第一天就选定 canonical 域名,找个显眼地方写下来。
- 发第一篇文章之前先设好
www → apex(或反过来)的重定向。 - staging 和 Vercel/Netlify 预览用
noindex+robots.txt拦。 - AdSense Sites 只放 canonical。
- 防御性域名(.net、.org、易错拼写)第一天就 301,永远不要让它直接返回内容。
FAQ
- 能变现多个域名吗? 能——前提是各自有真正独立的内容。同一个 AdSense 账号下一个电影站、一个菜谱站没问题。
- Google 会取消收录重复吗? 设好 301 之后,Google 会合并链接权重,canonical 会吸收排名。