搜尋抓取

noindex、canonical 與 Sitemap 打架时,蜘蛛會听谁的

同一批 URL 上,meta robots 寫了 noindex,canonical 指向另一個地址,Sitemap 里還照舊登记着——三個信号各说各话。本文梳理這三種配置各自的作用范围、常见冲突组合下的實际表現,並给出一套可以照着做的排查顺序,帮站点把抓取和索引收敛到規范地址上。

搜尋抓取

noindex、canonical 與 Sitemap 打架时,蜘蛛會听谁的

站点的技術配置常常互相矛盾:頁面 meta robots 寫了 noindex,連結上的 canonical 指向另一個地址,Sitemap 里還把這個 URL 列得好好的。三個信号都说自己代表站点意图,蜘蛛只能按優先級做取舍。理解這套優先級,比反复改配置更能省事。

三個信号各自管什么

  • robots meta / X-Robots-Tag:頁面級指令,管的是這個 URL 要不要進索引。它不阻止抓取,蜘蛛必须先把頁面抓下来,才能讀到這條指令。
  • canonical:去重信号,表達“這段内容的首選地址是哪個”。它既不阻止抓取,也不保證被采纳,只是给蜘蛛一個參考。
  • Sitemap:URL 發現渠道,告诉蜘蛛這里有頁面、大致什么时候更新過。它是建议,不是命令。

冲突时通常怎么走

  • noindex 與 canonical 同頁:noindex 更硬,canonical 基本被忽略。但前提是蜘蛛能讀到 noindex,所以這個 URL 仍會被抓取。
  • noindex 加 robots.txt 屏蔽:蜘蛛讀不到 noindex,URL 可能仍被外部連結發現,以無描述的形式出現在结果里。這两個不要叠加使用。
  • canonical 指向 A,Sitemap 登记 B:抓取會分散到两個地址,收敛周期被拉長,日誌里两條路径都會反复出現。
  • Sitemap 里放了 noindex 頁面:自相矛盾的配置,既浪費抓取,也會让整份 Sitemap 的可信度打折。

一套可以照着走的排查顺序

  1. 先確認哪些 URL 真的需要被索引。篩選頁、排序參數頁、登入後頁面通常不在其中。
  2. 决定這些 URL 是用 noindex 處理,還是用 robots.txt 屏蔽。二選一,別叠加。
  3. 检查 Sitemap 是否只保留需要收錄的規范地址,剔掉 noindex 頁面和已经 301 的舊地址。
  4. 检查内鏈指向的地址與 canonical 是否一致。内鏈指向 A、canonical 寫 B,是非常常见的自相矛盾。
  5. 观察一段時間的日誌:抓取是否集中到規范地址,被 noindex 的 URL 是否還在被大量訪問。

几個容易忽略的细节

noindex 得先被讀到

如果 noindex 是靠脚本注入到 head 里的,蜘蛛不一定能执行到那一刻。用服務端直接輸出,或者用 X-Robots-Tag 响應头,稳定性更高。

canonical 不是省抓取的工具

把一批參數頁 canonical 到主頁面,蜘蛛依然會抓取這些參數頁,只是把權重归拢到主頁面。想真的减少抓取,得靠 robots.txt 或 noindex。

Sitemap 的規模要真實

把大量重复或低质 URL 塞進 Sitemap,會让蜘蛛對整份文件的分發节奏變慢,真正需要收錄的新頁面反而排在後面。

跳轉入口要尽量短

用外部跳轉頁做入口时,注意跳轉方式。302 叠加脚本跳轉的鏈路越長,蜘蛛走到目标頁的概率越低,入口尽量直连目标 URL。

配置之間的一致性更重要

單項配置寫得對,不代表整套配置能配合。定期把 robots.txt、meta robots、canonical、Sitemap 和内鏈放在一起對一遍,能省下很多说不清楚的抓取異常。

抓取異常往往不是某一條規則寫错了,而是几條規則各自為政。先让它們口径一致,再谈優化。