robots.txt 是部署在站点根目录的纯文本规则文件,作用是告知搜索引擎爬虫哪些目录或页面可以访问,哪些需要绕行。它不直接影响关键词排名,但合理的配置能减少无效抓取、加快新页收录;若配置有误,轻则页面迟迟不被收录,重则整站抓取受限。这篇文章拆解其核心语法、优先级逻辑,并指出容易出错的细节。
很多站点管理者误以为 robots.txt 是一道安全屏障,实际上它只是君子协定,仅对守规矩的合规爬虫生效。恶意抓取工具、非正规扫描器不会遵循这些规则。涉及后台登录、用户订单、隐私数据等敏感内容,必须通过身份验证、IP 限制、访问控制等硬性措施来保护,不能依赖这个文本文件抵御任何定向访问。
另外要明确,robots.txt 控制的是“抓取”动作,而搜索结果是否展示该页面,属于“索引”环节。假设你不想让某页出现在搜索结果里,仅写 Disallow 往往不够——搜索引擎仍可能通过外链发现该页并将其收录。稳妥的做法是:既用 robots.txt 禁止抓取,也在页面头部添加 noindex 标签,双管齐下才能有效阻止页面被搜索展示。
robots.txt 由若干规则组构成,每组以 User-agent 开头,后接一条或多条 Allow 与 Disallow 指令。书写时字段名统一使用小写,冒号后保留一个空格,这样可以降低不同解析器出现兼容性问题的概率。
User-agent 声明该规则组所面向的爬虫。例如 User-agent: Googlebot 仅对谷歌爬虫生效,User-agent: * 则匹配所有爬虫。在同一文件中,你可以为不同搜索引擎设置差异化规则——比如禁止百度抓取某个目录,但允许谷歌访问。这种灵活性在多搜索引擎场景下很实用,但也容易因规则交叉产生意料之外的行为,建议每个规则组保持思路清晰、互不干扰。
Disallow 声明禁止抓取的路径,Allow 声明允许抓取的路径。当同一 URL 同时命中 Allow 和 Disallow 时,搜索引擎遵循最长匹配优先原则——字符更长的规则胜出。举例来说,若文件中存在 Disallow: /api/ 和 Allow: /api/public/,那么 /api/public/ 下的资源可以正常抓取,而 /api/ 下的其他路径依然被禁止。
另一个容易被忽略的细节:Disallow 留空表示解除限制。例如“Disallow: ”(冒号后无内容)代表该规则组对所有路径开放抓取,适合全站公开的站点。需要留意的是,部分搜索引擎对空值的处理存在细微差异,若想全站开放,直接省略 Disallow 行是更稳妥的选择。
Sitemap 指令用于声明站点地图地址,帮助爬虫迅速发现新链接,缩短探测周期。Crawl-delay 则设定两次抓取间的间隔秒数,对承载能力有限的服务器有保护作用。但要注意:不少搜索引擎并不识别 Crawl-delay,且 Sitemap 指令因被滥用而逐渐不被部分引擎信任。若建站工具无法生成合理策略,这两条指令的实际成效可能很有限。
不同爬虫对 robots.txt 的解析逻辑存在差异,但主流引擎普遍遵循以下优先级顺序:
例如规则组中同时存在 Disallow: /private/ 和 Allow: /private/public/,爬虫访问 /private/public/ 时,第二条规则因路径更长而胜出,该目录下内容可正常抓取;而访问 /private/admin/ 时,第一条规则生效,抓取被拒绝。
配置 robots.txt 时,以下几点是出现频率最高的失误来源:
配置完成后,可通过搜索引擎的 robots.txt 测试工具验证规则是否符合预期,也可直接访问 /robots.txt 检查文件是否可读、内容格式是否正确。
Disallow 冒号后留空表示不禁任何内容,即该规则组对全部路径开放抓取。若想全站开放,直接省略 Disallow 行即可,这样能避免部分搜索引擎对空值处理不一致的问题。
在 Disallow 中填写公共路径前缀即可,例如 Disallow: /?page= 会禁止抓取所有带该参数的 URL。但要注意,不同爬虫对通配符支持程度不同,最保险的方式是确保这些动态链接具备稳定的公共目录或参数前缀。
不能完全保证。Disallow 阻止的是抓取,而索引可能通过外部链接或已缓存数据产生。若想让页面从搜索结果消失,需同时使用 noindex 标签,并等待搜索引擎重新抓取页面头部后再做判断。
配置 robots.txt 的核心在于理解它的边界:它管抓取、不管安全与索引。围绕这一原则,你应优先确保规则组清晰、路径匹配准确,并在敏感区域搭配硬性保护措施。建议先从一个简洁的文件开始,通过工具验证后再逐步细化策略,切忌一次性堆叠过多复杂规则,给爬虫留出稳定的抓取空间。