标签归档:robots.txt

认识“X-Robots-Tag”HTTP标头

%title插图%num

一般情况,我们使用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搭配使用,效果更佳。

robots.txt的正确用法

%title插图%num

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 必应搜索
360Spider 360搜索
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标头的方式来实现同样的功能。