robots.txt

robots.txt(统一小写)是一种存放于网站根目录下的ASCII编码的文本文件,它通常告诉网络搜索引擎的漫游器(又称网络蜘蛛),此网站中的哪些内容是不应被搜索引擎的漫游器获取的,哪些是可以被漫游器获取的。

robots.txt应小写且放置在网站根目录

因为一些系统中的URL是大小写敏感的,所以robots.txt的文件名应统一为小写。robots.txt应放置于网站的根目录下。

如果想单独定义搜索引擎的漫游器访问子目录时的行为,那么可以将自定义的设置合并到根目录下的robots.txt,或者使用robots元数据(Metadata,又称元数据)。

将robots.txt放置在网站的子目录中是无效的。

注意:robots.txt协议并不是一个规范,而只是一个约定而已(甚至有些爬虫不遵守该约定),所以并不能保证网站的隐私。

robots.txt指令

允许所有的搜索引擎爬虫:

User-agent: *
Disallow:

或者另外一种写法:

User-agent: *
Allow:/

User-agent是指定特点搜索引擎爬虫的,当值为*的时候,代表所有搜索引擎。

例如以下示例,允许百度搜索引擎抓取所有页面:

User-agent: Baiduspider
Allow:/

常见的搜索引擎爬虫及相应名称:

爬虫名称对应搜索引擎
Baiduspider百度搜索
Googlebot谷歌搜索
Bingbot必应搜索
360Spider360搜索
YoudaoBot有道搜索
ChinasoSpider中国搜索
Sosospider搜搜
Yisouspider宜搜
Sogou web spider
Sogou inst spider
Sogou spider2
Sogou blog
Sogou News Spider
Sogou Orion spider
搜狗搜索

以上数据更新于2021年2月

禁止所有爬虫访问特定目录:

User-agent: *
Disallow: /cgi-bin/
Disallow: /js/
Disallow: /tmp/

仅禁止谷歌访问特定目录:

User-agent: Googlebot
Disallow: /cgi-bin/
Disallow: /js/
Disallow: /tmp/

禁止所有机器人访问特定文件类型:

User-agent: *
Disallow: /*.php$
Disallow: /*.js$
Disallow: /*.inc$
Disallow: /*.css$

自动发现Sitemaps文件

Sitemap指令被几大搜索引擎支持(包括百度、Google、Bing和搜狗),指定网站Sitemaps文件的位置。Sitemap指令并不受User-agent指令的限制,所以它可以放在robots.txt文件中的任意位置。示例:

Sitemap: <https://www.example.com/sitemap.xml>

替代方法

虽然robots.txt是最为广泛接受的方法,但也可以与robots META标签一起使用。robots META标签主要是针对一个独立的页面设置,与其他的META标签(如使用的语言、页面的描述、关键词等)一样,robots META标签也是放在页面的HEAD标签中,专门用来告诉搜索引擎robots如何抓取该页的内容。

<head>
	<meta name="robots" content="noindex,nofollow" />
</head>

除了在网站根目录中使用robots.txt文件之外,还可以使用添加“X-Robots-Tag”HTTP标头的方式来实现同样的功能。

X-Robots-Tag

一般情况,我们使用robots.txt文件来告知搜索引擎哪些文件/文件夹允许爬网或禁止爬网,还有X-Robots-Tag HTTP标头之类的东西,你知道吗?使用此功能对搜索引擎和网站服务器都有好处,通过禁止对网站某些不重要区域的爬网访问,可以减少服务器负载。

在继续之前,先了解一下robots.txt文件的作用。简单来讲,它的作用是告诉搜索引擎不要爬网网站上的特定页面,文件或目录等。

不建议通过robots.txt屏蔽整个网站,除非是一个非常私密的网站。

X-Robots-Tag

早在2007年,Google宣布增加了对X-Robots-Tag指令的支持,这意味着不仅可以通过robots.txt文件限制对搜索引擎的访问,还可以通过编程方式在HTTP响应的标头中设置各种与robot.txt相关的指令。

X-Robots-Tag指令

有两种不同类型的指令:搜寻器指令和索引器指令,本文将在下面简要说明差异。

搜寻器指令

robots.txt文件仅包含“搜寻器指令”,该指令会告诉搜索引擎允许或不允许它们进入的位置。通过使用此指令,可以指定允许搜索引擎进行爬网的位置:

Allow

该指令的作用正好相反(禁止爬网):

Disallow

此外,可以使用以下指令来帮助搜索引擎更快地抓取网站(提交网站地图):

Sitemap

请注意,还可以通过结合使用以下指令,来指定不同搜索引擎的指令:

User-agent

不过有时候即使用Disallow禁止了某些资源还是可能出现在搜索引擎结果中,说明仅仅使用robots.txt是不够的。

索引器指令

索引器指令是基于每页和/或每个元素设置的指令。截止到2007年7月,有两个指令:rel =“ nofollow”(表示该链接不应通过授权/ PageRank)与Meta Robots标记。

使用Meta Robots标记,可以真正阻止搜索引擎显示想保留在搜索结果之外的页面。使用X-Robots-Tag HTTP标头可以达到相同的结果。如前所述,X-Robots-Tag还允许控制如何索引特定文件(类型),从而提供了更大的灵活性。

X-Robots-Tag的用法示例

如果要防止搜索引擎显示使用PHP生成的文件,可以在header.php(WordPress)文件的开头添加以下内容:

header("X-Robots-Tag: noindex", true);

如果要组织搜索引擎跟踪这些页面上的链接,可以按以下示例:

header("X-Robots-Tag: noindex, nofollow", true);

现在,尽管在PHP中使用此方法非常方便,如果希望阻止PHP之外的一些特定的文件类型,更好的方法是将X-Robots-Tag添加到Nginx/Apache服务器配置或.htaccess文件中。

假如一个提供.doc文件的网站,但由于特定的原因,不希望搜索引擎为该文件类型建立索引,则可以使用X-Robots-Tag。在Apache服务器上,应将以下行添加到/ .htaccess文件中:

<FilesMatch ".doc$">
Header set X-Robots-Tag "noindex, noarchive, nosnippet"
</FilesMatch>

如果想对.doc和.pdf文件都这样做:

<FilesMatch ".(doc|pdf)$">
Header set X-Robots-Tag "noindex, noarchive, nosnippet"
</FilesMatch>

如果运行的是Nginx而非Apache,则可以通过在服务器配置中添加以下内容来获得一样的效果:

location ~* .(doc|pdf)$ {
    add_header  X-Robots-Tag "noindex, noarchive, nosnippet";
}

结论

从上面的示例可以看到,X-Robots-Tag HTTP标头是一个非常强大的工具,可以和robots.txt搭配使用,效果更佳。

发表回复

后才能评论