这就是为什么robots.txt错误配置非常普遍的原因——即使在经验丰富的SEO专业人员中也是如此。
在本指南中,您将学习:
robots.txt文件多棒啊
robots.txt是什么样子
txt用户代理和指令
是否需要robots.txt文件
如何找到robots.txt文件
如何创建robots.txt文件
Robots.txt最佳实践
robots.txt文件示例
如何审核robots.txt文件中的问题
技术SEO新手?看看我们的技术SEO初学者指南
robots.txt文件是什么?
robots.txt文件告诉搜索引擎他们可以和不可以访问您的站点。
首先,它列出了所有你想从谷歌这样的搜索引擎中锁定的内容。你也可以告诉一些搜索引擎(不是b谷歌)他们如何抓取允许的内容。
重要提示
大多数搜索引擎都是顺从的。他们没有破门而入的习惯。也就是说,有些人并不羞于选择一些比喻的锁。
b谷歌不是那种搜索引擎。它们遵守robots.txt文件中的指令。
要知道,有些搜索引擎完全忽略了它。
robots.txt文件是什么样的?
robots.txt文件的基本格式如下:
Sitemap: [Sitemap的URL位置]User-agent: [bot标识符][指令1][指令2][指令…]User-agent:[另一个bot标识符][指令1][指令2][指令…]
如果您以前从未见过这些文件中的任何一个,那么这可能看起来令人望而生畏。然而,语法非常简单。简而言之,您可以通过声明机器人的用户代理和指令来为机器人分配规则。
让我们更详细地研究这两个组件。
用户代理
每个搜索引擎都用不同的用户代理来标识自己。您可以在robots.txt文件中为每一个设置自定义指令。有数百个用户代理,但这里有一些有用的搜索引擎优化:
谷歌:广告
谷歌图片:Googlebot-Image
Bing: Bingbot
雅虎:发出声音
百度:Baiduspider
DuckDuckGo: DuckDuckBot
旁注。在robots.txt中,所有用户代理都区分大小写。
你也可以使用星号(*)通配符将指令分配给所有的用户代理。
例如,假设您想阻止除了Googlebot之外的所有机器人抓取您的网站。你应该这样做:
User-agent: *禁止:/ User-agent: Googlebot允许:/
要知道,robots.txt文件可以包含任意数量的用户代理指令。也就是说,每次声明一个新的用户代理时,它就像一张白纸。换句话说,如果您为多个用户代理添加指令,那么为第一个用户代理声明的指令将不适用于第二个、第三个、第四个等等。
该规则的例外情况是多次声明同一个用户代理。在这种情况下,所有相关指令被合并并遵循。
重要提示
爬虫只遵循在最准确地应用于它们的用户代理下声明的规则。这就是为什么上面的robots.txt文件会阻止除了Googlebot(和其他b谷歌bot)之外的所有bot抓取站点。Googlebot忽略了不太具体的user-agent声明。
指令
指令是您希望声明的用户代理遵循的规则。
支持的指令
下面是谷歌目前支持的指令,以及它们的用法。
不允许
使用此指令指示搜索引擎不要访问特定路径下的文件和页面。例如,如果你想阻止所有搜索引擎访问你的博客和所有帖子,你的robots.txt文件可能是这样的:
User-agent: *禁止:/blog
旁注。如果你没有在disallow指令后定义路径,搜索引擎将忽略它。
允许
使用此指令允许搜索引擎抓取子目录或页面——即使是在不被允许的目录中。例如,如果你想阻止搜索引擎访问你博客上的每一篇文章,那么你的robots.txt文件可能看起来像这样:
User-agent: * Disallow: /blog允许:/blog/allowed-post
在这个例子中,搜索引擎可以访问/blog/allowed-post。但是他们不能访问:
/blog/yet-another-post /blog/download-me.pdf
谷歌和Bing都支持这个指令。
旁注。与disallow指令一样,如果你没有在allow指令之后定义路径,搜索引擎将忽略它。关于冲突规则的说明
除非你很小心,否则disallow和allow指令很容易相互冲突。在下面的例子中,我们不允许访问/blog/和允许访问/blog。
User-agent: *
Disallow: /blog/
Allow: /blog
在这种情况下,URL /blog/post-title/似乎既不允许又允许。那么谁赢了呢?
对于谷歌和Bing,规则是具有最多字符的指令获胜。这里,这是disallow指令。
禁止:/blog/(6个字符)允许:/blog(5个字符)
如果allow和disallow指令的长度相等,那么限制性最小的指令胜出。在本例中,这将是allow指令。
旁注。在这里, /博客(没有尾斜杠)仍然是可访问和可爬行的。
至关重要的是,这只是b谷歌和必应的情况。其他搜索引擎会听取第一个匹配指令。在这种情况下,这是不允许的。
网站地图
使用此指令指定您的站点地图的位置搜索引擎。如果您不熟悉站点地图,它们通常包括您希望搜索引擎抓取和索引的页面。
下面是一个使用sitemap指令创建robots.txt文件的例子:
Sitemap: https://www.domain.com/sitemap.xml
User-agent: *
Disallow: /blog/
Allow: /blog/post-title/
在robots.txt文件中包含站点地图有多重要?如果您已经通过搜索控制台提交了,那么谷歌就有点多余了。然而,它确实告诉其他搜索引擎,如必应在哪里找到你的站点地图,所以它仍然是一个很好的实践。
注意,您不需要为每个用户代理多次重复sitemap指令。它并不只适用于一个。因此,您最好在robots.txt文件的开头或结尾包含站点地图指令。例如:
Sitemap: https://www.domain.com/sitemap.xml用户代理:Googlebot不允许:/ blog/允许:/ blog/post-title/用户代理:Bingbot不允许:/ services/
b谷歌支持sitemap指令,Ask、Bing和Yahoo也一样。
旁注。您可以在robots.txt文件中包含任意数量的站点地图。
不支持的指令
以下是谷歌不再支持的指令——其中一些从技术上讲从未支持过。
Crawl-delay
以前,您可以使用此指令来指定以秒为单位的爬行延迟。例如,如果你想让Googlebot在每次抓取动作后等待5秒,你可以将抓取延迟设置为5,如下所示:
User-agent: Googlebot
Crawl-delay: 5
谷歌不再支持这个指令,但Bing和Yandex支持。
也就是说,在设置这个指令时要小心,特别是如果你有一个大网站。如果您将抓取延迟设置为5秒,那么您将限制机器人每天最多抓取17,280个url。如果你有数百万个页面,这不是很有用,但如果你有一个小网站,它可以节省带宽。
Noindex
b谷歌从未正式支持这一指令。然而,直到最近,人们还认为谷歌有一些“处理不受支持和未发布规则(如noindex)的代码”。所以如果你想阻止谷歌索引你博客上的所有文章,你可以使用下面的指令:
User-agent: Googlebot
Noindex: /blog/
然而,在2019年9月1日,谷歌明确表示不支持该指令。如果您想从搜索引擎中排除页面或文件,请使用meta robots标记或x-robots HTTP标头。
Nofollow
这是谷歌从未正式支持的另一个指令,用于指示搜索引擎不要跟踪特定路径下的页面和文件上的链接。例如,如果你想阻止谷歌关注你博客上的所有链接,你可以使用下面的指令:
用户代理:Googlebot Nofollow: /blog/
谷歌宣布,该指令于2019年9月1日正式不受支持。如果您现在不想关注页面上的所有链接,您应该使用robots元标记或x-robots标头。如果希望告诉谷歌不要跟踪页面上的特定链接,请使用rel= “ nofollow “ link属性。
你需要robots.txt文件吗?
对于很多网站来说,拥有robots.txt文件并不重要,尤其是小型网站。
也就是说,没有理由不去做。它可以让你更好地控制搜索引擎可以和不可以在你的网站上,这可以帮助:
防止重复内容的抓取;
保持网站部分的私密性(例如,您的临时站点);
防止内部搜索结果页面的抓取;
防止服务器过载;
防止b谷歌浪费“爬行预算”。
防止图像、视频和资源文件出现在谷歌搜索结果中。
请注意,虽然谷歌通常不会索引在robots.txt中被屏蔽的网页,但无法保证使用robots.txt文件将其排除在搜索结果之外。
就像谷歌所说的,如果内容是从网络上的其他地方链接到的,它可能仍然会出现在谷歌的搜索结果中。
如何找到robots.txt文件
如果您的网站上已经有robots.txt文件,可以在domain.com/robots.txt上访问它。在浏览器中导航到URL。如果你看到类似这样的内容,那么你有一个robots.txt文件:
如何创建robots.txt文件
如果您还没有robots.txt文件,那么创建一个很容易。只需打开一个空白的。txt文档并开始键入指令。例如,如果你想禁止所有搜索引擎抓取你的/admin/目录,它看起来像这样:
User-agent: *禁止:/admin/
继续构建指令,直到您对所拥有的感到满意为止。将文件保存为“robots.txt”。
或者,您也可以使用robots.txt生成器,如下所示。
使用这样的工具的优点是可以最大限度地减少语法错误。这很好,因为一个错误可能会导致你网站的SEO灾难——所以谨慎的犯错是值得的。
缺点是它们在可定制性方面有些限制。
把robots.txt文件放在哪里
将robots.txt文件放在它所应用的子域的根目录中。例如,要控制domain.com上的爬行行为,robots.txt文件应该可以在domain.com/robots.txt上访问。
如果你想控制在像blog.domain.com这样的子域上爬行,那么robots.txt文件应该可以在blog.domain.com/robots.txt上访问。
Robots.txt文件的最佳实践
记住这些可以避免常见的错误。
为每个指令使用新的一行
每个指令都应该放在新的一行上。否则,它会混淆搜索引擎。
缺点:
User-agent: * Disallow: /directory/ Disallow: /another-directory/
好:
User-agent: *
Disallow: /directory/
Disallow: /another-directory/
使用通配符来简化指令
你不仅可以使用通配符(*)将指令应用于所有用户代理,还可以在声明指令时匹配URL模式。例如,如果你想阻止搜索引擎访问你网站上参数化的产品类别url,你可以像这样列出它们:
User-agent: * Disallow: /products/t-shirt ?不允许:/产品/连帽衫?不允许:/产品/夹克吗?…
但这不是很有效。用这样的通配符来简化事情会更好:
User-agent: *禁止:/products/*?
这个示例阻止搜索引擎抓取/product/子文件夹下包含问号的所有url。换句话说,任何参数化的产品类别url。
使用“$”来指定URL的结尾
包含“$”符号来标记URL的结束。例如,如果你想阻止搜索引擎访问你网站上所有的。pdf文件,你的robots.txt文件可能是这样的:
User-agent: *禁止:/*.pdf$
在本例中,搜索引擎无法访问任何以.pdf结尾的url。这意味着他们不能访问/file.pdf,但他们可以访问/file.pdf?Id =68937586,因为它不以“。pdf”结尾。
每个用户代理只使用一次
如果多次指定同一个用户代理,谷歌不会介意。它只是将各种声明中的所有规则合并为一个并全部遵循它们。例如,如果在robots.txt文件中有以下用户代理和指令…
User-agent: Googlebot
Disallow: /a/
User-agent: Googlebot
Disallow: /b/
Googlebot不会抓取这两个子文件夹。
也就是说,每个用户代理只声明一次是有意义的,因为这样可以减少混乱。换句话说,通过保持整洁和简单,你就不太可能犯严重的错误。
使用特异性来避免无意的错误
在设置指令时没有提供具体的说明可能会导致容易忽略的错误,从而对您的SEO产生灾难性的影响。例如,假设您有一个多语言站点,并且您正在开发一个德语版本,该版本将在/de/子目录下可用。
因为它还没有完全准备好,所以您希望阻止搜索引擎访问它。
下面的robots.txt文件将阻止搜索引擎访问该子文件夹和其中的所有内容:
User-agent: *不允许:/de
但它也会阻止搜索引擎抓取任何以/de开头的页面或文件。
例如:
/designer-dresses/ /delivery-information.html /depech -mode/t-shirt / /绝对不供公众观看
在这种情况下,解决方案很简单:添加一个尾斜杠。
User-agent: *不允许:/de/
使用注释向人们解释robots.txt文件
注释有助于向开发人员解释robots.txt文件,甚至可能解释未来的自己。要包含注释,请以散列(#)开头。
#这指示Bing不要抓取我们的网站。User-agent: Bingbot不允许:/
爬虫会忽略所有以散列开头的行。
为每个子域使用单独的robots.txt文件
txt只控制它所在的子域上的爬行行为。如果你想在不同的子域上控制爬行,你需要一个单独的robots.txt文件。
例如,如果您的主站位于domain.com上,而您的博客位于blog.domain.com上,那么您将需要两个robots.txt文件。一个应该放在主域的根目录中,另一个放在博客的根目录中。
robots.txt文件示例
下面是robots.txt文件的几个示例。这些主要是为了启发灵感,但如果碰巧符合您的要求,将其复制粘贴到文本文档中,将其保存为“robots.txt”并将其上传到适当的目录。
所有机器人的全部访问权限
User-agent: *禁止:
旁注。没有在指令后声明URL会使该指令变得多余。换句话说,搜索引擎会忽略它。这就是为什么这个禁止指令对网站没有影响。搜索引擎仍然可以抓取所有页面和文件。
所有机器人都无法访问
User-agent: *不允许:/
为所有机器人阻塞一个子目录
User-agent: *禁止:/folder/
为所有bot阻塞一个子目录(允许一个文件)
User-agent: *
Disallow: /folder/
Allow: /folder/page.html
为所有机器人阻塞一个文件
User-agent: *禁止:/this-is-a-file.pdf
为所有机器人锁定一个文件类型(PDF)
User-agent: *禁止:/*.pdf$
仅为Googlebot阻止所有参数化url
用户代理:Googlebot不允许:/*?
如何审核robots.txt文件中的错误
Robots.txt中的错误很容易就会通过网络,因此密切关注这些问题是值得的。
要做到这一点,在搜索控制台的“Coverage”报告中定期检查与robots.txt相关的问题。下面是您可能看到的一些错误,它们的含义以及如何修复它们。
需要检查与某个页面相关的错误?
将URL粘贴到搜索控制台b谷歌的URL检查工具中。如果它被robots.txt阻止了,你应该看到这样的内容:
提交的URL被robots.txt阻止
这意味着您提交的站点地图中至少有一个url被robots.txt阻止。
如果您正确地创建了站点地图,并排除了规范化、无索引和重定向的页面,那么提交的页面不应该被robots.txt阻止。如果是,调查哪些页面受到了影响,然后相应地调整robots.txt文件以删除该页面的块。
你可以使用谷歌的robots.txt测试器来查看是哪个指令阻止了内容。做这个的时候一定要小心。很容易犯影响其他页面和文件的错误。
被robots.txt屏蔽
这意味着您有被robots.txt阻止的内容,这些内容目前没有在谷歌中索引。
如果这个内容很重要,应该被索引,删除robots.txt中的抓取块。(同样值得确保的是内容没有被索引)。如果您阻止robots.txt中的内容,并打算将其从谷歌的索引中排除,请删除抓取块并使用robots元标记或x-robots-header代替。这是保证从谷歌的索引中排除内容的唯一方法。
旁注。当试图从搜索结果中排除页面时,移除抓取块是至关重要的。如果不这样做,谷歌将看不到noindex标记或HTTP标头,因此它将保持索引。
索引,虽然被robots.txt屏蔽
这意味着一些被robots.txt阻止的内容仍然在谷歌中被索引。
同样,如果您试图从谷歌的搜索结果中排除此内容,robots.txt不是正确的解决方案。删除爬行块,使用元机器人标记或x-robots-tag HTTP标头来防止索引。
如果您无意中阻止了此内容,并希望将其保留在谷歌的索引中,请删除robots.txt中的抓取块。这可能有助于提高谷歌搜索中内容的可见性。
推荐阅读:如何修复GSC中的“索引,尽管被robots.txt阻止”
常见问题
这里有一些常见的问题,在我们的指南中不适合。如果遗漏了什么,请在评论中告诉我们,我们将相应地更新该部分。
robots.txt文件的最大大小是多少?
大约500千字节。
WordPress中的robots.txt在哪里?
同样的地方:domain.com/robots.txt。
如何在WordPress中编辑robots.txt ?
要么手动,要么使用许多WordPress SEO插件之一,如Yoast,让您从WordPress后端编辑robots.txt。
如果我不允许访问robots.txt中没有索引的内容,会发生什么?
谷歌永远不会看到noindex指令,因为它无法抓取页面。
DYK阻止一个页面与robots.txt禁止和页面中的noindex没有多大意义,因为Googlebot不能“看到”noindex?pic.twitter.com/N4639rCCWt - Gary“”Illyes (@methode) 2017年2月10日
最终的想法
txt是一个简单但功能强大的文件。明智地使用它,它可以对SEO产生积极的影响。随意使用它,你会后悔的。
还有问题吗?请留下评论或在Twitter上联系我。