robots.txt 是由网站管理员创建的通过“Disallow”和“Allow”等命令告诉网络爬虫网站上哪些内容让抓、哪些内容不让抓的文件,该文件是 REP 网络爬虫排除协议 的一部分。
REP 是 robots exclusion protocol 的首字母缩写,也就是网络爬虫排除协议,规定网络上哪些内容可以爬取的一组网络标准,且服务于用户自己的需求,协议还包括指引搜索引擎怎么去处理 meta robots、页面、目录、全站等内容。
1. 基本格式
User-agent: [user-agent name]
Disallow: [URL string not to be crawled]
这两行代码构成一个基本的 robots.txt 文件,但一个 Robots.txt 文件中也可以写多个搜索引擎 [user agents] 和抓取指令。

在每一组指令中,每一行的“disallow”和“allow”只对该组的搜索引擎有效(每组中允许多个 User agent),如果文件中的某一个规则针对不止一个搜索引擎,那搜索引擎的爬虫只会遵循最具体的那一组指令。

像上面的例子,针对3个 user-agents: Msnbot, discobot 和 Slurp 都单独写了对应规则,所以这3个搜索引擎只会执行对应的那个组的指令,其他的搜索引擎则会执行 user-agent: * 这个组的指令。
2. robots.txt 怎么起作用
其实搜索引擎每天只有两件事儿可以做:
1)爬取网络上的内容。
2)对爬取的内容进行索引和排序,让搜索的用户快速地找到想要的信息。
为了爬取各个网站,搜索引擎跟着一个又一个的链接,爬完了一个网站的链接再爬另一个,从而能够爬取上千上万的链接和网站,这种爬取的动作被称为“Spidering”。
当搜索引擎爬虫到达某个网站之后,在爬取网站的链接之前都会先检查该网站根目录下的 robots.txt 文件。如果网站有这个文件,爬虫会先读取文件中的规则看看是要怎么样对这个网站进行抓取;如果 robots.txt 文件没有规定禁止抓取网站中的某些页面,或者这个网站没有 robots.txt 文件,就会对网站的所有信息进行抓取。
3. robots.txt 语句
robots.txt 语句可以理解为 robots.txt 文件的语言,一般有 5 个最常见的语句。
- User-agent: 指定的某个网络爬虫,一般就是指某个搜索引擎,每个搜索引擎都有一个对应的 user agent,常见的 user-agent 信息。
- Disallow: 用于禁止某个搜索引擎抓取某个或某类页面,一行写一个 URL。
- Allow:只适用于 Google,允许 Google 的爬虫可以访问某个页面或者某个目录。
- Crawl-delay: 指定某个爬虫在爬取网站页面内容之前等待多少秒,这条指令目前不适用于 Google 的,但可以在 Google Search Console 中设置爬取频率。
- Sitemap: 用于指引网站对应的 sitemap 地址,目前只适用于 Google, Ask, Bing 和 Yahoo。
robots.txt 执行指令遵循从上往下的顺序,但 Google 和 Bing 遵循 “专一性”原则,也就是写的越细就越先执行细节的那一条。
以下的段落执行顺序:所有的搜索引擎抓取网站(包括 Google 和 Bing)不允许抓取 /about/ 目录下的内容,除了/about/company/ 内容之外。
User-agent: *
Allow: /about/company/
Disallow: /about/
以下的段落执行顺序:所有的搜索引擎抓取网站(不包括 Google 和 Bing),不允许抓取 /about/ 目录下的任何内容,包括 /about/company/。但 Google 和 Bing 可以抓取 /about/company/ 目录下的内容。
User-agent: *
Disallow: /about/
Allow: /about/company/
当指定允许或者禁止爬取某些特定的 URL 时,robots.txt 文件会变得比较复杂。实际上,robots.txt 文件是允许通过模式匹配来覆盖一组 URLs 的。Google 和 Bing 都支持正则表达匹配,可用于指定某组 URL 或者某些子目录。
- 表示任何字符序列的通配符。
Google 有提供一系列常见的模式匹配语句和案例:https://support.google.com/webmasters/answer/6062596?hl=en。
4. 为什么需要 robots.txt 文件
robots.txt 文件控制了所有的搜索引擎如何获取你网站上的内容。如果你一不小心禁止了 Google 抓取整个网站,那就凉凉了。
但是有很多情况下,robots.txt 文件还是很有用的:
- 防止网站的重复内容出现在用户的搜索结果中(注意 meta robots 通常是更好的选择)。
- 将网站的某些内容保密(比如一些测试的临时站点)。
- 保证网站内部的搜索结果不会出现在搜索引擎的搜索结果中(如果你网站是有做搜索的话)。
- 指定网站的 sitemap 位置。
- 禁止搜索引擎抓取网站上的某些文件,比如图片、PDF 等。
- 指定延迟爬取以防爬虫一次加载多个内容时网站服务器过载。
5. robots.txt 文档案例
- 不允许任何搜索引擎抓取任何内容(包括了首页)。
User-agent: *
Disallow: /
- 允许所有搜索引擎抓取任何内容(包括了首页)。
User-agent: *
Disallow:
- 禁止某个搜索引擎抓取某个目录。
User-agent: Googlebot
Disallow: /example-subfolder/
- 禁止某个搜索引擎抓取某个页面。
User-agent: Bingbot
Disallow: /example-subfolder/blocked-page.html
6. robots.txt 文件注意事项
- 为了能让各个搜索引擎的爬虫能够找到 robots.txt 文件,必须把它放到网站的根目录。
- robots.txt 文件是区分大小写的,文件必须命名为:robots.txt。
- 有些 user agents 可能会忽略网站的 robots.txt 文件,常见的比如病毒机器人或邮件地址爬虫。
- robots.txt 文件是公开可见的,这就意味着任何人都可以看到哪些页面是想让搜索引擎抓的,哪些是不让的。
- 主域名下的每个子域都使用分开的 robots.txt 文件,比如:blog.example.com 和 example.com 是各有一个对应的 robots.txt 文件的,即 blog.example.com/robots.txt 和 example.com/robots.txt。
- 可以用 robots.txt 文件来告诉搜索引擎网站的所有 sitemaps 的地址。
- robots.txt 是一个实际的文本文件,meta robots 和 x-robots 都属于 meta 指令,三者各有不同的功能,robots.txt 规定站点或者目录范围的爬取行为,而 meta robots 和 x-robots 则是规定某个页面或者某页面的元素的索引行为。
补充一点,Robots meta 标签用于限制搜索引擎对当前页面的抓取,存放在页面的头部中。
<html>
<head>
<title>...<title>
<meta name="robots" content="noindex,nofollow">
</head>
.....
常见的content属性值包括:
- NOINDEX — 不索引当前页。
- NOFOLLOW — 不跟踪当前页面中的所有链接。
- NOARCHIVE — 在搜索结果中不保存当前页面的快照 。
- NOSNIPPET — 搜索结果中不采用当前页面的头部信息,且不保存当前页面的快照。
- NOODP — 在搜索结果中不使用。
7. SEO 实战要点
- 确保你没有禁掉网站上需要被抓取的内容。
- 被禁掉的页面上的链接将不会被爬取,这就意味着除非这些链接在其他的可被抓取的页面上,否则这些链接将不会被抓取,也不会被收录。
- 被禁止掉的页面权重将不会被传递到目标链接,如果你需要这些页面的权重被传递到相应的链接,可以用其他的方式禁止抓取这些页面。
- 不要使用 robots.txt 文件禁掉敏感数据,因为有可能其他页面直接链接到包含私人数据的页面(从而绕过根目录的 robots,txt 指令),然后还是有可能被爬取和索引。
- 有些搜索引擎可能有多个 user-agents,同一个搜索引擎的 user-agents 基本上都遵循相同的规则,因此没有必要针对同一个搜索引擎的多个user-agents 配置不同的指令,但如果有精力的话也可以通过这种方式微调网站内容的抓取方式。
- 搜索引擎有可能缓存 robots.txt 的内容,但通常都是每天至少更新一次缓存内容的,如果更改了 robots.txt 文件并且希望更快地获得更新,可以向 Google 提交 robots.txt 的网址。