搜尋抓取

抓取路径上的開關:noindex、nofollow 與 X-Robots-Tag 怎么配合

noindex、nofollow 和 X-Robots-Tag 都寫在頁面上,但作用的层級完全不同。本文先区分三者的生效范围,再梳理 robots.txt 與 noindex 冲突、响應头通配、頁級 nofollow 剪断内鏈等常见誤用,最後给出一套從是否希望被抓出發的检查顺序,以及它們與 Sitemap、内鏈如何配合。

搜尋抓取

抓取路径上的開關:noindex、nofollow 與 X-Robots-Tag 怎么配合

站点的抓取路径不只是由連結决定的。頁面头部的一行 meta、HTTP 响應头里的一行 X-Robots-Tag,甚至一個連結上的 rel="nofollow",都會在蜘蛛走到這一步时改變它接下来往哪走。這些開關很小,但方向用错,影响往往比少寫几條内鏈更大。

三個開關,作用于不同层級

先分清它們各自管什么,再谈怎么用:

  • meta robots:寫在 HTML 的 head 里,只對目前這個頁面生效。蜘蛛必须先把頁面抓下来,讀到标簽才會执行。
  • X-Robots-Tag:寫在 HTTP 响應头里,作用范围是這一次响應。它能覆盖 PDF、图片、视频這類没有 head 的资源,也能由服務器统一控制。
  • rel="nofollow":寫在連結上,管的是這條連結要不要繼續跟。它是連結級,不是頁面級。

三者里,只有 nofollow 會直接影响 URL 發現——被标记的連結不再把蜘蛛带到下一個地址。noindex 管的是索引,一般不影响蜘蛛顺着頁面里的連結繼續往外走,除非你同时寫了 nofollow。

容易踩的几個坑

noindex 和 nofollow 一起寫

想让一個頁面既不進索引、也不往外传連結,就寫成 noindex, nofollow。實际效果常常是:蜘蛛依然要抓這個頁面才能看到标簽,頁面里的連結照样被發現,但連結的作用被削弱。如果這個頁面本身是栏目頁或聚合頁,等于自己把内鏈结构剪断了一块。

robots.txt 拦了,又寫 noindex

robots.txt 里 Disallow 掉的目錄,蜘蛛不會去抓,也就讀不到里面的 noindex。结果是頁面既没被抓取,也没被明确告知不要索引。要让頁面登出索引,顺序通常是:先放開抓取,让 noindex 正常生效,確認狀態之後再考虑屏蔽。

X-Robots-Tag 寫成通配

有的配置會對整個目錄甚至整個域名下發 X-Robots-Tag: noindex,本意是屏蔽測試环境或某類文件,结果把正式内容一起盖住了。响應头不像 meta 那样能在頁面源碼里一眼看到,排查时最容易被忽略。

nofollow 该给頁面還是给連結

頁級 nofollow 會让蜘蛛不再跟這個頁面上的所有連結,等于把這一頁從爬行图里摘出去。連結級 nofollow 只针對一條連結,适合评论区、用戶提交内容、不想背书的第三方外鏈。做法上,能用連結級就不要用頁級;能通過整理内鏈解决的,就尽量不用 nofollow 去糊。

還要注意,大量本该被發現的 URL 如果都挂在 nofollow 連結後面,等于人為减少了入口。站内主導航、面包屑、列表頁里的詳情連結,通常不建议加 nofollow。

一套可执行的检查顺序

  1. 先確認頁面到底想不想被抓:不想被抓用 robots.txt,不想被索引用 noindex。
  2. 再看标簽寫在哪一层:HTML 頁面用 meta,非 HTML 资源用 X-Robots-Tag。
  3. 检查有没有通配或多层叠加,尤其是响應头里的規則。
  4. 检查内鏈有没有被 nofollow 誤伤,特別是指向詳情頁的固定導航。
  5. 改完之後用抓取工具或服務器日誌確認蜘蛛再訪时的實际行為,而不是只看配置寫没寫對。
屏蔽是最後手段,不是第一手段。绝大多數這個頁面不该被收錄的問题,靠内容整理和連結收敛就能解决。

和 Sitemap、内鏈放在一起看

Sitemap 负责把重要 URL 直接交到蜘蛛手上,内鏈负责让蜘蛛在站点里走得通,noindex 這類開關负责把不该出現在索引里的 URL 挡在外面。三者方向一致时,抓取路径才干净。如果 Sitemap 里提交的 URL 恰好被响應头 noindex 挡住,蜘蛛會反复抓取一個永遠進不了索引的地址,白白占用抓取资源。