robots.txt 大概是站点里最小的文件之一,却直接决定蜘蛛能走到哪些地址。它语法简單,但改错一行就可能让大片栏目收不到抓取請求。把它当成一次例行自查,比等到抓取資料掉了再回头翻记錄要省事得多。
第一步:確認文件本身能被正常拿到
先看最基础的三件事:能否通過 https://你的域名/robots.txt 直接打開、返回狀態碼是否為 200、内容是不是纯文本。返回 404 时,蜘蛛會按“没有限制”處理,同时你也失去了這個指令入口;返回 200 但顯示的是首頁 HTML,多半是服務器重寫或 CDN 缓存出了問题,這種“假文件”比 404 更不容易被發現。
- 文件放在域名根目錄,子目錄里的同名文件不會被标准爬虫讀取。
- 文件名固定為 robots.txt,注意大小寫。
- 確認 CDN 没有缓存舊版本,改完規則後先看线上内容是否已更新。
- 測試站、预發布站建议整站禁止抓取,避免與正式站内容重复。
第二步:逐條讀規則,而不是只看有没有寫
很多問题不是“忘了寫”,而是“寫了但寫偏了”。把文件從头到尾讀一遍,逐條確認它挡住的是你本来就不想被抓的地址。
容易寫错的几處
- Disallow: / 上线測試後忘记刪除,全站抓取被直接掐断。
- 通配符和结尾符使用不当,例如 /search 與 /search* 覆盖的范围並不一样。
- 把 CSS、JS 目錄一並屏蔽,蜘蛛拿不到渲染所需资源,對頁面的理解會打折扣。
- 為了挡參數而屏蔽带問号的地址,结果把分頁或正常功能路径一起挡掉。
- Allow 與 Disallow 規則互相重叠,指望爬虫自行判断優先級,不如把規則寫得更明确。
第三步:分清它和 meta robots、X-Robots-Tag 的分工
robots.txt 管的是“要不要来抓”,meta robots 标簽和 HTTP 头里的 X-Robots-Tag 管的是“抓到了要不要收錄、要不要跟随連結”。两者常被混為一谈。
如果某個頁面既不想被抓取、又不想出現在结果里,只寫 robots.txt 往往不够:爬虫看不到頁面内的 noindex,反而可能因為外部連結把它收錄成一條没有摘要的记錄。需要彻底排除时,通常的做法是允许抓取,再让頁面返回 noindex。
记住一句话:robots.txt 是抓取层面的门禁,收錄层面的開關在頁面和响應头里。
第四步:Sitemap 声明與抓取节奏
可以在文件末尾用 Sitemap 指令指向站点地图的完整地址,方便蜘蛛發現入口。需要注意的是,Sitemap 里提交的地址如果大范围被自己屏蔽,两邊會互相矛盾,這时先改哪一邊就要想清楚。
至于 Crawl-delay,只有部分爬虫支持,主流搜尋引擎基本已经忽略。與其限制抓取频率,不如先解决服務器响應時間,那才是抓取预算被消耗的主要原因。
第五步:改完必须做的驗證
- 用搜尋引擎官方提供的 robots.txt 測試工具,輸入具体 URL 查看是否被允许。
- 挑重要栏目頁、詳情頁、静態资源各测一次,不要只看首頁。
- 修改後连續观察几天的抓取日誌與抓取統計,確認目标目錄仍有訪問记錄。
- 保留修改前的备份和一句话說明,萬一出問题能快速回滚。
把 robots.txt 当成一個會長期變化的配置文件来對待:每次調整栏目结构、上线新目錄、临时屏蔽測試环境时,都顺手過一遍這几條,往往就能避開大部分麻烦。