robots.txt 是站点和搜尋引擎之間最基础的一份约定文件,一般只有几十行,改起来几乎零成本,但也因此最容易被随手改坏。它不决定頁面能否被收錄,只影响蜘蛛能不能抓,所以寫错之後往往不會立刻报错,而是等抓取量慢慢下滑才被察觉。
先明确它管什么、不管什么
robots.txt 控制的是抓取范围,不控制索引结果,也不能替代權限校驗。用它挡後台、挡測試目錄只是權宜之計,只要有人贴出連結,内容仍然可能出現在结果里。真正敏感的内容應该靠登入態、權限系統或 noindex 處理。
逐項自查清單
位置與可訪問性
- 文件必须放在域名根目錄,子目錄下的 robots.txt 不會被讀取。
- 直接訪問應返回 200 與纯文本類型,不要出現多級跳轉、驗證碼頁或登入頁。
- 检查 CDN、WAF 是否對 robots.txt 做了限流或拦截,返回 403、503 时對方可能按不可用處理。
- 確認 www 與非 www、http 與 https 各版本都能讀到同一份内容,或至少各有可用的一份。
语法與分组
- User-agent 分组之間用空行分隔,同一分组的規則要寫在一起,否則後面的規則會失效。
- 規則名统一使用常见寫法,避免大小寫混排带来的解析差异。
- Allow 與 Disallow 同时命中时,一般以更具体(路径更長)的規則為准,寫規則时按這個思路检查。
- 某條規則留空,例如只寫 Disallow: ,代表不限制,不要用它来表達“禁止全部”。
通配符與結束符
* 匹配任意字符,$ 表示路径結束,這两者配合不当最容易誤伤。比如 Disallow: /*.pdf 會挡住全站 PDF,Disallow: /tag/ 會连同 /tags/ 之類前缀相同的路径一起命中。寫完最好用几個真實 URL 逐一過一遍。
Sitemap 声明
在文件末尾寫明站点地图地址是常见做法,注意地址要與實际可訪問的版本一致,避免 http、www、舊域名混用。若站点有多個子域或分站,可以分行列出多份。
抓取频率
Crawl-delay 的支持情况因搜尋引擎而异,不宜作為限流主力。真正想控制压力,更應该從缓存策略、响應時間和服務器容量入手。
几種常见誤配
- 測試环境的規則被同步到正式站,例如整站禁止,上线後無人复查。
- 屏蔽目錄时漏了细节,本想挡 /search,结果连 /search-guide 這類正常栏目一起挡住。
- 用 robots.txt 處理重复内容,以為不抓就不會重复,其實更合适的手段是 canonical。
- 多份文件互相覆盖,改版时留下了舊站点的 robots.txt,新目錄規則缺失。
改動後的驗證流程
- 在本地或预發环境先寫好規則,用真實 URL 逐一核對命中情况。
- 上线後直接訪問根目錄文件,確認内容與预期一致,没有讀到缓存舊版本。
- 用日誌观察几天,看被屏蔽目錄的抓取請求是否下降、目标目錄是否正常上升。
- 把本轮改動的規則、原因和日期记在运维文档里,方便下次回溯。
不建议频繁微調 robots.txt。每次改動都會改變蜘蛛的抓取路径,短期内抓取資料波動属于正常現象,观察周期最好放宽到一周以上。
多环境與改版的注意事項
如果站点有測試、预發、正式三套环境,建议让正式环境的 robots.txt 單獨维護,不參與代碼合並,避免被覆盖。站点改版更換目錄结构时,除了更新規則文件,還要同步检查内鏈、站点地图和各處硬编碼的路径,避免規則指向已经不存在的目錄。
整体上,robots.txt 的自查不需要多高深的技巧,重点在于:確認它没有挡住该抓的目錄,也没有被当成安全工具使用,並且每次改動都有记錄可查。把這些做到位,它就是一個安静的基础设施,而不是一個随时可能踩到的坑。