先看现象。图片和静态资源走 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 的主机名必须是最终对外的那一个,跟资源域名混用等于主动把页面拆成两份。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。
