robots.txt 是网站根目录下一个极为简单的文本文件,它的核心职责是以约定好的指令告诉搜索引擎爬虫:站点里哪些路径允许被抓取,哪些路径应当回避。它本身不具备任何安全防护功能,但在屏蔽非公开目录、节省抓取配额、减轻服务器压力这些方面,却能起到立竿见影的效果。日常维护任何一个网站,掌握这份文件的配置要领都是基本功。
这个文件的语法结构并不复杂,本质上就是把几个固定单词按规则组合在一起。只要把下面几个核心要素理解透彻,绝大多数配置需求都能直接拼装出来。
常见误区:每个 User-agent 分组后面至少要跟随一条 Disallow 或 Allow 语句,否则该分组不会产生任何实际作用。另外务必牢记,这个文件仅对搜索引擎的程序有效,真实访客通过浏览器访问这些路径时不会受到任何限制,涉及隐私或机密的资料绝不能指望靠它来保护。
无论站点规模大小,都建议从一个稳妥简洁的初始版本开始。下面这份基础模板可以当作起步参考。
User-agent: *
Disallow: /cgi-bin/
Disallow: /tmp/
Sitemap: https://www.example.com/sitemap.xml
验证方法与常见错误:上传完成后,直接在浏览器地址栏输入 你的域名/robots.txt,如果页面能够原样显示文件内容,就说明部署成功。新手最容易踩的坑是误写 Disallow: /,这一行会让整站彻底消失于搜索引擎。此外,路径末尾的斜杠一旦遗漏,规则也不会生效,比如 Disallow: /tmp 并不能覆盖 /tmp/ 这个目录下的全部内容。
当站内目录结构日渐复杂时,全放或全挡的做法往往不能满足需求,Allow 指令的价值在此刻就体现出来了。一个很常见的场景是:你打算隐藏整个素材图片库,却希望其中一张品牌宣传图能被搜索引擎收录。
User-agent: *
Disallow: /assets/img/
Allow: /assets/img/brand.png
执行要点:放行规则通常需要配合对应的封锁规则一起使用,单独一条 Allow 单独出现时往往不会达到预期效果。同时要注意路径匹配遵循最长的前缀优先原则,也就是更具体的路径规则会覆盖更宽泛的规则。如果遇到放行未生效的情况,建议先检查路径大小写和结尾斜杠是否与原目录完全一致。
现实中的网站流量来源往往不止一个搜索引擎,不同蜘蛛的行为偏好也不尽相同。这个时候,针对不同 User-agent 设置互不干扰的独立分组就显得十分重要。例如,你希望全面屏蔽某个特定爬虫,同时完全不限制其他一切蜘蛛的访问。
User-agent: BadBot
Disallow: /
User-agent: *
Allow: /
注意事项:文件内容是从上往下顺序读取的,每条规则只会匹配第一个命中的 User-agent 分组。因而排列顺序很重要,通常把更具体的规则写在更泛化的规则之前。如果发现某些爬虫行为异常,可以先检查是不是分组顺序导致规则覆盖出现了偏差。另外,保持文件体积精简也是一种好习惯,冗长的注释和多余的空行并不会带来额外收益。
文件更新后,搜索引擎通常需要一定时间重新抓取才能感知变化。谷歌等主流搜索引擎会定期重新抓取该文件,一般几天内就能完成重新评估。想加速这个过程,可以通过搜索引擎的管理员工具提交该文件的更新。
该文件本身并没有严格的许可数量限制,但搜索引擎对每次抓取过程中可处理的规则条目数有内部上限。保守做法是将规则控制在较为精简的范围内,避免写入大量重复无意义的条目。一个合理的建议是单文件内规则总数尽量控制在几百条以内,过长的内容反而容易出现解析不全的问题。
不会。robots.txt 只是通知爬虫不要访问,并不会改变服务器返回的状态码。被屏蔽的页面依然可能返回 200 状态码,只是对搜索引擎而言它们不会被放入索引。此外,如果这些页面已经存在于搜索索引中,单纯依靠此文件也无法保证它们会被立即移除,通常还需借助其他手段配合处理。
robots.txt 的核心价值在于清晰地表达站点的抓取意图,它结构简单、语法灵活,却要求配置者保持严谨。建议在修改后立刻通过域名直接访问文件来验证规则是否符合预期,并在上线较大的规则改动之前,先在本地用一小段文本模拟测试。日常运营中把它当作一项周期性检查任务,每调整一次网站结构就例行审视一遍规则内容,这样既能减少无效抓取,也能避免误伤正常页面的搜索表现。