站点运营

站点运营:canonical 自查,別让同一篇内容存在多個版本

同一篇内容在站内出現多個可訪問地址,是站点运营里很常见的問题。canonical 标簽用于指明首選版本,但它只是建议,需要和内鏈、Sitemap、重定向配合才有效。本文梳理重复地址的常见来源、canonical 的典型誤用與自查清單,以及它和 robots、301、noindex 之間的分工,帮助你在不大改站点的前提下逐步收敛重复地址。

站点运营

站点运营:canonical 自查,別让同一篇内容存在多個版本

做站点运营时,最容易被忽略的一類問题是:同一篇内容在站点里存在好几個可以訪問的地址。用戶看不出区別,蜘蛛却會把它当成多個頁面分別處理。canonical 标簽就是用来解决這個問题的,但用错了反而會添乱。

同一篇内容為什么會有多個地址

常见的来源包括:

  • 带參數的地址,比如列表翻頁、排序、来源追踪參數;
  • www 與非 www、http 與 https 混用;
  • 带尾斜杠與不带尾斜杠同时可訪問;
  • 打印頁、移動版獨立地址、专题聚合頁;
  • 内容被搬到站内其他栏目,留下了两份。

這些地址如果都返回 200 且都能被抓取,就等于把同一份内容重复投喂给搜尋引擎。

canonical 在说什么

canonical 是寫在頁面 head 里的一個連結标簽,作用是告诉蜘蛛:這一组相似頁面里,哪一個是我認可的正式版本。

它是一條建议,不是强制指令。搜尋引擎會參考,但如果頁面上的其他信号(内鏈、Sitemap、重定向)與它互相矛盾,它很可能被忽略。

所以 canonical 要和内鏈、Sitemap、robots 放在一起看,單獨设一個标簽解决不了所有問题。

自查时容易踩的坑

1. 指向了不可訪問的地址

canonical 指向的 URL 如果是 404、被 robots 屏蔽,或者本身還有重定向,這個标簽基本失效。指向的地址自己要先能正常打開。

2. 頁面之間互相指向

A 頁寫 canonical 到 B,B 頁又寫 canonical 到 A,形成循环。這種情况蜘蛛通常两邊各按各的處理,等于白寫。

3. 全站批量寫死同一個地址

有些模板為了省事,把 canonical 统一寫成首頁地址。结果是所有内頁都在说“我不是正主”,對收錄非常不利。

4. 分頁頁面處理不当

分頁的第二頁、第三頁不要 canonical 到第一頁。它們各自是不同的内容列表,正确做法是保留自身地址,並做好上一頁、下一頁的關系說明。

5. 和重定向混着用

如果舊地址已经做了 301 到新地址,舊地址就不必再寫 canonical。两者同时存在容易让信号混乱。

一份简單的自查清單

  1. 随机抽 20 個内頁,查看源碼中的 canonical 地址,確認能正常打開並返回 200;
  2. 確認 canonical 地址與頁面實际 URL 的主机名、协议、尾斜杠寫法一致;
  3. 检查是否存在 A 指向 B、B 指向 A 的循环;
  4. 检查列表頁、篩選頁是否誤寫了 canonical 指向首頁或栏目首頁;
  5. 對照 Sitemap,確認提交的地址與 canonical 指向的是同一個;
  6. 確認被 canonical 掉的地址没有被大量内鏈指向,否則信号會打架。

和 robots、重定向怎么分工

  • robots.txt:控制蜘蛛能不能抓,不直接控制能不能收錄,适合屏蔽無意义的參數地址;
  • 301 重定向:地址永久搬家,權重與收錄跟着走,适合改版和栏目合並;
  • canonical:几個地址都能訪問,内容高度相似,用来指定首選版本;
  • noindex:明确不想要這個頁面出現在结果里。

四者用途不同,別拿一個去替代另一個。

落地建议

站点規模不大时,可以先把 canonical 的模板逻辑固定下来:預設指向目前頁面的規范地址,只在确實存在重复内容时才做特殊處理。改完之後,观察服務器日誌里這些地址的抓取频次和狀態碼變化,往往比盯着一两個頁面的标簽更有用。

重复内容不是一夜之間出現的問题,解决它也不需要一次性全站推倒重来。按栏目分批梳理,先把明顯重复的地址處理掉,再逐步收紧模板,是更稳妥的做法。