robots.txt 是爬虫訪問一個站点时最先請求的文件之一。對蜘蛛池来说,入口頁本身就是為了让蜘蛛發現連結,如果這份文件寫错,等于在门口挂了一块“不欢迎”的牌子。它不复杂,但几個字符的差別就可能把想請的蜘蛛挡在外面,或者把不该放行的路径全部敞開。
蜘蛛先讀 robots.txt,再决定抓什么
主流搜尋引擎爬虫在抓取一個域名前,會先請求 /robots.txt。文件里按 User-agent 分组,每组下面寫 Allow 和 Disallow 規則。同一個 UA 有多條規則匹配同一路径时,一般按“最長匹配優先”判断,長度相同时 Allow 優先。不寫 User-agent 或者用 *,表示對所有爬虫生效。
需要注意,robots.txt 只是一種约定,不是訪問控制。它挡不住恶意采集,也不决定頁面是否被索引——想让頁面彻底不出現,還得配合 noindex 或狀態碼處理。
三種常见寫法與它們的後果
全站 Disallow
測試环境遗留的 Disallow: / 被带到正式入口頁上,是最常见的低級错誤。蜘蛛仍然可能訪問首頁拿到文件,但讀到規則後就不再深入抓連結,入口頁里的外鏈自然拿不到發現机會。
屏蔽參數與後台路径
入口頁如果带篩選參數、分頁參數,或者站内有搜尋、登入、後台這類路径,用 Disallow 把它們排除掉是合理的。這样可以把有限的抓取配額留给真正想被發現的頁面。
声明 Sitemap
在文件末尾寫上 Sitemap: 並给出完整 URL,相当于给蜘蛛多一條發現路径。它不是必须的,但對收錄慢的站点算是一個低成本的补充。
几個容易踩的坑
- 通配符用反了:* 匹配任意字符,$ 表示结尾。寫 Disallow: /*? 想屏蔽參數,结果可能把带問号的正常頁面一起挡住。
- 忘记 Allow 兜底:寫了一大段 Disallow 又想在中間放行某個目錄,必须顯式寫 Allow,否則不會自動開放。
- 路径寫错层級:robots.txt 只對同級及以下目錄生效,放在子目錄里對整站無效。
- 返回狀態異常:返回 404 通常被视為無限制;返回 5xx 时蜘蛛一般會暫停抓取,反复 5xx 可能压低抓取频率。
- UA 名字寫错:不同爬虫的 UA 标识不同,名字寫错規則不會生效,需要按爬虫分別設定。
- 把它当收錄開關:屏蔽抓取不等于刪除已收錄頁面,這两件事经常被混為一谈。
一份可以照着走的检查清單
- 直接在浏览器訪問 /robots.txt,確認返回 200 且内容是最新版,不是舊缓存或 CDN 上的舊文件。
- 通讀一遍,找出有没有 Disallow: / 這類全站屏蔽的残留。
- 確認想被發現的目錄、入口頁所在路径没有被誤挡。
- 確認參數頁、後台、搜尋结果頁等低價值路径已被排除。
- 检查通配符和结尾符号是否符合本意。
- 如果啟用了 Sitemap 声明,確認地址可訪問、内容可解析。
- 改動後观察一段時間日誌,看蜘蛛請求量和抓取路径是否按预期變化。
別把它当成收錄開關
robots.txt 影响的是“能不能抓”,而抓取只是收錄鏈條里的一环。抓到了不代表一定收錄,收錄了也不代表有排名。把入口頁的連結结构、内容质量和更新节奏一起處理好,比反复修改 robots.txt 更實际。改完记得留一份版本记錄,出問题时能快速回滚。
提醒:任何規則調整後都建议先小范围驗證,再全站應用,避免一次改動把入口頁的抓取路径全部切断。