canonical 标签怎么写:三个信号,Google 按强弱读
canonical 标签告诉 Google 同一份内容的几个网址里该留下哪一个。它是信号不是命令,会和跳转、sitemap 一起被权衡 —— 这里有可粘的两种写法、一段三行自检命令,和四种它会静默失效的写法。

canonical 标签的作用,是在同一份内容有好几个网址的时候,告诉 Google 你想留下哪一个。它是一个信号,不是一条命令:Google 会把它和跳转、sitemap、你自己的内链放在一起权衡,最后仍可能挑另一个网址。你要做的是让这几处口径一致,然后确认那个想留下的页面指向了它自己。
读这篇前
你需要能改页面 <head>,或者能设一个响应头。你还得先想清楚到底想让哪个网址出现在搜索结果里 —— 这是内容层面的决定,不是技术活。如果两个页面本来内容就不同,那不是 canonical 的问题,那是两个页面在抢同一个搜索词,同样得从内容上定。
站建在 Shopify、Webflow 这类托管平台上的话,多数情况你改不到 <head> 的源码,但后台通常有一处「搜索引擎设置」能填规范网址。改之前先按下面的自检命令读一遍页面实际发出去的是什么,别信后台的输入框 —— 平台自己也会往里塞一条。
为什么 canonical 标签只是几个信号里的一个
Google 那份关于网址规范化的文档(2026-08-24 读)开头不是在解释方法,而是在给方法排强弱。这个排序才是要背下来的部分,因为「我写了 canonical,Google 好像没理」的所有情形,都能用它解释。
| 方法 | 强度 | 适用范围 |
|---|---|---|
| 永久跳转 | 强 | 任何网址,代价是旧地址没了 |
rel="canonical" 元素 | 强 | 只对 HTML 页面有效 |
rel="canonical" 响应头 | 强 | 任何文件,含 PDF |
| 写进 sitemap | 弱 | 任何你列出的网址 |
文档把跳转描述为「A strong signal that the target of the redirect should become canonical.」,把链接标注描述为「A strong signal that the specified URL should become canonical.」,而写进 sitemap 是「A weak signal that helps the URLs that are included in a sitemap become canonical.」。同一段还补了一句:「Keep in mind that these methods can stack and thus become more effective when combined.」
由此有两个直接后果。你把 A 跳到 B,又在 B 上写一个指回 A 的 canonical,那是两个强信号方向相反,结果不该让你意外。你的 sitemap 里列的是 A、canonical 写的是 B,也谈不上写错,只是把自己的主张削弱了一半。
跳转是把一个网址收掉,canonical 标签是把它留着、只请求把权重算到别处。按「还有没有人需要打开这一页」来选。
做出海独立站的话,重复网址一般不是有人手写出来的,是系统顺手生出来的。先把这几处对一遍,基本就能找齐你站上到底有多少份「同一个页面」:
- 投放和邮件带回来的跟踪参数,
?utm_source=那一类,每一个组合都是一个新网址。 - 带不带
www两种主机名都能打开,且没有一边跳向另一边。 - 结尾斜杠有和没有各是一个地址,服务器两种都回 200。
- 列表页的筛选与排序参数,颜色、尺码、价格从低到高,内容几乎一样。
- 分页的第 1 页和不带页码的列表首页,往往是同一份内容的两个地址。
- 路径大小写不敏感的服务器上,
/Product和/product都能访问。
这六种里前三种最值得先修,因为它们影响的是整站每一个页面,不是某一类页面。
四步把 canonical 标签设好
一个页面大约十分钟,之后每个页面都是同一套动作。
- 定下你想留的那个网址。完整写出来:协议、你实际对外提供的主机名、以及你实际使用的结尾斜杠。
- 在那个网址上放一条指向自己的 canonical。文档这句是明确的:「Do include a
rel="canonical"link on the canonical page itself (also known as a self-referential canonical).」 - 把每个重复网址都指过去,而且只用一种方法。元素和响应头二选一,因为「while supported, using both methods at the same time is more error prone」。
- 让内链跟上:「When linking within your site, link to the canonical URL rather than a duplicate URL.」
第 2 步是最常被跳过的,因为一个页面指向自己看着像废话。它不是废话:正是这一条挡住了采集站的副本、带跟踪参数的地址和打印版页面,让它们不至于变成 Google 最后认下的那一版。
交付物:两段可粘的代码,一段自检命令
元素写法,放在那个想留下的页面和每个重复页面的 <head> 里:
<link rel="canonical" href="https://example.com/dresses/green-dresses" />
响应头写法。PDF、图片这类文件只能用它,因为元素那种写法「only works for HTML pages, not for files such as PDF」:
Link: <https://example.com/white-paper.pdf>; rel="canonical"
再加一段自检:把页面声明的 canonical、响应头里的 canonical、以及这个网址最终落在哪儿,三样并排读一遍。
# 页面声明了什么
curl -sL https://example.com/page \
| grep -o '<link[^>]*rel="canonical"[^>]*>'
# 响应头里是不是也有一个(不该两个都有)
curl -sIL https://example.com/page | grep -i '^link:'
# 这个网址实际落在哪
curl -s -o /dev/null -w '%{url_effective}\n' -L https://example.com/page
第三条命令打出来的网址和第一条不一样,未必是错的 —— 一条跳转链最终停在 canonical 上是自洽的。真正错的情况是 canonical 指向的那个网址自己还要再跳一次,那等于请求 Google 留下一个在该地址上并不存在的页面。
做错了会怎样
canonical 在和跳转较劲
症状:Search Console 报「重复网页,Google 选择的规范网页与用户指定的不同」。成因:你写的那个网址不是服务器最终停下的那个。先跑上面第三条命令,再去怀疑标签。
拿 robots.txt 去藏重复页
症状:重复的那个网址还在搜索结果里,只是没有描述。文档把原因写得很直:「Don't use the robots.txt file for canonicalization purposes. Google may still index URLs that are disallowed in robots.txt without their content.」屏蔽抓取拿掉的是证据,不是那个网址。
拿 noindex 去选赢家
症状:那一页干脆消失了,而不是合并过去。Google 在同一份清单里就不建议这么做 —— 用 noindex 在一个站内部挑规范页「will completely block the page from Search. rel="canonical" link annotations are the preferred solution.」什么时候消失才是你要的结果,见 noindex 什么时候该用。
canonical 指了一个锚点
症状:什么都没发生。「Don't specify a URL fragment as canonical, as Google generally doesn't support URL fragments.」结尾带 #section 的 canonical 不是弱一点的信号,它压根不是信号。
canonical 标签的边界在哪
动手之前先知道边界,能省掉一周。这几种方法一个都不是必需的,文档原话:「your site will likely do just fine without specifying a canonical preference.」你不声明,Google 会自己挑出那个「objectively the best version to show to users in Search」的网址。
它也经不起自相矛盾。带 hreflang、lang、media、type 属性的标注「are not used for canonicalization」,一条都不参与。跨站的 canonical 更只是一个请求,Google 会拿它和它知道的其他一切一起权衡,你没法把它当成一次能执行的转移。
停手信号很清楚:Search Console 认同你的选择,内链和标签口径一致,就没有下一个状态可追了。要是这些页面本来就抓不到,上面所有事都不成立 —— 先 查一下爬虫能不能读到这个页面。
常见问题
canonical 标签是干什么用的
把重复或高度相似的网址收拢到一个地址上,让外链和其他信号算到同一个页面,而不是被摊薄。文档还给了第二个理由,站一大就很实在:「To avoid spending crawling time on duplicate pages.」
是不是每个页面都得写
没有哪个页面非写不可。但每个页面都值得有一条指向自己的,成本是模板里的一行。我们自己测过一批站,28 个首页里 23 个声明了 canonical,这个比例基本就是「多数内容系统现在默认就带」的水平。
用 canonical 还是 301 跳转
没人需要打开旧地址,就跳转。两个地址都得继续能打开 —— 筛选后的列表页、打印版、被授权转载的副本 —— 才用 canonical。真要改网址的话,跳转只是要同步的其中一处,见 改一次网址会连带砸坏什么。
canonical 标签是 Google 自己发明的吗
不是。它定义在 RFC 6596 里,Google 文档明说自己支持的就是那份规范。所以它是一条网络标准,其他搜索引擎和答案引擎也在读它。
本文属于 QueryWin 实操手册 · 第 2 阶


