robots.txt 配置指南:语法细节与常见避坑要点

📍 WDQWDWQD987AAAAA:216.73.216.188
📱 Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
🔗 /a5629f2d2b8d.html
📄

robots.txt 是放置在网站根目录下的纯文本文件,用来向搜索引擎爬虫说明哪些路径可以抓取、哪些需要避开。它不直接决定页面是否被收录,而是管理抓取行为。配置合理能提升抓取效率,让新内容更快被发现;配置不当则可能阻碍收录,影响搜索表现。下面从语法、优先级到典型场景逐一拆解,帮助你避免踩坑。

1. 先认清角色:它只是"建议",不是"命令"

robots.txt 本质上是写给爬虫看的访问协议,告知哪些区域允许进入。对于遵守规范的搜索引擎(如 Google、Bing 的官方爬虫),这份文件会被严格执行;但对于恶意采集程序或未遵循协议的工具,它形同虚设。因此,涉及用户隐私、支付流程、后台管理等高敏路径,必须依靠登录验证、IP 白名单等强硬手段保护,不能仅依赖 robots.txt。

另一个常见误解是"写了 Disallow 就等于不被收录"。实际上,robots.txt 阻止的是"抓取",而不直接控制"索引"。若其他网站链接了该页面,搜索引擎仍可能根据锚文本等信息将其纳入索引,只是无法抓取内容。想彻底阻止页面出现在搜索结果中,应在页面 HTML 中加入 noindex 元标签,这才是针对索引的直接控制。

举例:某电商网站用 Disallow: /cart/ 屏蔽购物车页面,但结算页 /checkout/ 仍应保持可抓取,同时用 noindex 防止被纳入索引。这种"抓取与索引分离"的思路,在配置时需要分清。

2. 语法要点:字段、通配符与优先级

robots.txt 由若干条规则组构成,每组以 User-agent 开头。书写格式固定为"字段名: 值",建议冒号后保留一个空格,字段名统一用小写,这样可以降低不同解析器的兼容性问题。每行只能写一条指令,空行用来分隔不同的规则组。

2.1 User-agent:指定规则适用对象

User-agent 标识这组规则针对哪个爬虫。例如 User-agent: Googlebot 仅对谷歌爬虫生效;User-agent: * 表示适用于所有未被单独指定的爬虫。同一文件可包含多组规则,针对不同爬虫定制差异化策略。注意:若同时存在针对特定爬虫和通配符的规则,特定爬虫会优先匹配自己的专属规则。

举例:百度爬虫(Baiduspider)和谷歌爬虫(Googlebot)对同一路径的抓取策略可能不同,你可以为它们分别配置,互不干扰。

2.2 Allow 与 Disallow:最长匹配原则

Disallow 用于禁止抓取的路径,Allow 用于允许抓取的路径。若 Disallow 后空着不写值,表示解除所有限制,允许全站抓取。当一个链接同时命中允许和禁止规则时,搜索引擎遵循"最长匹配优先":路径更具体、更长的规则获胜。

例如同时存在 Disallow: /api/ 和 Allow: /api/public/,因为后者路径更长、更明确,所以 /api/public/ 下的内容可以被抓取。这个原则在精细化控制时非常实用,可以只放行某个子目录,而屏蔽同一父目录下的其他内容。

此外,通配符支持有限,通用的 * 和 $ 符号($ 表示行尾)在多数主流引擎中有效,但低版本或小众引擎可能不支持,正式环境建议用完整路径代替通配符,减少兼容风险。

2.3 Sitemap 与 Crawl-delay:辅助而非核心

Sitemap 指令用于声明站点地图的 URL,帮助爬虫更快发现新页面,减少探测时间。通常放在文件末尾,如 Sitemap: https://example.com/sitemap.xml。注意:Sitemap 指令不归属于任何 User-agent 规则组,是独立行。

Crawl-delay 字段用于设定两次抓取请求之间的等待秒数,适合服务器并发处理能力较弱的站点,以降低负载。但并非所有搜索引擎都认可此字段,部分爬虫会直接忽略。如果你的站点需要控制抓取频率,建议结合服务器日志观察实际爬取频率,并考虑在 CDN 或服务器层面做限速,而不是完全依赖此参数。

3. 典型配置场景与举例

以下配置范例覆盖常见需求,可直接参照调整路径。

  1. 屏蔽后台管理目录:若后台路径为 /admin/,在规则组内执行 Disallow: /admin/,可减少后台页面的抓取风险。注意:若后台包含登录接口或验证码页面,建议同时使用 noindex 和登录验证,双重保障。
  2. 允许抓取静态资源:图片、CSS、JS 文件通常需要被爬虫抓取,以便渲染页面。可设置 Allow: /assets/ 或 Allow: /*.jpg$,确保静态资源不被误屏蔽。
  3. 临时屏蔽未上线区域:例如测试环境或预售页面,可先用 Disallow: /beta/ 临时隔离,等正式上线后移除该规则,避免遗漏。
  4. 控制抓取配额:当全站页面较多时,可将不重要的筛选参数路径(如 /search?q=)用 Disallow: /search 屏蔽,让爬虫配额集中在核心内容上。

常见避坑:不要用 Disallow 屏蔽整个站点(Disallow: /),除非确实需要暂停抓取;不要把敏感数据路径写进 robots.txt,因为这份文件是公开的,任何人都能查看——它等于告诉别人"这里值得看看"。

4. 验证与维护:上线前必做两步

配置完成后,务必验证文件是否生效。第一步,在浏览器直接访问 https://你的域名/robots.txt,检查内容是否正常返回、有无语法错误。第二步,使用搜索引擎的站长工具(如 Google Search Console 的 robots.txt 测试器或 URL 检查工具)模拟抓取,确认目标页面是否被正确允许或禁止。

日常维护时,可每月检查一次文件,确保新添加的目录或改版的路径未被遗漏。若网站结构频繁变动,建议在发布流程中加入 robots.txt 的审查环节。同时注意文件大小不要超过 500KB,避免内容过多导致解析超时。

5. 常见问题

5.1 robots.txt 能阻止所有搜索引擎收录我的页面吗?

不能。robots.txt 只对遵守协议的搜索引擎爬虫有效,且阻止的是"抓取"而非"索引"。即使禁止抓取,其他网站链接到该页面时,搜索引擎仍可能将其纳入索引(只是无内容可用)。要彻底阻止收录,需配合 noindex 元标签或登录认证。

5.2 Disallow 和 Allow 同时出现时,哪条优先?

遵循"最长匹配优先"原则。例如 Disallow: /api/ 和 Allow: /api/public/ 同时存在时,/api/public/ 下的链接允许抓取,因为该规则路径更长、更具体。若两条规则路径长度相同,则按文件中的出现顺序,后面的生效。

5.3 Crawl-delay 为什么对我的站点不起作用?

Crawl-delay 并非所有搜索引擎都支持,部分爬虫会忽略此字段。若你的服务器负载过高,建议通过服务器日志分析实际抓取频率,并在 CDN 层面配置限速或使用抓取速度控制工具来调整,而不是只依赖 robots.txt。

6. 总结

robots.txt 是管理抓取行为的良好工具,但绝不是安全防线。配置时重点记住三个核心:先分清"抓取"与"索引"的区别,灵活运用 Allow 与 Disallow 的最长匹配原则,并定期验证文件可用性。上线前在站长工具中测试,平时留意路径变化及时更新。对待敏感数据,始终用账号权限或 IP 限制做硬保护,如此配置,才能让爬虫在正确的区域高效工作,又不暴露安全漏洞。

图1 图2

nginx