• 无论你是否使用WordPress系统,对robots.txt有无了解,你都能从这份WordPress博客的robots.txt文件写作指南中找到有用的信息。如果对这两者你都是新手,你也完全可以根据本文写出一份完整而出色的robots.txt文件。好吧,省掉废话,我们直入主题。

    为何要写robots.txt

    做网站的朋友一定知道搜索引擎,因为搜索引擎的蜘蛛机器人(spider)对你的网站进行爬行并索引你的网页,并随后通过关键字搜索为你的网站带来流量。然而,植株机器人的爬行行为往往超出你的想象和愿望,你希望它们抓取你最有价值的网页,它们却访问那些不重要的信息或者你认为私密的或是不适宜公开的信息或数据。所以robots.txt诞生了。网站管理员通过它对搜索引擎给予指示,限制搜索引擎对特定内容(诸如网站目录、网页、特定文件类型等等)的访问。robots.txt的作用简单来看,正如下图表示的一样。
    robots.txt文件的作用

    当然需要值得注意的是,事实上robots.txt的访问与解析并不是一个强制的协议标准,因此robots.txt的解析完全取决于搜索引擎本身的技术实现与商业伦理,也就是说如果一个搜索引擎不尊重robots.txt的“君子协议”,那么无论robots.txt文件写的多严密多好也是没用的。所幸的是,互联网社会的大部分成员都还是尊重Robots协议的。

    另外一方面,即便是一个尊重robots.txt的搜索引擎,其对robots.txt解释的技术实现也可以存在细微差别。不过,这仍然毫不影响robots.txt文件对一个网站的重要性。

    我们来看看,robots.txt对我们的网站有哪些好处:

    • 保护网站内容,而只呈现那些可以和希望呈现给搜索引擎的网页内容
    • 搜索引擎优化SEO,避免重复网页内容
    • 提交网站地图Sitemap文件

    怎样写好WordPress博客的robots.txt

    为了让搜索引擎能索引你的网页并为你带来访问流量,就要正确地写好robots.txt,这对一个网站的SEO是至关重要的。下面就一步一步从零开始告诉你怎样写一份robots.txt文件。

    创建robots.txt

    robots.txt文件是一个文本文件,使用任何一个常见的文本编辑器,比如Windows系统自带的Notepad,就可以创建和编辑它。这份文本文件中包含了若干行访问规则与指示,这些访问规则看起来很像”Disallow: /blocked”这样的形式。robots.txt文件中也允许使用注释行,注释行以一个”#”符号开头,通常形式是:

    # 这是一个注释行

    当robots.txt文件在修改完成后,就需要上传并存放到一个网站的根目录中,而从浏览器中访问时,它的地址就例如”http://www.yuhua.org/robots.txt”。接下来我们看看Robots.txt文件的内容吧。

    先指示适用的搜索引擎

    我们先用下面这行规则开头:

    User-agent: *

    这行规则告诉读取Robots.txt文件的搜索引擎,之后的访问规则针对所有的搜索引擎都有效。

    限制搜索引擎访问特定文件

    然后我们继续为robots.txt文件添加特定文件的访问规则。任何一种阻止访问的指示,都以”Disallow:”开头,之后跟随你想要禁止访问的内容,例如”/blocked”。

    需要注意的是,搜索引擎在解析禁止访问的内容时,是使用字符串匹配的,因此robots.txt文件中添加以下规则后,搜索引擎就不会访问一切在网站根目录下的以”blocked”开头的文件:

    Disallow: /blocked

    以下文件对于搜索引擎都属于上面那条规则所屏蔽的页面:

    blocked.html
    blocked.xml
    blockedfile.html
    blocked-file.html

    正如前面所介绍的例子一样,当使用类似”/blocked”这样的规则时,所有根目录下文件名符合”blocked”文件开头的文件都会被阻挡在搜索引擎的访问之外。

    但是需要注意的是:规则必须以”/”开头,即一个”Disallow: /blocked”的开头属于合法的规则,而”Disallow: blocked”则对百度搜索引擎不合法,为了兼容性,我们保证每条规则以”/”开始。

    现实中的文件名往往并没有例子介绍的那么简单,如果碰到复杂的文件名,那么就要使用文件通配符”*”了。文件通配符的含义是任意字串,看下面的例子你就明白了。当在robots.txt文件中建立一个规则如下:

    Disallow: /*blocked

    以下这些文件就都符合这条阻止访问的规则了:

    fileblocked.html
    file-blocked.html
    blocked.html
    blocked-file.xml

    不过,对文件的阻止规则更常见的用途是对特定的文件类型添加规则,比如:

    • .php脚本文件
    • .js脚本文件
    • .inc脚本包含文件
    • .css样式表文件

    这几类文件,对我们网站的搜索引擎优化SEO并没有任何帮助,因此只要添加如下规则,就可以防止搜索引擎访问这些类型的文件:

    Disallow: /*.php$
    Disallow: /*.js$
    Disallow: /*.inc$
    Disallow: /*.css$

    这些规则中文件结尾的”$”代表终结,这样假如有”file.jsp”这样的脚本文件就不会因为”Disallow: /*.js”这样的规则而不被搜索引擎收录了。

    对文件的阻止规则就讲到这里,下面来看一下对目录的规则应该如何写。

    限制搜索引擎访问目录

    对目录的访问规则,往往在网站的使用中是最常见,也是最有用的,尤其是如果你使用WordPress作为你的网站的程序框架的话,它的作用是非常显著的。

    对一个WordPress网站来说,假定WordPress被安装在根目录下的话,那么在网站的根目录中往往会存在这样几个物理目录:

    • /wp-admin
    • /wp-includes
    • /wp-content
    • /wp-content/cache
    • /wp-content/languages
    • /wp-content/plugins
    • /wp-content/themes
    • /wp-content/upgrade

    除此之外,还可能有象:

    • cgi-bin

    这样的系统缺省建立的目录。这些目录中有些是系统后台管理界面的目录,有些是系统缺省脚本目录,除了”/wp-content/uploads”目录以外,你应该并不希望搜索引擎对其余几个目录进行任何的访问。

    而在网站的实际访问中,还会存在类似:

    • /tag/
    • /category/
    • /2012/
    • /2013/
    • /page/
    • /comments/
    • /trackback/
    • /feed/

    这样的虚拟目录,这些目录并不存在于您的系统文件目录中,但是在访问时,却实实在在的存在。而这些目录往往只是一个文章的列表(List)或瓦片视图(Tile Layout),或是文章的评论、RSS Feed,甚至是作者页。从搜索引擎优化SEO的角度来说,你往往希望搜索引擎只爬行(follow)这些页面,而不是索引(index)这些页面。此时,你可能希望在robots.txt中对这些目录作出明确的阻止访问的指示。那么根据以上物理目录与虚拟目录的阻止访问的需求,我们就可以编写出下面这段访问规则:

    Disallow: /cgi-bin/
    Disallow: /wp-admin/
    Disallow: /wp-content/cache/
    Disallow: /wp-content/languages/
    Disallow: /wp-content/plugins/
    Disallow: /wp-content/themes/
    Disallow: /wp-content/upgrade/
    Disallow: /wp-includes/
    Disallow: /comments/
    Disallow: /category/
    Disallow: /tag/
    Disallow: /page/
    Disallow: /feed/
    Disallow: /trackback/
    Disallow: /2010/
    Disallow: /2011/
    Disallow: /2012/
    Disallow: /2013/

    你可能已经从这段规则中看出一些眉目来,那就是每个目录规则之后必定以一个”/”来结束,这在之前的文件访问规则中是没有。没错!结尾的”/”正是文件与目录规则之间的区别。

    WordPress固定链接设置
    一旦应用如上访问规则后,所有这些WordPress网站目录下的文件,搜索引擎就都不会访问了。不过如果你使用WordPress的固定链接的话,并且也象我一样使用“文章名”的方式设置固定链接的话(如上图所示),那么WordPress一定会有这样的URI网址:

    • /complete-guide-how-to-write-wordpress-robots-txt/feed/
    • /complete-guide-how-to-write-wordpress-robots-txt/trackback/

    其中的”feed/”与”trackback/”在每个文章的URI之后都有,我们又不可能将所有文章URI都加进robots.txt中去,那么这时就又要用上通配符”*”来帮忙了,在robots.txt中添加如下规则就达到目的了。

    Disallow: /*/feed/
    Disallow: /*/trackback/

    进一步优化

    有时候,WordPress网站会在URI后追加”?”并用HTTP GET方式传入一系列的查询字串(Query String),但是访问的脚本却是一个。为了防止搜索引擎优化SEO中要避免出现的重复内容(Duplicate Content),即不同网址相同内容的情况,我们还要再添加几条规则来做优化。

    Disallow: /*?
    Disallow: /*/*?
    Disallow: /*/*/*?

    添加这几条规则后,基本大部分在URI中包含查询字串的访问,都会被阻止了。这对于曾经用过Mobile Pack这样的主题的WordPress网站来说最有用,因为Mobile Pack主题会创建大量的带有查询字串的URI,造成搜索引擎反复访问,产生大量的重复内容。

    对个别搜索引擎进行访问限制

    有时候,你仅对大部分搜索引擎设置一个大而统之的访问规则是不够的,总有一些搜索引擎我们希望区别对待。看看下面这段访问规则。

    # Google Image
    User-agent: Googlebot-Image
    Disallow:
    Allow: /
     
    # Google AdSense
    User-agent: Mediapartners-Google*
    Disallow:
    Allow: /
     
    # digg mirror
    User-agent: duggmirror
    Disallow: /
     
    # Alexa archiver
    User-agent: ia_archiver
    Disallow: /

    这段规则分别对Googlebot-Image、Google AdSense搜索引擎蜘蛛赋予了全站抓取指示,而对digg mirror与Alexa的Internet Archive的搜索引擎蜘蛛做了全站不允许抓取的指示。如果你不太明白这些到底是什么,那就别管它,就按照这个规则写吧!

    不过特别要注意的是,一个搜索引擎指示下的规则组只针对这个搜索引擎,所以当针对Googlebot-Image、Google AdSense、或Alexa Internet Archive这些搜索引擎规定规则后,之前的”User-agent: *”下的所有规则就不在起作用了。

    写到这里,WordPress博客的Robots.txt文件的阻止规则的主要部分就完成了。当然我们还缺少一个很重要的部分,为Robots.txt加上网站Sitemap文件指引。

    指示站点地图位置

    为robots.txt文件继续添加如下规则:

    Sitemap:http://www.yuhua.org/sitemap.xml
    Sitemap:http://www.yuhua.org/sitemap_baidu.xml

    第一个规则告诉大部分搜索引擎,网站的Sitemap文件在哪里;第二个规则告诉百度搜索,它能读懂的Sitemap文件在哪里。不过,在加入以上规则前,一定要确保这两个文件的链接确实能够访问!以上两个规则对搜索引擎收录我们网站的网页有极重要的作用。

    完成后的robots.txt

    好了,终于把一份给WordPress博客使用的robots.txt文件完成了,我们来看一下完整的规则。

    User-agent: *
    Disallow: /cgi-bin/
    Disallow: /wp-admin/
    Disallow: /wp-content/cache/
    Disallow: /wp-content/languages/
    Disallow: /wp-content/plugins/
    Disallow: /wp-content/themes/
    Disallow: /wp-content/upgrade/
    Disallow: /wp-includes/
    Disallow: /comments/
    Disallow: /category/
    Disallow: /tag/
    Disallow: /page/
    Disallow: /feed/
    Disallow: /author/
    Disallow: /trackback/
    Disallow: /2010/
    Disallow: /2011/
    Disallow: /2012/
    Disallow: /2013/
    Disallow: /*/feed/
    Disallow: /*/trackback/
    Disallow: /*?
    Disallow: /*/*?
    Disallow: /*/*/*?
    Disallow: /*.php$
    Disallow: /*.js$
    Disallow: /*.inc$
    Disallow: /*.css$
     
    # Google Image
    User-agent: Googlebot-Image
    Disallow:
    Allow: /
     
    # Google AdSense
    User-agent: Mediapartners-Google*
    Disallow:
    Allow: /
     
    # digg mirror
    User-agent: duggmirror
    Disallow: /
     
    # Alexa archiver
    User-agent: ia_archiver
    Disallow: /
     
    Sitemap:http://www.yuhua.org/sitemap.xml
    Sitemap:http://www.yuhua.org/sitemap_baidu.xml

    这样的一份robots.txt文件,兼顾了WordPress博客网站的方方面面。如果你并不想深入研究WordPress与robots.txt文件,那么替换以上规则中Sitemap部分的网址为你的网站的网址,再复制到你的WordPress网站的robots.txt文件中就可以了!

    robots.txt替代品:Robots Meta标签

    Robots.txt文件针对整个网站提出访问的限制,如果你要针对个别页面作搜索引擎访问的限制的话,就应该在HTML文件中使用Robots Meta标签,一个Robots Meta标签形式如下。

    <meta name="robots" content="noindex,follow"/>

    content部分通常有四个选项:index, noindex, follow, nofollow,分别告诉搜索引擎索引、不索引、继续爬行、不继续爬行这个网页。

    如果你使用WordPress的SEO插件,比如Yoast WordPress SEO,或者All in One SEO Pack,那么在这些插件中,都有针对文章、页面、媒体等的Robots Meta的个别配置功能,可以大大简化你的WordPress SEO工作。

    再多说几句

    百度站长工具 - Robots工具
    尽管robots.txt已经存在很多年了,但是各大搜索引擎对它的解读都有细微差别。Google与百度都分别在自己的站长工具中提供了robots工具,它们的链接附在了“参考阅读”部分中。如果你自己编写了robots.txt文件,我建议你在这两个工具中都进行测试,因为这两者的解析实现确实有细微差别。

    参考阅读

    如果你还想深入了解robots.txt文件以及在WordPress下的使用,你可以访问以下网址:

    转载申明

    如果你认为本文很有帮助,并希望转载,那么请务必:

    • 引用本文名称与永久地址:“完全指南:如何写好WordPress博客的robots.txt文件”(http://www.yuhua.org/complete-guide-how-to-write-wordpress-robots-txt/)
    • 或者,在正文中附加本网站名称与链接的署名:The Observing Mind(http://www.yuhua.org/)

    这对您的网站并不会造成任何损害,但是却是对我的时间、劳动与知识成果的尊重,谢谢!

    YH
    About YH

    『星際迷航(Star Trek)』及科幻輕度癡迷人仕、程序開發愛好者、項目管理實踐者及美國項目管理協會(PMI) Project Management Professional (PMP)®連續10年持證人、人力資源經理、陳式太極拳初階練習人、愛書的讀書人、輕度旅行者與博物館愛好者,以及隨意的數碼照片拍攝者。

    『旅行』是體驗和放鬆的好方法,『閱讀』是人生一日也不可缺少的生活方式,而『寫作』則是記錄歷史和整理思想的好工具。

    11 Responses to 完全指南:如何写好WordPress博客的robots.txt文件
    1. 张力
      2013 年 2 月 20 日 at 10:36

      正在找怎样写robots.txt文件呢,你写的挺详细,值得收藏

    2. tangjinglan
      2013 年 2 月 21 日 at 11:19

      如果做seo,想让搜索引擎抓所有东西,要怎么写呢?

      • YH
        YH
        2013 年 2 月 21 日 at 20:33

        那就什么也不写,只保留sitemap指示就好了。

        或者用“Allow: /”,不过这个不是标准协议,似乎不是所有搜索引擎都支持,好像Google的指南里就没有提到。

    3. 2013 年 2 月 27 日 at 09:31

      如果没有特别要注意的,我都是直接上传一个空白的Robots.tx文档。
      链接已经加上,以后多向你请教PMP哈!

      • YH
        YH
        2013 年 2 月 28 日 at 09:37

        谢谢,有空常来坐坐,交流一下。

    4. 2014 年 5 月 5 日 at 16:53

      “从搜索引擎优化SEO的角度来说,你往往希望搜索引擎只爬行(follow)这些页面,而不是索引(index)这些页面。”
      这句话里面,对于爬行和索引,这两个词分别的意思不太理解。爬行是说的蜘蛛遍历查看服务器上的文件内容吗?索引,不是很理解,是记录的意思吗?还望解答

      • YH
        YH
        2014 年 5 月 6 日 at 09:05

        你的理解很正确,爬行确指抓取并按照取得的网页内容进行遍历,索引是指对你的网页内容进行记录、解析、并根据关键词库建立词条指针并归入指针表等等一系列动作。

    5. Pingback: 来之不易的Ella记 (WordPress建站,Bluehost空间) | Ella记

    6. yan
      2015 年 2 月 6 日 at 14:23

      用了你写的的robots.txt文件,特来感谢!

    7. 2015 年 10 月 8 日 at 22:33

      刚更新了博客的robots.txt文件,感谢你的分享。

    8. Pingback: 网站优化之robots | Jackie的家

    发表评论

    电子邮件地址不会被公开。 必填项已用*标注