如何正确使用 rel="canonical" 属性

如果网站存在页面重复或内容重复的问题,会对网站优化造成负面影响。因此,优化人员建议优先处理这类问题。重复可能是完全的,也可能是部分的。通常可以通过重定向解决,但在无法设置重定向的情况下,可使用另一个方法 —— rel="canonical" 属性,也就是指定规范链接的方式。

本文将介绍什么是 rel="canonical",以及如何在网站中正确使用它。


什么是 rel=“canonical”,为什么需要它

先从基础讲起。

即便是刚刚开始做网站的人也知道,相同的内容出现在多个页面上会被搜索引擎视为“重复内容”,有可能导致惩罚。但有些场景下内容重复是合理的。例如:

  • 一个页面可以被多个分类调用;
  • 网站既可以通过 www 访问,也可以不加 www;
  • 商品目录使用了筛选器或排序功能。

页面虽然不同(如按季节过滤、按价格区间排序),但展示的商品内容是一样的。此时这些页面的内容被视为重复。

为了解决这个问题,可以用 rel="canonical" 属性告诉搜索引擎:哪个页面是“正本”,其他的是“副本”。在重复页面上加入 rel="canonical" 并指定主页面地址,让爬虫理解哪个才是应收录的主页面。

使用该属性的主要目的有:

  • 避免因内容重复被搜索引擎处罚;
  • 将页面权重集中到主页面上;
  • 确保主页面出现在搜索结果中;
  • 节省搜索引擎的抓取预算。

如何设置 canonical 属性

设置 rel="canonical" 的方式有很多,部分无需编程知识,也有些需要修改服务器或源码。

在 HTML 代码中添加

方法如下:

  • 打开页面源码;
  • <head> 标签区域中找到 meta 信息;
  • 添加 canonical 标签,示例如下:
<link rel="canonical" href="页面地址" />

添加到 HTTP 头部

适用于没有 <head> 区域的文件,如 PDF 或图片等资源。需要有服务器配置权限,通常需运维或开发协助。


在 sitemap.xml 中指定

搜索引擎会将 sitemap 中的 URL 视为主页面(依据 Google 官方文档)。但要确保 sitemap 中的链接不是重复内容。

注意:sitemap 中的 URL 权重不如页面 HTML 中的 rel="canonical"


使用 CMS 插件自动生成

一些主流 CMS 提供了设置 canonical 的插件或功能:

  • WordPress:使用 Yoast SEO 插件;
  • Bitrix:在商品目录模块中启用“设置规范 URL”功能;
  • Megagroup.ru:在“SEO 控制面板”中设置。

哪些情况下需要使用 canonical

并非所有场景都需要用 canonical,使用不当反而可能影响网站排名。以下是适用的常见场景:


网站存在重复内容

若站内确实存在重复页面,应指定原始内容页面为规范版本。

建议使用:

  1. Yandex.Webmaster:导航到“索引” → “被排除页面”,查看“重复状态”报告;
  2. Google Search Console:在覆盖范围报告中查看重复页面详情。

分页页面(分页导航)

在产品列表或文章列表中常见。若分页未处理好,会导致多个页面被搜索引擎视为重复。

解决方法:仅在第一页的 URL 上设置 canonical,其他分页不需要设置。


多种 URL 版本(HTTP、HTTPS、带/不带 www)

如果允许这些不同版本同时被搜索引擎索引,会导致它们被视为不同页面,可能出现如下问题:

  1. URL 被合并错误,重要页面被忽视;
  2. 搜索结果中出现多个版本(URL 竞争),造成关键词排名“内耗”。

应统一指定一个主版本,其他版本设置重定向或用 canonical 归一。


移动端页面

Google 非常重视移动端页面。如果网站有 m.site.com 类型的移动版:

  • 在移动版中使用 rel="canonical" 指向桌面版;
  • 在桌面版中添加 rel="alternate" 指向移动版。

动态 URL

常见于使用筛选器、电商搜索、广告追踪等生成的 URL,例如:

yoursite.com/catalog/shoes/?color=black

此类 URL 数量庞大,应为每组动态页面指定一个统一的 canonical。


哪些情况下不需要使用 canonical

以下场景不建议使用 canonical:

  1. 大小写不同的 URL:如 /Page 与 /page,建议通过 .htaccess 做 URL 规范化。此类处理需开发协助;
  2. 多语言网站:如 zh、en、fr 各版本,推荐使用 <link rel="alternate" hreflang="...">,而不是用 canonical 或 301 跳转。

canonical 设置中的常见错误

使用 rel="canonical" 时应遵循以下基本原则:

  • 页面可访问,返回 200 状态码;
  • 指向相同域名下的页面;
  • 每个页面只能有一个 canonical 标签。

常见错误包括:

  1. 同一页面设置多个 canonical 标签,爬虫可能忽略整个设置;
  2. 多种方式指定了不同的 canonical 地址(如 HTTP 响应头和 HTML 源码中不一致);
  3. 形成 canonical 链条(A 指向 B,B 又有自己的 canonical),搜索引擎会忽略;
  4. 标签位置错误(如放在 <body> 而不是 <head>);
  5. 在分页结构中把第一页设置为所有页面的 canonical,其他页可能不被索引;
  6. 用 canonical 代替 301 重定向,这是错误的用途;
  7. 所有页面都指向首页,搜索引擎可能只收录首页,其他页面被忽略;
  8. canonical 指向了无法访问或被禁止索引的页面,搜索引擎会选择其他页面作为主页面。

结论

rel="canonical" 是提升网站 SEO 表现的重要工具。它帮助指定哪一页面才是搜索引擎应优先处理的版本,防止重复内容带来负面影响。

对于大型网站、电商平台、内容更新频繁的项目来说,正确使用 canonical 是提升索引效率和搜索排名的关键手段。