小心设置robots 指示(robots directives)
假设你是网站管理员,刚知道有个软件的探测器进入了网站,并检查网站的每个页面。它还一次又一次地回访。听起来像个安全问题,是不是?甚至即便能够确认没有什么大问题,它也在浪费服务器的资源。
网站管理员经常这样看搜索蜘蛛程序:一个需要被控制的危险的家伙。而ro-bots.txt文件是控制蜘蛛程序的一个方法。这个看起来不起眼的简单文本文件,放在网站服务器的根目录下。robots.txt文件告诉蜘蛛程序在服务器上什么文件是可以被查看的。技术上不会阻止蜘蛛程序查看不许访问的文件,但是对蜘蛛程序来说有个君子协议,它们会有礼貌地遵守这些指令。
这里只有两个robots.txt里的操作声明:
1 Useragent(用户代理)。用户代理声明定义了禁止指令适用于哪个蜘蛛程序。如果你对用户代理编码了一个星号,你指的是针对所有的蜘蛛程序,但是你也可以指定我们在表格10-1中列举的一个特别的蜘蛛程序。
2 禁止。禁止声明制定哪个文件蜘蛛程序不能够查看。你可以指定一个精确的文件名或者任何文件名或者目录名的一部分——蜘蛛程序会认为那是一个匹配符号并禁止任何与那部分名字匹配的文件。因此,指定了“e”可能会禁止全部有“e”的文件被查看,同样所有文件和任何有“e”为开头的目录。如果指定了“/”,就禁止察看所有的文件。
网站管理员有理由使蜘蛛程序远离某些服务器上的目录——为了保证服务器性能。大多数网站服务器都有程序储存在“cgi-bin”目录下,因此在robots.txt文件中加入“disallow: /cgi-bin/”是个好主意,这样能够避免将所有的程序文件(蜘蛛程序对这些根本没兴趣)发送给蜘蛛程序,于是节省了服务器资源。当一个鲁莽的网站管理员不了解禁止其他或全部文件带来的影响,就会有麻烦了。
意外的排斥对所有网站来说很普遍,而很多网站管理员使用robots.txt文件来故意排斥蜘蛛程序。设想一下,这个文件被用在站点正式上线前阻止蜘蛛来访。不幸的是,排外的robots.txt文件可能在系统上线之后还留在那里,导致整个网站不能被搜索引擎收录。
除了robots.txt能够控制蜘蛛程序爬过整个网站,还有一种方法来指导蜘蛛如何访问网页——robotsmetatag。在页面HTML的 <head>部分,一系列的metatag通常以<meta name=”type”>形式出现(这里“type”是metatag的种类)。robots标签就是其中一种这样的metatag (<meta name=”robots”>),它可以控制是否网页需要收录,是否可以顺着页面上的链接继续爬行。
如果robots.txt限制某个特定的网页,那么robotsmetatag说什么都不重要,因为蜘蛛程序根本不会看那个网页。但是如果robots.txt允许蜘蛛程序来访问网页,那么蜘蛛程序在访问页面时就会查看robotsmetatag。图表10-6显示出robotsmetatag现有的变化:限制收录(将内容放到索引库中)以及“跟随链接爬行”(使用网站的链接从一个网页爬行到另一个网页)的种类。如果robots metatag丢失了,网页被认为是“index,follow(收录并跟随链接爬行)”。
指导蜘蛛程序只收录网页,但不是顺着其他链接跟随网页:
<meta name="robots" content="index,nofollow">
指导蜘蛛程序不收录网页,但是可以跟随所有链接到其他网页:
<meta name="robots" content="noindex,follow">
在正常情况下,你不希望网页在编写的时候加上Robots标签(或者有“in-dex,follow[可收录可跟随链接]的Robots标签)”。有理由使用Robots标签来限制蜘蛛程序。站点上的有些网页只能按顺序从头开始查看,例如一个虚拟旅行或者一个虚拟演示。尽管有些搜索者会不按顺序而从中间来访问网站,有些站点的负责人可能不想让他们这样做,因此这些管理员会在虚拟演示的第一页加上一个Robots标签,指明“index,follow(可收录可跟随)”并且在所有其他页面上具体指明 “noin-dex,nofollow(不收录,不跟随)”。
另一个使用“noindex” robots标签的原因是避免访问时出错。你的购物程序可能需要网页按照一个固定的顺序才能正常工作——例如你不能直接进入购物车页面。因为没有理由使购物车被收录,所以你可以在那个页面加上“noindex,nofollow(不收录,不爬行)”来阻止搜索者直接进入购物车页面。
但大多数页面可能会被收录。当很多网页被收录而只有少数没有被收录时,robots标签是主要的原因。不幸的是,这个标签经常在创建网页的模板里被错误地定义。或者被一些网站开发人员错误使用。Snap电器公司就是这种情况。
请你回忆一下第7章,Snap对搜索关键词“最好的数码相机”的搜索登陆页面并不在任何索引库中。对网页的检查发现有一些Snap网页被robots标签限制了。产品目录网页的标签指明了<meta name="robots" content="index,nofollow">。这使得蜘蛛程序没有沿目录网页链接到实际的产品网页。此外,即使不存在这个问题,每个实际产品网页的标签都指明<meta name="robots" content= "noindex,nofollow"> 。网站开发人员指出这么做是因为商务系统就不会被搜索引擎蛛蛛程序搞得负载过重。在和开发人员沟通后,标签删除,网页就被收录了。
消除弹出窗口
大多数互联网用户都不喜欢弹出窗口,这些讨厌的“小广告”在你做其他事情的时候跳到你面前。弹出窗口广告招致非议极多,以至于禁止弹出窗口的程序风靡一时。但很多站点仍乐此不疲,相信它可以吸引眼球,比网站用户的需要更重要。
很多网站所使用的弹出窗口比广告还多。因此,如果用户的憎恶还不足以使你避免使用弹出窗口的话,下面这个原因可能会的:蜘蛛程序看不到它们。如果你的站点使用弹出窗口来展示相关内容,那些内容不会被收录。更糟糕的是,如果你的站点使用弹出窗口来显示链接到其他网页的菜单,蜘蛛程序不能够沿着这些链接爬行,蜘蛛程序也找不到这些网页。
如果你的站点使用弹出窗口来显示一些补充的内容,唯一使内容被收录的方法是停止使用弹出窗口。你必须在网页上增加补充的内容,或者创建一个带正常链接的标准页面。如果在说服外围搜索团队停止使用弹出窗口时有困难,那么提醒他们不断涌现的禁止弹出窗口程序也会让更多访客看不到这些内容。
如果在导航菜单使用弹出窗口,你可以用同样的方法修正蜘蛛程序陷阱,即给对应网页增加链接并移除弹出窗口。当然你也有其他选择。可以将现有的弹出窗口导航留在那里,但是也提供蜘蛛程序可以访问的备选通路。我们将在本章后面讨论这些所谓的蜘蛛程序通道。
不要依赖下拉导航
与通过弹出窗口显示导航类似,蜘蛛程序也会被JavaScript编写的下拉导航截住,如图表10-7所示。并且蜘蛛程序对下拉导航会面临和弹出窗口一样的问题:它们不能够模拟点击上面的链接(沿着链接爬行)。如你希望的那样,前面对弹出窗口的解决方案在这里一样适用——你可以重新以正常的HTML重写这些链接,或者提供替代的通路使得蜘蛛程序能够访问这些网页。
除了上面这些解决方案之外,还有一种方法来消除JavaScript蜘蛛程序陷阱,即使用<noscript>标签。熟悉HTML的人们知道有些旧的浏览器不支持JavaScript,有些互联网用户在他们的浏览器中禁用JavaScript。这些没有运行JavaScript的浏览器不能执行网页上的JavaScript代码,这可能导致严重的问题。如果下拉导航需要JavaScript,,没有JavaScript功能的浏览器就不能给用户显示导航。
输入<noscript>标签。网页设计人员可以增加这些标签,为不支持JavaScript的浏览器提供备选的代码。蜘蛛程序不会执行JavaScript,因此它们通过处理<noscript>代码来代替。如果你必须使用JavaScript导航,你需要将标准HTML链接代码放到<noscript>部分。但是,为了让搜索蜘蛛程序沿着链接爬行,必须给每个链接的网页提供完整的路径名。为更好地保证蜘蛛程序能发现这些页面,需要在站点地图上加上这些网页。