在站点运营的日常里,robots.txt 往往是被改得最随意、也最容易被忘记的文件之一。它不像頁面内容那样天天看,但只要某次临时维護时随手寫了一句屏蔽規則,事後又没有清理,就可能在很長一段時間里影响蜘蛛對整站的抓取。這份自查清單围绕“規則有没有寫對、有没有真的生效”展開,不涉及任何效果承诺。
先確認文件本身能被正常訪問
robots.txt 有明确的路径要求:必须放在域名根目錄下,也就是 /robots.txt,而不是某個子目錄或二級路径。检查时重点看三件事:返回狀態碼是不是 200;内容類型是不是纯文本;有没有被重定向到別處。如果服務器對它返回 404,多數搜尋引擎會按“没有限制”處理,但你可能會誤以為自己一直控制着規則;如果它被 301 到站内其他地址,部分蜘蛛會跟随,部分不會,结果就變得不可预期。
Disallow 是最容易誤伤的指令
Disallow 采用的是前缀匹配。也就是说,你寫下的路径只要是被請求地址的開头部分,就會被挡住,這個特性经常被低估。
- Disallow: / 表示全站禁止抓取。维護期間加上它、事後忘记刪除,是影响面最大的寫法之一。
- Disallow: /tmp 不只挡住 /tmp 目錄,也會挡住 /tmp-report、/template 這類同前缀路径。
- 只想挡住某個具体頁面时,寫成目錄形式會让范围扩大,務必逐條確認實际影响到的地址。
- 已经刪除的規則最好一並清理,避免規則列表越堆越長,维護时看不清谁在起作用。
通配符與结尾符要寫准位置
星号匹配任意字符,美元符号表示地址结尾。例如用星号加參數名可以挡住带參數的打印頁,用结尾符可以精确挡住某類後缀文件。位置寫错时,要么范围被放大,把正常栏目一起挡掉,要么范围過窄,等于没寫。寫完建议拿實际地址在測試工具里逐條比對。
Allow 與 Disallow 同时命中时怎么處理
当一條地址同时符合 Allow 和 Disallow 时,多數引擎遵循“匹配長度更長的那條優先,長度相同时 Allow 優先”的規則。這套逻辑在需要放開某個子目錄时很有用,但不同引擎的實現细节並不完全一致。稳妥的做法是:規則尽量寫得直白,避免依赖過于绕的優先級判断,並在變更後用官方測試工具確認结果符合预期。
Sitemap 與 Crawl-delay 的注意事項
- Sitemap 指令要寫完整的绝對地址,一行一條,可以指向 XML 站点地图,也可以指向站点地图索引文件。
- 地址寫错、寫成本地路径或指向已下线的文件,等于白寫一條,建议定期点開確認可訪問。
- Crawl-delay 的支持度有限,不同引擎對待方式不同,不适合当作限速的主要手段,服務器压力問题更适合從缓存、並發和资源体积上解决。
不要顺手把静態资源一起挡掉
有些站点為了省抓取预算,會把样式表、脚本、图片目錄整片屏蔽。這在纯文本抓取年代問题不大,但現在渲染頁面时需要這些资源才能還原真實版式。如果确實要限制,建议分清哪些资源影响頁面呈現、哪些只是統計或临时文件,分別處理,而不是一刀切。
規則改動的上线流程
- 在本地或測試环境寫好新版本,逐條對照實际目錄结构確認路径拼寫。
- 用搜尋引擎官方提供的 robots.txt 測試工具跑一遍,輸入几個關键地址看判定结果。
- 上线後观察服務器日誌,確認被挡目錄的請求确實减少、應放開的目錄仍有正常抓取。
- 保留歷史版本或改動记錄,出問题时能快速回退到上一版。
用日誌確認規則真的生效
規則改動後最直接的反馈来自訪問日誌。可以關注两点:一是原本被屏蔽的目錄是否還在收到請求,如果仍在,可能是缓存、CDN 层或規則未生效;二是正常栏目的抓取是否出現異常下降,如果出現,要回头检查是不是某條新規則誤伤。把日誌和規則文件對照着看,比凭印象判断可靠得多。
robots.txt 的作用是表達抓取意愿,不是控制收錄结果的手段。規則寫得越克制、越具体,後續排查成本就越低。
建议把 robots.txt 纳入站点的定期巡检項,和站点地图、狀態碼分布一起看。每次改動前先問一句:這條規則會影响哪些地址,改動後從哪里能驗證。养成這個习惯,能避免很多事後才發現的問题。