有些时候,网站主并不希望某些页面被抓取,例如依不同条件排序的商品列表页面、某些无意义的页面,或是仍在测试阶段的页面等等,为避免搜索引擎因为爬取这些页面而耗费网站其他部分被抓取的时间,或是因爬取某些页面而造成服务器流量的负担,便可以利用robots.txt文档来指示这些网络爬虫(又称作网络蜘蛛、爬虫程序、网络机器人、检索器)。
以下做详细哦明:
- robots.txt如何运作
- 文档的基本形式
- 可使用的指令
- 常见的规则范例
- 如何创建robots.txt文档
- robots.txt的SEO最佳作法
robots.txt如何运作
搜索引擎的主要任务可以大概分成几项:
- 爬取(检索)网络上的各个网站并发现其中的网页内容
- 将这些不同的网页编成索引(将其收录)
- 当用户搜索时,将索引中的网页以适当的顺序呈现
在开始爬取网站的内容前,搜索引擎的网络爬虫会先到网站根目录下寻找这个robots.txt纯文本档,并根据其中所给予的指示,进行网站内容的爬取。然而,robots.txt文档中的指示并不是强制的,Googlebot等较为正派的网络爬虫会按照文档中的指示行动,但并不是所有网络爬虫都会这么做。并且应注意是否有某些指示不为特定搜爬程序采用。
当robots.txt文档不存在或是没有内容时,都代表搜索引擎可以抓取网站的所有内容。
搜索引擎的检索(crawling)跟索引(indexing)属于不同的进程,如果希望网页不被检索,应使用robots.txt;若希望网页不被索引,则应使用noindex meta 标签或其他方式。
在robots.txt中禁止爬取某个网页,对遵循指示的搜索引擎来说,该页就是没有内容的,可能因此让其排名下降或消失于搜索结果,但并无法确保页面不会出现在搜索结果中,搜索引擎仍有可能透过其他导入链接进入,使得页面被索引。
文档的基本形式
User-agent: 爬虫程序的名字
Disallow: 不应爬取的网页网址
由于robots.txt的主要功用是告诉网络爬虫哪些网页「不能」爬取,所以如上面所写的两行指示所形成的规则就可以当作一个最简单的robots.txt文档了。
指定网络爬虫后,针对目录或文档的指示,应分开写成独立的一行。而针对不同爬虫程序的指示间,则用空行加以间隔,如下图:
可使用的指令
User-agent
必要项目,你可以在每项规则中指定一或多个user-agent,从与中可以找到大部分的user-agent名称。此指令可以搭配 * 通配符使用,例如,User-agent: * 的范围即包括了Adsbot以外的所有爬虫程序。
注:Adsbot为Google用以评估到达网页体验的检索程序,为避免影响广告,系统会忽略全面排除的项目,所以若要防止Adsbot爬取网页,需特别针对它撰写规则
Disallow
每项规则至少要有一个Disallow或Allow的指令,Disallow用以表示禁止爬虫程序的项目。若为网页,应撰写完整的相对路径;若为目录,则必须以/作为结尾。
Allow
每项规则至少要有一个Disallow或Allow的指令,Allow用以表示允许爬虫程序的项目,可覆盖以Disallow禁止的项目。若为网页,应撰写完整的相对路径;若为目录,则必须以/作为结尾。
Crawl-delay
非必要项目,用以告诉在开始抓取网页前延迟多久,单位为毫秒。只是Googlebot会忽略这项规则,因为在百度站长平台中已经有关于限制检索频率的设置。
Sitemap
非必要,你可以透过这个指令指出XML网站地图的位置,也可以同时提供多个网站地图,分行列出即可,此项指令应使用绝对路径。
在上面提到的Disallow与Allow指令中,可使用正规表达式里面的 * 与 $ 字符,用途如下:
- * 可代表0或一个以上的任何有效字符。
- $ 代表网址结束。
4.常见的规则范例
以www.example.com为例,列出一些常见的规则,提供参考。
禁止抓取全部网站
如下的规则会禁止所有爬虫程序抓取全部网站(但不包括Google的Adsbot检索器)。
User-agent: *
Disallow: /
允许抓取全部网站
如下的规则会允许所有爬虫程序抓取全部网站的内容,没有创建robots.txt文档或是该文档没有内容也会有一样的效果。
User-agent: *
Disallow:
允许单一爬虫程序抓取全部网站
如下的规则会禁止baiduspider以外的爬虫程序抓取全部网站的内容。
User-agent: baiduspider
Allow: /
User-agent: *
Disallow: /
禁止特定爬虫程序抓取特定目录
如下的规则会阻止Google的检索程序(Googlebot)抓取以www.example.com/folder1/为开头的所有网页内容。
User-agent: Googlebot
Disallow: /folder1/
禁止特定爬虫程序抓取特定页面
如下的规则会阻止Bing的检索程序(Bingbot)抓取www.example.com/folder1/page1.html此页面的内容
User-agent: Bingbot
Disallow: /folder1/page1.html
指定特定字符串结尾的网址
如下的规则可以封锁任何以.gif为结尾的网址,亦可以应用在特定类型文档的禁止。
User-agent: Googlebot
Disallow: /*.gif$
如何创建robots.txt文档
此纯文本档的文档名称必须为robots.txt,文档名区分大小写,且文档只能有一个,必须放置于网站主机的根目录下。
以https://www.example.com/ 为例,robots.txt的位置就必须为https://www.example.com/robots.txt。
子网域需各自创建其robots.txt文档,如https://blog.example.com/ 应创建于https://blog.example.com/robots.txt
创建后的robots.txt文档是公开的,任何人只要在根网域的后方输入/robots.txt就可以看到网站禁止爬取的网页是哪些,所以在创建文档内的指令时要特别考虑这点。
robots.txt的SEO最佳做法
(1) 确定你想要被检索的页面没有透过robots.txt阻挡。
(2) 透过robots.txt阻止检索的网页,当中的链接并不会被爬虫经过,这代表,被链接的页面如果没有来自其他网页的链接,该网页不会被检索,并且可能不会被收录。
(3) 如果想避免较敏感的数据出现在搜索结果,不要使用robots.txt,应该使用其他方式如密码保护或robots meta directives。
(4) 搜索引擎会缓存robots.txt的内容,但通常会在一天内更新,如果你改变了该文档的内容,并希望其尽快生效,你可以将其。
(5) 针对搜索引擎爬虫的指示好多!有robots.txt又有robots meta directives,两者间的差别在于:robots.txt给予网络爬虫关于搜爬网站目录的指示;而robots meta directives则是针对个别页面给予是否索引的指令。
cover image credit:
评论列表 (0)