為什么入口頁總會碰到 canonical 這個問题
蜘蛛池的入口頁通常有两個特点:數量多、模板同源。同一套 HTML 換個标题和少量正文就批量生成,參數、路径层級、大小寫變体也可能同时存在。這類頁面在搜尋引擎眼里很容易被归到高度相似的一類里,而 canonical 正是用来表達:這些相似頁面中,哪一個是我認可的正式版本。
所以入口頁要不要寫 canonical、寫什么值,本质上是在回答一個問题:你希望搜尋引擎把入口頁当成獨立内容頁,還是当成通往目标頁的中間层。
三種常见做法的實际差別
1. canonical 指向自己
适合入口頁有獨立正文、希望它作為單獨頁面存在的情况。自指相当于声明我就是這個頁面的标准版本,能避免同一路径带上不同參數时被拆成多個版本。
但要注意:自指並不解决頁面之間的相似問题。如果 A、B、C 三個入口頁除了标题几乎一样,每個都自指,搜尋引擎仍然可能自行判断它們是重复内容,只保留其中一個。
2. canonical 指向目标頁
這是把入口頁当作渠道頁时最常用的做法,信号會往目标頁集中。代價是入口頁本身基本不會被当成獨立頁面保留,它只承担被發現和传递信号的角色。
有两個前提值得先確認:一是入口頁與目标頁的主题是否真的相關,差异太大时 canonical 有可能被忽略;二是如果入口頁已经用 301 或 JS 跳到目标頁,再叠一個 canonical 意义就不大了,反而让信号變得混乱。
3. 不寫 canonical
把判断權完全交给搜尋引擎。對參數較多、结构本来就零散的入口頁,這種做法很常见,结果通常是搜尋引擎自己挑一個版本。問题是這個過程不可控,入口頁越多,被归並、被忽略的比例就越难预估。
几個容易踩的坑
- 所有入口頁的 canonical 都指向首頁。這是最常见的誤用。批量生成的頁面全指向一個首頁,等于告诉搜尋引擎這些頁面都是首頁的副本,入口頁也就失去了作為獨立 URL 的意义。
- 一個頁面寫了多個 canonical。出現两個及以上时,搜尋引擎通常會全部忽略,等于白寫。
- 用相對路径。建议寫成完整的绝對 URL,避免因為协议或域名變体解析到意料之外的地址。
- canonical 與 noindex 同时出現。两者表達的是相反的意图,同时存在时结果往往不是你想要的那個。
- 靠 JS 延迟注入。canonical 直接輸出在 head 里最稳,等脚本执行再插入,抓取时可能讀不到。
怎么判断現在的設定是否合理
不用猜,看两件事就够了。
- 抓取日誌里,canonical 指向的那個 URL 有没有被持續訪問。如果入口頁被频繁抓取,而 canonical 指向的頁面几乎没有记錄,說明這個信号可能没有被采纳。
- 入口頁和它的 canonical 目标,内容是否真的能對應上。内容無關的 canonical,長期看更像是一種自我安慰。
canonical 是一個建议,不是命令。它能不能被采纳,取决于頁面内容本身是否支持這個判断。入口頁模板化程度越高,canonical 能起到的作用就越有限。
一個简單的選擇顺序
- 入口頁只為让蜘蛛發現目标 URL、内容單薄,可考虑指向目标頁,同时接受入口頁不保留在索引里。
- 入口頁有獨立正文、打算長期维護,用自指,並尽量让每個頁面的正文有實质差异。
- 入口頁是參數變体、同一内容多種 URL,選一個主版本,其余指向它。
- 拿不准就先不加,观察一段時間日誌再决定,比批量寫错再回滚要省事。
最後提醒一句:canonical 處理的是版本選擇問题,它不會让入口頁數量带来的效果成倍增加,也不能替代内容本身的差异。把入口頁做得更像正常頁面,canonical 才有讨论的余地。