你真的完全懂了robots吗?

SEO基础 思享 2150浏览

文章出自光年论坛pollux(刘总)整理的【搜索引擎不会告诉你的关于robots的潜规则】,正好最近在碰到了robots的问题,觉得文章非常有价值就转载给大家。

robots协议

 

meta标签中的robots

在所有meta标签中,专门有一类是指导机器人如何处理抓取后的页面,如何追踪页面上的链接的。描述这种信息的meta标签被称为robotsmeta标签(robots meta tag),它就是本文的主角。

Robots文件是我们与搜索引擎对话的最重要渠道。

为什么meta信息有这么多种类,我们却从来没有在网页上看到过它们呢?因为meta标签的内容在浏览器上是不显示的。绝大部分的meta信息是写给搜索引擎看的,用于帮助搜索引擎判断页面的价值、重要性。

作为网页设计者和搜索引擎交流的一个重要渠道,各种meta标签提供了从不同角度描述页面的基础信息,而机器人在访问网页时也会首先读取这个部分。

关于robots基础阅读:

http://www.baidu.com/search/robots.html
http://www.robotstxt.org/robotstxt.html
http://www.google.com/support/webmasters/bin/answer.py?Hl=cn&answer=156449

绝大部分 spider 能够识别的是以下几种:

  • noindex -【页面会被抓取,但在被google的后台系统分析完以后会被丢弃,不会进入google的索引排序,对用户而言也就不会出现在搜索结果中】
  • nofollow -【禁止googlebot追踪页面上的一切链接(阻止访问)。(与meta级别的nofollow不同的是, link级别里的nofollow只会阻止robot追踪单条链接)】
  • noarchive -【禁止在搜索结果中显示该页面的快照】
  • nosnippet -【禁止在搜索结果的网页链接下显示内容摘要,同时阻止搜索引擎产生该页面的快照】
  • noodp -【在搜索结果的页面摘要部分屏蔽open directory project对该页面的描述】
  • none -【等同于同时使用noindex和nofollow两个参数】

robots文件的使用,有很多特别需要注意的,甚至很多知识点甚至搜索引擎本身都没有给出详尽的说明或者是使用方法。在参阅了大量的资料和结合自身的一些尝试,本文将重点说明下,一些在对robots文件进行处理的过程中需要特别注意的潜规则。

robots文件潜规则

不允许出现多条user-agent的记录

一份“/robots.txt”文档中不允许出现多条包含“user-agent: *”的记录(但允许没有此记录)。

spider名字的大小写问题

大多数搜索引擎的spider在读取user-agent值的时候都是忽略大小写,既Googlebot和googlebot应该都能被google识别。但是,我在学习淘宝seo的时候也发现,或许为了保险起见,淘宝的工作人员在自己的“/robots.txt”里面分别写了“user-agent: baiduspider”和“user-agent: baiduspider”两条。(参见:http://www.taobao.com/robots.txt)

allow和disallow的顺序

大部分情况下,想要兼容所有的机器人,就应当将allow指令放在disallow指令的前面,例如:

Allow: /a/b.html

Disallow: /a/

这会阻止对”/a/”内除了”/a/b.html”以外一切内容的检索,因为后者是优先匹配成功的。虽然对于google和百度来说,先后顺序并不重要。但是不排除会导致其他搜索引擎出现抓取问题。

allow与disallow的角力

如果allow指令中的地址同disallow指令中的地址相比具有相同或更多字符(意味着allow指令所描述的地址更“深”、更“具体”)的话,虽然disallow指令也能匹配,但allow指令仍然会“获胜”(这样就达到开放子文件夹的目的了,同时没被allow的部分依然不会被检索)。

举个例子吧(假设和顺序无关)

Disallow:/a/b

Allow:/a

这样就是允许除b以外的所有a

Disallow:/a

Allow:/a/b

这样就是禁止除b以外的所有a

反斜杠“/”的意义

反斜杠“/”表示禁止搜索引擎进入该目录。

User-agent: spider

Disallow: /a

对这样的记录机器人该怎么反应?按照res标准,机器人会将名为“a”的文件和名为“a”的目录都disallow。当然,比较符合逻辑切清晰的写法是使用“/”来标识所声明的路径:

Disallow: /a/

注意不要忘记“a”前面的“/”

根据“/”的意义,对于只允许某搜索引擎,有些robots.txt会这样写

User-agent: Baiduspider

Disallow:

User-agent: *

Disallow: /

这样用百度的robots工具测试也是OK的,但从百度自家产品,百度知道的robots来看,更多的是写成

User-agent: Baiduspider

Allow: ?/

User-agent: *

Disallow: /

我其实在想,或许“/”正确的表述应该是"进入该目录"的意思,要不然Allow: ?/就不好理解了

在指示行末尾加注的问题

在“/robots.txt”文件中,凡以“#”开头的行,均被视为注解内容,这和unix中的惯例是一样的。例如:

Disallow: /cgi-bin/ # this bans robots from our cgi-bin

尽量不要在一行的前面出现空格

如“ disallow: /”《很多人非常不小心,空格就没了》

Res标准并未对这种格式予以特别说明,但和上面一个问题一样,可能导致某些机器人无法正确解读。

文件目录区分大小写(这个或许是困惑大多数人的)

虽然res标准忽略大小写(case insensitive),但目录和文件名却是大小写敏感的。所以对于”user-agent”和”disallow”指令,用大小写都是可以的。但对于所声明的目录或文件名却一定要注意大小写的问题。例如:

Disallow: /abc.htm

会拦截“http://www.example.com/abc.htm”

却会允许http://www.example.com/Abc.htm

所以在IIS服务器可能出现的 诸多 大小写目录问题,可以通过此方法得到圆满解决。

如果页面中包含了多个同类型meta标签,spider会累加内容取值

对于下面两条语句来说:

<meta name=”robots” content=”noindex” />

<meta name=”robots” content=”nofollow” />

搜索引擎将会理解成:

<meta name=”robots” content=”noindex, nofollow” />

当内容取值冲突的时候,google和百度等大多数搜索引擎会采纳限制性最强的参数

例如,如果页面中包含如下meta标签:

<meta name=”robots” content=”noindex” />

<meta name=”robots” content=”index” />

Spider会服从noindex的取值。

如果你既用了robots.txt文件又用了robots meta标签

当二者出现冲突,googlebot会服从其中限制较严的规则

如果你在robots.txt中阻止了对一个页面的检索,googlebot永远不会爬到这个页面,因此也根本不会读到这个页面上的meta标签。 如果你在robots.txt里面允许了对一个页面的检索,却在meta标签中禁止了这一行为,googlebot会到达这个页面,在读到meta标签后终止进一步的检索行为。

当然,前提是搜索引擎严格按照robots来办事

刘总说的robots很详细,另外还有大神补充一个经常出现的问题,就是robots.txt本身文件的格式是utf-8的,用一些文本编辑器在生成的时候,经常会出现在文本前出现多处的ascii码问题,这样的情况就造成了User-agent:读取出错。

可以在 google 站长工具 或?http://tool.motoricerca.info/robots-checker.phtml?进行检测。

推荐阅读

robots.txt文件应该放在网站哪里?

robots.txt文件应该放置在网站根目录下。比如说,当spider访问一个网站(例如http://www.chinaz.com)时,首先会检查该网站中是否存在http://www.chinaz.com/robots.txt这个文件,如果Spide......

robots禁掉动态链接,问号前面的静态URL抓取吗?

不会的,你原来的页面还在,肯定会抓。...

网站禁止收录所有动态页面,该怎么设置?

我们知道动态页面都有一个共同的特征,就是在链接里会带有"?"这个问号的符号,因此我们可以在robots.txt文件里写入如下这样的规则: User-agent: * Disallow: /*?*...