robots.txt 正确写法与常见误区全解析

📍 WDQWDWQD987AAAAA:216.73.216.218
📱 Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
🔗 /fa49fe9317d7.html
📄

robots.txt 是站点管理者与搜索引擎爬虫之间的沟通文件,用于明确告知爬虫站内哪些路径允许抓取、哪些路径应当屏蔽。配置得当,它能够保护后台和临时目录不被收录,并引导爬虫将抓取预算集中于高价值页面;配置失误,则可能造成关键页面从搜索结果中消失,严重时甚至会导致整站收入大幅下降。因此,掌握其标准写法和细节处理,是网站日常运维中不可忽视的环节。

1. 文件存放位置与基本结构说明

robots.txt 的文件名必须使用小写英文字母,并且只能放置在网站的根目录下。文件内部由多个独立的规则块组成,规则块之间需要使用空行进行分隔。每个规则块中,每一行都是一条指令,格式固定为"字段名: 值"的样式,例如"Disallow: /private/"。字段名对大小写并不敏感,但值所代表的路径部分,通常需要区分大小写。在文件中可以使用井号(#)来添加注释,注释既可以单独占一行,也可以添加在指令行的末尾,这样有助于后续维护时快速理解每条规则的用意。

从内容的逻辑排列来看,每个规则块的基本原则是先用 User-agent 行声明该规则所面向的爬虫对象,其后紧跟若干个 Disallow 或 Allow 指令条目。需要注意的是,每组规则只能对应一个 User-agent 行,但在这一组内部,可以同时包含多个 Disallow 和 Allow 指令。虽然目前主流搜索引擎普遍认可 Allow 指令对更具体路径的覆盖能力,但在不同爬虫之间,对于规则冲突时的判定顺序依然存在细微差异,因此面向多个搜索引擎部署时,建议逐项核对规则效果。

2. 核心指令的标准写法与实用范例

2.1 基础设置:User-agent 与 Disallow 的组合

最常见的使用场景是禁止指定爬虫抓取整站内容,标准写法如下:

User-agent: *
Disallow: /

如果仅仅希望屏蔽站内的某个特定目录,比如后台管理路径,可以这样设置:

User-agent: *
Disallow: /admin/

此处存在一个极易被忽略的细节:路径末尾的斜杠是否保留,效果差异显著。写成 /admin/ 时,只匹配 admin 目录本身及其内部的子页面;但是若省略末尾的斜杠写成 /admin,那么所有以 admin 开头的路径都会被一并拦截,例如 /administrator 或 /admin-login。这种写法容易导致一些正常的路径被意外屏蔽,需要格外留意。

2.2 Allow 指令的优先级与覆盖逻辑

当你试图屏蔽一个大范围的目录,同时又要保留其中某个特定子目录的抓取权限时,Allow 指令可以发挥关键作用。比如希望仅开放博客下的一个独立专题,其余内容都进行屏蔽:

User-agent: *
Disallow: /blog/
Allow: /blog/special/

在这种场景下,路径匹配遵循的通用原则是:如果两条规则匹配到的路径长度完全相同,则 Allow 指令拥有更高的优先级;如果路径长度不同,则优先以更具体、路径更长的哪条规则为准。因此,上述写法能够有效保证 /blog/special/ 这一路径被正常抓取。

2.3 针对不同爬虫的分组策略与 Sitemap 声明

不同的搜索引擎爬虫,可以配置完全不同的抓取策略。例如,让谷歌的爬虫正常访问,同时暂时拒绝必应爬虫进入:

User-agent: Bingbot
Disallow: /

User-agent: Googlebot
Allow: /

另外,建议在文件末尾增加一行 Sitemap 声明,格式为"Sitemap: https://www.example.com/sitemap.xml",这样可以辅助爬虫更快地发现并获取最新的网站地图,提升内容收录的效率。

3. 常见误区与避坑建议

第一类误区是关于注释的使用。在编写规则时,部分站长习惯在规则行后直接添加中文解释,例如"Disallow: /old/ # 旧版页面",这种做法并不会导致语法错误,但不同爬虫解析注释时对中文的支持并不完全一致,为避免意外情况,建议单独使用一行以#号开头的注释。

第二类误区是Disallow 值的空或缺失。若写成"Disallow:"且后面不跟任何路径值,部分搜索引擎会将其视为允许抓取所有内容,这与许多新手的预期完全相反,容易导致敏感信息被爬虫获取。

第三类误区是过度屏蔽。多个站点为了提高安全性,会直接写入"Disallow: /",这会彻底关闭全站的抓取入口,且屏蔽范围远超预期,误伤权重高的栏目。建议在修改后,使用搜索引擎提供的抓取测试工具进行验证,确保屏蔽范围精确可控。

4. 文件更新后的验证与生效时间

修改并保存 robots.txt 文件后,无需重启服务器或提交任何请求,爬虫会在下一个抓取周期内自动重新读取该文件。但实际生效时间长短不一,通常是几分钟到几小时不等,具体取决于爬虫的回访频率。为了确认规则是否正常生效,可以借助搜索引擎站长平台中的 robots 测试工具,输入具体 URL 进行检查。同时,务必确认服务器对根目录文件的访问权限设置正确,避免返回 404 错误页面,否则爬虫无法获取有效规则,会默认允许抓取全部内容。

5. 常见问题

5.1 robots.txt 不生效可能是哪些原因?

最常见的原因是文件存放的位置不正确,必须放置在网站的根目录下。另外,注意文件名称的大小写,建议仅使用小写字母。最后检查服务器返回的 HTTP 状态码,确保是 200,而不是 301 跳转或 404 错误。

5.2 robots.txt 能完全阻止页面被搜索引擎收录吗?

不能。robots.txt 仅能够阻止爬虫抓取页面,但如果网页已经被其他外部链接指向,爬虫依然可能会绕过规则收录其 URL 信息,甚至展示部分摘要。若想要彻底阻止收录,最稳妥的方式是使用 noindex 标签。

5.3 条 User-agent 指令后可以跟多条 Disallow 吗?

可以。在同一组规则块内部,单个 User-agent 行后面可以连续书写多条 Disallow 和 Allow 条目,每一行占据一行。这样便于集中管理针对同一爬虫的所有限制路径。

6. 总结

正确配置 robots.txt 的核心在于理解路径匹配的精确性与单一规则组的约束范围。在实际操作中,遵守以下建议可有效规避风险:首先,明确路径是否以斜杠结尾,避免误伤无关路径;其次,善用 Allow 指令进行精细化的放行,但需验证不同引擎的优先级判定;再次,为每个搜索引擎分配独立规则组,并尽量保持注释清晰简洁。完成修改后,务必使用官方测试工具进行模拟验证,确认无误后再正式发布生效。

图1 图2

nginx