先弄清楚 robots.txt 的權限邊界
robots.txt 是放在站点根目錄下的纯文本文件,用来告诉遵守协议的爬虫「哪些目錄不必来抓」。它有三個常被誤解的地方:第一,它只是建议,不遵守协议的采集程序照样會来;第二,它不能用来保護隐私或封住後台,真正的權限要靠登入態和 IP 限制;第三,它是「不要抓」,不是「不要收錄」——頁面已经被收錄时,光加一條 Disallow 並不會让它從搜尋结果里消失,蜘蛛抓不到頁面,反而看不到頁面上寫着的 noindex 指令。
想把頁面從索引里拿掉,顺序應当是:先保持可抓、加上 noindex,等它從索引中消失後,再考虑是否屏蔽。
最容易踩的几類配置错誤
- 整站屏蔽:測試环境的配置被顺手带到线上,只留下一句 Disallow: /,蜘蛛會安静地停止抓取。表現通常是索引量缓慢下滑,而不是立刻报错,所以很难第一時間發現。
- 誤伤渲染资源:把 /js/、/css/、/static/ 一起屏蔽,蜘蛛能拿到 HTML 却拿不到样式和脚本,渲染结果可能是空白或错版,與用戶看到的差別很大。
- 規則過于宽泛:Disallow: /*? 會连带挡掉所有带參數的地址,包括有收錄價值的分頁與詳情頁;Disallow: /search 也可能誤伤 /search-guide 這類正常栏目。
- 大小寫與路径寫错:robots.txt 中的路径区分大小寫,/Admin/ 與 /admin/ 不是一回事,寫错等于没屏蔽,或者屏蔽了不该動的目錄。
- 通配符堆得過密:* 和 $ 能提高精度,但同一行里堆三四個之後,几個月後没人能讀懂這條規則到底放行了什么。
規則冲突时谁说了算
同一目錄既被 Disallow 覆盖、又有 Allow 指向其中某個子路径时,多數主流蜘蛛按「最長匹配優先」處理;路径長度相同时,Allow 通常優先。也就是说,從屏蔽目錄里單獨放行一個子路径在技術上可行,但不要把這種技巧当成日常手段,規則越少、越直白,將来越好维護。改完之後,用各搜尋引擎提供的 robots 測試工具跑几個關键 URL,確認放行和屏蔽都符合预期,而不是凭感觉判断。
狀態碼直接决定蜘蛛怎么理解這個文件
- 返回 200 且内容正常:按文件中的規則执行。
- 返回 404 或其他 4xx:多數蜘蛛视為「没有任何限制」,全站可抓。測試站誤删文件时就属于這種情形。
- 返回 5xx 或连接超时:主流蜘蛛會暫停抓取,過一段時間再试。這個窗口期偏長,期間新頁面基本不會被發現。
因此它是一個值得监控的關键文件。不要让它依赖後端應用實时生成,也不要放在需要登入、會被 WAF 拦截、或者随每次發版抖動的路径後面。放在 CDN 上时,確認缓存策略不會让舊版本長期生效——這類問题在排查抓取異常时经常被漏掉。
Sitemap 声明只是提供线索
很多站点會在這里用 Sitemap 指令声明地图地址。有两個细节值得注意:一是必须寫完整的绝對地址,带上协议和域名;二是分片地图要逐一列出,別只寫一個索引文件,却指望蜘蛛自己把子文件都找全。声明只是给出發現路径,並不等于收錄,蜘蛛仍會按自己的节奏和预算决定抓多少。
上线前後的自查清單
- 文件能直接訪問,返回 200,内容類型為纯文本。
- 没有 Disallow: / 這類整站屏蔽残留,測試环境配置未被同步到线上。
- 關键 CSS、JS、图片目錄處于放行狀態,頁面渲染不受影响。
- 規則中用到的通配符有注释說明,每次改動都有记錄可查。
- 需要從索引移除的頁面走 noindex 流程,而不是先屏蔽了事。
- Sitemap 指令為绝對地址,分片文件齐全且互相一致。
- CDN 與缓存层不會長期返回舊版本文件。
- 改動後一到两周复查日誌,確認關键目錄仍有正常抓取。
robots.txt 通常只有几行,却决定了蜘蛛眼里的站点有多大。把它当作一份需要版本管理的配置文件,每次改動前後都驗證一次,比等到索引量出現異常再回头排查要省事得多。