|
Robots.txt详解
发表时间:2007-4-17 11:43:52
当搜索引擎访问一个网站时,它首先会检查该网站的根域下是否有一个叫做robots.txt的纯文本文件。Robots.txt文件用于限定搜索引擎对其网站的访问范围,即告诉搜索引擎网站中哪些文件是允许它进行检索(下载)的。这就是大家在网络上常看到的“拒绝Robots访问标准”(Robots Exclusion Standard)。下面我们简称RES。#此前在首页部分显示#
Robots.txt文件的格式:
Robots.txt文件的格式比较特殊,它由记录组成。这些记录通过空行分开。其中每条记录均由两个域组成:
1) 一个User-Agent(用户代理)字符串行;
2) 若干Disallow字符串行。
记录格式为: ":"
下面我们分别对这两个域做进一步说明。
User-agent(用户代理):
User-agent行(用户代理行) 用于指定搜索引擎robot的名字,以Google的检索程序Googlebot为例,有:User-agent: Googlebot
一个robots.txt中至少要有一条User-agent记录。如果有多条User-agent记录,则说明有多个robot会受到RES标准的限制。当然了,如果要指定所有的robot,只需用一个通配符"*"就搞定了,即:User-agent: *
Disallow(拒绝访问声明):
在Robots.txt文件中,每条记录的第二个域是Disallow:指令行。这些Disallow行声明了该网站中不希望被访问的文件和(或)目录。例如"Disallow: email.htm"对文件的访问进行了声明,禁止Spiders下载网站上的email.htm文件。而"Disallow: /cgi-bin/"则对cgi-bin目录的访问进行了声明,拒绝Spiders进入该目录及其子目录。Disallow声明行还具有通配符功能。例如上例中"Disallow: /cgi-bin/"声明了拒绝搜索引擎对cgi-bin目录及其子目录的访问,而"Disallow:/bob"则拒绝搜索引擎对/bob.html和/bob/indes.html的访问(即无论是名为bob的文件还是名为bob的目录下的文件都不允许搜索引擎访问)。Disallow记录如果留空,则说明该网站的所有部分都向搜索引擎开放。
空格 & 注释
在robots.txt文件中,凡以"#"开头的行,均被视为注解内容,这和UNIX中的惯例是一样的。但大家需要注意两个问题:
1) RES标准允许将注解内容放在指示行的末尾,但这种格式并不是所有的Spiders都能够支持。譬如,并不是所有的Spiders都能够正确理解"Disallow: bob #comment"这样一条指令。有的Spiders就会误解为Disallow的是"bob#comment"。最好的办法是使注解自成一行。
2) RES标准允许在一个指令行的开头存在空格,象"Disallow: bob #comment",但我们也并不建议大家这么做。
Robots.txt文件的创建:
需要注意的是,应当在UNIX命令行终端模式下创建Robots.txt纯文本文件。好的文本编辑器一般都能够提供UNIX模式功能,或者你的FTP客户端软件也“应该”能够替你转换过来。如果你试图用一个没有提供文本编辑模式的HTML编辑器来生成你的robots.txt纯文本文件,那你可就是瞎子打蚊子——白费力气了。
对RES标准的扩展:
尽管已经提出了一些扩展标准,如Allow行或Robot版本控制(例如应该忽略大小写和版本号),但尚未得到RES工作组的正式批准认可。
附录I. Robots.txt用法举例:
使用通配符"*",可设置对所有robot的访问权限。
User-agent: *
Disallow:
表明:允许所有搜索引擎访问网站下的所有内容。
User-agent: *
Disallow: /
表明:禁止所有搜索引擎对网站下所有网页的访问。
User-agent: *
Disallow: /cgi-bin/Disallow: /images/
表明:禁止所有搜索引擎进入网站的cgi-bin和images目录及其下所有子目录。需要注意的是对每一个目录必须分开声明。
User-agent: Roverdog
Disallow: /
表明:禁止Roverdog访问网站上的任何文件。
User-agent: Googlebot
Disallow: cheese.htm
表明:禁止Google的Googlebot访问其网站下的cheese.htm文件。
上面介绍了一些简单的设置,对于比较复杂的设置,可参看一些大型站点如CNN或Looksmart的robots.txt文件(www.cnn.com/robots.txt, www.looksmart.com/robots.txt)
附录II. 相关robots.txt文章参考:
1. Robots.txt常见问题解析
2. Robots Meta Tag的使用
3. Robots.txt检测程序
Robots.txt常见问题解析:
我们开发了一个针对robots.txt文件的“验检程序”,同时又设计了一个搜索程序,专门下载robots.txt文件,以此对新推出的这个“robots.txt验检程序”进行测试。在对DMOZ(ODP)中所链接的站点进行遍历,共计检索240万个站点后,我们总共找到了大概75k的robots.txt文件。
在这些robots.txt文件中,我们发现了大量的而且是形形色色的问题。有超过5%的robots.txt文件使用了错误格式,有超过2%的文件由于使用的是极其拙劣的格式而导致无法为任何SPIDER读取。我们将发现的一些问题在下面列出来供大家参考借鉴:
错误1—语法混用
例如:
User-agent: *
Disallow: scooter
正确语法应为:
User-agent: scooter
Disallow: *
错误2—一行Disallow声明多个目录
这是一个比较常见的错误。我们发现很多网站在其robots.txt中,在一个Disallow指令行中放入了多个目录。譬如:Disallow: /css/ /cgi-bin/images/
绝大多数的spiders对上述声明行都无法做出正确的解析,有些Spiders会忽略其空格而解析为/css//cgi-bin//images/,或只解析/images/或/css/,或者根本不予解析。
正确的语法应为:
Disallow: /css/
Disallow: /cgi-bin/
Disallow: /images/
错误3—在DOS模式下编辑robots.txt文件
这也是一个比较常见的错误。正确的做法应该是在UNIX模式下编辑你的robots.txt文件并以ASCII码格式上传。显然并非所有的FTP客户端软件都能够天衣无缝地将文件格式转换为UNIX命令行终端,所以在编辑robots.txt文件时,一定要确保你的文本编辑器是在UNIX模式下。
错误4—在指示行末尾加注
在robots.txt文件中,凡以"#"开头的行,均被视为注解内容,这和UNIX中的惯例是一样的。例如:Disallow: /cgi-bin/ # this bans robots from our cgi-bin
虽然根据RES标准,在指示行的末尾加注是可行的,但这种格式在过去却并非所有的Spiders都能够支持,有些Spiders干脆就把整个句子视为注解内容直接跳过去不读。当然我们知道现如今搜索引擎基本上都能够支持这种格式,不过—仍有可能无法被某些搜索引擎正确解读,你冒得起这个险吗?我们建议在编辑robots.txt文件时,最好让注解自成一行。
错误5—指令行前有空格
例如"Disallow: /cgi-bin/",虽然RES标准并未对这种格式予以特别说明,但我们对这种格式是持极力反对态度的。同样的问题摆在你面前你冒得起无法被Spiders正确解读的险吗?
错误6--404重定向至另一页面
一般没有robots.txt的网站会将对robots.txt文件的调用请求转至另一页面。这种重定向通常不会产生服务器状态错误或重定向状态信息。然而因为是Spiders自己决定它看到的是robots.txt文件还是一个.html文件。虽然理论上应该不会有什么问题,不过为了保险起见,不妨在你服务器的顶级目录下放一个空的robots.txt文件。在www.google.com/bot.html下,也提供了相同的建议—“如欲避免网络服务器日志中的出错信息‘找不到文件’,可在其根域下创建一个空的robots.txt文件。”
错误7—声明自相矛盾
例如:
USER-AGENT: EXCITE
DISALLOW:
虽然RES标准忽略大小写(Case Sensitive),但目录和文件名却是大小写敏感的。所以对于"USER-AGENT"和"DISALLOW"指令,用大小写都是可以的。但对于所声明的目录或文件名却一定要注意大小写的问题。
错误8—列出所有文件
这也是一种常见错误,不厌其烦地将目录下文件全数列出。例如:
Disallow: /AL/Alabama.html
Disallow: /AL/AR.html
Disallow: /Az/AZ.html
Disallow: /Az/bali.html
Disallow: /Az/bed-breakfast.html
其实,上面这么多声明行只需用目录选项来替代:
Disallow: /AL
Disallow: /Az
需要注意的是:反斜杠"/"表示禁止搜索引擎进入该目录。如果只有几十个文件需要设置访问权限,那倒也无可厚非。问题是我们发现有一个robots.txt文件中列出了有400k,多达4,000个文件。我们只是纳闷看到这么多声明,有多少Spiders会掉头而去。
错误9—自创ALLOW指令
没有ALLOW指令,只有DISALLOW指令!我们发现有这样的用法:
User-agent: Spot
Disallow: /john/
allow: /jane/
正确写法应为:
User-agent: Spot
Disallow: /john/
Disallow:
错误10—对声明的目录无反斜杠标识
例如我们发现有这样的例子:
User-agent: Spot
Disallow: john
对这样的记录Spider该怎么反应?按照RES标准,Spider会将名为"john"的文件和名为"john"的目录都DISALLOW。所以要记得使用"/"来标识所声明的路径(目录)。
我们还发现,有些网站的优化工作做得真彻底,竟然在其robots.txt中也放了关键词(费解,不明白他们怎么想的)。这些人一定是把他们的robots.txt纯文本文件当作是html文件了。(要记住:在FrontPage下是不可能正确创建robots.txt文件的)
错误11—网络服务器端的错误配置
为什么对robots.txt文件的调用请求会产生一个二进制文件?只有网络服务器或FTP客户端软件错误设置的情况下才可能发生这种错误。建议大家定期检查自己的robots.txt文件
服务器/域名“农场”
搜索引擎检测服务器或域名“农场”(即包含巨量站点)的一个简单途径是看它们的robots.txt。我们发现规模在400到500个域名的大型域名“农场”,其“库”内站点使用都是同一个robots.txt文件。这也就相当于告诉搜索引擎这些使用同一robots.txt文件的站点是相关联的。
Google率先支持通配符:
Google是第一家能够支持robots.txt中通配符文件扩展名的搜索引擎。例如:
User-agent: googlebot
Disallow: *.cgi
不过注意了,由于目前只有Google能够支持这种格式,所以”USER-AGENT”只能是“Googlebot”。
雅虎收录网站常见问题
怎样能够减少雅虎搜索引擎对我的站点发出的请求?
由于我们从整个因特网上抓取数以十亿计的网页,对于网络抓取我们采取大量系统,因此,您的网络服务器会从不同的YST抓取程序的客户端IP地址登录请求。不同的抓取程序系统彼此配合,来限制任何来自单一网络服务器的活动。所谓单一网络服务器,是由IP地址判断的。因此,如果您的服务器主机拥有多个IP,它的活动则会处于更高的级别。
在robots.txt 里,YST有一个特定的扩展名,可以通过它对我们的抓取程序设定一个较低的抓取请求频率。
您可以加入Cral-delay:xx指示,其中,“XX”是指在crawler程序两次进入站点时,以秒为单位的最低延时。如果crawler频率对您的服务器是一个负担,您可以将这个延时设定为任何您认为恰当的数字,例如60或300。
例如,您想设定一个20秒的延时,语句如下:
User-agent: Slurp
Crawl-delay: 20
如何使雅虎只索引某些网页?
雅虎的YST搜索引擎遵守noindex(不做索引)的meta-tag。您可以在web文档的上部写入:
<META NAME="robots" CONTENT="noindex">
这时,YST 会追踪这个文档,但不会索引,也不会将其收入搜索引擎的数据库。
怎样能够减少雅虎搜索引擎对我的站点发出的请求?
由于我们从整个因特网上抓取数以十亿计的网页,对于网络抓取我们采取大量系统,因此,您的网络服务器会从不同的YST抓取程序的客户端IP地址登录请求。不同的抓取程序系统彼此配合,来限制任何来自单一网络服务器的活动。所谓单一网络服务器,是由IP地址判断的。因此,如果您的服务器主机拥有多个IP,它的活动则会处于更高的级别。
在robots.txt 里,YST有一个特定的扩展名,可以通过它对我们的抓取程序设定一个较低的抓取请求频率。
您可以加入Cral-delay:xx指示,其中,“XX”是指在crawler程序两次进入站点时,以秒为单位的最低延时。如果crawler频率对您的服务器是一个负担,您可以将这个延时设定为任何您认为恰当的数字,例如60或300。
例如,您想设定一个20秒的延时,语句如下:
User-agent: Slurp
Crawl-delay: 20
这个网页抓取程序是如何发现我的网站上的文件?
YST搜索程序跟踪HREF链接,而并不跟踪SRC链接。这意味着,我们的程序不会通过SRC指向的链接去追溯或索引这些框架文件。
我的网站不想出现在雅虎的搜索结果中,如何删除?
如果您需要删除雅虎网页结果中的您自己整个网站或部份网页的记录,可以在您服务器的根目录中放置一个 robots.txt 文件,其内容如下:
User-Agent: *
Disallow: /
这是大部份网络搜索程序都会遵守的标准协议,加入这些协议后,它们将不会再抓取您的网络服务器或目录。有关 robots.txt 文件的详细信息,请访问:
http://www.robotstxt.org/wc/norobots.html
只要您网络服务器的根目录中有这个 robots.txt 文件,YST 搜索程序就不会进入您的网站,您的网站也不会出现在雅虎的搜索结果中。
如果您的情况非常紧急,不能等到我们的 YST 搜索程序下次抓取您的网站时再进行删除,您可以反馈给我们,会有专人负责处理。
我可以只删除个别的网页吗?
如果只需要保护个别网页,不想让搜索引擎显示这几个页面,可在那一页加入以下 HTML 代码:
<META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">
有关这个标准 meta 标签的详细信息,请访问:http://www.robotstxt.org/wc/exclusion.html#meta
如果您的情况非常紧急,不能等到 YST 搜索程序下次抓取您的网站时再进行删除,请您可以反馈给我们,会有专人负责处理。
雅虎收录的网页涉及个人隐私或企业机密,请问如何将这些网页尽快删除?
雅虎与这些网站无关,同时雅虎也无权删除他人网站上的网页。雅虎搜索遵循客观、公正的原则。 如果您认为,在搜索结果中,他人网站上含有对您或您公司的侵权信息,并希望该信息从雅虎搜索结果中消失,请先联系这些网站管理员,只要这些网站删除内容后,这些信息会在几天或几周内从雅虎搜索结果中自动消失。如果您希望该网页信息从雅虎搜索结果中尽快消失,请先确认已联系该网站管理员删除指定网页,然后提供身份证明、网站权属证明及详细侵权情况资料,通过传真或邮件的方式提供给雅虎,雅虎在收到上述法律文件后,将会为您尽快移除被控侵权的网页。
雅虎的抓取程序能够跟踪动态链接吗?
YST 搜索程序支持网页框架,并努力抓取复杂的网页,例如通过表单生成的页面、内容生成系统(content generation systems)以及动态页面生成软件。
YST搜索程序争取抓到更多不需经过网站管理员专门支持的网页,但现实中仍然还有很多网站无法被机器搜索到,无论是通过雅虎还是其他同样强大的搜索系统。
雅虎是如何抓取我的网站的?
雅虎应用雅虎搜索引擎技术(Yahoo! Search Engine Technology,简称YST),它是一套基于算法的Web索引抓取程序,能够自动探测网络内容。YST 这套机器搜索程序从因特网上采集文档,建立起一个可搜索的索引系统。这些文件(即您的网站文件)能被YST程序发现和抓取的主要原因是,在因特网其他的网页上包含有这些文档的直接链接。
YST 搜索程序严格遵守robots.txt标准执行抓取,因此,对于那些您不希望被雅虎搜索引擎返回的结果,搜索程序不会执行抓取。任何被robots.txt标准认为不适宜抓取的文件,既不会被包括在抓取文档中,也不会进入到搜索引擎的数据库。 |
|