robots.txt 是部署在网站根目录的文本文件,用简短指令为搜索引擎爬虫指明可抓取与不可抓取的路径。配置得当,能帮爬虫把有限的抓取预算集中在核心内容上,加快新页面的收录;配置失误,则可能让整站搜索表现下滑,甚至从索引中消失。下面把关键语法和常见误区系统梳理一遍。
这份文件只与爬虫对话,访问“域名/robots.txt”即可查看。它扮演引路人的角色,告诉爬虫哪些区域可以进入,但无法决定页面能否进入搜索索引。若希望某页面彻底从搜索结果中移除,必须依赖 noindex 元标签。即便你在文件中屏蔽了某页面,只要该页面外链足够多,搜索引擎仍有可能将其收录,只是展示的快照可能来自其他来源。
此外,该协议依赖爬虫自觉遵守。主流搜索引擎蜘蛛大多会遵循规范,但大量恶意采集脚本与第三方工具对此无视。涉及用户隐私、交易记录或后台管理等敏感目录,务必叠加登录验证、IP 白名单或防火墙等防护措施,切不可将站点安全寄托于这份“君子协定”。
robots.txt 由若干规则组构成,每组必须以 User-agent 字段起头。所有字段统一采用“名称: 值”格式,冒号使用英文半角,冒号后加一个空格是推荐写法。尽管多数爬虫容错性不错,规范书写可以减少日后排查成本。
该行声明规则组针对的爬虫类型。只想约束 Google 搜索蜘蛛,写 User-agent: Googlebot;希望所有搜索引擎爬虫统一执行,用通配符 User-agent: *。你可以拆分多个规则组,对不同爬虫实施差异化策略,例如对谷歌放开权限,对必应收紧限制。
Disallow 声明禁访路径,Allow 声明放行路径,两者常搭配使用。一个易忽略的细节是:当 Disallow 后为空(即 Disallow: 无值)时,代表清空限制,爬虫可抓取全站。若同一 URL 同时命中多条规则,搜索引擎按“最长匹配优先”原则处理——路径越具体,优先级越高。比如同时配置 Disallow: /api/ 与 Allow: /api/public/,由于后者更具体,public 子目录会被放行。
Sitemap 指令用于声明站点地图的完整 URL,帮助爬虫快速定位全站内容,通常置于文件末尾。Crawl-delay 设定爬虫抓取间隔,单位为秒。需特别留意,Google 爬虫并不支持该字段,官方建议在 Search Console 后台配置抓取频率,而非依赖此指令。
第一个高频错误在路径理解。Disallow 后的值对应根目录下的相对路径,而非完整 URL。例如 Disallow: /admin/ 屏蔽的是站点根下 admin 目录,写全 URL 不仅无效,还可能误伤其他路径。
第二个误区涉及通配符使用。星号(*)可匹配任意字符序列,美元符号($)锚定结尾。例如 Disallow: /*?from= 可以拦截带特定参数的 URL,Disallow: /*.pdf$ 则精准屏蔽所有 PDF 文件。但通配符滥用会导致规则意外扩大,务必留意。
第三个陷阱是大小写敏感。路径匹配区分大小写,/Product/ 与 /product/ 是两个完全不同的路径。配置前建议核对服务器上实际目录的命名。
第四个问题是忽略根目录要求。文件必须命名为 robots.txt 且放置在域名根目录,如 https://example.com/robots.txt。放在子目录中不生效,文件的编码格式建议采用 UTF-8,避免中文注释导致解析异常。
以下为一份常见场景下的配置模板,供参考:
配置完成后,务必验证有效性。将新规则与旧规则对比,确认没有意外扩大屏蔽范围;还需检查每一条禁止路径是否确实为不需要收录的内容。上线后,可通过搜索引擎站长工具中的 robots 测试功能模拟抓取,检验规则解析是否符合预期。
语法错误本身不会被直接降权,但若误屏蔽了核心页面或全站内容,爬虫无法抓取,页面会逐渐从索引中消失,搜索流量随之下降,在排名上表现为“降权”。建议修改后及时通过站长工具检查抓取情况,并配置监控告警。
当同一 URL 命中多条规则时,遵循“最长匹配优先”原则,即匹配路径更长的规则生效。如果两者匹配长度相同,主流搜索引擎通常依据规则在文件内的先后顺序决定。为避免歧义,建议将 Allow 规则置于同组 Disallow 之后。
并非如此。Google 明确声明不支持该指令,建议在 Search Console 中的“抓取频率”设置里调整。百度和必应等爬虫的兼容性也时有变化,过度依赖此字段可能造成抓取延迟或规则失效,建议通过服务器日志监控爬虫实际访问间隔。
配置 robots.txt 的核心是明确职责边界:它只负责引导爬虫,不承担收录控制与安全防护。动手配置前,先梳理全站路径结构,明确需要屏蔽的目录;写完后务必验证语法与路径匹配,尤其是区分大小写与通配符范围。上线后定期通过站长工具与服务器日志检查规则执行效果,并根据收录情况动态调整。记住,规范的配置不是一次性的,而是随站点结构变化持续迭代的过程。