页面出现多个可访问地址时,搜索引擎需要在其中挑一个作为收录和展示的代表,这个代表通常被称为规范页面。站点可以通过 rel="canonical" 表达自己的偏好,但这只是一个提示,不是强制指令。理解这一点,才能明白为什么“明明写了 canonical,最后被收录的却是另一条 URL”。
为什么会有规范页面的选择
同一份内容被多个地址呈现,是站点里很常见的情况:
- 带参数:筛选、排序、追踪参数各生成一条地址
- 写法差异:大小写、结尾斜杠、默认文件名
- 入口差异:PC 与移动、http 与 https、www 与非 www
- 路径差异:同一件商品被归入多个分类目录
搜索引擎会把这些地址归为一组,选其中一个进入索引,其余的按副本处理。被选中的那一个,不一定是你指定的,而是综合判断后的结果。
canonical 经常被写错的几种情形
1. 全站统一指向首页
为了“集中权重”,把内页的 canonical 都指向首页。这会让搜索引擎认为这些页面没有独立价值,结果是内页更难进入索引,首页也不会因此变得更强。
2. 指向一个不可索引的地址
canonical 指向的页面如果带 noindex、返回 404、被 robots.txt 屏蔽,或者它本身又指向别处形成链式声明,这组信号就互相矛盾。这种情况下,搜索引擎通常会忽略你的声明,自行判断。
3. 自指写法不一致
页面自身访问地址是 …/A,canonical 写的却是 …/a/,或者带上了参数、默认文件名。看起来是自指,实际指向了另一条地址,等于在告诉搜索引擎“我不是主副本”。这类问题往往批量存在,靠人工逐页检查很难发现。
4. 分页与筛选页处理混乱
把第 2 页、第 3 页的 canonical 全部指回第 1 页,如果这些页面确实只是同一条内容的延续,可以接受;但如果每个分页承载的是不同内容的组合,一律回指就会丢掉这些页面的价值。筛选参数页同理,先想清楚是希望它被收录,还是只希望它被抓取。
5. 只写在脚本渲染之后
canonical 由前端脚本插入时,能否被识别取决于渲染是否被执行。更稳妥的做法,是让它在初始 HTML 中就能被看到。
与 noindex、重定向的关系
canonical 与 noindex 同时出现在一个页面上,是两个方向相反的信号。通常的做法是:页面需要保留但不想被收录,用 noindex;页面存在多个副本、需要指定代表,用 canonical。两者不建议叠在同一条 URL 上。
如果旧地址已经被收录,用 301 跳转到新地址往往比补一个 canonical 更直接,因为重定向本身就表达了“这里不再是主副本”。
canonical 只能减少歧义,不能创造内容价值。如果多个地址之间本来就难以判断主次,先解决站点结构问题,通常比反复调整标签更有效。
自查与修正顺序
- 先统一 URL 写法:大小写、结尾斜杠、默认文件名、参数保留规则,做到同一内容只有一个规范写法。
- 让内链、站点地图、对外分享的链接都使用这个写法,减少新副本的产生。
- 再检查 canonical 是否自指、写法是否一致,指向的地址能否正常访问、是否允许索引。
- 观察声明与实际选择是否收敛:在搜索后台的 URL 检查里,可以同时看到“用户声明的规范网址”和搜索系统选择的规范网址。
- 如果两者长期不一致,先比较两边的页面内容、内链数量和外链指向,而不是继续改标签。
什么时候可以暂时不写
如果站点本身只有一套地址写法,没有参数、也没有多入口,canonical 并不是必需项。等出现明确的多地址同内容问题时,再针对这些页面补充,通常比全站批量输出更不容易出错。
收录归属最终由搜索引擎决定,canonical 的作用是降低它判断出错的概率。把它当成一项一致性的维护工作,而不是解决收录问题的开关,判断会清晰很多。