搜尋抓取

robots.txt 與 meta robots:屏蔽抓取和禁止收錄對 URL 發現的影响

robots.txt 的 Disallow 與 meta robots 的 noindex 经常被当成一回事,但一個管抓取請求,一個管收錄结果。本文梳理两種指令在 URL 發現與抓取队列中的實际表現,给出容易踩坑的配置组合和上线前的核對清單。

搜尋抓取

robots.txt 與 meta robots:屏蔽抓取和禁止收錄對 URL 發現的影响

在站点运营里,robots.txt 和 meta robots 是两條最常被混用的指令。它們看起来都在说“別抓這個”,但作用的位置完全不同:一個拦在請求前,一個作用在抓取之後。搞混這两者,URL 發現和抓取队列的狀態就會出現和预期相反的走向。

Disallow 拦的是請求,不是發現

URL 的發現主要来自頁面連結、sitemap、外鏈和提交入口。robots.txt 里的 Disallow 並不會阻止這些渠道把地址记錄下来,它只是让搜尋蜘蛛在准备請求时放弃抓取。结果是:地址進了已知队列,但長期停在“已發現、未抓取”的狀態。

這種狀態本身没有害處,但如果被屏蔽的地址恰好是站長希望收錄的内容,問题就出現了——不是没被發現,而是發現之後走不下去。

noindex 需要蜘蛛真的抓到頁面

meta robots 的 noindex 依赖蜘蛛成功抓取頁面並讀到這行标簽。如果同一路径同时被 robots.txt 屏蔽,蜘蛛拿不到 HTML,自然看不到 noindex,頁面仍可能以“無描述”的形式出現在结果里。這是最常见的自相矛盾配置。

  • 只想去掉收錄、保留連結传递:只用 noindex,不要 Disallow。
  • 只想省抓取額度、不介意是否收錄:可以 Disallow,但要接受可能出現的無摘要结果。
  • 既 Disallow 又 noindex:两者互相抵消,通常是最差组合。

几種常见配置的實际後果

整站 Disallow: /

測試环境常用這一條防止被外部看到。風險在于上线时忘记改回。此时 sitemap 繼續投递、外鏈繼續产生,URL 發現照常進行,但没有任何頁面能被抓取,站点在抓取队列里基本停摆。

屏蔽參數與篩選路径

對篩選參數、排序參數做屏蔽,确實能减少無效抓取,但這些路径往往也在传递連結關系。如果被屏蔽的目錄里還有需要被發現的正規頁面,連結路径會一起断掉。更稳妥的做法是把參數收敛成静態化路径,而不是直接一刀切。

非 HTML 资源

PDF、图片、视频這類文件没有 meta 标簽,要用 HTTP 响應头里的 X-Robots-Tag 控制。寫错位置是常见失誤:标簽寫進了 HTML,文件本身却没有任何限制。

上线前的核對清單

  1. 確認 robots.txt 是正式环境的版本,没有残留測試規則。
  2. 把 sitemap 中提交的地址和 robots.txt 的屏蔽規則對一遍,避免自相矛盾。
  3. 抽查關键頁面的 meta robots,確認没有通過模板或脚本被统一注入 noindex。
  4. 對不该收錄但不介意被抓的頁面,優先用 noindex;對纯粹消耗額度的路径,再用 Disallow。
  5. 非 HTML 资源检查响應头,而不是頁面源碼。
判断一條規則是否正确,可以問自己:我是希望蜘蛛別来,還是希望它来了但不要留下记錄?答案不同,用的指令就不同。

用日誌回头看效果

規則上线一段時間後,可以在服務器日誌里找被屏蔽的路径,看是否仍有請求、返回什么狀態碼。如果某個被 Disallow 的目錄長期占據抓取額度,說明規則没有生效或者被其他入口绕開;如果本该收錄的頁面一直停在“已發現未抓取”,則要回到 robots.txt 和 sitemap 的一致性上检查。

這類調整不需要频繁改動,但每次改版、換域名或上线新频道时都應该重新核對一遍,因為模板和配置文件往往就是在那几個時間点被顺手改坏的。