robots.txt 文件的一些记录

发现很多关于 robots.txt 的文章写的比较笼统,有些存在不规范甚至错误的内容。乌帮图收集整理了多篇文章,记录一些有关 robots.txt 文件不常提及的问题。

一、什么是 robots.txt?

乌帮图的理解:robots.txt 文件是站点和搜索引擎进行沟通的工具之一,是一个“君子协议”或“道德约束”,而不是硬性标准。所以,通常它只能“建议”而不是“要求”搜索引擎该如何抓取网站内容。

二、哪些搜索引擎遵循 robots 协议?

目前在乌帮图博客访问日志中常见的几家主流搜索引擎,大部分在其 FAQ 中直接或间接的声明自己的爬虫遵循 robots 协议,如:

1、Google:“Googlebot 和所有正规的搜索引擎漫游器都会遵循 robots.txt 文件中的指令,但某些不良漫游器和垃圾内容发布者则不会。” 详情页

2、Bing:“Robots.txt files can be configured to tell our crawlers how to interact with your website.” 详情页

3、Yandex:“Yandex supports the Robots Exclusion Protocol with advanced features.” 详情页

4、百度:“Baiduspider 遵守互联网 robots 协议”。详情页

5、搜狗:“sogou spider 支持 robots 协议,您可以在网站的根目录放置 robots.txt。”详情页

6、360 搜索:“360 搜索对 Robots 协议的支持”,详情页

7、神马搜索:“神马搜索遵守互联网 robots 协议,如您希望完全禁止神马访问或对部分目录禁止访问,您可以通过 robots.txt 文件来设置内容。”详情页

8、头条搜索:暂未找到头条搜索官方对于其 Bytespider 爬虫是否遵循 robots 协议的说明。这里有个知乎问答

注意:浏览上述详情页可以发现,各搜索引擎对于 robots 协议的支持并不完全相同,有些已舍弃了老旧的参数,有些会加上自己独有的扩展协议。

所以,以下内容暂按照 Google 参考文档中 Robots.txt 规范来表述。

三、有关 robots.txt 文件的位置

1、robots.txt 文件仅适用于该文件所在的主机、协议和端口号,且文件名大小写敏感。如 http://example.com/robots.txt 不适用于 https://example.com/,所以要设置 301 跳转。

2、robots.txt 要在网站根目录下,子目录中无效。当然搜索引擎也不会去检查子目录中的 robots.txt。如 http://example.com/folder/robots.txt 无效。

3、对于国际化域名,如“你好.中国”,其转码前后对应相同的 robots.txt。

4、robots.txt 针对域名生效,虽然有可能多个域名共享一个 robots.txt 文件。如 http://192.168.1.1/robots.txt,适用于 http://192.168.1.1/,不适用于 http://example.com/(即使托管在 192.168.1.1 上)。

四、有关 robots.txt 文件的抓取

1、默认情况下,任何人都可以查看到你的 robots.txt 文件,所以它可能会暴露你不想公开的站点目录。

2、不同搜索引擎抓取 robots.txt 文件的频率不同,Google 和 Bing 会每 24 小时抓取一次;百度则间隔不定。

3、如果无法正常访问 robots.txt 文件,有些搜索引擎则会使用最后一次成功抓取的缓存版本,而有些则认为站点无限制抓取。

五、robots.txt 文件的格式

虽然没有强制要求 robots.txt 文件使用 utf-8 编码的纯文本格式,但使用其他字符编码可能导致解析错误。

robots.txt 文件常见格式为<field>:<value><#optional-comment>,如:

user-agent: Baiduspider #百度蜘蛛

每行由一个字段、一个冒号和一个值组成,#为注释。其中空格并非必需的,只为增加可读性;field 字段不区分大小写,user-agent 或 USER-AGENT 都可用;value 字段如根据不同 field 而定,此处 user-agent 则需严格按照蜘蛛名添加。

六、robots.txt 文件写法示例

1、先看 user-agent 记录示例

user-agent: *
disallow: /wordpress
*作为通配符,此时对所有抓取工具生效。

user-agent: googlebot-news
user-agent: bingbot
disallow: /wordpress
同时对 googlebot-news 和 bingbot 生效。

user-agent: Baiduspider-news
disallow: /wordpress
对名为 Baiduspider-news 的蜘蛛生效。

user-agent: Baiduspider
disallow: /wordpress
此时会对 Baiduspider 和任何以 Baiduspider 开头,包括 Baiduspider-news 在内的蜘蛛生效。

存在范围重复定义的 user-agent 组时,抓取工具会查找最具体的 user-agent 组,而忽略其他组,且与定义顺序无关。同一个 user-agent 则合并。看下面这个示例:

user-agent: *
disallow: /wordpress
user-agent: Baiduspider-news
disallow: /wp-admin
user-agent: Baiduspider
allow: /wp-content
user-agent: Baiduspider-news
disallow: /wp-includes

如果此时一只名为 Baiduspider-news 的蜘蛛路过,会同时按照两个 user-agent: Baiduspider-news 下的定义生效;如果是 Baiduspider-image,因为没有 user-agent 为 Baiduspider-image 的组,则会按 user-agent: Baiduspider 下的定义生效。如果是 googlebot,则按 user-agent: * 下的定义生效。

2、allow 和 disallow 指令示例

allow 和 disallow 后是网站根目录的相对路径,必须以“/”开头,表示根目录,且路径区分大小写。

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

路径支持两个通配符:* 表示任何有效字符的 0 个或多个字符,$ 表示结束符。

①几个有关路径写法的示例:

user-agent: Baiduspider
disallow: /
此时/匹配根目录以及任何下级网址,/* 与 / 相同,此时结尾的*通配符会被忽略。

user-agent: Baiduspider
disallow: /wp
disallow: /wp*
disallow: /wp/

看三个 disallow 后面的路径区别

a、/wp 会匹配到以 wp 开头的目录或文件:
/wp
/wp.html
/wp/blog.html
/wp-content
/wp-content/blog.html
/wp.php?id=123
因为大小写敏感,不匹配项:
/WP.asp
/?id=wp

b、/wp 与 /wp* 相同,通常会省略*

c、/wp/ 表示此项与 wp 文件夹中的任何内容匹配
匹配项:
/wp/
/wp/?id=blog
/wp/blog.htm
不匹配项:
/wp
/wp.html
/WP/blog.asp

d、匹配带文件后缀名,/*.php
匹配项:
/filename.php
/folder/filename.php
/folder/filename.php?parameters
/folder/any.php.file.html
/filename.php/
不匹配项:
/(即使其映射到 /index.php)
/windows.PHP

e、匹配带结束符的文件后缀名 /*.php$
匹配项:
/filename.php
/folder/filename.php
不匹配项:
/filename.php?parameters
/filename.php/
/filename.php5
/windows.PHP

②allow 和 disallow 优先级问题的示例

allow 和 disallow 指令,最具体的规则优先级最高(根据路径的长度,长度越短,越不具体)。如果规则存在冲突(包括使用通配符的规则),系统将使用限制性最弱的规则。

a、下面的规则使抓取 http://example.com/page 时遵循 allow: /p,因为/p 路径更具体。
user-agent: *
allow: /p
disallow: /

b、下面的规则使得在抓取 http://example.com/folder/page 时,遵循 allow: /folder,因为 allow: /folder 的限制较弱。注意:Google 会遵循本条规则,但其他搜索引擎可能按顺序,先使用 disallow 规则而忽略 allow。当然正常情况下不会有人编写这样的 robots.txt 文件。
user-agent: *
disallow: /folder
allow: /folder

六、robots.txt 文件的补充说明

1、sitemap 可添加站点地图;其后接URL参数,指向站点地图、站点地图索引文件或等效网址。网址不需要与 robots.txt 文件位于同一主机上。sitemap 条目可以有多个。作为非组成员行,它们不依赖于任何特定的 user-agent,只要未加禁止,所有抓取工具都可以追踪它们。

经博主查找,目前没见哪个搜索引擎有说明限制 robots.txt 中的站点地图 URL 条数,只要没超过 robots.txt 文件的限制大小即可(Google 限制 robots.txt 不超过 500kb)。当然,站点地图文件本身大小和包含的网址条数有限制(Google 的标准是:单个站点地图的文件大小一律不得超过 50MB(未压缩),并且其中包含的网址数量不得超过 50000 个,否则必须将站点地图拆分成多个较小的站点地图)。

此外,Crawl-delay 参数已有很多搜索引擎不支持了,需在对应站长平台调整抓取频率。如前文所说,还有其他各种不统一的参数。

2、注意 disallow 的作用,不同搜索引擎的处理方式有异,对于是否编入索引也各有说辞。比如 Google 明确说明:对于 robots.txt 文件所禁止抓取的网址,Google 仍可能会在不进行抓取的情况下将其编入索引。

3、想删除已被搜索引擎编入索引的网址,设置 robots.txt 文件是否有用?分几种情况:

如果该网址依然可访问,在 robots.txt 中设置 disallow 后,百度很快就会在收录中删除(乌帮图已验证);而 Google 等搜索引擎则需要使用 Meta robots 标签的 noindex,且此时不可在 robots.txt 中设置该网址的 disallow,否则抓取工具不访问,无法知晓页面里的 noindex 标签。注意:百度官方 FAQ 中有提及“目前百度仅支持 nofollow 和 noarchive”,至于支不支持 noindex,还不太确定。

如果该网址已返回 404 状态码即成为死链,可主动提交死链接给搜索引擎,等待下一次抓取。当然时间长短不定,很多搜索引擎并不会在第一次看到 404 就放弃这个网页。

4、百度站长工具中已于 2020 年 4 月修复了 https 网站对于 robots.txt 的检测和测试。

参考资料:
Google 搜索:Robots.txt 规范
创建 robots.txt 文件 - Search Console 帮助
知乎:robots.txt 文件的写法解析
Robots exclusion standard - Wikipedia
百度搜索 robots 协议全新升级公告
CSDN:搜索引擎不会告诉你的关于 robots 的潜规则
爬虫的"盗亦有道"-Robots 协议
关于 Robots.txt 和 SEO: 你所需要知道的一切
Robots 协议和 robots.txt 解读
中国法院网:违反“爬虫协议”能否适用反不正当竞争法
微软必应称搜狗泄密因设计缺陷
正义网:百度诉奇虎违反 Robots 协议案宣判 原告胜诉获赔 70 万

» 链接地址:https://wbt5.com/robots-txt.html »英雄不问来路,转载请注明出处。

robots.txt 文件的一些记录》上有 4 条评论

    1. 乌帮图 文章作者

      没见哪个搜索引擎有说限制robots.txt中的站点地图条数,只要没超过robots.txt的限制大小都可。当然,站点地图文件本身大小和包含的网址条数有限制。

      回复

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注