robots.txt 只是约定,不是强制

工具相关 ·

在 robots.txt 里写下 Disallow: /admin/,后台目录就安全了吗?答案是否定的。这个文件的性质是「约定」而不是「访问控制」——正规搜索引擎会遵守,但任何不打算遵守的程序都可以直接忽略它。把安全寄希望于 robots.txt,是一个常见且危险的误解。

协议的性质

robots.txt 是搜索引擎行业自发形成的约定,用来让站长表达「哪些内容不希望被抓取」。

它没有任何强制力。爬虫程序在访问网站之前,会先读取根目录的 robots.txt,然后按里面的规则决定是否抓取某个地址。这个流程完全依赖爬虫的自觉——它可以选择不读这个文件,也可以读了之后不遵守。

主流搜索引擎都遵守这个约定,因为它们的业务依赖网站生态的良性运转,破坏规则会损害自身信誉。但恶意采集程序没有这个顾虑,它们的目标就是尽可能快地抓取内容,忽略 robots.txt 是常规操作。

三个由此产生的注意事项

第一,敏感目录必须配合真正的访问控制。

后台登录页、数据库备份文件、配置文件、日志目录,这些内容绝不能只靠 robots.txt 保护。正确的做法是加登录鉴权、IP 白名单、或者干脆不把这些文件放在 Web 可访问的目录下。

robots.txt 在这里的作用只是「减少被搜索引擎索引的机会」,它不能替代权限控制。这两个目标是不同的:前者是 SEO 层面的礼貌请求,后者是安全层面的硬约束。

第二,不要在 robots.txt 里写出不想让人知道的路径。

这一点很多人会忽略。robots.txt 本身是公开可读的——任何人都可以访问 https://example.com/robots.txt 并看到全部内容。

所以如果你写了 Disallow: /backup-2026/,实际上等于向全世界公告「这个目录存在,里面可能有备份文件」。攻击者拿到这个线索,可以直接去尝试访问。

这是一个反直觉的结论:屏蔽某个路径,等于公开这个路径的存在。如果某个目录真的不应该被访问,正确做法是让它无法被访问(返回 404 或要求认证),而不是在 robots.txt 里列出它。

第三,屏蔽 AI 爬虫只能拦住声明身份的爬虫。

近年来很多站长希望在 robots.txt 里禁止 AI 训练抓取,做法是对 GPTBot、CCBot、ClaudeBot、Bytespider 这些 User-agent 分别写 Disallow: /。

这个做法对声明身份的正规爬虫有效——它们会按 User-agent 匹配规则决定是否抓取。但对于伪装成普通浏览器 User-agent 的采集程序,robots.txt 完全无能为力,因为规则匹配的前提是爬虫如实申报自己是谁。

要真正限制这类访问,需要从服务端入手:识别异常访问模式、做速率限制、对可疑请求返回验证页面。

它真正擅长的事

虽然不能当安全手段,robots.txt 在它本来的用途上依然有效。

减少无效抓取。屏蔽搜索结果页、购物车、结算流程、带参数的筛选页,可以让搜索引擎把抓取配额用在真正有价值的页面上。这对抓取预算有限的中大型站点有明显收益。

避免重复内容被索引。带 ?orderby=、?sort= 这类参数的地址往往指向同一批内容的不同排序,屏蔽它们可以减少重复索引。

声明 sitemap 位置。在 robots.txt 里用 Sitemap: 行声明站点地图地址,是最简单有效的提交方式。

这些用途的共同点是:它们都依赖搜索引擎的自觉配合,而搜索引擎在 SEO 这件事上确实愿意配合。所以 robots.txt 在 SEO 范畴内是有效工具,在安全范畴内不是。

检查清单

  • robots.txt 是行业约定,正规搜索引擎遵守,恶意程序会忽略
  • 后台、备份、配置文件必须配合鉴权或 IP 限制,不能只靠 robots.txt
  • robots.txt 公开可读,写进去的路径等于对外公告其存在
  • 屏蔽 AI 爬虫只对声明身份的爬虫有效,伪装 UA 的采集不受约束
  • 它在减少无效抓取、避免重复索引、声明 sitemap 上确实有效
  • 区分「SEO 层面的请求」与「安全层面的控制」,不要混用
阅读 10