robots.txt 是放在站点根目錄下的一個纯文本文件,作用是告诉爬虫哪些路径可以抓、哪些先別抓。它不负责收錄與排名,只影响抓取行為。很多站点的問题不是出在内容上,而是這個文件寫歪了:要么挡掉了 CSS、JS 這類渲染必需的资源,要么一條通配符把整站大半埋進去,蜘蛛来了只能空手而归。
一、文件位置與基本语法
robots.txt 只能放在域名根目錄,且必须是纯文本,路径固定為 https://example.com/robots.txt。放在子目錄里不會被讀取,寫進 HTML 更無效。文件里常用的字段有四種:
- User-agent:指定這條規則對哪個爬虫生效,* 表示所有未被單獨列出的爬虫。
- Disallow:禁止抓取的路径前缀。
- Allow:在 Disallow 的范围内開一個口子,用于放行某個子路径。
- Sitemap:声明站点地图地址,可以寫多條。
規則是按 User-agent 分组讀取的,每组内部才互相组合。把 User-agent 和規則穿插着乱寫,很容易让爬虫只讀到一半。
二、通配符與優先級
* 匹配任意字符序列,$ 表示路径结尾。比如 Disallow: /*.pdf$ 只挡以 .pdf 结尾的地址,而 Disallow: /*.pdf 會连 /a.pdf.html 一起挡掉。路径是区分大小寫的,/Admin/ 和 /admin/ 不是一回事。
当 Allow 與 Disallow 同时命中一個地址时,通行的判断方式是:規則越具体越優先,也就是匹配路径越長的那條生效;長度相同时 Allow 優先。不同搜尋引擎的實現细节略有差异,寫規則时尽量別依赖邊界情况。
三、几個反复出現的坑
1. 把 CSS、JS、图片整目錄屏蔽
蜘蛛需要抓取這些资源才能理解頁面渲染後的形態。屏蔽之後,它看到的可能是残缺頁面,甚至把一張内容正常的頁面判成空壳。除非你确定该頁面是纯静態 HTML,否則別動静態资源目錄。
2. 想用 robots.txt 阻止收錄
robots.txt 挡住抓取後,爬虫根本看不到頁面上的 noindex。想彻底從索引里去掉,正确做法是允许抓取,再用 noindex 标簽或 X-Robots-Tag 响應头。两者分工不同,別混着用。
3. 用 Disallow: / 測試完忘记改回来
從測試环境整站複製到生产是常见来源。上线检查时,第一件事就是打開生产域名的 robots.txt 看一眼。
4. 依赖 Crawl-delay
主流搜尋引擎早已不支持這條指令,寫了也不生效。想控制抓取频率,更靠谱的是看服務器日誌、评估机器承载能力,再用站長工具里提供的抓取速率設定来調节。
四、上线前後的自查清單
- 訪問域名根目錄的 robots.txt,確認狀態碼為 200,内容是纯文本而非 HTML 报错頁。
- 逐條核對 Disallow 路径,寫的是目錄就补上结尾斜杠,避免誤伤同名前缀的其他目錄。
- 確認没有挡住 CSS、JS、字体、图片所在目錄。
- 检查 Sitemap 地址是否可訪問,是否與真實的站点地图一致。
- 用搜尋引擎官方提供的 robots 測試工具跑一遍關键 URL,看放行與拦截是否符合预期。
- 改動後過几天從日誌里抽查蜘蛛對關键目錄的抓取量,看是否出現異常下滑。
五、分环境與分爬虫的處理
測試站和预發站建议整体屏蔽,但別把 robots.txt 当唯一防线,配上 HTTP 認證或 IP 限制更稳妥。生产环境如果只是不想让某個不重要的爬虫来,單獨寫一條 User-agent 規則即可,別用 * 一刀切,把正規搜尋蜘蛛一起挡在门外。
另外要记住,robots.txt 是公開可讀的文件。不要在里面寫内部路径线索、後台目錄名或临时文件地址,那等于给掃描器指路。
改動 robots.txt 成本很低,影响面却很大。改前先备份一份,改完用日誌驗證,比出問题之後再回头排查要省事得多。