你网站排名突然掉得厉害?先别改标题,快看看 canonical 标签是不是在“互殴”
上周帮一个做母婴电商的朋友看流量下滑——首页跳出率没变,转化也没崩,但自然搜索流量两周掉了快一半。他第一反应是“是不是被K了”,结果一查 Search Console,满屏飘红:“重复内容,未选为权威版本”。
他很肯定地说:“我每个页面都加了 canonical 啊。”
我让他打开首页源代码搜一下 rel="canonical" —— 页面里赫然躺着两个标签:一个指向 /,另一个指向 /index.php。
不是 Google 不讲道理,是你自己发了两套互相打架的指令。
什么是 canonical 标签冲突?用一句话说清楚
就是你告诉 Google:“这个页面的正主是 A”,又同时告诉它:“不,正主其实是 B”,或者干脆让 A 和 B 都指着同一个 C,但 A 和 B 的内容压根不一样。
Google 不会耐心听你解释,它直接把所有 canonical 声明当废纸扔进回收站,自己凭感觉挑一个收录。运气好,挑中你想要的;运气差,挑中的是带参数的、带跟踪码的、甚至 404 前一秒的残影。
我见过最典型的案例是一个健身器材电商站。它的产品页有三个常见 URL:
/product/treadmill-x1(基础版)/product/treadmill-x1?ref=fb(带来源标记)/product/treadmill-x1?color=black(颜色变体)
开发给前两个都加了 canonical 指向 /product/treadmill-x1,听起来很合理。但问题出在 sitemap.xml 里——CMS 自动生成的 sitemap 把带 ?ref=fb 的那个当成了主链接提交给了 Google。
结果 Google 爬到 /product/treadmill-x1?ref=fb 这个页面,看到它自己声明的 canonical 是 /product/treadmill-x1,可 sitemap 又说“这个带 ref 的才是主页面”。两边对不上,Google 直接判定整组页面“已索引但未收录”。三个月内,核心产品词的展现量大幅下降。
最坑的3种 canonical 冲突场景,你中招了几个?
场景1:同一个页面,多个 canonical 标签同时存在
这是真·手滑事故,但太常见了。
上个月 audit 一个本地律所网站,首页源代码里搜 canonical,蹦出来四个结果:
<link rel="canonical" href="https://lawfirm.com/">(主题自带)<link rel="canonical" href="https://lawfirm.com/home">(SEO 插件加的)<link rel="canonical" href="https://lawfirm.com/index.php">(老版 .htaccess 重写规则残留)<link rel="canonical" href="https://www.lawfirm.com/">(CDN 缓存层偷偷塞的)
四个地址,四个“正主”。Google 看完只想关网页。
检查方法超简单:右键 → “查看页面源代码” → Ctrl+F 搜 canonical。只要出现两次及以上,立刻停手,找人修。
场景2:分页列表页的 canonical 指向首页
很多博客、新闻站、分类目录还在沿用“把 page/2 的 canonical 指向 page/1”的老办法,理由是“集中权重”。
这就像把第二章的内容硬塞进第一章的目录里——读者点进来,发现根本找不到自己要的东西。
举个真实例子:一个宠物知识站,分类页“猫粮推荐”共 5 页。第 3 页专门写了“适合肾病猫的处方粮清单”,内容非常垂直、搜索意图明确。但它的 canonical 指向了第 1 页。Google 收录时直接跳过第 3 页,用户搜“肾病猫 吃什么猫粮”,永远看不到这篇干货。
正确做法就两条:
- 每一页的 canonical 都指向自己(page/1 → page/1,page/2 → page/2)
- 同时加上
<link rel="prev">和<link rel="next">,让 Google 明白这是连续的分页关系
如果真不想让分页被搜索,就老老实实加noindex,别拿 canonical 搞模糊操作。
场景3:HTTP 和 HTTPS 版本互相矛盾
HTTPS 已经是底线,但“嘴上说HTTPS,身体很诚实”的网站依然不少。
我们 audit 过一个企业官网,它所有页面都通过 301 跳转到了 HTTPS,看着很规范。但点开任意一个 HTTPS 页面的源代码,里面的 canonical 标签写的却是 http://example.com/about。
更糟的是,服务器还开着 HTTP 入口,虽然会跳转,但 Googlebot 有时会直接抓取 HTTP 版本——然后发现:HTTP 页面里 canonical 指向 HTTPS,HTTPS 页面里 canonical 又指回 HTTP。
它卡住了,最后干脆不收这个页面。
WordPress 站尤其容易中招:换过 SSL 证书、迁移过域名、或者用过某些“一键强制 HTTPS”插件,但数据库里的 siteurl 和 home 选项没同步更新,就会导致模板生成的 canonical 依然是旧协议。
用1个工具+3步检查,彻底排查 canonical 冲突
不用写脚本,不用配环境。每周花 10 分钟,用 Screaming Frog(免费版够用)跑一遍就行。
第一步:爬全站后,在“Internal”标签页下拉,找到“Canonical”这一列。
筛选出 Canonical URL 列里值为空、或出现多次不同值的页面——这些就是高危对象。
第二步:导出“Indexability vs Canonical”报告(Screaming Frog 里叫这个名)。
重点看那些“Canonical URL ≠ Requested URL”,但“Indexability = Indexable”的页面。
意思是:你告诉 Google “这页该听 A 的”,可 Google 却把当前页(B)自己收了——说明它根本不信你。
第三步:手动抽 10–20 个核心页面(比如首页、产品页、分类页、博客列表页),逐个打开,查源代码里的 canonical,再打开你的 sitemap.xml(通常是 /sitemap.xml),对比这两个地址是否一致。
动态生成的 canonical(比如 JS 注入、PHP 条件判断)工具扫不到,必须人工盯。
修复 canonical 冲突时,千万别踩这3个坑
改错比不改更伤。这几个雷,踩一个就够你重新审计一遍。
坑1:改完 canonical 就以为万事大吉,忘了验证重定向链
有人用 SQL 批量更新 WordPress 数据库里的 canonical 字段,但没意识到:主题模板可能在 <head> 里又硬写了一个。结果数据库改了,页面源代码里还是旧的。
改完一定要再跑一次 Screaming Frog,确认“Canonical”列里每个值都干净、统一、无歧义。
坑2:一边加 canonical,一边设 301
比如把 /old-page 的 canonical 指向 /new-page,同时又在服务器层面把 /old-page 301 跳转到 /new-page。
Google 会懵:你是想让我把用户带到 /new-page?还是让我把 /old-page 当作副本、但保留它在索引里?
记住铁律:
- 如果两个页面内容完全一样 → 只做 301,删掉 canonical
- 如果内容相似但有差异(比如桌面版和移动版)→ 只用 canonical,不做 301
坑3:只管桌面端,忘了 AMP 和移动端
有些网站桌面页 canonical 指向自己,AMP 版却指向桌面页,而移动端又用了另一套 URL 规则(比如 /m/product/123),canonical 却指向 /product/123。
Google 一看:三个版本,三套说法。它不纠结,直接放弃 AMP 和移动页的收录。
原则很简单:移动端、桌面端、AMP 页面的 canonical,必须全部指向同一个规范 URL(通常是桌面版标准路径)。
今天就能做的1个操作:查你的首页 canonical
现在,就这一分钟,别切窗口。
打开浏览器,输入你的网站地址(比如 https://yourdomain.com),回车。
右键 → “查看页面源代码” → Ctrl+F 搜 rel="canonical"。
只应该看到一个结果。
它的 href 值,必须和你现在浏览器地址栏里的 URL 完全一致(协议、域名、路径、结尾斜杠,全都对得上)。
如果它写的是:
http://yourdomain.com→ 错,协议不对https://www.yourdomain.com但你没开 www → 错,域名不一致https://yourdomain.com/index.php→ 错,路径冗余
立刻截图,发给负责网站的技术同事,说:“首页 canonical 地址需要和当前 URL 保持严格一致,麻烦今晚前改掉。”
这一个动作,能拦住至少一半的 canonical 冲突源头。
做完这个,明天上午花 10 分钟,用 Screaming Frog 按上面三步跑一遍全站。把标红的页面一个个理清楚,你会明显感觉到:Google 开始更愿意收你的页面了,那些本来就有料的内容,终于有机会被搜到了。