站点运营

Canonical 規范連結自查:让同一篇内容只有一個“正主”

同一篇内容常常能用好几個地址打開:域名變体、追踪參數、尾斜杠都會生成新地址。canonical 的作用是告诉搜尋引擎哪一份是主版本。這篇文章梳理常见的多地址来源、容易踩的坑,以及一套能落地的日常自查步骤。

站点运营

Canonical 規范連結自查:让同一篇内容只有一個“正主”

站点跑久了,经常會遇到同一篇内容能用好几個地址打開。带 www 和不带 www 各一份,加個跟踪參數又是一份,列表頁和詳情頁還可能撞在一起。這时候搜尋引擎看到的是多份“看起来一样”的内容,需要你自己告诉它哪一份才是正主。canonical(規范連結)就是干這個的。

先搞清楚 canonical 解决什么問题

canonical 标簽寫在頁面 head 里,指向你希望被当作主版本的地址。它的作用是给出“合並信号”,而不是屏蔽。也就是说,搜尋引擎可能會把几個相似地址的信号合並到 canonical 指向的那個地址上,但最终如何處理仍由搜尋引擎判断,不是寫上去就一定生效。

要区分清楚三件事:

  • 301 重定向:真正把用戶和蜘蛛挪到新地址,舊地址不再獨立存在。
  • canonical:多個地址都能正常訪問,但你指定其中一個為主版本。
  • robots.txt 屏蔽:直接不让抓,但已经被抓到的舊地址可能仍留在索引里。
能重定向的就別用 canonical 兜底;canonical 是给“确實需要並存”的地址准备的。

自查:常见的多地址来源

1. 域名與协议變体

  • http 與 https 是否都還能訪問,canonical 是否统一指向 https。
  • 带 www 與不带 www 是否有一個是重定向,另一個才是主站。
  • 大小寫混用:/About 和 /about 是否都能打開。

2. 尾斜杠與路径寫法

/post/1 和 /post/1/ 在很多服務器上都能訪問。如果两者都返回 200,就要確認 canonical 是否只指向其中一種,並保持一致,別這篇文章指带斜杠、那篇指不带。

3. 追踪參數與篩選參數

推廣連結带的 utm 參數、列表篩選带的排序參數,都會生成新的地址。建议在 canonical 里始终輸出不带這些參數的干净版本。如果參數组合太多,還要配合 robots 規則或連結規范一起處理。

4. 分頁、打印頁、移動版

  • 分頁的第 2、3 頁通常應该自指 canonical(指向自己),而不是全部指回第 1 頁。
  • 打印頁、纯文本版一般指向對應的正文頁。
  • 獨立移動版地址(如 m 站)需要與桌面版互相标注,並確認 canonical 指向哪一邊。

容易踩的几個坑

canonical 指向了不能正常返回的地址

指向 404、指向 301 的中間地址、指向被封禁的地址,都會让信号變得模糊。canonical 的目标地址應当是返回 200 的最终地址。

一個頁面寫了多個 canonical

模板拼接、插件叠加都可能造成輸出两個甚至更多 canonical。搜尋引擎通常會忽略全部或自行選擇,等于白寫。建议直接在頁面源碼里搜一下 canonical 出現的條數。

全站模板里 canonical 寫死成首頁

這是最伤的一種:所有頁面都指向首頁。结果是大量内容頁被当成首頁的副本。模板里應该是動態輸出目前頁面的規范地址。

canonical 與 hreflang 互相打架

多語言站点里,如果每個語言版本的 canonical 都指向同一個語言版本,其他語言頁就可能被合並掉。一般是各語言頁自指 canonical,再用 hreflang 互相關联。

日常怎么查

  1. 抽一批代表頁面(首頁、栏目頁、詳情頁、分頁、带參頁),打開源碼看 canonical 的實际輸出。
  2. 把站内主要地址和 canonical 列表對照,找出指向異常、指向非 200、指向站外的條目。
  3. 看服務器日誌里被抓取的带參地址,判断哪些本该合並到正文。
  4. 如果地址结构有過調整,检查老頁面的 canonical 是否還指着一個早已废弃的地址。
  5. 每次改模板、加插件、換域名之後,把 canonical 列入回归检查項。

canonical 不是寫完就不用管的東西。站点结构、URL 規則、模板一變動,它就可能失准。把它当成一項常規巡检,比等到發現流量分散了再回头找原因省事得多。