搜尋抓取

noindex、canonical、nofollow 同时出現:冲突时蜘蛛按什么顺序處理

robots.txt、noindex、canonical、nofollow 各自管一件事,却经常被同时寫在一個頁面上。当這些指令互相矛盾时,蜘蛛的處理顺序並不由书寫位置决定。本文梳理几種常见冲突组合,說明哪些寫法會互相抵消,並给出一套從抓取层到索引层的排查顺序。

搜尋抓取

noindex、canonical、nofollow 同时出現:冲突时蜘蛛按什么顺序處理

先分清每個指令管的是哪一层

把抓取和索引分開看,很多冲突就不难理解。

  • robots.txt:管抓取。它决定蜘蛛能不能把 URL 取回来,不决定頁面是否出現在结果里。
  • meta robots 的 noindex 或 X-Robots-Tag:管索引。蜘蛛必须先把頁面抓回来,才能讀到這條指令。
  • canonical:管規范化。它是建议而不是命令,搜尋引擎可以自行判断是否采纳。
  • rel="nofollow" 與頁面級 nofollow:管連結。前者作用于單條連結,後者作用于整頁所有連結。

层級清楚了,冲突的大致顺序也就出来了:抓取层在前,索引层在後,規范化在两者之間做取舍。

几種常见的冲突寫法

robots.txt 屏蔽加 noindex

這是最典型的一對。頁面被 Disallow 後蜘蛛不會去抓,自然讀不到頁面里的 noindex。如果站内其他頁面或外部站点仍然連結到這個 URL,它的地址仍有可能出現在结果里,只是没有摘要。想让頁面彻底登出,通常要先允许抓取,让 noindex 被讀到,等它登出之後再考虑屏蔽。

noindex 加 canonical 指向別處

頁面上同时寫 noindex 和一條指向其他 URL 的 canonical,两條信号方向相反:一條说不要這個頁面,一條说這個頁面的正式版本在另一個地址。實际處理时 canonical 往往被忽略,頁面按 noindex 登出。如果本意是合並内容,應该只留 canonical;如果本意是刪除頁面,就该把 canonical 去掉或改成自指。

canonical 指向一個 noindex 頁面

多個頁面都把 canonical 指向同一個目标,而那個目标自己寫了 noindex。這種情况下,合並過去的信号落在一個不參與索引的地址上,等于白做。排查时顺手打開目标頁確認它的 meta robots,是個成本很低的习惯。

整頁 nofollow 加關键内鏈

頁面級 nofollow 會波及頁面上所有連結,包括導航和正文里的站内連結。如果你用它只是想控制某些外鏈的權重传递,這個寫法會连带减少站内 URL 的發現通道。更稳的做法是只對個別連結加 rel 属性。

一套從外到内的检查顺序

  1. 看 robots.txt 是否屏蔽了這個路径,以及是否有更長的規則被誤寫。
  2. 用日誌或抓取工具確認蜘蛛最近一次訪問的返回碼,排除 403、503 這類被中間层拦掉的情况。
  3. 確認渲染完成後的 HTML head 里有没有 noindex,注意由脚本注入的指令是否真的出現。
  4. 检查 canonical 指向谁,目标頁是否可索引、是否與目前頁内容重复。
  5. 最後看連結属性:哪些内鏈带了 nofollow,站内是否還有別的入口能到達這個 URL。
指令之間不是互相抵消的關系,後寫的不會覆盖先寫的。它們作用在不同环节,冲突时各自在自己的环节生效。

寫之前先問一句

每條指令背後最好只有一個目的。想禁止抓取就改 robots.txt,想登出索引就用 noindex,想合並重复内容就用 canonical。三種目的混在同一頁上,通常說明頁面的定位還没想清楚,先解决這個問题,比反复調整指令更省事。搜尋引擎的規則會更新,涉及關键頁面时建议對照官方文档確認目前行為。