robots.txt是放在网站根目录下的一个纯文本指令文件,它的核心作用是告知搜索引擎爬虫,站点里哪些路径可以抓取、哪些路径应该跳过。配置得当,可以让爬虫把有限的抓取预算集中在重点页面,加快新内容的收录。但如果语法写错或路径逻辑混乱,轻则导致页面漏抓,重则可能引发整站收录异常。掌握它的语法细节和容易被忽略的坑,是每个网站运营者的基本功。
robots.txt对爬虫来说只是一份指引文件,不具备强制约束力。任何人都可以在浏览器里直接输入“你的域名/robots.txt”查看内容。它更像一份园区导览图,告诉来访者哪里可以走,但对于后台管理、用户数据等敏感地带,单靠这张图根本挡不住有心之人。
这份文件只影响爬虫是否发起抓取请求。一个已经被抓取的页面是否进入索引,并不是robots.txt能决定的。比如某个页面在文件里被明确屏蔽,但只要外部有大量链接指向它,搜索引擎仍可能把它纳入索引,只是展示时可能只有标题和描述,没有正文快照。
此外,这个协议全凭爬虫自觉。主流搜索引擎的蜘蛛通常会遵守,但大量第三方采集工具和恶意爬虫根本不会理会这些规则。凡是涉及支付流程、用户隐私、管理后台的目录,必须同时启用登录验证、IP白名单或防火墙等硬性拦截手段,不能把安全防线押在这么一份“君子协议”上。
robots.txt由若干规则组构成,每个规则组必须以User-agent字段开头,声明适用范围。所有指令格式均为“名称: 值”,冒号必须使用英文半角符号,建议冒号后保留一个空格。虽然多数爬虫容错度较高,但保持规范的书写习惯,能避免后续出现莫名其妙的解析问题。
这一行决定规则组约束哪些爬虫。如果只想针对谷歌,就写User-agent: Googlebot;想对所有搜索引擎统一生效,则用通配符User-agent: *。你可以拆成多个规则组,对不同搜索引擎区别对待,例如给谷歌放开权限,同时给必应设定更严格的抓取限制。
Disallow声明禁止访问的路径,Allow声明允许访问的路径,二者常搭配使用。一个容易忽略的细节:Disallow后面留空,表示清除全部限制,爬虫可以自由抓取整站。当一条URL同时命中多条规则时,搜索引擎普遍遵循“最长匹配优先”原则——路径描述越具体,优先级越高。例如同时存在Disallow: /api/和Allow: /api/public/,因为后者路径更长更具体,所以public子目录下的内容会被放行。
Sitemap指令用于声明站点地图的完整URL,帮助爬虫快速了解站内结构,通常放在文件末尾。Crawl-delay指令用于设定爬虫两次抓取之间的间隔秒数。但要注意,谷歌蜘蛛不支持Crawl-delay,它的抓取频率需要通过Google Search Console的抓取速率设置来调节,写在文件里会被直接忽略。
很多教程提到robots.txt支持通配符,但实际支持程度因搜索引擎而异。谷歌和必应支持星号(*)匹配任意字符序列,以及美元符号($)匹配路径结尾。例如Disallow: /*?from=可以屏蔽所有带from参数的动态URL,Allow: /public/$则只放行public目录下的页面。
但要注意,并非所有爬虫都完整支持通配符。一些二线搜索引擎或垂直领域爬虫可能只支持最简单的路径前缀匹配。因此在使用通配符时,建议在主流搜索引擎上验证效果,同时确保核心路径规则用最直观的写法,不要过度依赖高级语法。
实际配置中,最常见的坑往往不是语法错误,而是逻辑判断失误。下面列出几个高频问题:
配置完成后,务必进行验证,不要想当然认为语法没问题就万事大吉。推荐的验证步骤是:
生效时间不固定。爬虫通常周期性地重新抓取robots.txt,短则几小时,长则数天。如果想加快速度,可以在Google Search Console中手动请求抓取该文件。另外,修改文件不会立即恢复已经出现的抓取问题,需要等下一轮抓取周期才有明显变化。
可以做到部分效果,但不够彻底。屏蔽整站会让爬虫完全不抓取,但已有索引页面可能还会长期存在,只是快照更新会停滞。如果你确实想让整站从搜索结果中消失,更可靠的做法是使用noindex标记,同时结合robots.txt屏蔽抓取,双管齐下。
有。谷歌明确规定robots.txt文件最大500 KiB(约512KB),超过大小后整个文件会被忽略。规则条数方面,虽然文件内可写多条规则,但为了可读性和解析效率,建议保持精简,只写必要的屏蔽和放行规则,别把大量无关注释或重复规则塞进去。
robots.txt的核心价值在于引导爬虫高效抓取,而不是做安全防护。配置时记住三个要点:一是语法规范,尤其注意冒号半角和留空格;二是优先使用最长匹配逻辑,善用Allow与Disallow组合;三是配置后务必实测验证。建议每次修改后记录变更内容,方便后续排查问题。把这份文件当作精细的抓取管理工具,而不是一劳永逸的解决方案,才是正确的使用姿势。