给页面加上 canonical 之后,很多人会默认这个 URL 从此就被认定了。实际情况是,canonical 更像一条建议,搜索引擎可以参考,也可以不采纳。当页面上还有别的信号与它冲突时,被忽略并不罕见。
canonical 表达的是偏好,不是命令
它的作用是在一组内容相同或高度相似的 URL 里声明我倾向于把哪个当成正本。抓取、索引、排序是分开的环节,最终留下来的是哪个地址,还要看引擎对各路信号的综合判断。所以标了不代表生效,没标也不代表一定会出问题。
标了却不生效的常见原因
指向的地址本身不可索引
如果 canonical 指向的 URL 返回 404、被 robots.txt 拦住、或者带着 noindex,这条声明就等于指向一个死胡同。引擎不会把结果导向一个打不开或被排除的页面,通常会忽略这个 canonical,改由自己判断哪个更合适。
页面里出现了多个 canonical
一份文档中出现两个甚至更多 canonical,比如模板和编辑器各插入了一份,信号互相抵消,效果接近于没标。检查时应该看渲染后的 HTML,而不是只看源文件或者后台编辑器里的字段。
canonical 与页面内容并不匹配
两个页面只是主题相近、内容差异明显,却被硬性标成同一份,被忽略是正常的。canonical 用来合并同一份内容的多个地址,不是给不同内容的页面做取舍的工具。
分页列表每页都指向第一页
把第 2、3 页的 canonical 全部指向列表首页,会让后面这些页面很难被单独索引。是否保留分页 URL,取决于它们本身有没有搜索需求,一刀切地指向第一页往往会损失长尾入口。
拿 canonical 代替重定向
整站迁移或者页面永久换地址时,首选仍然是 301。canonical 不会把原地址的流量和信号顺过去,它只是表明我认哪个是正本。把本该重定向的场景用 canonical 处理,通常达不到预期。
几种信号冲突时,大致怎么排
- 301、308 属于地址层面的明确迁移,优先级最高,一般按它走。
- noindex 的作用是别收录这个页面,它比 canonical 更强。一个页面既 noindex 又指 canonical,本身就是自相矛盾的写法。
- canonical 次之,参考价值取决于它是否唯一、是否稳定、目标是否可索引。
- 站点地图、内链结构、历史收录记录也会一起参与判断,不能只盯 canonical 一个点。
标注前的自查清单
- canonical 指向的 URL 能正常打开,返回 200,且没有被 noindex。
- 每个页面只有一个 canonical,出现在 head 中。
- 使用绝对地址,域名、协议、www 与否前后保持一致。
- 目标页没有反过来再指向第三个地址,避免形成链条。
- 分页、筛选页的策略与实际收录预期一致,不是照抄模板。
- 只有内容确实相同才合并;只是部分相似时,优先考虑把各自内容做扎实。
哪些情况不适合用 canonical
两个页面主题相近但内容不同、各自都有搜索价值时,标 canonical 只会让其中一个进不了索引,属于自我削弱。这类情况更该做的是让两篇各有明确侧重,而不是强行二选一。
另外,仅仅是大小写、末尾斜杠、跟踪参数这类差异,优先在服务器和链接层面统一,从源头减少重复地址的产生,比事后满站补 canonical 更省事,也更好维护。
canonical 是收敛重复地址的工具之一,不是万能开关。它能不能被采纳,取决于这条声明是否与页面实际内容、以及其他技术信号保持一致。