robots.txt 不是安全工具,而是抓取约定
很多站点在遇到不想被看到的目錄时,第一反應是在 robots.txt 里寫一行 Disallow。這個文件确實能告诉蜘蛛哪些路径不要抓,但它不是訪問控制,也不能阻止別人直接打開 URL。它的價值在于:把有限的抓取资源引導到真正需要被發現的頁面上。也正因為只有几行,寫错之後往往不容易察觉,等到日誌里蜘蛛訪問量下降,才發現整站都被挡住了。
最常见的几個誤伤场景
一行 Disallow: / 挡住全站
測試环境上线、临时關閉站点、複製模板时忘记删掉,都可能留下全站屏蔽規則。蜘蛛讀到這一行後,通常不會繼續抓取站内任何頁面。更麻烦的是,如果這條規則只對某個 User-agent 生效,其他蜘蛛可能照常抓取,日誌里看起来“還有蜘蛛来”,容易让人誤判問题已经解决。
顺手屏蔽 CSS、JS 和图片
有人為了“节省抓取预算”,把 /css/、/js/、/images/ 全部 Disallow。蜘蛛虽然不直接给頁面打分,但需要這些资源来理解頁面渲染结果。尤其是依赖前端渲染的站点,屏蔽 JS 後,蜘蛛拿到的可能只是一副空骨架。图片同理,屏蔽图片目錄會让图片搜尋和相關頁面表現受到影响。
規則冲突與優先級没弄清
robots.txt 的匹配不是“谁寫在前面谁赢”。当 Allow 和 Disallow 同时匹配一條 URL 时,通常更具体、路径更長的規則優先。不同蜘蛛對通配符和结尾符号的支持也有差异。寫規則时,最好用具体路径做測試,而不是凭印象判断。
一份可执行的 robots.txt 自查清單
- 確認 User-agent 分组:检查是否有针對特定蜘蛛的單獨分组,以及這些分组是否把主站規則覆盖掉了。
- 检查 Disallow 路径是否誤伤:逐條對照目錄和文件類型,確認没有把 CSS、JS、图片、字体等渲染资源屏蔽。
- 確認该抓的頁面没有被拦:栏目頁、詳情頁、分頁、标簽頁等,如果希望被蜘蛛發現,就不應出現在 Disallow 里。
- 检查 Sitemap 声明:寫在這里的 sitemap 地址應可訪問,並且没有被同一份 robots.txt 屏蔽。
- 不要用 robots.txt 處理重复内容:屏蔽頁面只能阻止抓取,不能解决索引問题。重复内容更适合用 canonical 或 noindex 處理。
- 更新後观察日誌:修改規則後,看蜘蛛對 robots.txt 的請求狀態,以及後續對目标目錄的抓取是否恢复。
用工具和日誌驗證,不要只看規則文本
規則寫完後,最好用搜尋资源平台提供的 robots.txt 測試工具,輸入几個代表性 URL,看是否被允许抓取。也可以直接在浏览器里訪問 robots.txt,確認返回的是纯文本、狀態碼正常,而不是被 CDN 缓存成舊版本,或者被 WAF 拦截成 403。
服務器日誌里,蜘蛛請求 robots.txt 的频率和狀態碼值得關注。如果長期返回 5xx,蜘蛛可能降低抓取频率;如果返回 404,則相当于告诉蜘蛛没有規則,預設可以抓取。規則更新後,可以對比更新前後的抓取量,確認屏蔽和放開是否按预期生效。
robots.txt 只影响遵守規則的蜘蛛。真正需要保護的内容,應该放在登入之後或使用其他訪問控制手段,而不是依赖 Disallow。
什么时候不该動 robots.txt
如果站点结构稳定、蜘蛛抓取正常、日誌中没有異常,就不需要频繁修改。每次改動都可能带来新的誤伤,尤其是在多域名、多語言、多子目錄的站点上。把規則保持简洁,只屏蔽确實不需要抓取的路径,反而更容易维護。
小结
robots.txt 自查的重点不是“寫得越多越好”,而是確認该抓的没被拦、该拦的确實拦住。定期检查規則、測試代表性 URL、结合日誌观察蜘蛛行為,就能避免几行文字把正常抓取挡在门外。