robots.txt 是站点给爬虫看的第一份說明文件。它不负责收錄,也不负责排名,只表達“哪些路径希望被抓取、哪些不希望”。一旦寫错,轻則浪費抓取額度,重則让重要栏目長期不被發現。做站点运营时,把它当成门禁規則定期复核,比事後從日誌里找原因更省事。
先看文件本身能不能正常訪問
在浏览器或命令行訪問 https://example.com/robots.txt,確認返回狀態碼是 200,内容不是空白、不是首頁 HTML、也不是服務器預設頁。如果返回 404,理论上爬虫會認為没有限制,但很多站長會誤以為已经屏蔽。若返回 403 或 5xx,不同爬虫處理方式不一致,最稳妥的做法是先修好訪問,再谈規則。
User-agent 匹配:別把全局規則寫成只對某個爬虫生效
robots.txt 按 User-agent 分组。常见的错誤是:想屏蔽所有爬虫,却只寫了 Baiduspider 或 Googlebot;或者想放行搜尋蜘蛛,却在 User-agent: * 下寫了過宽的 Disallow。复核时把每一组規則對應到實际爬虫名稱,確認没有把“只针對某個工具”的規則誤寫成全局。
Disallow 與 Allow 的顺序和優先級
同一 User-agent 组内,通常更具体的路径規則優先,但不同爬虫實現有差异。不要依赖“後面的規則一定覆盖前面”這種假设。如果既要屏蔽目錄又要放行其中某個子目錄,建议把 Allow 寫在前面或單獨分组,並實际測試。例如屏蔽 /search/ 但放行 /search/help/,就需要寫清楚,而不是只寫一條 Disallow: /search/ 然後期待例外自動生效。
通配符和结尾符不要凭感觉寫
* 表示任意字符,$ 表示路径结尾。寫 Disallow: /*.pdf$ 可以屏蔽所有 PDF 連結,但要確認是否真的想屏蔽全部 PDF。寫 Disallow: /admin 會同时影响 /admin、/admin/ 以及 /admin-notes 這類前缀相同的路径。如果只想限制目錄,通常寫成 Disallow: /admin/ 更稳。規則越宽,越容易誤伤正常栏目和分頁。
robots.txt 不能替代 noindex
robots.txt 只控制抓取,不控制索引。如果頁面已经被抓取並索引,事後加 Disallow 通常不會让它從搜尋结果消失,反而可能因為爬虫看不到頁面上的 noindex 而無法更新狀態。需要頁面級移除时,應優先用 noindex,並确保爬虫能訪問该頁面。反過来,如果只是不想浪費抓取額度,才用 robots.txt 屏蔽。
一個常见誤区是:用 robots.txt 屏蔽後台、測試目錄和參數頁後,就以為它們不會出現在搜尋结果里。實际上,只要外部有連結指向,這些 URL 仍可能被索引。抓取控制和索引控制要分開處理。
和站点地图、canonical 的配合
robots.txt 里可以声明 Sitemap 地址,方便爬虫發現。但如果 Sitemap 中的 URL 又被 robots.txt 屏蔽,就會产生矛盾信号。同样,canonical 指向的地址也不應被 robots.txt 挡住,否則爬虫無法讀取確認。复核时把 robots.txt、Sitemap、canonical、noindex 放在一起看,確認没有互相打架。
上线前後的复核清單
- 直接訪問 /robots.txt,確認返回 200 且内容完整。
- 逐條检查 User-agent 分组,確認没有把全局規則誤寫進單爬虫组。
- 检查 Disallow 路径是否過宽,是否誤伤栏目、分頁、静態资源。
- 確認後台、測試环境、临时目錄确實被屏蔽,且没有暴露敏感路径。
- 確認重要栏目和 Sitemap 地址没有被誤屏蔽。
- 检查 Sitemap 声明地址是否正确、可訪問。
- 用不同 User-agent 測試抓取结果,或查看服務器日誌中的蜘蛛訪問记錄。
- 改版、換域名、調整目錄後,重新复核一遍。
日常监控與改動习惯
把 robots.txt 纳入變更记錄:谁改的、改了什么、為什么改。上线後观察蜘蛛日誌,看重要目錄的抓取频次是否異常下降。如果站点使用蜘蛛池或外部引導方式增加 URL 發現机會,更要先確認 robots.txt 没有把目标路径挡在门外,否則引導来的爬虫也只能空手而归。每次修改後,用抓取測試工具或日誌驗證,不要只靠肉眼觉得“應该没問题”。
最後提醒一句:robots.txt 是公開文件,任何人都能查看。不要在注释里寫内部路径、帳號規則或临时密钥。运营上的小改動,先小范围測試,再全量生效。