網站收錄

canonical 指向 A,内鏈却指向 B:規范化信号互相打架时怎么查

頁面寫了 canonical 不等于規范化已经交代清楚。站内連結、sitemap、重定向、hreflang 都在各自表態,一旦方向分叉,收錄结果就變得难以预测。本文梳理常见的冲突组合、排查顺序和處理原則,帮你在改動之前先看清全站到底把哪個 URL 当成正式版本。

網站收錄

canonical 指向 A,内鏈却指向 B:規范化信号互相打架时怎么查

很多站点在頁面上寫了 rel="canonical",就觉得規范化這件事已经交代過了。但搜尋引擎最终把哪個 URL 当作正式版本,並不只看這一處声明。canonical 只是一個建议信号,它還要和站内連結、站点地图、重定向、hreflang 等一堆表態放在一起看。当這些信号互相矛盾时,结果往往不是简單听 canonical 的,而是變得难以预测:有时收錄的是你以為的副本頁,有时两個 URL 都没進索引。

站内到底有哪些地方在表態

在判断冲突之前,先要清楚同一個頁面可能被好几處指認:

  • canonical 标簽:頁面自己声明的正式版本 URL。
  • 站内連結:導航、面包屑、正文連結實际指向哪個 URL。
  • 站点地图:sitemap 里提交的是哪個 URL。
  • 重定向:301 或 302 把請求送到哪個 URL。
  • hreflang:多語言版本之間的互相指向。
  • 外鏈:別人連結到你的哪個形態。

這些信号方向一致时,問题很少;一旦分叉,就要逐個排查。

几類常见冲突

  • canonical 指 A,内鏈全指 B。 頁面自己说自己應该是 A,但站内所有入口都通向 B。這種情况下 B 反而更容易被抓取、被当成主版本。要么统一成 A,要么把 canonical 改成 B,不要两套並行。
  • canonical 鏈式跳轉。 A 的 canonical 指向 B,B 又指向 C。鏈式声明會把判断拉長,最好直接指向最终那個 URL,一步到位。
  • canonical 指向不存在的地址。 目标 URL 返回 404 或 5xx,等于把信号指向空气,和没寫差不多。
  • canonical 與 noindex 同时出現。 一個说以別的頁面為准,一個说別收我,两者叠在一起容易让狀態變得模糊。想合並就只用 canonical,想彻底不要就只用 noindex。
  • 带參數的頁面全部 canonical 到第一頁。 篩選頁、排序頁内容确實高度相似时這样做可以理解,但如果第一頁和參數頁内容差別很大,一律指回去會损失本来有價值的頁面。
  • hreflang 和 canonical 互相矛盾。 hreflang 说各語言版本各自獨立,canonical 却把它們都指向同一個 URL,等于自己否認了多語言结构。
  • 大小寫、结尾斜杠、协议版本混用。 同一内容同时存在 /Page、/page、/page/ 等多個形態,而 canonical 只寫了其中一個,剩下的要靠重定向收口,否則容易各自被抓。

排查顺序

  1. 先抽一批 URL,覆盖首頁、栏目頁、詳情頁、參數頁、多語言頁,數量不必多,但要分层。
  2. 记錄每個 URL 的 canonical 值,同时记錄它的實际返回狀態碼和最终跳轉地址。
  3. 横向對比:這個 URL 在 sitemap 里是什么形態?站内連結指向它還是它的兄弟頁?外鏈指向哪個?
  4. 找出指向關系里的矛盾点,按改動成本低、影响面大的顺序處理,通常是先统一站内連結和 sitemap,再動 canonical。
  5. 處理完用同一批 URL 复查,隔一段時間再看索引狀態有没有跟着變,不要只看自己改了没有。

處理时的几條原則

  • 能用一個 URL 表達的内容,就不要留两個形態给搜尋引擎去猜。
  • canonical 要和站内實际連結方向一致,否則它很难被当真。
  • 不要為了让某個頁面更容易被收而临时改 canonical,改動要能長期站得住。
  • 規范化解决的是哪一個是正式版本,不是能不能被收錄,這两件事別混在一起期待。
canonical 是一句话,站内連結和 sitemap 是另外很多句话。当它們说的不是同一件事时,先別急着改 canonical,先看看全站到底在往哪個方向指。