一个看上去有些奇怪的边缘情况,是在robot上不旋转任何规则。下面摘录的是一条空的Disallow命令,它的意思是不排除任何蜘蛛。它与根本没有robots.txt文件是一样的:
User-agent:*
Disallow:
为了排除多个URL地址,只要在User-agent命令中列举它们即可。比如:
User-agent:*
Disallow:/directory
Disallow:/file.html
这将排除任何以“/directory”开头的文件,或以“/file.html”开头的文件。
为了对多个搜索引擎使用相同的规则,只要在Disalow条目列表前面列出多个User-agent命令即可。例如:
User-agent:googlebot
User-agent:msnbot
Disallow:/directory
Disallow:/file.html
robots.txt技巧
在理论上,根据robots.txt规范,如果一个对用户代理“*”的Disallow:命令存在,还有一个对特定的蜘蛛用户代理的Disallow:命令也存在,那么当该蜘蛛访问WEB站点时,只有针对那个特定制作的更特殊的规则将被应用,并且只有一个Disallow:命令被执行。因此,以googlebot为例,必须在Googlebot用户代理下面重复“*”的所有规则,才能排除“User-agent:*”中所列出的条目。
因此,以下的规则对于googlebot仅仅排除Z,而不是以为的X、Y、Z:
User-agnet:*
Disallow:X
Disallow:Y
User-agent:googlebot
Disallow:Z
如果想要googlebot排除X、Y和Z,就应该这样写:
User-agent:*
Disallow:X
Disallow:Y
User-agent:googlebot
Disallow:X
Disallow:Y
Disallow:Z
最后一个示例如下所示:
User-agent:googlebot
Disalow:
User-agent:*
Disallow:/
这些规则仅仅允许Google来检索站点。这是因为对googlebot的更特殊规则覆盖了对“*”的规则。
建议网站管理员将默认的规则“*”放置到排除的最后。根据标准,前后并没有任何关系。然而,对WEB蜘蛛到底会检索第一个匹配规则还是最精确的匹配规则,可能有些模棱两可。对前一种情况,如果首先旋转规则“*”,它肯定会被应用。而将“*”规则列在最后,就不会产生这种混淆。
实时生成robots.txt
站点开发人员完全能够实时动态地程序化生成robots.txt文件。在.htaccess中包括以下规则,能够把robots.php映射成robots.txt,并使用脚本robots.php来生成后者。按照这样的方式,就可以使用类似于meta标签排除所使用方法的编程逻辑,来生成一个robots.txt文件。
.htaccess里的以下规则,将对robots.txt的请求重写到robots.php:
RewriteEngine On
RewriteRule ^robots.txt$ /robots.php
这个robots.php文件如下所示:
<?php
header('Content-type:text/plain');
…
…
?>
解决robots.txt限制
假设在站点中,有很多产品的URL地址类似于“/products.php?product_id=<number>”,而这些URL中对应的打印友好的产品页面类似于“/products.php?product_id=<number>&print=1”。
标准的robots.txt文件不能很方便地用来排除这些打印友好的页面,因为匹配必须从左边开始。于是对每一个页面,都将有一个robots.txt条目:在这一点上,它退化成类似于meta标签排除的情况。在这种情况下,当然还是使用meta排除更简单。此外,在报道称,在Google里对一个robots.txt文件最多只能有5000个字符,如果列表太长的话,问题就来了。
但是,这种情况还是有基于标准的解决方案。如果能反转参数的顺序,这个打印友好的URL地址看上去就会类似于“/products.php?print=1&product_id=<number>”,这时就能很容易地在robots.txt中排除“/products.php?print=1”。
总之,重新对参数排序能让robots.txt更合乎动态网站的口味。然而,在现存的网站中它可能需要修改URL地址,可能需要重定向,并且还会因为很多原因而不尽如人意。不过用在这里还是不错的,因为这些页面肯定会被排除。
当处理整个目录,或者静态文件,或者很多文件名具有相同前缀修饰,通常建议的做法是使用robots.txt排除。那么做更加简单,并且减轻了服务器和蜘蛛的压力。当robots.txt排除的“left-pattern-matching”左模式匹配逻辑不好用时,meta排除通常能派上用场。两种方法可以互为补充,因此你可以在合适的时候自由地混合和匹配它们。