先看现象。图片和静态资源走 CDN,模板里统一用 CDN 域名拼 canonical。用户从源站域名访问时,页面 canonical 指向 CDN,GSC 把两个主机名当成不同站点,权重一直合不到一起。

真正麻烦的地方在于,几个原因的现象几乎一样。模板里的 canonical 复用了资源域名变量,没区分页面主机。还有一种是CDN 域名也解析到同一源站,页面在两套域名下都能打开。

不容易想到的是,站点没把 CDN 域 301 回主域,重复入口一直存在。

还有一种情况,GSC 里同时验证了两个域名,报表各算各的。

第一件事是确认两套域名返回的内容

curl -sI https://cdn.example.com/article/1 | head -3

canonical 固定用主域

<link rel="canonical" href="https://www.example.com/article/1">

CDN 域只保留资源路径

if ($host = cdn.example.com) { return 301 https://www.example.com$request_uri; }

剩下的就是在 GSC 里核对规范网址

https://search.google.com/search-console

改完先别撤,确认这几项。源站与 CDN 域访问时 canonical 都指向主域,CDN 域的页面请求全部 301,重复组逐步合并。

canonical 的主机名必须是最终对外的那一个,跟资源域名混用等于主动把页面拆成两份。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。

作者 9823189