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: /pDisallow: / 更具体,所以 /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