什么是Robots.txt?
robots.txt文件是存储在网站根目录中的文本文件,它为网络抓取工具提供了有关应该访问哪些页面,文件夹和/或文件类型的方向,以及是否应该访问爬网和索引。这些说明可以包括所有机器人,或为特定用户代理提供指导。Robots.txt文件使用1994年开发的机器人排除协议作为与爬虫和其他互联网机器人进行通信的网站协议。
当网站所有者想告诉漫游器如何抓取他们的网站时,他们会将robots.txt文件加载到其根目录中,例如https://www.example.com/robots.txt。在尝试从服务器获取任何其他文件之前,到达该站点的爬虫将获取并读取该文件。当一个网站没有robots.txt文件,或者抓取工具由于某种原因无法加载时,bot会假定网站所有者没有任何指示。
在创建robots.txt文件时,使用纯文本文件来完成这一点至关重要。使用HTML或文字处理器将在爬虫不能读取的文件中包含代码。这可能会导致他们忽略文件中的指令。
Robots.txt文件如何工作?
robots.txt文件由包含两个基本部分的代码块组成:用户代理和指令。
Robots.txt用户代理
用户代理是指网络爬虫使用的名称。当抓取工具到达站点并打开其robots.txt文件时,bot将在其中一个用户代理行中查找其名称。
使用robots.txt的用户代理部分相对简单。用户代理必须始终在disallow行之前列出,并且每个用户代理行只能指定一个机器人(对此进行排序)。因此,举例来说,如果您有一个网页,因为某些原因您不希望Google抓取网页,但是您可以使用Bing或百度,您可以编写如下所示的说明:
User-agent: googlebot
Disallow: https://www.example.com/page
这将告诉Google的网络爬虫不要在example.com/page打开页面,而其他搜索引擎的用户代理将继续不受影响。如果你想给多个用户代理提供相同的指令,你必须为每一个指令创建一组指令:
User-agent: googlebot
Disallow: https://www.example.com/page
User-agent: Bingbot
Disallow: https://www.example.com/page
robots.txt文件会告知Google和Bing不要在https://www.example.com/page上抓取该网页,而百度或Yandex等其他漫游器会继续这样做。
如果您要为访问您的网站的所有网页抓取工具提供指令,则可以使用所谓的通配符。通配符表示为星号(*),表示任何字符或字符串。因此,在这样的robots.txt中:
User-agent: *
Disallow: https://www/example.com/page
读取robots.txt文件的机器人会自动将通配符解释为其自己的用户代理。
现在,大多数搜索引擎都有多个抓取工具来完成抓取图片,广告,视频或移动内容等不同内容。在抓取工具遇到robots.txt文件时并未明确包含其用户代理的情况下,它将按照与其相关的最特定用户代理的说明进行操作。因此,例如,如果Googlebot-Images为Googlebot,Bingbot和通配符打开robots.txt文件指令,它将遵循Googlebot的禁止行,因为这是可应用于Googlebot-Images的最具体的一组指令。
在编写robots.txt文件时要记住这一点非常重要,以免意外阻塞错误的用户代理。
以下是最常见的搜索引擎,他们的用户代理以及他们搜索的内容:
用户代理 | 搜索引擎 | 领域 |
baiduspider | 百度 | 一般 |
baiduspider图像 | 百度 | 图片 |
baiduspider移动 | 百度 | 移动 |
baiduspider新闻 | 百度 | 新闻 |
baiduspider视频 | 百度 | 视频 |
bingbot | 兵 | 一般 |
MSNBot会 | 兵 | 一般 |
MSNBot会媒体 | 兵 | 图像和视频 |
adidxbot | 兵 | 广告 |
Googlebot的 | 谷歌 | 一般 |
Googlebot的,图像 | 谷歌 | 图片 |
Googlebot移动版 | 谷歌 | 移动 |
Googlebot-News的 | 谷歌 | 新闻 |
Googlebot的视频 | 谷歌 | 视频 |
了MediaPartners,谷歌 | 谷歌 | AdSense的 |
了AdsBot-谷歌 | 谷歌 | AdWords的 |
嘟嘟地喝 | 雅虎 | 一般 |
Yandex的 | Yandex的 | 一般 |
Robots.txt不允许
robots.txt的第二部分是指令或禁止行。这是控制用户代理不应抓取的页面,文件夹或文件类型的代码部分。这些行通常被称为’禁止’行,因为这是SEO中robots.txt中最常用的指令。
从技术上讲,你不必把任何东西放在禁止线上; 机器人会解释一条空白行,表示他们可以抓取整个网站。要阻止整个服务器,请在disallow行中使用斜杠(/)。否则,请为每个不想抓取的文件夹,子文件夹或页面创建一个新行。Robots.txt文件使用相对链接,因此您不必在每行中包含整个域。但是,您必须使用与您的站点地图中的URL结构相匹配的URL的标准版本
以这个robots.txt代码块为例:
User-agent: *
Disallow: /folder/subfolder/page.html
Disallow: /subfolder2/
Disallow: /folder2/
第一个禁止行停止所有漫游器(请注意用户代理行中的通配符),以抓取页面https://www.example.com/folder/subfolder/page.html。由于该命令指定了page.html文件,因此漫游器仍会抓取该文件夹中的其他页面以及其他目录中的任何page.html实例。另一方面,第二行不允许整个/子文件夹2 /子目录,这意味着该文件夹中找到的任何页面都不应该被抓取。但是,/子文件夹3 /目录中的页面仍可以被抓取并建立索引。最后,第三行指示机器人跳过/ folder2 /目录中找到的所有目录和文件。
使用robots.txt文件禁止使用特定的文件或文件夹是最简单的,也是最基本的使用方法。但是,通过在disallow行中使用通配符,可以在代码中获得更精确和高效的代码。
请记住,星号的作用类似于Crazy Eights中的八张牌:它可以表示任何字符串。对于不允许,这意味着您可以使用通配符作为任何文件或文件夹名称的替身,以控制机器人爬行站点的方式。这是通配符在行动:
User-agent: *
Disallow: /*.pdf
Disallow: /images/*.jpg
Disallow: /copies/duplicatepage*.html
通配符在这里非常有用,因为这些命令告诉所有用户代理不要抓取网站上任何位置的PDF或“图像”文件中的jpeg文件。第三行停止漫游器爬取包含’duplicatepage’和’.html’的’copies’文件夹中的任何文件。因此,如果您的网站使用网址参数进行分析,再营销或排序,搜索引擎将不会抓取重复的网址,例如:
- /copies/duplicatepage1.html
- /copies/duplicatepage2.html
- /copies/duplicatepage.html?parameter=1234
请注意,搜索引擎抓取工具只是查找包含排除参数的网址。他们不寻找直接匹配,这就是为什么最后一个例子将被禁止。
在上面的示例中,’/copies/duplicatepage/page.html’中的文件也将被禁止,因为通配符会扩展为’/ page’部分。
使用上述规则,可能会出现页面无意中与排除规则相匹配的情况,例如,在文件名中使用排除的文件扩展名时,例如名为“how-to-create-a-.pdf”的HTML页面。通过添加美元符号($)来解决此问题,以通知搜索引擎仅排除以与disallow线相同的方式结束的页面。因此Disallow: /copies/duplicatepage*.html$
只会排除包含’duplicatepage’的HTML文件。
非标准的Robots.txt指令
Disallow是所有搜索引擎搜寻器都能识别的标准指令(这是机器人排除协议)。但是,还有其他一些鲜为人知的指令被网络爬虫识别。
允许
如果您想使用disallow命令禁止除一页以外的整个文件夹,则必须为除想要爬网的页面以外的每个页面编写一行。或者,使用禁止行来阻止整个文件夹,然后添加一个“允许”行,以便只指定要抓取的单个页面。允许以与Disallow相同的方式工作,这意味着它在User-agent行下面:
User-agent: *
Disallow: /folder/subfolder/
Allow: /folder/subfolder/page.html
通配符和匹配规则在允许和禁止的情况下以相同的方式工作。允许同时被Google和Bing识别。
其他命令
还有一些其他非标准指令可以用来进一步影响您的网站抓取方式:
crawl-delay:
该行使用指定秒数的数值。它被Bing和Yandex认可,但每个都有不同的用法。Bing会在完成下一次抓取操作之前等待指定的秒数,而Yandex则会在读取robots.txt文件和实际抓取站点之间等待此秒数。这个数字会限制您网站上被抓取的页面数量,因此,除非几乎没有来自这些数据源的流量,并且需要节省带宽,否则不推荐使用该数量。Host:
这只能被Yandex识别并作为WWW解析,告诉搜索引擎哪个是该域的规范版本。但是,由于Yandex是唯一的搜索引擎并且使用它,因此不推荐使用它。相反,请在Google Search Console和Bing网站站长工具中设置您的首选域,然后设置301重定向以实施WWW解决方案。
最后,虽然不是真正的命令,但您可以使用robots.txt文件通过该行链接到XML站点地图Sitemap:
。该行独立于用户代理进行解释,因此将其添加到文件的开头或结尾。如果您有多个站点地图,例如图片和/或视频站点地图,请为每个站点地图添加一行,并为您的站点地图索引文件添加一行。
我如何使用Robots.txt进行搜索引擎优化?
如果SEO的目标是让您的网站获得检索和索引以便在搜索结果中排名,那么为什么要阻止网页?事实是,在几种情况下,您不希望内容被抓取或出现在搜索结果中:
- 禁止不重要的文件夹或页面将有助于机器人更有效地使用其爬行预算。想一想:他们每秒钟都不抓取您的临时文件,他们可以花费一秒时间来抓取产品页面。添加该
Sitemap:
行还将帮助搜索引擎更轻松,更高效地访问您的站点地图。 - 如上所述,有时重复和/或精简内容是不可避免的。不要让这些网页与您的robots.txt一起帮助您的网站留在熊猫的右侧。
- 不允许来自搜索引擎的用户代理在不支持的国家运营。如果您不能/不能运送到俄罗斯或中国,那么让Yandex和百度(这两个国家中最受欢迎的搜索引擎)分别利用带宽来抓取您的网站可能没有意义。
- 您有不想在搜索结果中显示的私人页面。请记住,robots.txt文件是公开的,所以任何人都可以打开它并看到这些页面。Plus robots.txt不会停止直接流量或人员跟踪链接。
- 在重新设计或迁移站点时,在准备好将重定向添加到旧站点之前,禁止整个服务器是一个好主意。这将防止搜索引擎在您准备好之前抓取您的网站,使其看起来像从您的旧网站复制的内容。在网站发布时出现这种“惩罚”并不是一个好的开始。
在网站迁移过程中使用robots.txt文件时,请确保在设置新网站时更新文件。这是一个常见错误,也是您在尝试诊断搜索流量丢失和/或排名下降时首先应该考虑的事情之一。
在上传robots.txt文件之前,请通过Google Search Console中的Google robots.txt测试工具运行它。要测试您的文件,请将您的代码复制并粘贴到测试仪中; 语法和逻辑错误将立即突出显示。一旦你解决了这些问题,测试你知道应该被阻止的个人网址,并允许看看你的robots.txt是否正确。
请注意,Google的robots.txt测试仪自然只适用于Googlebot。要验证您的文件是否适用于Bing,请使用Bing网站管理员工具中的“ 作为Bingbot获取”功能。