网站的日常技术维护中,robots.txt 是一个看似简单却影响深远的配置文件。它位于站点根目录,用纯文本形式告知搜索引擎爬虫哪些路径可以抓取、哪些路径应当回避。设置合理,爬虫会将有限的抓取带宽集中在你真正重要的页面上,从而加速收录;设置不当,轻则部分页面无法被抓取,重则整个站点在搜索结果中消失。本文将从概念澄清到具体语法,系统地梳理这份文件的机制与写法。
robots.txt 的访问路径是唯一且固定的,即域名后直接拼接该文件名,例如 https://example.com/robots.txt。它的本质是向爬虫发出的"请求",而非"命令",用来协调抓取的优先级和范围。一个常见的认知误区是把它当作控制收录的工具——其实它只能阻止爬虫访问页面,无法阻止页面被编入索引。若某页面确实需要从结果中移除,应当使用 noindex 标签,两者职责不同,不能混用。
同时要清楚,这份文件只对遵守规则的搜索引擎爬虫有效。恶意采集脚本或某些非主流工具完全视之如无物。因此,凡是涉及用户隐私、支付接口、后台管理等敏感数据的目录,绝不能依赖 robots.txt 做唯一防线,必须结合登录验证、IP 限制或防火墙等安全手段。
robots.txt 的内容由若干规则组构成,每组必须以 User-agent 字段起头,采用"字段名: 值"的格式。为保证兼容性,建议字段名使用小写,冒号后保留一个空格,并确保文件末尾以换行结束。
该字段声明当前规则块适用于哪个爬虫。填写 User-agent: Googlebot 时,规则仅对 Google 的爬虫生效;填写 User-agent: * 则代表对所有遵守规范的爬虫适用。一个文件内可以放置多组规则,为不同爬虫分别设定访问权限,它们之间互不干扰。
Disallow 用于声明禁止抓取的路径,Allow 则相反。值得注意的是,当 Disallow 后不加任何内容时,例如 Disallow: ,代表解除全部限制,爬虫可自由抓取整站。当 Allow 与 Disallow 对同一 URL 产生冲突时,搜索引擎遵循"最长匹配优先"法则——即路径字符更长、描述更具体的那条规则胜出。举例说明:同时存在 Disallow: /api/ 和 Allow: /api/public/ 时,后者因路径更长而具备更高优先级,因此 /api/public/ 下的资源依然会被正常访问。
Sitemap 字段用于指向网站地图的完整 URL,通常置于文件末尾,能够引导爬虫快速获取站点结构清单。而 Crawl-delay 字段虽在字面上用于设定抓取间隔,但 Google 早已明确表态会忽略该项。若需要精细控制抓取频率,正确的渠道是 Google Search Console 后台的相应设置,而不是在文件中配置此字段。
以下列举几个常见的配置需求,可直接替换为实际路径后使用。场景一:禁止所有爬虫抓取后台目录,同时放行公共静态资源,可写为:User-agent: *,Disallow: /admin/,Allow: /assets/。场景二:仅允许 Google 抓取,屏蔽其他所有爬虫,则需要两个规则组——一组指定 Googlebot 为全部放行,另一组以 * 为对象设置全站禁止。场景三:只想限制某个特定文件夹但保留整站可抓取,只需在 Disallow 中填入相对路径即可。
配置完成后,不建议直接上线,应先行验证。首要步骤是访问 https://你的域名/robots.txt,检查响应状态是否为 200 且内容与预期一致。其次是利用搜索引擎站长工具中的 robots.txt 测试器,模拟特定 URL 的抓取结果,确认其返回"允许"或"禁止"符合预期。常见失误包括:路径未以斜杠开头导致规则失效;文件内混入中文字符或 BOM 头引发解析异常;将禁止索引的意图误用为禁止抓取,反而造成页面被收录但内容无法显示的情况。
搜索引擎很少因为 robots.txt 的语法错误直接进行惩罚,但其后果等同于惩罚——例如误将根目录 Disallow 导致全站无法被抓取,索引量会迅速归零。这并非搜索引擎主动降权,而是因抓取被阻断而产生的自然结果。另外,若通过该文件指向了错误的 sitemap 地址,也可能影响收录速度。
核心原则是看路径匹配的长度。当两者同时命中时,URL 匹配字符更长的规则优先。所以在规划规则时,应将更具体的 Allow 写在更宽泛的 Disallow 之后或之前均可,优先级与书写顺序无关,只与匹配长度相关。
若站点结构简单、无敏感目录,且所有页面都希望被收录,可以完全不使用该文件。此时爬虫默认视为全站可访问。但对于内容量较大或存在重复页面的站点,缺少此文件会导致抓取预算被浪费,重要页面收录的时效性可能会受到影响。
配置好这份文件,核心在于区分阻止抓取与阻止索引的差异,并准确理解最长匹配优先的规则。上线前务必通过站长工具测试,避免因路径书写不规范造成全站无法访问的严重事故。具体到日常执行,建议每次修改后做一次完整验证,并将维护记录归档,以便后续排障时快速定位。