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 成本很低,影响面却很大。改前先备份一份,改完用日志验证,比出问题之后再回头排查要省事得多。