網站收錄

robots.txt 與 noindex 用反了:阻止抓取和阻止收錄不是一回事

想屏蔽或下线頁面时,robots.txt 和 noindex 常被混着用。前者限制抓取,後者才影响索引,而且 noindex 必须能被爬虫讀到才生效。本文梳理两者的区別、常见的冲突组合,以及頁面下线时應按什么顺序處理。

網站收錄

robots.txt 與 noindex 用反了:阻止抓取和阻止收錄不是一回事

抓取和收錄是两個不同环节。不少站点想屏蔽某個目錄时,第一反應是在 robots.txt 里寫一條 Disallow,過一阵子再看,這些頁面仍然出現在搜尋结果里,只是标题和摘要看着不太對。問题往往不在收錄系統,而在于指令用错了對象。

两個指令各自管什么

robots.txt 告诉爬虫哪些路径可以訪問、哪些不要訪問,它限制的是抓取行為,本身並不直接决定頁面能不能進索引。noindex 則不同,它通常寫在頁面的 meta robots 里,或者放在响應头的 X-Robots-Tag 中,意思是“這個頁面抓到了,但請不要放進索引”。前提是爬虫能實际抓到頁面並讀到這條指令。

一句话概括:抓取是進门,索引是登记。挡在门外,登记處自然收不到你的說明。

為什么 robots.txt 常常挡不住收錄

当一個 URL 被 robots.txt 禁止抓取,爬虫拿不到頁面正文,也就看不到頁面里的 noindex。此时如果有外鏈或其他来源指向這個 URL,它仍可能被索引,只是索引里缺少正文,可能只顯示标题、網址或少量可见文字。另一種情况是頁面此前已经被收錄,之後加上 Disallow,索引中的舊版本還會保留一段時間,不會立刻消失。

容易用反的几種情况

  • 想彻底移除頁面,却只在 robots.txt 里寫了 Disallow,頁面本身仍是 200 且没有 noindex。
  • 想屏蔽一批低價值頁面,既加了 noindex,又用 Disallow 挡了整個目錄,结果 noindex 根本讀不到。
  • 用 Disallow 屏蔽參數或目錄,但该目錄下其實有希望被收錄的頁面。
  • 一邊在 robots.txt 里封禁某些路径,一邊還在 sitemap 中提交這些 URL。

下线一個頁面的推荐顺序

  1. 先判断意图:是彻底不要這個頁面,還是只是不想被搜尋展現。彻底不要就刪除並返回 404 或 410;只想不進索引就用 noindex。
  2. 如果選了 noindex,確認该 URL 没有被 robots.txt 挡住,让爬虫能正常抓到並讀到指令。
  3. 移除站内指向该頁面的連結,减少爬虫反复發現它的机會。
  4. 對已经收錄的頁面,可以在站長平台提交移除請求,缩短舊结果在索引中停留的時間。
  5. 留出一段观察期,確認索引中的舊结果處理完毕,再做下一步動作。
Disallow 加 noindex 通常不是“双保險”,而是無效组合:爬虫被挡在门外,讀不到 noindex,頁面狀態往往维持原样。

非 HTML 资源改用 X-Robots-Tag

PDF、图片、视频這類文件没法在文件内部寫 meta 标簽,需要在 HTTP 响應头里加 X-Robots-Tag 来實現類似 noindex 的效果。如果這類资源只靠 robots.txt 屏蔽,同样可能出現没被抓取、却仍出現在索引里的情况。

canonical 和 noindex 別叠在一起

有的頁面同时寫了 canonical 指向另一個地址和 noindex。两個信号指向不同,取舍时容易产生不确定性。想把内容合並到另一個頁面,用 canonical;想從索引中移除,用 noindex 並让頁面返回合适的狀態碼,一般不需要两者並存。

動手前的自查清單

  • 目标 URL 在 robots.txt 中是否被允许抓取
  • 頁面或响應头里是否寫了 noindex
  • 頁面的 HTTP 狀態碼是否符合预期(200 / 404 / 410)
  • sitemap 中是否還留着已下线的 URL
  • 站内連結與外部連結是否還指向该 URL

指令本身並不复杂,麻烦多半来自把它們用在了同一件事上。先确定要達成的是“不被抓取”還是“不進索引”,再挑對應的工具,多數冲突都能提前避開。