robots.txt 文件是网站对搜索引擎抓取工具1的抓取行为的规则声明。robots.txt文件中写明了什么搜索引擎抓取工具可以做什么事。它就类似于学校的学生行为规范。
robots.txt 主要用于限制抓取工具对资源访问。例如不想让抓取工具抓取不重要或者相似的网页。
robots.txt 除了可以规定抓取工具对网页的抓取行为,还可以规定抓取工具对媒体文件以及资源文件的抓取行为。
需要注意的是,robots.txt 并不能完全阻止网页被收录。原因如下:
对robots.txt有了初步了解后,接下来就是创建robots.txt。
创建robots.txt步骤非常简单:编写 robots.txt 文件,然后将写好的robots.txt文件上传的服务器的正确位置即可。
先来了解 robots.txt 的构成:
robots.txt 是一种遵循漫游器排除标准的纯文本文件,由一条或多条规则组成。每条规则可禁止或允许特定抓取工具抓取相应网站的指定文件路径下的文件。除非您在 robots.txt 文件中另行指定,否则所有文件均隐式允许抓取。
——摘抄自《创建 robots.txt 文件》
robots.txt 是由一条条规则组成的。创建robots.txt,也就是编写robots.txt规则然后将编写好的文件保存为纯文本文件。
下面是一个适用于Google的robots.txt文件,其包含两条规则:
User-agent: Googlebot
Disallow: /nogooglebot/
User-agent: *
Allow: /
其含义如下:
http://example.com/nogooglebot/
开头的网址。注意:robots.txt 文件必须是采用
UTF-8
编码(包括 ASCII)的文本文件。Google可能会忽略不属于UTF-8
范围的字符,从而可能会导致 robots.txt 规则无效。
一条规则主要由User-agent
、allow
、disallow
三个指令组成:
指令 | 是否必需 | 数值类型 | 描述 |
---|---|---|---|
User-agent |
required(每条规则需含一个或多个) | [name] | 指定了规则适用的抓取工具。必须在 allow /disallow 的前面。指定多个抓取工具时可以列举多个 User-agent 。User-agent: * 表示匹配所有的抓取工具。 |
allow |
optional(每条规则需含至少一个或多个 disallow 或 allow 条目) |
[path] | 其值为路径/目录(相对于根网域)。用于指定允许访问的目录与网页。如果指定的是网页,则必须提供浏览器中显示的完整网页名称且必须以 / 字符开头;如果指定的是某个目录,则必须以 / 标记结尾。区分大小写。 |
disallow |
optional(每条规则需含至少一个或多个 disallow 或 allow 条目) |
[path] | 其值为路径/目录(相对于根网域)。用于指定禁止访问的目录与网页。如果指定的是网页,则必须提供浏览器中显示的完整网页名称且必须以 / 字符开头;如果指定的是某个目录,则必须以 / 标记结尾。区分大小写。 |
sitemap |
optional(每个文件可含零个或多个 sitemap 条目) | [absoluteURL] | 其值为绝对路径。用于指出网站的站点地图的位置。 |
举例:
user-agent: otherbot
disallow: /kale
sitemap: https://example.com/sitemap.xml
一般来说,一个user-agent
指令搭配allow
/disallow
就组成了一条规则。如
# 规则一
user-agent: e
disallow: /g
# 规则二
user-agent: f
disallow: /g
不过,上面两个规则是可以组合在一块写的:
# 规则一与规则二合并成一组
user-agent: e
user-agent: f
disallow: /g
即,将具有相关规则的user-agent
指令写在一块,组成规则组。
事实上,一条user-agent
的规则也是一个规则组,它是最小、最基本的规则组。
又如:
user-agent: a
disallow: /c
user-agent: b
disallow: /d
user-agent: e
user-agent: f
disallow: /g
user-agent: h
上面示例中有四个不同的规则组:
robots.txt 文件包含一个或多个规则组;
每个组由多条规则或指令(命令)组成,每条指令各占一行。每个组都以
User-agent
行开头,该行指定了组适用的目标。每个组包含以下信息:
组的适用对象(用户代理)
代理可以访问的目录或文件。
代理无法访问的目录或文件。
抓取工具会按从上到下的顺序处理组。一个用户代理只能匹配1个规则集(即与相应用户代理匹配的首个最具体组)。
系统的默认假设是:用户代理可以抓取所有未被
disallow
规则屏蔽的网页或目录。规则区分大小写。例如,
disallow: /file.asp
适用于https://www.example.com/file.asp
,但不适用于https://www.example.com/FILE.asp
。
#
字符表示注释的开始处。——摘抄自《创建 robots.txt 文件》
写好 robots.txt 后,剩下的就是将 robots.txt 放置到服务器的正确位置——robots.txt文件必须位于其要应用到的网站主机的根目录下,且文件名必须是robots.txt。
基于上面的要求,可以得出如下几个要点:
https://www.example.com/
下所有网址的抓取,就必须将 robots.txt 文件放在 https://www.example.com/robots.txt
下,一定不能将其放在子目录中(例如 https://example.com/pages/robots.txt
下)。以 Google 为例
对于某个抓取工具而言,只有一个组是有效的。Google抓取工具会在robots.txt文件中查找与抓取工具相匹配的最具体的规则组,从而确定正确的规则组。其他组会被忽略。所有非匹配文本都会被忽略(例如,
googlebot/1.2
和googlebot*
均等同于googlebot
)。这与robots.txt文件中的组顺序无关。如果为抓取工具声明多个特定规则组,则这些规则组中适用于该抓取工具的规则会在自动合并成一个规则组。 特定的抓取工具的规则组和全局规则组 (
*
) 不会合并。——摘抄自《Google 如何解读 robots.txt 规范》
如果 robots.txt 文件中有多个规则组与特定抓取工具相关,则 Google 抓取工具会在内部合并这些组。如:
user-agent: googlebot-news
disallow: /fish
user-agent: *
disallow: /carrots
user-agent: googlebot-news
disallow: /shrimp
抓取工具会自动合并并分组:
user-agent: googlebot-news
disallow: /fish
disallow: /shrimp
user-agent: *
disallow: /carrots
如果想要进一步了解,可通过此链接学习:https://developers.google.com/search/docs/advanced/robots/robots_txt#order-of-precedence-for-user-agents
匹配 robots.txt 规则与网址时,抓取工具会根据规则路径的长度使用最具体的规则。如果规则(包括使用通配符的规则)存在冲突,Google 将使用限制性最弱的规则。
相关案例说明:https://developers.google.com/search/docs/advanced/robots/robots_txt#order-of-precedence-for-rules
搜索引擎抓取工具是一种由搜索引擎公司开发的自动访问网站并收录网站的脚本机器人。俗称爬虫。 ↩︎