木匣子

Web/Game/Programming/Life etc.

利用 robots.txt 跟搜索引擎说不!

这是一则翻译,原文:http://www.robotstxt.org/robotstxt.html

网页机器人(也被称为网络蛛蛛),是一种自动化信息采集程序。像 Google 这样的搜索引擎使用它们自动地去索引网页;而垃圾邮件发送者则使用它去收集邮件地址;甚至还有你想像不到的用途……

对于友好的网页机器人,我们可以与其“对话”,让它们更好地从我们的网站上采集有用的信息,或者是告诉它们哪些信息根本没用。这时,就出现了一种被称之为“拒绝蜘蛛”的协议(The Robots Exclusion Protocol)

有了这套协议,机器人在访问你的网站之前,会先访问目录下的 /robots.txt 文件,并按协议所规定的规则采集信息。例如

User-agent: *
Disallow: /

其中 User-agent: * 表示对所有的机器人有效;Disallow: / 表示机器人不应该从这个网站采集任何信息。

但是要注意的是:

  • 不是所有的机器人都会去理会 /robots.txt ,尤其是那些臭名昭著的垃圾邮件机器人,以及入侵检测机器人。
  • /robots.txt 是一份和静态网页一样公开的文件,所有的人都能看开里面的内容。

所以,不要指望****通过 /robots.txt 来隐藏信息。

如何创建 robots.txt

/robots.txt 是一份纯文本文件,你可以使用任何文本工具来编辑它。
通常它看起来像这样:

User-agent: *
Disallow: /cgi-bin/
Disallow: /tmp/
Disallow: /~joe/

在这个文件中包含三个目录。每个目录都必须独立的一行存在,不能写成

Disallow: /cgi-bin/ /tmp/

另外要注意的是,这个协议并不支持通配符以及正则表达式,User-agent 中的 * 只是一个特殊字符,表示任一个机器人。
下面的规则都是不合法的:

User-agent: \*bot\*
Disallow: /tmp/*
Disallow: *.gif

/robots.txt 的一些有效规则

拒绝所有机器人访问服务器上的任何文件

User-agent: *
Disallow: /

不作任何限制(等同于 /robots.txt 不存在)

User-agent: *
Disallow:

拒绝所有机器人访问服务器上的个别目录 通常是一些程序、缓存、垃圾文件

User-agent: *
Disallow: /cgi-bin/
Disallow: /tmp/
Disallow: /junk/

拒绝某一个机器人访问服务器上的任何文件

User-agent: BadBot
Disallow: /

允许某一个机器人访问服务器上的任何文件

对于不同的机器人,需要有一个空行将它们分隔开

User-agent: Google 
Disallow:

User-agent: * 
Disallow: /

那么,如何让机器人只访问其中某个目录而拒绝其它任何目录?

这是一个很尴尬的情况,因为这份协议里面没有 Allow 这个关键词。
robotstxt.org 给出了一个答案,不过我暂时还没有理解

This is currently a bit awkward, as there is no “Allow” field. The easy way is to put all files to be disallowed into a separate directory, say “stuff”, and leave the one file in the level above this directory:

User-agent: *
Disallow: /~joe/stuff/

拒绝文件的访问

User-agent: *
Disallow: /~joe/junk.html
Disallow: /~joe/foo.html
Disallow: /~joe/bar.html

其它注意事项:

robots.txt必须放置在一个站点的根目录下,而且文件名必须全部小写。