網站收錄

robots.txt 屏蔽了頁面,為什么還能搜到:Disallow 與 noindex 的分工

很多站長把 robots.txt 的 Disallow 和頁面上的 noindex 当成同一件事,结果要么屏蔽了却還在搜尋结果里看到,要么加了 noindex 却迟迟不登出索引。本文讲清两個指令分別管抓取還是管收錄、执行顺序為什么不能颠倒,以及常见的配置坑和驗證方法。

網站收錄

robots.txt 屏蔽了頁面,為什么還能搜到:Disallow 與 noindex 的分工

站長常遇到一個困惑:明明在 robots.txt 里 Disallow 了某個目錄,搜尋结果里却還能看到這些地址。反過来,有时候加了 noindex,頁面却迟迟不登出索引。這两個指令管的根本不是同一件事,混着用就容易出現上面两種情况。

两個指令解决的是不同問题

  • Disallow:告诉蜘蛛“別来抓”。它控制的是抓取行為,属于 robots.txt 层面的约定。
  • noindex:告诉蜘蛛“別把這一頁放進索引”。它控制的是收錄结果,但它寫在頁面上,蜘蛛必须先抓到頁面才能看到。
一句话记:Disallow 管“来不来”,noindex 管“留不留”。而 noindex 生效的前提,是蜘蛛能来。

為什么被 Disallow 的頁面還出現在结果里

常见原因有三類,可以先對号入座:

  • URL 可以通過外鏈、sitemap、其他站点的引用被發現。即使蜘蛛没抓正文,也可能建立一個只有地址或标题的索引條目。
  • 頁面在被屏蔽之前就已经被抓取並收錄了。抓取被挡住並不會自動刪除已有的索引记錄。
  • 蜘蛛看到 Disallow 後選擇不抓取,自然也讀不到頁面里的 noindex,于是“屏蔽”和“登出索引”两件事都没完成。

想让頁面真正登出索引,顺序不能颠倒

  1. 先不要屏蔽抓取,确保蜘蛛能正常取到頁面内容。
  2. 在頁面上返回 noindex,用 meta 标簽或 HTTP 响應头都可以。
  3. 等索引里的條目消失,期間保持頁面可被抓取。
  4. 確認登出後,再考虑用 robots.txt 屏蔽,或者干脆让頁面下线。

如果頁面本身已经不需要存在,直接返回 410 或 404 通常更干净,不必绕這條鏈路。

几個容易踩的坑

  • 屏蔽了 JS 或 CSS,而 noindex 是由脚本渲染出来的,蜘蛛看不到這個指令。
  • 先 Disallow 再加 noindex,结果 noindex 永遠没有机會生效。
  • 用 X-Robots-Tag 做控制,但只對部分 UA 返回,測試环境和线上表現不一致。
  • robots.txt 里的路径是前缀匹配,寫 /private 會连带屏蔽 /private-page,需要寫得更精确。
  • 屏蔽了带參數的 URL,又指望用 canonical 把權重收拢,可蜘蛛抓不到頁面,自然也讀不到 canonical。

怎么驗證是否真的生效

  • 看索引狀態:用站点维度的查询或索引报告,注意区分“已被屏蔽抓取”和“已抓取但未编入索引”两種狀態,它們對應的問题完全不同。
  • 看服務器日誌:如果目标目錄里再也看不到蜘蛛的訪問记錄,說明屏蔽起了作用;如果仍有訪問,多半是規則寫错了位置或语法有誤。
  • 單頁排查:拿一個測試地址做對照,處理前後各记錄一次狀態,比只看總量更可靠。

和 sitemap、内鏈的配合

sitemap 里繼續列着已经 noindex 的 URL 是自相矛盾的,確認登出索引後就應该清理。同样,站内連結如果一直指向准备下线的地址,蜘蛛會反复發現它,登出的過程也會更慢。想让一個頁面安静地离開索引,除了指令本身,還要检查有没有別的地方在替它做宣传。

把“抓取”和“收錄”分開想,很多問题就清楚了:要留住抓取、拿掉收錄,用 noindex;要节省抓取、彻底不让来,用 robots.txt。两者顺序错了,指令就是在空轉。