robots.txt 是站点给爬虫的第一份說明书,寫错一行,可能让一批頁面從抓取队列里消失。它本身並不复杂,但正因為简單,很多站点上线之後几年都没再打開看過。這篇文章整理的是一份自查思路,重点在確認現状、排除誤伤,而不是追求什么高級技巧。
先確認文件能被正常讀到
robots.txt 只能放在主域名的根目錄,路径固定為 /robots.txt。放在子域名或二級目錄下的同名文件是不生效的。自查时先用浏览器直接訪問,確認返回狀態碼與内容類型。
- 返回 404,等于没有任何規則,爬虫預設可抓全站。這不算错,但你也失去了统一管理抓取的地方。
- 返回 5xx,多數爬虫會按“暂时拿不到”處理,可能在一段時間内變得保守;反复出現還可能被当成服務器不稳定。
- 返回 200,但内容是 HTML(被错誤頁或前端路由接管),規則實际上等于没寫。
規則顺序與通配符
Allow 和 Disallow 谁優先
当 Allow 與 Disallow 匹配的前缀長度相同时,實現上通常 Allow 優先,但更稳妥的做法是不让規則互相打架。把最具体的路径寫在前面,通用屏蔽寫在後面,讀起来一目了然,日後维護也不容易改错。
通配符不是谁都認
* 和 $ 属于扩展语法,主流搜尋引擎支持,但一些小众爬虫可能只按字面理解。如果你的規則依赖這些符号做精确匹配,建议同时保留一條更保守的寫法,避免出現“你以為屏蔽了、其實没屏蔽”的情况。反過来,如果只是想屏蔽某個确定路径,就不必引入通配符,简單寫法更难出問题。
三個容易誤伤的寫法
- Disallow: / 之後忘了补 Allow,整站被挡。上线前務必用搜尋平台的抓取測試工具跑一遍。
- 屏蔽带參數的路径时寫得太宽,例如 Disallow: /*? 會把正常的分頁、排序一並挡掉,列表頁里的深层内容就更难被發現。
- 屏蔽目錄却没寫结尾斜杠,寫成 /tag 會连 /tags、/tag-cloud 這類同前缀路径一起命中,寫成 /tag/ 才更接近本意。
和站点地图、canonical 對齐
robots.txt 里通常會寫一行 Sitemap,指向站点地图地址。自查时要確認這個地址可訪問、内容較新,並且地图里列出的頁面没有被 robots.txt 自己挡掉——這種自相矛盾的情况並不少见。同时留意那些 canonical 指向別處的頁面:如果它們被大量抓取,可以在梳理清楚後考虑是否值得屏蔽,把抓取引向真正的首選地址。
一份可执行的自查清單
- 浏览器直连 /robots.txt,確認狀態碼與返回内容。
- 在搜尋平台後台用抓取測試驗證几個關键地址:首頁、栏目頁、詳情頁,以及一個被屏蔽的測試地址。
- 把規則逐行讀一遍,给每條規則标注它想解决的問题,找不到理由的規則考虑删掉。
- 確認 Sitemap 地址可用,且與 robots 規則不冲突。
- 记錄修改時間與修改人,改動後观察一到两周日誌里的抓取變化。
- 如果站点走了 CDN,確認 robots.txt 没被缓存成舊版本,必要时為它單獨設定較短的缓存時間。
robots.txt 的作用是告诉爬虫哪些不必来,而不是让頁面被收錄。它能把抓取引向有價值的地址,也能在一夜之間把整站挡在门外,所以每次改動都值得留個记錄、留個回滚方案。