搜索引擎都有自己的“搜索机器人”(ROBOTS),并通过这些ROBOTS在网络上沿着网页上的链接(一般是http和src链接)不断抓取资料建立自己的数据库。
网站所有者使用/robots.txt文件向网络机器人提供有关其网站的说明; 这被称为机器人排除协议。
robots.txt 是网站和搜索引擎的协议的纯文本文件。当一个搜索引擎蜘蛛来访问站点时,它首先爬行来检查该站点根目录下是否存在robots.txt,如果存在,根据文件内容来确定访问范围,如果没有,蜘蛛就沿着链接抓取。robots.txt 放在项目的根目录下。
工作原理 机器人想要访问网站,比如http://www.baidu.com。 在此之前,它首先检查http://www.baidu.com/robots.txt,robots.txt文件信息。 存在:搜索机器人就会按照该文件中的内容来确定访问的范围 不存在:搜索机器人就沿着链接抓取。
适用场景 对于网站管理者和内容提供者来说,有时候会有一些站点内容,不希望被ROBOTS抓取而公开,或者指定搜索引擎只收录指定的内容。
robots协议语法及规范“robots.txt” 文件包含一条或更多的记录,这些记录通过空行分开(以CR,CR/NL,orNL作为结束符),在该文件中可以使用#进行注解,具体使用方法和UNIX中 的惯例一样。
先来看一个简单的示例:
# 允许所有的搜索机器人访问站点下所有文件
User-agent: *
Disallow:
User-agent:表示搜索机器人名称,* 代表所有机器人。如果想要指定某一机器人,如谷歌,你可以这样做:User-agent: Googlebot。该项的值用于描述搜索引擎robot的名字,在"robots.txt"文件中,如果有多条User-agent记录说明有多个robot会受到该协议的限 制,对该文件来说,至少要有一条User-agent记录。如果该项的值设为*,则该协议对任何机器人均有效,在"robots.txt"文件 中,"User-agent:*"这样的记录只能有一条。
Disallow:表示不允许搜索机器人访问的文件目录,空代表允许访问所有,/代表不允许访问。该项的值用于描述不希望被访问到的一个URL,这个URL可以是一条完整的路径,也可以是部分的,任何以Disallow开头的URL均不会被robot访问到。例如"Disallow:/help"对/help.html和/help/index.html都不允许搜索引擎访问,而"Disallow:/help/"则允许robot访问/help.html,而不能访问/help/index.html。
常用关键字段
- User-Agent: 以下规则适用的机器人(例如“Googlebot”等)
- Disallow: 您希望阻止机器人访问的页面(根据需要,禁止多行)
- Allow: 不需要阻止机器人访问的页面
- Noindex: 希望搜索引擎阻止和不要索引的页面(如果先前已建立索引,则将其解除索引)
细节注意事项
- 机器人可以忽略你的/robots.txt。特别是在网络上扫描安全漏洞的恶意软件机器人以及垃圾邮件发送者使用的电子邮件地址收集器将不予理睬。
- /robots.txt文件是一个公开可用的文件。任何人都可以看到您不希望机器人使用的服务器部分。
- robots.txt必须放置在一个站点的根目录下(后面说),而且文件名必须全部小写。
- 如果"robots.txt"是一个空文件,则对于所有的搜索引擎robot,该网站都是开放的。
- 第一个英文要大写,冒号是英文状态下,冒号后面有一个空格
- 如果“/”后面多了一个空格,则屏蔽整个网站
- 行前不能有空格,如 [空格][空格][空格] User-agent: *
- 禁止把命令放在一行,像这样:User-agent: * Disallow:/
- 生效时间为几天~几个月
简单说,只需要放置在web服务器顶级目录中。
当机器人查找URL的“/robots.txt”文件时,它会从URL中剥离路径组件(来自第一个单斜杠的所有内容),并将“/robots.txt”放在其位置。
例如,对于“ http://www.baidu.com/shop/index.html” ,它将删除 /shop/index.html “,并将其替换为” /robots.txt “,最终将以“http://www.baidu.com/robots.txt”。
因此,需要将其放在Web服务器上的正确位置,以便生成该URL。通常,这是您放置网站主要“ index.html ”欢迎页面的位置。究竟是什么,以及如何将文件放在那里,取决于Web服务器软件。
注意:使用全文小写作为文件名:“ robots.txt ”,而不是“ Robots.TXT。
一些 “先进” 的技术有些搜索引擎已经开始合作来推进robots.txt文件的功能,增加了一些先进的技术,但是使用时需要谨慎,防止带来反效果。
抓取延迟 某些网站可能会遇到大量流量,并希望将搜索引擎蜘蛛减慢,以允许更多的服务器资源来满足常规流量的需求。抓取延迟是Yahoo,Live Search和Ask所认可的特殊指令,指示抓取工具在抓取页面之间等待的秒数。
# 抓取减慢5秒
User-agent: *
Crawl-delay: 5
模式匹配 模式匹配的价值相当可观,先看一下最基本的模式匹配,使用*通配符。
# 阻止Google机器人访问所有以script开头的子目录
User-agent: Googlebot
Disallow: /script*/
不仅如此,还可以使用美元符号($)匹配字符串的末尾。
# 阻止Google机器人访问所有以.asp结尾的URL
User-agent: Googlebot
Disallow: /*.asp$
与在Perl和其他地方的正则表达式中发现的更先进的模式匹配不同,问号没有特殊的权力。所以,阻止对包含问号(?)的所有URL的访问,只需使用问号(不需要“转义”或者使用反斜杠):
User-agent: *
Disallow: /*?*
还可以阻止机器人抓取特定文件类型的所有文件(例如.gif):
User-agent: *
Disallow: /*.gif$
这是一个比较复杂的例子。假设您的站点仅使用查询字符串部分的URL(“?”),仅用于会话ID,并且您要排除包含动态参数的所有URL,以确保机器人不会抓取重复的页面。但是您可能希望包含以“?”结尾的任何URL。以下是如何实现的:
User-agent: *
Disallow: /*? # 阻止包含 a 的URL
Allow: /*?$ # 允许所有以 a 结尾的URL
允许指令 就像听起来一样,它与Disallow指令相反,它提供了专门调用可能被抓取的目录或页面的能力。这在大部分或整个场地被禁止之后可能是有益的。
要允许Googlebot只进入“google”目录:
User-agent: Googlebot
Disallow: /
Allow: /google/
Noindex指令 该指令提供了从搜索结果中消除无代号无标题列表的优点,但仅限于Google。它的语法恰好反映了Disallow。用Matt Cutts的话说:
Google允许在robots.txt中使用NOINDEX指令,它将完全从Google删除所有匹配的站点URL。(这种行为可能会根据这个政策讨论而改变,当然这也是为什么我们还没有谈论过这个问题。)
网站地图 XML网站地图文件可以告诉搜索引擎您网站上的所有页面,并且可选地提供有关这些页面的信息,例如哪些是最重要的以及更改频率。它充当一个自动发现机制,让蜘蛛找到XML站点地图文件。您可以通过在robots.txt文件中添加以下行来告诉Google和其他搜索引擎您的Sitemap:
Sitemap: sitemap_location
sitemap_location是Sitemap的完整网址。此指令与 User-agent 行无关,因此放在任何地方并不重要,不过一般是放在最后。所有主要的搜索引擎都支持Auto-Discovery Sitemap协议,包括Google,Yahoo,Live Search和Ask。
虽然 Auto-Discovery 提供了一种通知搜索引擎关于sitemap.xml文件的方法,但也值得通过其每个网站管理员控制台(Google网站管理员中心,雅虎网站浏览器,实时搜索网站管理员中心)直接验证和提交站点地图到搜索引擎 。
写在后面如果想要查看更多常用 robots.txt 写法示例请点击这篇文章