Robots.txt 配置全攻略:语法详解与常见问题解答

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

当网站所有者需要引导搜索引擎的抓取行为时,robots.txt 文件是首要的沟通工具。它位于站点根目录,能有效调配爬虫资源,保护后台或不希望被收录的页面。与其将其视为强硬的“禁止令”,不如理解为写给搜索引擎的“访问礼仪指南”。

1. 文件结构与核心语法规则

robots.txt 必须放在网站域名的根目录下,比如你的域名是 www.example.com,那么该文件的访问地址就是 www.example.com/robots.txt。文件内部由多个“记录块”构成,每个块通常以 User-agent 行开头,随后是若干 Allow 或 Disallow 行,偶尔还会包含指向站点地图的 Sitemap 行。

每条指令必须单独占一行,使用 # 符号可以添加注释以便维护。虽然部分搜索引擎对大小写不敏感,但为了兼容所有爬虫,建议路径统一使用小写。需要注意,匹配规则是基于“前缀”进行的,而非精确的文件名匹配。

1.1 User-agent:针对谁设定权限

User-agent 行用于声明接下来的规则适用于哪个搜索引擎的爬虫。星号 * 作为通配符,表示“所有未单独指定的爬虫”。例如,User-agent: Googlebot 只约束谷歌的爬虫,而 User-agent: * 则约束其他所有爬虫。为避免规则冲突,通常建议将最通用(即 User-agent: *)的规则块放在文件末尾。

1.2 Disallow 与 Allow:放行与拦截的平衡

Disallow 指令用于声明禁止访问的路径开头,而 Allow 指令则在 Disallow 限制的范围内,对特定子路径进行放行。当两者同时作用于同一路径且规则发生冲突时,搜索引擎会优先采用 Allow 的指令。例如,若设置 Disallow: /temp/,那么 /temp/ 下所有内容均被拦截;但如果接着设置 Allow: /temp/sample/,则爬虫仍然可以访问 /temp/sample/ 这个子目录。

如果希望允许爬虫抓取整个站点,可以直接写 Disallow:(留空)。反之,若要屏蔽所有爬虫,则需写入 Disallow: /。

2. 主流爬虫识别与实用配置范例

不同的搜索引擎拥有不同的爬虫代号,针对性的配置可以提高抓取效率并节约服务器资源。以下是常见的爬虫名称及配置思路。

编写多段规则时,务必注意顺序逻辑:将指定具体爬虫的规则块放在前面,将通用规则块放在最后。借鉴以下配置示例:

User-agent: Googlebot
Disallow: /temp/
Allow: /temp/sample/

User-agent: *
Disallow: /admin/

在上述配置下,Googlebot 可以正常抓取 /temp/sample/ 的内容,而所有其他爬虫则完全无法访问 /admin/ 目录。这种写法的好处是既保护了敏感后台,又不妨碍核心爬虫的数据获取。

3. Sitemap 声明与抓取延迟控制

在 robots.txt 中声明 Sitemap 是一个值得推荐的习惯。你可以在文件任意位置单独一行写上 Sitemap: https://www.example.com/sitemap.xml,这能让搜索引擎更快地发现并抓取站点地图,有助于新页面被快速收录。

另一个实用指令是 Crawl-delay,它用于告知爬虫两次请求之间应间隔的秒数,例如 Crawl-delay: 10。需要注意的是,并非所有搜索引擎都支持该指令,例如谷歌的 Googlebot 就明确忽略此项,因此该指令主要对百度或必应等爬虫有效。在服务器不堪重负时,用它可以有效缓解压力。

使用这些指令时的关键避坑点是:Sitemap 指令不依赖 User-agent 块,但要确保 URL 是完整的绝对地址。而 Crawl-delay 不应设置过小,否则起不到限流作用,也不应设置过大,否则会导致页面收录周期过长。

4. 高级场景与正则匹配技巧

为了拦截动态参数或特定字符串,许多爬虫支持简单的通配符匹配。例如,星号 * 可以匹配任意字符序列,而美元符号 $ 则表示字符串的结尾。假设你想屏蔽所有以 .pdf 结尾的文件,可以这样写:Disallow: /*.pdf$。

再看一个复杂场景:若要禁止爬虫抓取带有跟踪参数的 URL(如 ?sessionid=xxx),可以设置 Disallow: /*?,这通常能有效阻止大量重复内容的抓取。注意,通配符并非所有爬虫都支持,因此这类规则必须单独放在特定爬虫的块内,不能放进通用块,以免引起错误解析。

面对这些高级配置,建议的策略是:先在测试环境模拟验证,观察日志中爬虫的实际访问行为。如果发现配置后核心页面收录下降,应立即检查语法或回退规则。毕竟,robots.txt 的初衷是提高效率,而非成为阻碍收录的障碍。

5. 常见问题

5.1 为什么设置了 robots.txt 后,网页还是被搜索到了?

robots.txt 的职责在于“阻止抓取”,而非“阻止收录”。如果其他网站外链了你的页面URL,搜索引擎可能仍然会收录该网址,只是不会抓取内容,导致展示信息有限。若想彻底从搜索结果中移除,还需要结合无索引标签(noindex)或通过搜索引擎的移除工具提交请求。

5.2 Disallow 和 Allow 哪个优先?

当规则发生冲突时,以 Allow 指令为优先。这是搜索引擎处理逻辑中的默认规则。例如,先声明 Disallow: /api/,再声明 Allow: /api/public/,则爬虫依然可以访问 /api/public/ 下的资源。

5.3 在 robots.txt 里注释会不会影响功能?

不会。使用 # 符号开头的行会被搜索引擎忽略,注释内容不会影响其他规则的功能。合理的注释有助于团队协作和后期维护,例如说明某条规则生效的时间或原因。

6. 总结

配置 robots.txt 需要遵循清晰的结构顺序,利用好 Allow 与 Disallow 的组合拳,并善用 Sitemap 声明加速内容索引。在实际操作中,建议先使用浏览器直接访问根目录验证文件是否生效,其次通过搜索引擎站长工具测试规则的有效性。切忌在规则中同时使用冲突的路径,也不要依赖 robots.txt 保护隐私数据,真正确保安全需要配合服务器端的访问认证。

图1 图2

nginx