准备给网站写 robots.txt 时,先列清楚哪些路径不希望被抓取,再生成文件,比直接选“全部拒绝”更容易核对。本篇用宝塔拨测的 robots 文件生成工具,演示两个目录限制、一条 Sitemap,以及单独设置 Googlebot 后的输出变化。

以下目录与域名都是示例。操作只发生在生成器里,没有上传文件,也没有改动任何网站的抓取配置。

先清理默认目录,再填写自己的路径

进入「站长工具 → robots 文件生成」。页面初始有一条 /bin/ 限制目录,不应不加检查地沿用到自己的站点。

本例将限制目录改成 /private/ 和 /drafts/,其他空框保持为空。在 Sitemap 中填写完整示例地址:

https://example.com/sitemap.xml
限制目录填写 /private/ 和 /drafts/,Sitemap 填写完整地址
限制目录填写 /private/ 和 /drafts/,Sitemap 填写完整地址

目录路径从 / 开始,表示相对网站根路径的位置。例如 /drafts/ 针对以这个目录路径开头的内容,不是服务器磁盘里的文件夹路径。不要填写 /www/wwwroot/... 一类服务器本地位置。

如果现有输入框不够,可以使用「增加限制目录」或「增加 Sitemap」。每一项都应核对实际站点路径;Sitemap 要填真实可访问的完整地址,不能只写一个文件名。这里的 XML 地址仅用于演示生成文本,不代表示例站点存在这份文件。

允许一般抓取,同时排除指定目录

将「所有搜索引擎」保持为「允许」,各个搜索引擎先保持「默认」,搜索间隔保持「不限」,然后点击「生成」。本次得到的规则主体为:

User-agent: *
Disallow:
Disallow: /private/
Disallow: /drafts/

Sitemap: https://example.com/sitemap.xml
生成结果中,通用规则组包含两条非空 Disallow 和一条 Sitemap
生成结果中,通用规则组包含两条非空 Disallow 和一条 Sitemap

User-agent: * 表示通用规则组。单独的空 Disallow: 不指定禁止路径,后面两条非空规则仍然限制各自的目录;不能只看到空行,就判断整份文件没有限制。

核对结果时,逐行看路径有没有多一个字符、少一个斜杠或大小写不一致。/drafts/ 和 /Drafts/ 不能当成相同路径。Sitemap 是提供站点地图位置,不会覆盖上面的禁止规则,也不会自动创建或提交站点地图。

单独选择爬虫后,再生成一次

接着在国外搜索引擎的「谷歌」一项选择「拒绝」,其他设置不动,再点击「生成」。结果中新增:

User-agent: Googlebot
Disallow: /
单独拒绝谷歌后,结果新增 Googlebot 规则组,Disallow 为根路径
单独拒绝谷歌后,结果新增 Googlebot 规则组,Disallow 为根路径

这组规则对 Googlebot 提出了全站不抓取的要求。它不是只禁止前面两个目录,也不能理解成“通用组允许,所以 Googlebot 仍被允许”。匹配到更具体的用户代理组后,应按该组规则判断,不能把不同组按个人理解随意叠加。

本步骤是用来认识输出变化,不是所有网站都应该照做。正式使用前,应把试验中不需要的“拒绝”恢复为“默认”,重新生成并通读最终文本。改变表单后要再次点击「生成」,不要把上一轮结果当成新规则。

搜索间隔能生成,不表示所有爬虫会执行

本次另将搜索间隔填为 10、单位选为“秒”,生成文本增加了 Crawl-delay: 10。这证明生成器能输出该字段,不证明每种爬虫都支持它。

Google 公布的 robots.txt 支持规则不包含 crawl-delay。如果目标是控制某个搜索引擎的抓取频率,应核对该搜索引擎自己的支持方式,不能因为文件里出现了这一行,就认为访问会严格间隔十秒。

文件生成之后,还差发布和验证

确认规则后,将最终文本保存为 UTF-8 纯文本文件,文件名为 robots.txt。实际网站需要把它放到对应主机的根路径,例如 https://example.com/robots.txt,并从浏览器打开该路径,确认返回的是预期文本。子目录下的同名文件不能替代根路径文件,其他子域名、协议或端口也需分别核对适用范围。

本篇没有执行上传,因此截图不证明任何线上站点已经采用这些规则。部署后还应检查公开响应内容,并按目标爬虫的规则测试路径是否匹配。

robots.txt 是给遵循协议的爬虫看的抓取约定,不是访问权限控制。需要保护的后台、草稿和私密文件,仍要通过登录鉴权和服务器访问规则限制;只把路径写进 Disallow,不能阻止浏览器或不遵守规则的客户端直接请求它。