robots txt怎么写

作者: loooooong 分类: 采编内容 发布时间: 2020-09-15 15:56

robots.txt简介

robots.txt 文件应位于您网站的根目录下。也就是说,如果您的网站是 www.example.com,则 robots.txt 文件的路径应为 www.example.com/robots.txt。robots.txt 是一种遵照漫游器排除标准创建的纯文本文件,由一条或多条规则组成。每条规则可禁止(或允许)特定抓取工具抓取相应网站中的指定文件路径。

下面是一个包含两条规则的简单 robots.txt 文件,具体解析请见下文:

# Group 1
User-agent: Googlebot
Disallow: /nogooglebot/

# Group 2
User-agent: *
Allow: /

Sitemap: http://www.example.com/sitemap.xml

解析:

  1. 名为“Googlebot”抓取工具的用户代理不应抓取 http://example.com/nogooglebot/ 文件夹或任何子目录。
  2. 所有其他用户代理均可访问整个网站。(不指定这条规则也无妨,结果是一样的,因为完全访问权限是系统默认的前提。)
  3. 网站的站点地图文件位于 http://www.example.com/sitemap.xml。

我们稍后会提供一个更详细的示例。

1. 基本的 robots.txt 准则

以下是与 robots.txt 文件有关的基本准则。我们建议您阅读 robots.txt 文件的完整语法,因为 robots.txt 语法中有一些您需要了解的细微行为。

格式和位置

您几乎可以使用任意文本编辑器创建 robots.txt 文件。您所用的文本编辑器应能够创建标准 UTF-8 文本文件;请勿使用文字处理软件,因为此类软件通常会将文件保存为专有格式,且可能会向文件中添加非预期的字符(如弯引号),而这可能会导致抓取工具无法顺利读取 robots.txt 文件。

使用 robots.txt 测试工具为您的网站编写或修改 robots.txt 文件。借助此工具,您可以测试自己网站的语法和行为。

格式和位置规则:

  • 文件必须命名为 robots.txt。
  • 您的网站只能有 1 个 robots.txt 文件。
  • robots.txt 文件必须位于要应用到的网站主机的根目录下。例如,要控制对 http://www.example.com/ 下所有网址的抓取,就必须将 robots.txt 文件放在 http://www.example.com/robots.txt 下,而不能将其放在子目录(例如 http://example.com/pages/robots.txt)下。如果您不确定如何访问自己的网站根目录,或者需要相应权限才能进行访问,请与网站托管服务提供商联系。如果您无法访问自己的网站根目录,请改用其他屏蔽方法(例如元标记)。
  • robots.txt 文件可应用到子网域(例如 http://website.example.com/robots.txt)或非标准端口(例如 http://example.com:8181/robots.txt)。
  • 备注是指 # 标记后的所有内容。

语法

  • robots.txt 必须是 UTF-8 编码的文本文件(包括 ASCII)。不能使用其他字符集。
  • robots.txt 文件包含一个或多个组。
  • 每个组由多条规则或指令(命令)组成,每条指令各占一行。
  • 每个组包含以下信息:
    • 组的适用对象(用户代理)
    • 代理可以访问哪些目录或文件,和/或
    • 代理无法访问哪些目录或文件。
  • 系统会按照从上到下的顺序处理这些组,而且一个用户代理只能匹配 1 个规则集(即与相应用户代理匹配的首条最具体的规则)。
  • 系统的默认假设是:用户代理可以抓取所有未被 Disallow: 规则禁止访问的网页或目录。
  • 规则区分大小写。例如,Disallow: /file.asp 适用于 http://www.example.com/file.asp,但不适用于 http://www.example.com/FILE.asp

robots.txt 文件中可以使用下列指令:

  • User-agent:[必需,每个组需含一个或多个 User-agent 条目] 此规则的适用搜索引擎漫游器(即网页抓取工具软件)的名称。这是每条规则的首行内容。Web Robots Database 或 Google 用户代理列表中列出了大多数 Google 用户代理名称。支持使用星号 (*) 通配符表示路径前缀、后缀或整个字符串。如下例中那样使用星号 (*) 可匹配除各种 AdsBot 抓取工具之外(此类抓取工具必须明确指定)的所有抓取工具。(查看 Google 抓取工具名称列表。)示例:# 示例 1:仅屏蔽 Googlebot
    User-agent: Googlebot
    Disallow: /

    # 示例 2:屏蔽 Googlebot 和 Adsbot
    User-agent: Googlebot
    User-agent: AdsBot-Google
    Disallow: /

    # 示例 3:屏蔽除 AdsBot 抓取工具之外的所有抓取工具
    User-agent: *
    Disallow: /
  • Disallow:[每条规则需含至少一个或多个 Disallow 或 Allow 条目] 用户代理不应抓取的目录或网页(相对于根网域而言)。如果要指定网页,应提供浏览器中显示的完整网页名称;如果要指定目录,则应以标记“/”结尾。支持使用通配符“*”表示路径前缀、后缀或整个字符串。
  • Allow:[每条规则需含至少一个或多个 Disallow 或 Allow 条目] 上文中提到的用户代理应抓取的目录或网页(相对于根网域而言)。此指令用于替换 Disallow 指令,从而允许抓取已禁止访问的目录中的子目录或网页。如果要指定网页,就应提供浏览器中显示的完整网页名称;如果要指定目录,则应以标记“/”结尾。支持使用通配符“*”表示路径前缀、后缀或整个字符串。
  • Sitemap:[可选,每个文件可含零个或多个 Sitemap 条目] 相应网站的站点地图的位置。必须是完全限定的网址;Google 不会假定存在或检查是否存在 http/httpswww.non-www 网址变体。站点地图是一种用于指示 Google 应抓取哪些内容(而不是可以或无法抓取哪些内容)的好方法。详细了解站点地图。 示例:Sitemap: https://example.com/sitemap.xml
    Sitemap: http://www.example.com/sitemap.xml

其他规则会被忽略。

再看一个示例文件

robots.txt 文件包含一个或多个组,其中每个组都以 User-agent 行(指定相应组适用的目标)开头。下面是一个包含两个组的文件;内嵌的备注分别对每个组进行了解析:

# Block googlebot from example.com/directory1/... and example.com/directory2/...
# but allow access to directory2/subdirectory1/...
# All other directories on the site are allowed by default.
User-agent: googlebot
Disallow: /directory1/
Disallow: /directory2/
Allow: /directory2/subdirectory1/

# Block the entire site from anothercrawler.
User-agent: anothercrawler
Disallow: /

2. 实用的 robots.txt 规则

下面是一些常见的实用 robots.txt 规则:

规则示例
禁止抓取整个网站。 请注意,在某些情况下,Google 即使未抓取网站的网址,仍可能会将其编入索引。注意:这不适用于各种 AdsBot 抓取工具,此类抓取工具必须明确指定。User-agent: *
Disallow: /
禁止抓取某一目录及其内容(在目录名后面添加一道正斜线)。请注意,若想禁止访问私密内容,则不应使用 robots.txt,而应改用适当的身份验证机制。对于 robots.txt 文件所禁止抓取的网址,Google 仍可能会在不进行抓取的情况下将其编入索引;另外,由于 robots.txt 文件可供任何人随意查看,因此可能会泄露您的私密内容的位置。User-agent: *
Disallow: /calendar/
Disallow: /junk/
仅允许使用某一抓取工具User-agent: Googlebot-news
Allow: /

User-agent: *
Disallow: /
允许使用除某一抓取工具以外的其他所有抓取工具User-agent: Unnecessarybot
Disallow: /

User-agent: *
Allow: /

禁止抓取某一网页(在正斜线后面列出网页):User-agent: *
Disallow: /private_file.html
禁止 Google 图片访问某一特定图片:User-agent: Googlebot-Image
Disallow: /images/dogs.jpg
禁止 Google 图片访问您网站上的所有图片:User-agent: Googlebot-Image
Disallow: /
禁止抓取某一特定类型的文件(例如 .gif):User-agent: Googlebot
Disallow: /*.gif$
禁止抓取整个网站,但允许在这些网页上显示 AdSense 广告(禁止使用除 Mediapartners-Google 以外的所有网页抓取工具)。这种方法会阻止您的网页显示在搜索结果中,但 Mediapartners-Google 网页抓取工具仍能分析这些网页,以确定要向您网站上的访问者显示哪些广告。User-agent: *
Disallow: /

User-agent: Mediapartners-Google
Allow: /
匹配以某一特定字符串结尾的网址 – 需使用美元符号 ($)。例如,示例代码会禁止访问以 .xls 结尾的所有网址:User-agent: Googlebot
Disallow: /*.xls$

摘要

本文档详细介绍了 Google 处理 robots.txt 文件的方式,这种文件让您可以控制 Google 的网站抓取工具如何抓取可公开访问的网站并将其编入索引。

3. 文件位置和有效范围

robots.txt 文件必须位于主机的顶级目录中,可通过适当的协议和端口号进行访问。robots.txt 的通用协议都是基于 URI 的协议,而专用于 Google 搜索(例如,用于抓取网站)的协议为“http”和“https”。按照 http 和 https 协议,使用 HTTP 无条件 GET 请求来抓取 robots.txt 文件。

Google 专用:Google 同样接受和遵循 FTP 网站的 robots.txt 文件。基于 FTP 的 robots.txt 文件可在匿名登录的情况下通过 FTP 协议访问。

robots.txt 文件中列出的指令仅适用于该文件所在的主机、协议和端口号。和其他网址一样,robots.txt 文件的网址也区分大小写。

4. 有效 robots.txt 网址的示例

robots.txt 网址示例
http://example.com/robots.txt适用于:·       http://example.com/·       http://example.com/folder/file不适用于:·       http://other.example.com/·       https://example.com/·       http://example.com:8181/这属于一般情况。该网址对其他子网域、协议或端口号来说无效;对同一个主机、协议和端口号上的所有子目录中的所有文件有效。
http://www.example.com/robots.txt适用于:http://www.example.com/不适用于:·       http://example.com/·       http://shop.www.example.com/·       http://www.shop.example.com/子网域上的 robots.txt 仅对该子网域有效。
http://example.com/folder/robots.txtrobots.txt 文件无效。抓取工具不会检查子目录中是否包含robots.txt 文件。
ftp://example.com/robots.txt适用于:ftp://example.com/不适用于:http://example.com/Google 专用:我们会对 FTP 资源使用 robots.txt。
http://212.96.82.21/robots.txt适用于:http://212.96.82.21/不适用于:http://example.com/(即使托管在 212.96.82.21 上)以 IP 地址作为主机名的 robots.txt 仅在抓取作为主机名的该 IP 地址时有效。此类 robots.txt 并不会自动对该 IP 地址上托管的所有网站有效,但该文件可能是共享的,在此情况下,该文件也可以在共享主机名下使用。
http://example.com:80/robots.txt适用于:·       http://example.com:80/·       http://example.com/不适用于:http://example.com:81/标准端口号(http 为 80;https 为 443;ftp 为 21)等同于其默认的主机名。另请参阅 [portnumbers]
http://example.com:8181/robots.txt适用于:http://example.com:8181/不适用于:http://example.com/非标准端口号上的 robots.txt 文件仅对通过这些端口号提供的内容有效。


5. 处理 HTTP 结果代码

一般情况下,robots.txt 文件会出现三种不同的抓取结果:

  • 全部允许:所有内容均可抓取。
  • 全部禁止:所有内容均不能抓取。
  • 有条件地允许:robots.txt 中的指令决定是否可以抓取某些内容。

6. 文件格式

文件应该是用 UTF-8 编码的纯文本格式,其中包含由 CR、CR/LF 或 LF 分隔的多个行。

系统将只考虑有效的行,而忽略其他所有内容。例如,如果获得的文档为 HTML 网页,系统只会考虑网页中有效的文本行,而忽略其他内容,并且既不显示警告也不报告错误。

如果因为使用某种字符编码而引入了不属于 UTF-8 子集的字符,则可能导致文件内容解析错误。

系统会忽略 robots.txt 文件开头可选的 Unicode BOM(字节顺序标记)。

每个有效行均由一个字段、一个冒号和一个值组成。空格是可选的(但建议使用空格以提高可读性)。您可以使用“#”字符在文件中的任何位置添加注释,系统会将所有位于注释开头和行结尾之间的内容视为注释,并且忽略这部分内容。常见格式为 <field>:<value><#optional-comment>。系统会忽略行开头和结尾的空格。

<field> 元素不区分大小写。<value> 元素可能会区分大小写,具体取决于 <field> 元素。

我们不支持处理存在轻微错误或拼写错误的 <field> 元素(例如,“user-agent”错写成了“useragent”)。

各抓取工具可能会单独设定文件大小的上限,并忽略超过该上限的内容。Google 目前强制执行的文件大小上限为 500 KiB。要减小 robots.txt 文件的大小,请将会导致 robots.txt 文件过大的指令整合在一起。例如,将已排除的内容放在一个单独的目录中。

7. 正式语法/定义

以下是 RFC 5234 中所述的 Augmented Backus-Naur Form (ABNF) 说明

8. 行和规则分组

一个或多个用户代理行,后跟一个或多个规则。如果出现另一个用户代理行或到了文件末尾,即表示组结束。最后一个组可能没有规则,这意味着它暗含的意思是允许所有内容。

示例组:

user-agent: a
disallow: /c

user-agent: b
disallow: /d

user-agent: e
user-agent: f
disallow: /g

user-agent: h

上面指定了四个不同的组:

  • “a”为一组
  • “b”为一组
  • “e”和“f”为一组
  • “h”为一组

除最后一个组(组“h”)外,每个组都有自己的组成员行。最后一个组(组“h”)为空。注意:您可以选择使用空格和空白行提高可读性。

9. 用户代理的优先顺序

对于某个抓取工具而言,只有一个组是有效的。抓取工具必须查找最具体的匹配用户代理,从而确定正确的行组。抓取工具会忽略其他所有组。用户代理区分大小写。所有非匹配文本都会被忽略(例如,googlebot/1.2 和 googlebot* 均等同于 googlebot)。这与 robots.txt 文件中的组顺序无关。

如果特定用户代理有多个组,则这些组中适用于特定用户代理的所有规则会合并在一起。

示例

以下面的 robots.txt 文件为例:

user-agent: googlebot-news
(group 1)

user-agent: *
(group 2)

user-agent: googlebot
(group 3)

以下为抓取工具选择相关组的方法:

另请参阅 Google 的抓取工具和用户代理字符串

10. 组成员规则

本部分仅说明标准的组成员规则。对于抓取工具,这些规则也称为“指令”。这些指令以 directive: [path] 的形式指定,其中 [path] 可选。默认情况下,指定的抓取工具没有抓取限制。没有 [path] 的指令会被忽略。

如果指定了 [path] 值,该路径值将被视作 robots.txt 文件抓取网站的根目录的相对路径(使用相同的协议、端口号、主机和域名)。路径值必须以“/”开头,表示根目录。路径区分大小写。有关详情,请参阅下面的“基于路径值的网址匹配”部分。

disallow

disallow 指令指定相应抓取工具不能访问的路径。如果未指定路径,该指令将被忽略。

用法:

disallow: [path]

allow

allow 指令指定相应抓取工具可以访问的路径。如果未指定路径,该指令将被忽略。

用法:

allow: [path]

11. 基于路径值的网址匹配

以路径值为基础,确定某项规则是否适用于网站上的特定网址。不使用通配符时,路径可用于匹配网址的开头(以及以相同路径开头的任何有效网址)。路径中的非 7 位 ASCII 字符可以按照 RFC 3986 作为 UTF-8 字符或百分号转义的 UTF-8 编码字符纳入。

对于路径值,Google、Bing 和其他主流搜索引擎支持有限形式的“通配符”。这些通配符包括:

  • * 表示任何有效字符的 0 个或多个个案。
  • $ 表示网址结束。
路径匹配示例
/匹配根目录以及任何下级网址
/*等同于 /。结尾的通配符会被忽略。
/fish匹配项:·       /fish·       /fish.html·       /fish/salmon.html·       /fishheads·       /fishheads/yummy.html·       /fish.php?id=anything
不匹配项:·       /Fish.asp·       /catfish·       /?id=fish注意:比对时区分大小写。
/fish*等同于 /fish。结尾的通配符会被忽略。
匹配项:·       /fish·       /fish.html·       /fish/salmon.html·       /fishheads·       /fishheads/yummy.html·       /fish.php?id=anything
不匹配项:·       /Fish.asp·       /catfish·       /?id=fish
/fish/结尾的斜杠表示此项与此文件夹中的任何内容均匹配。
匹配项:·       /fish/·       /fish/?id=anything·       /fish/salmon.htm
不匹配项:·       /fish·       /fish.html·       /Fish/Salmon.asp
/*.php匹配项:·       /filename.php·       /folder/filename.php·       /folder/filename.php?parameters·       /folder/any.php.file.html·       /filename.php/
不匹配项:·       /(即使其映射到 /index.php)·       /windows.PHP
/*.php$匹配项:·       /filename.php·       /folder/filename.php
不匹配项:·       /filename.php?parameters·       /filename.php/·       /filename.php5·       /windows.PHP
/fish*.php匹配项:·       /fish.php·       /fishheads/catfish.php?parameters
不匹配项:/Fish.PHP

12. Google 支持的非组成员行

Google、Bing 和其他主流搜索引擎支持 sitemap(如 sitemaps.org 所定义)。

用法:

sitemap: [absoluteURL]

[absoluteURL] 指向站点地图、站点地图索引文件或等效网址。网址不需要与 robots.txt 文件位于同一主机上。 sitemap 条目可以有多个。作为非组成员行,它们不依赖于任何特定的用户代理,只要未加禁止,所有抓取工具都可以追踪它们。

组成员行的优先顺序

在组成员一级,尤其是对于 allow 和 disallow 指令,最具体的规则优先级最高;根据 [path] 条目的长度,长度越短,越不具体。如果规则(包括使用通配符的规则)存在冲突,系统将使用限制性最弱的规则。

13. 测试 robots.txt 标记

Google 提供了两种测试 robots.txt 标记的选项:

  1. Search Console 中的 robots.txt 测试工具。
  2. Google 的开源 robots.txt 库(也用在 Google 搜索中)。

画重点

  1. 文件命名必须为robots.txt,必须存放站网站服务器根目录,且只可以有一个;
  2. 访问网站robots文件返回4XX状态码时,会假定网站不存在有效的robots文件,Google则认为不存在任何限制,即表示抓取时,全部允许;
  3. robots文件在一般情况下最多会缓存24小时,即在修改robots文件后,谷歌会在24个小时内感知到这个变化;
  4. 对某个抓取工具而言,只有一个指令是有效的。与robots文件中代理(UA)限制与出现的顺序无关,区分大小写,会忽略非匹配文本;
  5. allow和disallow指令的以最具体的规则优先级最高,而限制规则的字符长度越长,越具体。即 
  6. allow: /w/ 
  7. disallow: /w/b/
  8. 含义为允许/w/目录下除/w/b/之外的目录被抓取;
  9. 特殊匹配$用于匹配以某些字符结尾的文件,例如:Disallow: .gif$,表示禁止抓取任何以以gif结尾的url;
  10.   特殊匹配*用于匹配任意0到多个字符,例如:Disallow: /w/*?dspm=,表示禁止抓取同时包含/w/和?dspm=的URL;
  11. robots文件中的指令区分大小写;
  12. robots文件指令默认对Adsbot不生效,即:如果不设置任何有关Adsbot的限制指令,则默认Adsbot是可以抓取网站所有内容的。如果需要对Adsbot有限制,则需要专门针对User Agent: Adsbot设置单独指令;
  13. robots文件屏蔽抓取并不能阻止网站内容被收录且出现在搜索引擎结果中,如果在其他网站有被屏蔽抓取内容的链接,则该链接页面仍然有可能被收录且出现在搜索引擎结果中。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

专栏推荐