SEO
如何修复 canonical 标签问题:常见错误与排查方法
canonical 标签告诉搜索引擎你首选哪个网址。本文介绍哪些错误会让搜索引擎忽略它或选错页面,以及如何在你的网站上找出这些错误。
本页内容
同一份内容常常同时存在于好几个网址上:带 www 和不带的、带跟踪参数的、经过排序或筛选的、打印版的,或者被转载的。canonical 标签,也就是页面 <head> 中的 <link rel="canonical" href="https://example.com/shoes/">,用来告诉搜索引擎,你希望它们展示这些网址中的哪一个。搜索引擎把它当作一个强烈的提示,而不是命令;当它与其他信号相矛盾时,搜索引擎会忽略它。
大多数 canonical 问题都是模板错误,会在成百上千个页面上重复出现。下面介绍如何识别并修复它们。
好的 canonical 是什么样的
- 每个页面只有一个 canonical 标签,位于
<head>中。 - 使用协议和主机都正确的绝对网址:是
https://example.com/shoes/,而不是/shoes/。 - 在普通页面上,它指向页面自身(自引用 canonical)。
- 它指向的网址返回 200、可被索引,并且不会重定向。
- 它与你的其他信号保持一致:内部链接、站点地图和重定向使用的都是同一个首选网址。
常见的 canonical 问题
canonical 指向重定向、404 或错误页面
网址变更之后,模板常常还在输出旧地址。于是每个页面都在说“请首选另一个网址”,而那个网址要么会重定向,要么已经不存在。这时搜索引擎通常会退而自行选择规范网址,你也就失去了对展示哪个网址的控制权。请把 canonical 更新为最终返回 200 的网址。
noindex 与指向其他页面的 canonical 同时使用
noindex 的意思是“不要展示这个页面”;指向另一个网址的 canonical 的意思是“这个页面是那个页面的重复版本”。两者放在一起,发出的信号自相矛盾。先想清楚你到底要哪一种:如果页面确实是重复内容,就保留 canonical,去掉 noindex;如果只是不想让它出现在搜索结果中,就使用 noindex,并搭配自引用 canonical 或者干脆不设 canonical。我们的 noindex 是什么意思一文讲解了两者的区别。
canonical 指向一个 noindex 页面
让搜索引擎首选一个自己声明“不要索引我”的网址,等于让它们无页面可展示。请把 canonical 指向一个可索引的页面,或者去掉目标页面上的 noindex。
所有页面的 canonical 都指向首页
如果某个主题或插件的设置把网站根网址作为 canonical 输出到每个页面上,实际上就是在要求搜索引擎丢掉你其他所有的页面。这种情况比过去少见了,但在迁移之后仍会发生。请查看几个内页的源代码确认一下。
相对网址、格式错误或多个 canonical
相对形式的 href 在技术上是允许的,但很容易出问题。两个互相矛盾的 canonical 标签(通常一个来自主题,一个来自 SEO 插件)一般都会被忽略。只保留一个,并且只在一处生成。
协议、主机和结尾斜杠不一致
如果你的网站运行在 https://www.example.com/ 上,而 canonical 写的却是 http://example.com/page,那么每一个 canonical 指向的都是会重定向的网址。请选定一种主机、一种协议和一种结尾斜杠的写法,并在 canonical、内部链接和站点地图中统一使用。
跨域 canonical
当内容是有意对外转载时,指向另一个域名的 canonical 是正当的:转载你文章的合作方可以把 canonical 指向你的原文。但在你自己的网站上,这通常是个错误,比如模板里残留了预发布环境或旧的域名。
分页系列都指向第一页
分类的第 2 页列出的内容与第 1 页不同,所以它并不是重复页面。应当让系列中的每一页都使用各自的自引用 canonical,除非你确实提供了一个“查看全部”页面。
检查页面的 canonical
Rudra 的免费 SEO 检测工具会读取 canonical 标签,检查它是否为单个绝对网址;如果它指向别处,还会请求目标网址,查看是否返回 200。
如何找出 canonical 问题
检查单个页面
查看页面源代码并搜索 rel="canonical",或者用 Rudra 的免费 SEO 检测工具检查该页面。它会报告缺失、使用相对网址或重复出现的 canonical,以及指向其他页面的 canonical。当 canonical 与页面的最终网址不同时,它会向目标网址发送一次 HEAD 请求来检查其状态;如果一个 noindex 页面的 canonical 指向别处,它会将其标记为冲突。指向另一个域名的 canonical 只作为参考信息列出,因为这可能是有意为之。
检查整个网站
canonical 问题本质上是页面之间的关系问题,所以通过抓取来查找效果最好。Rudra 的整站扫描(注册免费账户后可在控制台中发起;免费网站审核则针对单个页面)会把每个页面的 canonical 与抓取时在该地址上实际看到的情况进行比对,并按原因对问题分组:canonical 目标会重定向、返回错误状态、带有 noindex 或位于另一个主机上,或者某个 noindex 页面的 canonical 指向了另一个网址。因页面数量或深度限制而未被抓取到的目标,会计为未验证,而不是报告为有问题。
在 Google Search Console 中检查
网页索引编制报告会列出被标记为“重复网页,Google 选择的规范网页与用户指定的不同”和“备用网页(有适当的规范标记)”的页面。网址检查工具会同时显示你声明的规范网址和 Google 选定的规范网址。当两者不一致时,就去找相互冲突的信号:是不是有内部链接、重定向或站点地图指向了另一个网址。
按正确的顺序修复
- 为每个网址选定首选形式(协议、主机、结尾斜杠、参数)。
- 尽可能用 301 把其他形式重定向到首选形式:重定向是比 canonical 更强的信号。
- 通过单一的模板或插件,为每个页面生成一个绝对的、自引用的 canonical。
- 更新内部链接和站点地图,只使用首选网址。参阅如何诊断站点地图问题。
- 对于必须保留的真正重复页面(筛选结果、打印版),把它们的 canonical 指向主版本。
- 重新抓取,然后在接下来的几周里,随着页面被重新抓取,持续关注 Search Console。
常见问题
每个页面都需要 canonical 标签吗?
这不是硬性要求,但给每个可索引页面加上自引用 canonical 是良好的做法。它能帮你防范那些不受你控制的参数和跟踪代码变体。
Google 一定会遵循我的 canonical 标签吗?
不一定。它是一个强烈的提示,Google 会把它与重定向、内部链接、站点地图和内容相似度放在一起权衡。当信号相互冲突时,Google 可能会选择另一个规范网址,Search Console 的网址检查工具会显示出来。
应该用 canonical 还是 301 重定向?
如果访客根本用不到那个重复网址,比如旧地址或不带 www 的版本,就用 301。如果重复页面必须保持可访问,比如经过筛选或排序的列表页,就用 canonical。
canonical 可以指向另一个域名吗?
可以,前提是有意的内容转载:另一个网站转载你的内容并注明原始出处。在你自己的网站上,指向另一个域名的 canonical 通常是预发布环境或迁移留下的残余。