robots.txt 是网站根目录下一个用于协调搜索引擎抓取行为的纯文本文件,它通过简洁的指令告诉各类爬虫哪些路径可以访问、哪些路径应当避开。科学合理的配置能让搜索引擎将有限的抓取资源更多地分配给关键页面,进而带动新内容的快速收录,但稍有不慎的语法错误或路径疏漏,则可能引发部分页面无法被抓取,甚至拖累全站的自然搜索表现。
首先要明确一点,robots.txt 的定位是抓取层面的“准入清单”,它决定爬虫是否有权访问某个路径,并不能直接决定页面是否出现在搜索结果中。即便你用规则屏蔽了某个 URL,搜索引擎仍可能通过其他网站的外链发现该地址,并在结果页中展示它,只是其页面的快照或摘要可能因无法抓取而变得残缺。假如目标是让某页面彻底从索引中消失,只靠 robots.txt 往往不够,最稳妥的做法是同步在网页源码中添加 noindex 元标签,两者配合才能确保页面既不被抓取,也不会被索引展示。
另外要清醒认识到,这项协议依赖爬虫的自发配合。Googlebot、Bingbot 等主流蜘蛛通常会严格遵守规则,但各种不知名的采集程序、垃圾脚本却视若无睹。所以,凡是涉及后台登录、用户个人信息、订单详情这类敏感私密内容的目录,必须在服务器层面额外加上身份验证、IP 访问限制或防火墙屏障,绝不能将网站安全性寄希望于这条“礼貌性约定”。
robots.txt 的内部结构由多个规则组排列而成,每一组都以 User-agent 行作为起始标识,不同组之间必须用空行隔开。文件中每一行指令的写法统一为“字段名: 值”的格式,尤其要注意冒号必须使用英文半角状态,且建议在冒号后面添加一个空格,这样既让内容显得规整,也能提升各类解析工具的兼容度。
这个字段用于指明本组规则具体约束哪一类爬虫。比如只想单独规范 Google 的搜索蜘蛛,就可以写“User-agent: Googlebot”;若想让规则对所有搜索引擎一律生效,则用通配符形式“User-agent: *”。你完全可以为一个网站定制多套差异化策略,例如对 Googlebot 放开较为宽泛的抓取路径,同时却对 Bingbot 限制某些具体目录的访问。
Disallow 用于划定不能访问的路径,Allow 则明确指出允许爬取的范围。很多入门者不知道一个关键细节:若 Disallow 后面不写任何值,语义等同于允许爬虫抓取整站全部内容。当某条 URL 同时命中多条规则时,搜索引擎统一遵循“最长匹配优先”的处理逻辑,也就是路径描述越长、越精确的那条规则越具最终决定权。举个例子,若文件中既有“Disallow: /admin/”又有“Allow: /admin/public/”,那么因为后者的路径字符数更长,public 子文件夹下的资源照样能被正常放行抓取。
Sitemap 指令用来指定站点地图文件的完整网址,其作用是主动引导爬虫及时定位新增的页面内容,一般习惯置于文件末尾。Crawl-Delay 指令则用来设定两次抓取请求之间的等待秒数,部分搜索引擎(如 Bing)会识别并执行该设置,但 Google 历来不读取这项指令,转而建议站长通过 Google Search Console 后台的“抓取速率”工具去调控频率。
日常改配时最容易翻车的就是把路径含义理解错。Disallow 后填写的对象是位于站点根目录下的相对路径,而不是一个完整的网页链接,也不包含协议名和域名。比如你打算屏蔽网站里的 /image 目录,只需写“Disallow: /image”,千万别写成“Disallow: https://www.example.com/image/”这类多余形式,那样极易导致规则完全不生效。
在通配符方面,目前主流的 Googlebot 支持使用星号(*)匹配任意数量字符,也支持美元符号($)表示路径以某字符串结尾。但并非所有爬虫都兼容这些符号,假如你要兼顾各类搜索引擎,建议将通配符用法收敛克制,逐条写清楚具体路径更省心。还有一个极其普遍的隐患是大小写敏感地带:路径匹配是区分字母大小写的,例如“/Product”和“/product”在爬虫眼中是两个不同的地址,配置前务必仔细核对目录名称的实际大小写写法。另外,很多站点同时支持 HTTP 与 HTTPS 或不同子域名,robots.txt 规则适用于同域名下的所有协议方式,配置时要考虑这些细节,避免出现规则只在一个协议下生效的偏差。
以下是一份兼顾常见需求的基础配置示例,可用于直观理解规则组合方式:
User-agent: * Disallow: /admin/ Disallow: /tmp/ Allow: /admin/public/ User-agent: Googlebot Allow: / Disallow: /private/ Sitemap: https://www.example.com/sitemap.xml第一条规则对所有爬虫生效,屏蔽后台目录和临时文件目录,但例外放行 /admin/public/;第二条规则单独针对 Googlebot,允许其抓取全站但排除私有目录;最末的 Sitemap 行则是主动播报地图地址。实际部署时,可将自身目录结构带入替换测试。
存在这种可能,比如误把“Disallow: /”写进了针对所有爬虫的组里,那相当于禁止所有蜘蛛抓取全站任何路径,结果必然是整站页面从搜索结果中被逐步清理出去。所以每次改动后,建议立即用浏览器直接访问根目录下的 /robots.txt 文件检查内容是否如预期,同时可以借助 Google Search Console 的 robots.txt 测试工具进行提交验证,一旦发现问题可以迅速回滚修正。
正如开头所强调的,robots.txt 只禁抓,不禁索引。搜索引擎可能通过外部链接或站内其他路径间接发现该页面,并在结果中展示一个不带快照的条目。若想真正将其从索引移除,必须在该页面源码中加上 noindex 元标记,同时保留 robots.txt 的禁抓规则,才能做到双重保障。
一般情况下,搜索引擎爬虫会定期重新抓取该文件,短则数小时,长则一两天不等,并非实时更新。要想加快进度,可以前往搜索引擎的站长平台(如 Google Search Console)手动请求抓取该文件,这一操作能明显缩短新规则的生效等待时间。
配置 robots.txt 的门槛并不高,但细节众多,一步出错就可能牵动整站抓取链路。强烈建议你在完成任何一次修改后,都先对照本文件的语法规范做一次全量复查,尤其重点检查英文冒号、路径相对地址、大小写以及 Allow 与 Disallow 的冲突优先级。实际运用中,尽量用具体的目录路径替代模糊通配符,并善用 Sitemap 字段辅助内容发现。同时务必牢记它的能力边界,敏感数据终归要依赖服务器层的安全控制,而非一串行文本。