对于建站的各位站长来说,少不了要和搜索引擎打交道,像是常见的 SEO,搜索引擎权重,死链排查和修复之类的,肯定都或多或少的听过一点。不过我这次想说的 robots.txt,平常我们接触到的应该不多,有些刚接触建站的站长可能都没听过,然而它又是我们与搜索引擎打交道必须要了解的一项,因此这次还是写一篇文章,来专门介绍下它吧!
一、什么是 robots.txt?
robots.txt 其实就是一个存放在你网站根目录下的名为 robots.txt 文件,其编码格式为 ASCII 或 UTF-8。这个文件中包含一系列的代码,主要是供搜索引擎在索引你的网站时查看的,用于告知搜索引擎你网站的一系列限制。当然,这个文件并没有一个严格的规范,它是一个约定俗成的东西,有些搜索引擎会遵守你写的限制,有些搜索引擎则不会遵守。对于一般站长来说,还是有必要创建这么个文件的,至少一些大的搜索引擎都还能遵守 robots.txt 中书写的内容。
二、robots.txt 有什么用?
前面跟大家说了, robots.txt 主要是用来限制搜索引擎的索引行为的。举例来说,你可以通过在该文件中加入一些限制,让遵守该文件规范的搜素引擎不对你的某个网站目录或文件进行索引,或者限制某个搜索引擎索引你的网站。同时,你也可以通过该文件,告知搜索引擎哪些目录或文件需要索引,或者只针对特定的搜索引擎设置规则让它索引指定的目录或文件。
另外, robots.txt 如今还有一个作用,就是告知搜索引擎你的网站地图(sitemap)所在位置。这里额外提一下,sitemap 的作用就是将你网站近期的新内容生成一个方便搜索引擎爬取的地图文件,好方便搜索引擎的索引,加快网站新内容的收录速度。
三、robots.txt 的写法
robots.txt 写起来其实也不算复杂,只是需要注意逻辑合理即可。不过首先我们需要注意的就是这个 txt 文件的编码格式问题,出于一些历史原因和兼容性方面的考虑,robots.txt 这个文件的编码格式只能是 ASCII 或 UTF-8 的,这里尤其要注意的是后者,因为 UTF-8 在 Windows 系统下还有个 BOM 头的问题,所以建议大家在创建和编辑这个文件的时候,最好不要用系统自带的记事本,而是用一些更专业的文本编辑器如 Notepad++ 来创建和编辑,并选择上述的编码格式来写。
关于这个文件具体的写法,这里先介绍一些基本的语法,然后给大家看看具体的几个例子,好让大家能理解其中的含义。
robots.txt 的语法
- User-agent
robots.txt 的基本语法,用于指定后面书写的规则适用的搜索引擎爬虫,如果规则为全局生效的,则后面填写*,如果单独制定某个爬虫生效,则需要填写具体爬虫的名字,如谷歌的 Googlebot。
- Allow
用于指定某个爬虫允许索引的链接或文件,区分大小写,支持使用通配符“*”,详细的写法博主后面再给大家演示下
- Disallow
用于指定某个爬虫不允许索引的链接或文件,和上面的意思正好相反的,同样区分大小写且支持使用通配符“*”。
- Sitemap
用于告诉爬虫你的网站地图文件所在处,后面直接写上具体的链接。 Sitemap 是独立出来的写法,前面不需要指定爬虫,也不需要接任何的前置规则。
基本上就是上面这四种语法,其实理解起来还是挺简单的,只是需要注意下大小写和规则的先后顺序判断问题。下面我自己写几个例子好让大家方便理解。
例一
User-agent: * Allow: /
上面这个大概是最简单的写法了,不过一般也不会这么写,因为没什么用。=_=
意思也很简单:所有爬虫(User-agent: *)允许爬取本网站的所有链接或文件(Allow: /)。
例二
上面那个例子还是太简单了,再稍微说个复杂点的吧。
User-agent: * Allow: /home Allow: /HOME Disallow: /HOM
这个例子是在说,所有爬虫可以爬取类似 https://example.com/home 或者 https://example.com/HOME 这样子的,或者是 https://example.com/home.html 或者 https://example.com/HOME.html 这样子在域名后面紧接着写有 home 或者 HOME 的链接。同时不允许爬取链接后紧接着写有 HOM 的链接。
上面这个例子给大家说明了两个问题:
- Allow 和 Disallow 的规则是区分大小写的
- 越细越具体的规则,优先级越高,因此尽管最后我们 Disallow 了域名后面紧接着 HOM 的链接,但是由于前面一条的规则 /HOME 写得更完整更细,所以类似 https://example.com/HOME 这样得链接还是允许爬取
例三
User-agent: bot1 Allow: /home Allow: /HOME Disallow: /HOM User-agent: bot2 Disallow: /home Disallow: /HOME Allow: /HOM
这个例子主要就是想跟大家说说针对不同的爬虫的写法,可以看到相比例二,我用了两种完全相反的规则,匹配爬虫 bot1 和 bot2。
例四
例四就主要说说针对 Allow 和 Disallow 的具体路径写法吧。前面我都说的是 /home 这种形式的,假设我们的域名是 https://example.com,它的含义是匹配https://example.com后面紧接着/home 这样子的链接,比如以下几种链接:
https://example.com/home https://example.com/home.html https://example.com/home.php https://example.com/home1 https://example.com/home2
除了这种以外,我们还能写 /home/ 这种的,匹配的是链接中出现 /home/ 这个字段的,比如以下几种:
https://example.com/home/1.html https://example.com/home/2.php
另外,还能用通配符“*”来进行模糊匹配,比如如果我写 /*home,则可以匹配下面这种链接:
https://example.com/gohome https://example.com/backhome https://example.com/gohome.html
这里提一下,基本上“*”这个可以出现在任何地方,不管是 /*home /ho*e 还是 /hom* 都是 OK 的,主要还是看你想模糊匹配哪些链接。
最后还有一个字符“$”,是用于标识网址结束的。比如如果我写 /*.php$,则像如下这样子的链接会被匹配到:
https://example.com/gohome.php https://example.com/home/gohome.php
例五
例五就不多说什么了,就单独说下 sitemap 的写法吧:
User-agent: bot1 Allow: /home Allow: /HOME Disallow: /HOM User-agent: bot2 Disallow: /home Disallow: /HOME Allow: /HOM sitemap: https://example.com/sitemap.xml sitemap: https://example.com/sitemap.html
这里我把最后两条单独空了一行再说是有原因的,前面也给大家说过了,sitemap 这个是独立的,不依赖前面的规则,也不会/用匹配 User-agent。sitemap 可以写多个,不过一般大家也就写两个,主要是为了照顾百度和谷歌,因为这两者很久以前对 sitemap 文件的兼容性不是一致的,需要指定两个不同类型的 sitemap 好让他们都能用(现在不清楚)。
四、总结
基本上 robots.txt 就是这么个情况,不知道我讲的清不清楚,如果大家觉得我说的不好的话,其实可以看看 Google 的有关说明,它说的其实更好来着_(:з)∠)_:https://developers.google.com/search/reference/robots_txt
我最后个人总结下几个要点:
- robots.txt 一定是在网站的根目录下的,且会区分 https/http 和子域名,不是全局生效的
- robots.txt 中的 Allow 和 Disallow 指令是区分大小写的
- robots.txt 中的链接指令当存在某些冲突时,匹配顺序为越详细的写法越能优先匹配