我们知道搜索引擎都有自己的搜索机器人(ROBOTS)并通过这些ROBOTS在网络上沿着网页上的链接(一般是http和src链接)不断抓取资料建立自己的数据库
对于网站管理者和内容提供者来说有时候会有一些站点内容不希望被ROBOTS抓取而公开为了解决这个问题ROBOTS开发界提供了两个办法一个是robotstxt另一个是The Robots META标签
一 robotstxt
什么是robotstxt?
robotstxt是一个纯文本文件通过在这个文件中声明该网站中不想被robots访问的部分这样该网站的部分或全部内容就可以不被搜索引擎收录了或者指定搜索引擎只收录指定的内容
当一个搜索机器人访问一个站点时它会首先检查该站点根目录下是否存在robotstxt如果找到搜索机器人就会按照该文件中的内容来确定访问的范围如果该文件不存在那么搜索机器人就沿着链接抓取
robotstxt必须放置在一个站点的根目录下而且文件名必须全部小写
网站 URL
相应的 robotstxt的 URL
robotstxt的语法
robotstxt文件包含一条或更多的记录这些记录通过空行分开(以CRCR/NL or NL作为结束符)每一条记录的格式如下所示
<field>:<optionalspace><value><optionalspace>
在该文件中可以使用#进行注解具体使用方法和UNIX中的惯例一样该文件中的记录通常以一行或多行Useragent开始后面加上若干Disallow行详细情况如下
Useragent:
该项的值用于描述搜索引擎robot的名字在robotstxt文件中如果有多条Useragent记录说明有多个robot会受到该协议的限制对该文件来说至少要有一条Useragent记录如果该项的值设为*则该协议对任何机器人均有效在robotstxt文件中 Useragent*这样的记录只能有一条
Disallow :
该项的值用于描述不希望被访问到的一个URL这个URL可以是一条完整的路径也可以是部分的任何以Disallow 开头的URL均不会被robot访问到例如Disallow: /help对/l 和/help/l都不允许搜索引擎访问而Disallow: /help/则允许robot访问/l而不能访问/help/l
任何一条Disallow记录为空说明该网站的所有部分都允许被访问在/robotstxt文件中至少要有一条Disallow记录如果 /robotstxt是一个空文件则对于所有的搜索引擎robot该网站都是开放的
下面是一些robotstxt基本的用法
l 禁止所有搜索引擎访问网站的任何部分
Useragent: *
Disallow: /
l 允许所有的robot访问
Useragent: *
Disallow:
或者也可以建一个空文件 /robotstxt file
l 禁止所有搜索引擎访问网站的几个部分(下例中的cgibintmpprivate目录)
Useragent: *
Disallow: /cgibin/
Disallow: /tmp/
Disallow: /private/
l 禁止某个搜索引擎的访问(下例中的BadBot)
Useragent: BadBot
Disallow: /
l 只允许某个搜索引擎的访问(下例中的WebCrawler)
Useragent: WebCrawler
Disallow:
Useragent: *
Disallow: /
常见搜索引擎机器人Robots名字
名称 搜索引擎
Baiduspider
Scooter
ia_archiver
Googlebot
FASTWebCrawler
Slurp
MSNBOT
robotstxt举例
下面是一些着名站点的robotstxt
常见robotstxt错误
l 颠倒了顺序
错误写成
Useragent: *
Disallow: GoogleBot
正确的应该是
Useragent: GoogleBot
Disallow: *
l 把多个禁止命令放在一行中
例如错误地写成
Disallow: /css/ /cgibin/ /images/
正确的应该是
Disallow: /css/
Disallow: /cgibin/
Disallow: /images/
l 行前有大量空格
例如写成
Disallow: /cgibin/
尽管在标准没有谈到这个但是这种方式很容易出问题
l 重定向到另外一个页面
当Robot访问很多没有设置robotstxt文件的站点时会被自动重定向到另外一个Html页面这时Robot常常会以处理robotstxt文件的方式处理这个Html页面文件虽然一般这样没有什么问题但是最好能放一个空白的robotstxt文件在站点根目录下
l 采用大写例如
USERAGENT: EXCITE
DISALLOW:
虽然标准是没有大小写的但是目录和文件名应该小写
useragent:GoogleBot
disallow:
l 语法中只有Disallow没有Allow!
错误的写法是
Useragent: Baiduspider
Disallow: /john/
allow: /jane/
l 忘记了斜槓/
错误的写做
Useragent: Baiduspider
Disallow: css
正确的应该是
Useragent: Baiduspider
Disallow: /css/
下面一个小工具专门检查robotstxt文件的有效性
bin/robotcheckcgi
二 Robots META标签
什么是Robots META标签
Robotstxt文件主要是限制整个站点或者目录的搜索引擎访问情况而Robots META标签则主要是针对一个个具体的页面和其他的META标签(如使用的语言页面的描述关键词等)一样Robots META标签也是放在页面的<head></head>中专门用来告诉搜索引擎ROBOTS如何抓取该页的内容具体的形式类似(见黑体部分)
<html>
<head>
<title>时代营销网络营销专业门户</title>
<meta name=Robots content=indexfollow>
<meta httpequiv=ContentType CONTENT=text/html; charset=gb>
<meta name=keywords content=营销… >
<meta name=description content=时代营销网是…>
<link rel=stylesheet type=text/css>
</head>
<body>
…
</body>
</html>
Robots META标签的写法
Robots META标签中没有大小写之分name=Robots表示所有的搜索引擎可以针对某个具体搜索引擎写为name=BaiduSpidercontent部分有四个指令选项indexnoindexfollownofollow指令间以分隔
INDEX 指令告诉搜索机器人抓取该页面
FOLLOW 指令表示搜索机器人可以沿着该页面上的链接继续抓取下去
Robots Meta标签的缺省值是INDEX和FOLLOW只有inktomi除外对于它缺省值是INDEXNOFOLLOW
这样一共有四种组合
<META NAME=ROBOTS CONTENT=INDEXFOLLOW>
<META NAME=ROBOTS CONTENT=NOINDEXFOLLOW>
<META NAME=ROBOTS CONTENT=INDEXNOFOLLOW>
<META NAME=ROBOTS CONTENT=NOINDEXNOFOLLOW>
其中
<META NAME=ROBOTS CONTENT=INDEXFOLLOW>可以写成
<META NAME=ROBOTS CONTENT=ALL>
<META NAME=ROBOTS CONTENT=NOINDEXNOFOLLOW>可以写成
<META NAME=ROBOTS CONTENT=NONE>
需要注意的是上述的robotstxt和Robots META标签限制搜索引擎机器人(ROBOTS)抓取站点内容的办法只是一种规则需要搜索引擎机器人的配合才行并不是每个ROBOTS都遵守的
目前看来绝大多数的搜索引擎机器人都遵守robotstxt的规则而对于Robots META标签目前支持的并不多但是正在逐渐增加如着名搜索引擎GOOGLE就完全支持而且GOOGLE还增加了一个指令archive可以限制GOOGLE是否保留网页快照例如
<META NAME=googlebot CONTENT=indexfollownoarchive>
表示抓取该站点中页面并沿着页面中链接抓取但是不在GOOLGE上保留该页面的网页快照