在站点运营里,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,文件本身却没有任何限制。
上线前的核對清單
- 確認 robots.txt 是正式环境的版本,没有残留測試規則。
- 把 sitemap 中提交的地址和 robots.txt 的屏蔽規則對一遍,避免自相矛盾。
- 抽查關键頁面的 meta robots,確認没有通過模板或脚本被统一注入 noindex。
- 對不该收錄但不介意被抓的頁面,優先用 noindex;對纯粹消耗額度的路径,再用 Disallow。
- 非 HTML 资源检查响應头,而不是頁面源碼。
判断一條規則是否正确,可以問自己:我是希望蜘蛛別来,還是希望它来了但不要留下记錄?答案不同,用的指令就不同。
用日誌回头看效果
規則上线一段時間後,可以在服務器日誌里找被屏蔽的路径,看是否仍有請求、返回什么狀態碼。如果某個被 Disallow 的目錄長期占據抓取額度,說明規則没有生效或者被其他入口绕開;如果本该收錄的頁面一直停在“已發現未抓取”,則要回到 robots.txt 和 sitemap 的一致性上检查。
這類調整不需要频繁改動,但每次改版、換域名或上线新频道时都應该重新核對一遍,因為模板和配置文件往往就是在那几個時間点被顺手改坏的。