robots.txt 是部署在网站根目录的纯文本协议文件,它为搜索引擎爬虫划定可抓取与应绕开的路径范围。别看文件内容通常只有寥寥几行,一旦配置有误,轻则核心页面迟迟无法收录,重则后台敏感目录被爬虫一览无余。下面就把规则语法、高频率误区和验证方式梳理清楚。
这个文件本质上是一份给爬虫看的访问许可清单,由多个规则块构成。每一个块都以 User-agent 开头,后接 Disallow 或 Allow 指令。一个最直观的示例:
User-agent: *
Disallow: /admin/
这代表所有搜索引擎的爬虫都被禁止进入 /admin/ 目录。这里有两个非常容易踩的坑:其一,有人习惯把完整域名写在 Disallow 后面(例如 Disallow: https://example.com/admin),但规范要求只写路径部分;其二,路径是区分大小写的,/Admin/ 与 /admin/ 会被视为两个完全独立的地址,必须保持大小写一致。
不同阶段、不同结构的网站,面临的配置挑战各不相同。下面三个场景基本覆盖了绝大多数应用需求。
网站处于开发或维护阶段时,往往需要临时阻断全部抓取。此时应当写成:
User-agent: *
Disallow: /
需特别留意,这一行与 Disallow:(冒号后不写任何内容)表达的意思完全相反。前者是禁止抓取根目录下的一切内容,后者则恰恰表示允许访问全部路径。不少运营者将两者混淆,导致网站正式上线后迟迟得不到收录,排查半天才发现是规则写反了。
假设你希望爬虫避开 /private/ 目录,但 /private/sample/ 下的示例页面必须正常收录。仅仅配置一条 Disallow 规则远远不够,还需要显式补充 Allow:
User-agent: *
Disallow: /private/
Allow: /private/sample/
很多人误以为 Allow 会自动覆盖更具体的路径,然而实际匹配遵循“最长匹配优先”的原则。若不追加 Allow 这一行,/private/sample/ 会随父目录一同被屏蔽。判断要点非常清晰:只要某个子目录需要特例放行,就务必单独为其写一行 Allow 指令。
Googlebot、Bingbot 与百度蜘蛛对指令的解读大体一致,但部分小众爬虫并不识别 Allow 指令。相对稳妥的做法是先通过 User-agent: * 设定一套兜底策略,再针对特定引擎追加独立规则块。同时要注意:每个 User-agent 块应当彼此独立,不要在同一块里反复声明同一个爬虫,否则后写的规则会覆盖之前的定义,导致结果难以预判。
配置完成后,必须经过验证才能确认生效。常用的手段包括在浏览器地址栏直接访问 /robots.txt,检查文件是否正常返回且内容无误;也可以借助搜索引擎官方的抓取工具,例如 Google Search Console 的“网址检查”功能,查看该工具视角下的抓取权限判断。若发现规则未按预期执行,优先核实文件编码是否为 UTF-8,并确认文件中不存在多余空格或不可见字符。一个常见反面案例是,文件中夹杂了 BOM 头或全角字符,导致爬虫在解析首行规则时直接报错,整份规则被忽略。
应当明确的是,robots.txt 仅是一种君子协定,并非强制安全屏障。它无法阻止恶意爬虫或数据采集程序,因此涉及密码、支付、用户隐私的路径,绝不能仅靠 robots.txt 保护,必须配合更严格的服务器访问控制。与此同时,不要将 robots.txt 当作控制页面收录的唯一手段——noindex 标签在阻止索引方面往往更可靠,而 robots.txt 更适合用来节省抓取配额,让爬虫把资源集中在更需要收录的页面上。
文件必须放置在网站根目录下,且文件名强制为小写的 robots.txt。例如,对于 www.example.com,正确访问地址是 www.example.com/robots.txt。若存放于子目录或不遵循命名要求,爬虫将无法识别。
按照业界通行的最长匹配原则,URL 字符串匹配长度更长的规则优先生效。因此,在 Disallow: /private/ 与 Allow: /private/sample/ 并存时,/private/sample/ 会获得放行权限。建议在编写时尽量让规则路径完整明确,避免依赖模糊匹配带来的歧义。
搜索引擎对 robots.txt 的抓取与缓存刷新存在时间差,短则数小时,长则数天。频繁修改文件并不会加速更新,反而可能让爬虫陷入反复抓取的状态。建议在修改完成后,通过站长平台主动推送或检查工具触发一次更新即可,接下来耐心等待。
配置 robots.txt 前,先梳理网站的目录结构与收录优先级,明确哪些路径必须开放、哪些需要封锁。将规则写好后,利用在线验证工具逐条核对匹配结果,并确保文件编码与格式干净无杂质。记住,这份文件只是引导爬虫的参考,真正的数据安全防护还需服务器权限与安全插件协同完成。定期复查规则内容,避免因功能调整导致误屏蔽或误放行。