词汇表

什么是 robots.txt?

robots.txt 是位于网站根目录(例如 example.com/robots.txt)的纯文本文件,遵循爬虫排除协议,告知网络爬虫网站所有者希望或不希望其访问哪些 URL。

了解爬虫排除协议、robots.txt 实际执行(及不执行)的内容,以及爬虫出于法律和操作原因应如何对待它。

详解

robots.txt 是一项可追溯至1994年的惯例:位于域名根目录下的纯文本文件,列出了哪些用户代理(爬虫)被允许或禁止访问哪些 URL 路径。搜索引擎(Google、Bing)及行为规范的爬虫会遵守该文件。该文件可公开读取——你可以直接获取任何网站的 robots.txt(`curl https://example.com/robots.txt`),查看网站所有者希望爬虫如何操作。

Robots Exclusion Protocol 纯属建议性协议。Web 服务器不会强制执行 robots.txt 指令——它只是将其发布出来。行为不当的爬虫可以忽略 robots.txt,网站仍会响应所请求的 URL。执行力来自搜索引擎政策(Googlebot 不会索引 robots.txt 中被禁止的页面),以及商业爬虫无视网站所有者明确意图时所面临的法律与声誉后果。

对于商业爬取,robots.txt 在两方面至关重要。从法律角度看,忽略明确的 `Disallow` 指令可被视为 CFAA / 计算机滥用案件中恶意访问的证据(尤其是在美国 hiQ 诉 LinkedIn 裁决之后)。从操作角度看,禁止特定路径的网站通常会在这些路径上部署更强的反爬虫防护——`Disallow: /search` 通常意味着爬取 `/search` 将触发比爬取网站其他部分更严密的防御措施。

工作原理

当爬虫在某个域名上启动时,它会首先获取 `/robots.txt` 并解析其中的指令。该文件使用简单的语法:`User-agent: ` 块指定以下规则适用于哪个爬虫(`*` 表示所有爬虫),`Disallow: ` 屏蔽特定的 URL 前缀,`Allow: ` 在已屏蔽的前缀中重新允许某些路径,可选的 `Crawl-delay: ` 和 `Sitemap: ` 指令提供元数据。

爬虫随后会对每个准备抓取的 URL 与规则进行比对,并跳过被禁止的路径。部分爬虫会将 robots.txt 缓存 24 小时;成熟的生产级爬虫则会更频繁地刷新,以捕获最新变更。

类型

禁止

告知爬虫不得访问与该前缀匹配的URL。`Disallow: /admin/` 会排除 /admin/ 下的所有内容。这是最常用的指令。

允许

重新允许被禁止前缀中的特定路径。`Disallow: /private/` + `Allow: /private/public-data/` 会排除 /private/,但允许 /private/public-data/。

User-agent

针对特定爬虫。`User-agent: Googlebot` 仅将以下规则应用于 Google 的爬虫。`User-agent: *` 作为回退规则应用于所有爬虫。

Crawl-delay

建议请求之间的最小延迟(以秒为单位)。Bing 和 Yandex 会遵守此设置;Google 会忽略它(请改用 Search Console 的抓取频率设置)。

网站地图

指向网站的 XML 站点地图。`Sitemap: https://example.com/sitemap.xml`。帮助爬虫发现网站希望被索引的所有 URL。

常见使用场景

告诉搜索引擎哪些页面不需要被索引
防止爬虫对高成本端点发起大量请求
将爬虫指向规范站点地图
将管理员/私有路径排除在公开索引之外
为协作爬虫指定crawl-delay
记录全站爬虫策略
常见问题

常见问题

关于以下内容的常见问题 robots.txt.

robots.txt本身并不能强制执行。robots.txt只是建议性的——服务器不会强制执行其中的规则,不配合的爬虫可以直接忽略它。然而,法院(尤其是美国依据CFAA提起的案件)曾将明确的Disallow指令作为网站所有者意图的证据,这会削弱爬虫方在计算机滥用案件中的论据。应将其视为合规抓取的法律底线。

是的,在大多数情况下如此。遵守robots.txt是在发生争议时证明善意访问的最低成本方式,而且被禁止的路径通常也有更强的反爬虫保护。部分商业爬取确实会出于合法的公开数据用途(搜索引擎排名分析、竞争情报)而忽略robots.txt——这是一个法律判断,建议您咨询法律顾问后再做决定。

始终位于根路径:`https://example.com/robots.txt`。每个主机只有一个 robots.txt 文件。它必须以 200 OK 响应和 `Content-Type: text/plain` 提供才有效。

您可以使用 `User-agent: *` + `Disallow: /` 请求所有遵守规则的爬虫停止抓取。行为不当的爬虫会忽略此设置。要真正屏蔽爬虫,您需要服务器端的强制措施(限速、Cloudflare 等反机器人工具、IP 白名单)。robots.txt 是一种礼貌性请求,而非安全机制。

对于抓取,是的——Googlebot 不会抓取被禁止的页面。对于索引,大多数情况下是的,但并非总是如此。如果一个被禁止的页面被其他大量页面链接,Google 可能仅凭链接信号将其纳入搜索结果,并附上该页面无法被抓取的提示。若要完全阻止索引,请使用 `noindex` meta 标签,而非 robots.txt。

robots.txt 在 URL 模式级别运行,每次抓取会话获取一次。meta robots 标签(`<meta name='robots' content='noindex'>`)是针对每个页面的,嵌入在 HTML 头部中。robots.txt 阻止抓取;meta robots 阻止已抓取页面被索引。它们用途不同,通常配合使用。