robots.txt 配置详解:掌握搜索引擎爬虫规则
robots.txt 是放在网站根目录的纯文本文件,用来告诉搜索引擎爬虫"哪些内容可以抓取、哪些内容不要抓"。它不会直接提升排名,却是SEO 优化中最基础的一环:配置不当,轻则浪费抓取配额,重则让重要页面无法被收录。本文以 Google Search Central 官方规范(RFC 9309,即 REP 协议)为准,从放对位置讲起,到给 AI 爬虫单独立规矩,给出可以直接抄的配置。
文件位置与基本格式
robots.txt 必须放在网站的顶级目录,且 URL 大小写敏感。有效的文件地址形如 https://example.com/robots.txt,只对该主机、协议和端口生效——www.example.com 的 robots.txt 管不到 example.com,http 与 https 之间也不通用。文件需为 UTF-8 编码的纯文本,每行以换行符分隔;Google 会忽略无法解析的行,文件大小上限为 500 KiB。
放好后可以先验证能不能被公开访问:
curl -s https://example.com/robots.txt
如果返回 404,说明文件没放对位置(常见原因是放在了子目录,或静态资源服务器没配置)。最简单的格式如下:
User-agent: *
Disallow: /admin/
Allow: /public/
Sitemap: https://example.com/sitemap.xml
核心字段与一个完整示例
四个核心字段先理清楚:
- user-agent:指定规则适用于哪个爬虫,字段名和值都不区分大小写。
*表示所有爬虫。 - disallow:禁止抓取的路径。注意 robots.txt 只阻止"抓取",并不阻止"收录"。
- allow:允许抓取的路径,用于在大范围屏蔽的前提下放行个别目录。
- sitemap:声明站点地图的绝对地址,与 user-agent 无关,所有爬虫都可跟随。
一个典型的博客站配置,既屏蔽后台和搜索页,又单独放行渲染所需的资源:
User-agent: *
Disallow: /wp-admin/
Disallow: /wp-includes/
Disallow: /?s= # 站内搜索结果页
Allow: /wp-admin/admin-ajax.php
Sitemap: https://example.com/sitemap.xml
规则是逐条累积的:同一个 user-agent 下,后面的规则继续叠加,没有"后面的覆盖前面"的说法,冲突时按"最具体规则优先"处理。
通配符、优先级与匹配细节
Google、Bing 等主流搜索引擎支持有限通配符:* 匹配任意字符,$ 表示网址结束。几个直观的例子:
| 规则 | 是否匹配 /page |
说明 |
|---|---|---|
Disallow: /p |
匹配 | 前缀匹配,也会拦 /page.html |
Disallow: /page$ |
匹配 | $ 表示网址到此结束 |
Disallow: /*?* |
不匹配 | 匹配含 ? 的参数页 |
Disallow: / |
匹配 | 全站屏蔽 |
匹配采用"最具体规则优先":Allow: /p 比 Disallow: / 更具体,所以 /page 会被允许。当两条规则具体程度相同且冲突时,Google 采用限制性最弱的那条。还要记住:匹配区分大小写,/fish 会命中 /fish.html、/fish/salmon.html,但不会命中 /Fish.asp。
几个常见组合示例
不同场景对应的配置套路:
- 只让 Google 抓取:
User-agent: Googlebot+Allow: /,其余爬虫Disallow: /。适合内测站点或只希望 Google 收录的场景,但要清楚这也会拦住 Bing 的流量。 - 临时全站屏蔽:
User-agent: *+Disallow: /。适合站点还在搭建、不想被收录时用;上线后记得删掉,否则整个站都不会被抓取。 - 屏蔽参数页:
Disallow: /*?*。对电商筛选、站内搜索这类会产生大量 URL 的站点有用,但要小心:如果正常页面也依赖?参数,会被一并误伤,改之前先统计一下 URL 形态。
一个容易被忽视的点:robots.txt 里的 Crawl-delay 指令对 Google 和 Bing 都已经不再生效,想控制抓取频率应该通过服务器端的抓取统计、站点地图更新频率等间接手段,而不是指望这个字段。
把 AI 爬虫和搜索引擎分开管
现在站点除了搜索引擎,还要面对 GPTBot、ClaudeBot 这类 AI 抓取程序。它们默认的 user-agent 各不相同:
| 爬虫 | user-agent | 用途 |
|---|---|---|
| Googlebot | Googlebot |
Google 搜索 |
| bingbot | bingbot |
Bing 搜索 |
| GPTBot | GPTBot |
OpenAI 训练/检索 |
| ClaudeBot | ClaudeBot |
Anthropic 训练/检索 |
| CCBot | CCBot |
Common Crawl |
如果你不想让内容被拿去训练,可以在文件里单独声明:
User-agent: GPTBot
Disallow: /
User-agent: ClaudeBot
Disallow: /
想了解 robots.txt 与 llms.txt 如何配合、要不要给 AI 提供结构化入口,可以参考robots.txt 与 llms.txt 配置指南。
robots.txt 与 noindex 的区别
这是最容易混淆的一点:robots.txt 禁止抓取不等于禁止收录。Google 仍可能根据其他网页上的链接把网址编入索引,只是不抓取正文。若希望页面完全不进入搜索结果,应使用 noindex 元标签,或通过响应头声明:
X-Robots-Tag: noindex
两者分工的完整流程可看网站收录优化全流程。
常见错误
- 想用 robots.txt 下架页面:它挡不住收录,页面可能只显示标题和摘要,反而更难处理;正确做法是 noindex 或 404。
- 把 CSS/JS 一起屏蔽:早期常见,现在会连累渲染型内容抓取,改了之后记得用 URL 检查工具复查。
- 大小写写错:
/Admin和/admin是两个路径,屏蔽可能不生效。 - 忘了
Sitemap:声明:站点地图随手放在 robots.txt 里,是成本最低的提交方式之一。
修改后如何验证
改完 robots.txt,先 curl 确认能访问,再到 Google Search Console 的 robots.txt 测试器里逐条验证规则,最后在Google Search Console的抓取统计页观察一段时间。想系统性排查其他抓取问题,可以对照技术 SEO 检查清单逐项过一遍。
参考:Google robots.txt 规范 https://developers.google.com/search/docs/crawling-indexing/robots/robots_txt;RFC 9309(REP 协议)https://www.rfc-editor.org/rfc/rfc9309