Robots.txt 文件的深入指南
已发表: 2020-08-10robots.txt 是一个非常强大的文件,可以添加到您的网站,以帮助控制您的网站搜索引擎应该抓取哪些区域以及应该忽略哪些区域。 定期检查您的 robots.txt 以确保它是最新的,并且如果可能的话,使用监控工具在发生更改时收到警报非常重要。
在 Semetrical,作为我们技术 SEO 服务产品的一部分,我们将在对客户网站进行技术审核时审核客户的 robots.txt 文件,以检查应被阻止的路径。 此外,如果 SEO 团队在技术 SEO 审核过程中遇到问题(例如重复),则可能会编写新的 robots.txt 规则并将其添加到文件中。
由于 robots.txt 是一个重要文件,我们整理了一份指南,涵盖了它的最终含义、为什么有人会使用它以及编写规则时可能出现的常见陷阱。
什么是机器人 txt 文件?
robots.txt 文件是爬虫在访问您的网站时的第一个调用端口。 它是一个文本文件,列出了针对不同用户代理的指令,基本上告诉网络爬虫应该爬取网站的哪些部分,哪些部分应该被忽略。 robots.txt 文件中使用的主要指令由“允许”或“禁止”规则指定。
从历史上看,“noindex”规则也可以使用,但在 2019 年,Google 停止支持 noindex 指令,因为它是一条未发布的规则。
如果文件使用不当,可能会损害您的网站,并可能导致流量和排名大幅下降。 例如,当整个网站被搜索引擎阻止或网站的某个部分被错误地阻止时,就会发生错误。 当这种情况发生时,连接到该网站部分的排名将逐渐下降,流量也会随之下降。
您真的需要 robots.txt 文件吗?
不,在您的网站上包含 robots.txt 不是强制性的,尤其是对于 URL 最少的小型网站,但强烈建议将其用于中型到大型网站。 在大型网站上,它可以更轻松地控制网站的哪些部分可以访问,以及哪些部分应该被爬虫阻止。 如果该文件不存在,您的网站通常会被正常抓取和索引。
robots txt文件主要用于什么?
robots.txt 有很多用例,在 Semetrical,我们将其用于以下场景:
- 阻止内部搜索结果,因为这些页面通常对爬虫没有价值,并且可能导致整个网站的大量重复。
- 如果某些方面从 SEO 角度来看没有价值,但当用户在您的网站上时仍然需要 UX,则阻止部分方面导航。
- 阻止不同级别的分面导航,其中一个分面级别可能对搜索引擎有用,但当组合两个不同的分面过滤器时,它们可能变得与搜索引擎抓取和索引无关。
- 阻止导致重复或浪费爬网预算的参数。 这有点争议,因为其他人可能会告诉您不要阻止 robots.txt 中的参数,但这已经在我们的许多需要参数但爬虫不需要抓取它们的客户网站上起作用。 强烈建议检查您阻止的任何参数是否没有有价值的链接或正在为任何有价值的关键字排名带来流量。
- 阻止网站的私人部分,例如结帐页面和登录部分。
- 包括您的 XML 站点地图位置,以便爬虫轻松访问您网站上的所有 URL。
- 只允许特定的机器人访问和抓取您的网站。
- 阻止无法审核的用户生成内容。
在哪里放置机器人 txt 以及如何将其添加到您的网站?
robots.txt 文件需要放在您网站的根目录下,例如,在 Semetrical 的网站上,它位于 www.semetrical.com/robots.txt 并且必须命名为 robots.txt。 一个网站只能有一个 robots.txt,并且它需要在一个包含 ASCII 的 UTF-8 编码文本文件中。
如果您有 blog.example.com 等子域,则 robots.txt 可以位于子域的根目录中,例如 blog.example.com/robots.txt。
robots.txt 文件是什么样的?
典型的 robots.txt 文件将由不同的组件和元素组成,其中包括:
- 用户代理
- 不允许
- 允许
- 抓取延迟
- 网站地图
- 评论(有时你可能会看到这个)
以下是 Semetrcals robots.txt 的示例,其中包括用户代理、禁止规则和站点地图。
User-agent: * Disallow: /cgi-bin/ Disallow: /wp-admin/ Disallow: /comments/feed/ Disallow: /trackback/ Disallow: /index.php/ Disallow: /xmlrpc.php Disallow: /blog-documentation/ Disallow: /test/ Disallow: /hpcontent/ Sitemap: https://devsemetrical.wpengine.com/sitemap.xml用户代理
用户代理定义了一组指令的开始。 它通常用通配符 (*) 表示,表示以下说明适用于访问该网站的所有机器人。 这方面的一个例子是:
用户代理: *
User-agent: * Disallow: /cgi-bin/ Disallow: /wp-admin/有时您可能想要阻止某些机器人或只允许某些机器人访问某些页面。 为此,您需要将机器人名称指定为用户代理。 这方面的一个例子是:
User-agent: AdsBot-Google Disallow: /checkout/reserve Disallow: /resale/checkout/order Disallow: /checkout/reserve_search需要注意的常见用户代理包括:

还可以阻止特定软件抓取您的网站或延迟它们可以抓取多少个 URL,因为每个工具都有自己的用户代理来抓取您的网站。 例如,如果您想阻止 SEMRush 或 Ahrefs 抓取您的网站,则会将以下内容添加到您的文件中:
User-agent: SemrushBot Disallow: * User-agent: AhrefsBot Disallow: *如果您想延迟抓取的 URL 数量,则会将以下规则添加到您的文件中:
User-agent: AhrefsBot Crawl-Delay: [value] User-agent: SemrushBot Crawl-Delay: [value]禁止指令
disallow 指令是用户可以放入 robots.txt 文件中的规则,它将告诉搜索引擎不要根据创建的规则抓取特定路径或 URL 集。 文件中可能有一行或多行禁止规则,因为您可能希望阻止网站的多个部分。
如果 disallow 指令为空且未指定任何内容,则机器人可以抓取整个网站,因此为了阻止某些路径或您的整个网站,您需要指定 URL 前缀或正斜杠“/”。 例如,在下面的示例中,我们将阻止任何在 /cgi-bin/ 或 /wp-admin/ 路径之外运行的 URL。
User-agent: * Disallow: /cgi-bin/ Disallow: /wp-admin/如果您想阻止整个网站免受 Google 等机器人的攻击,那么您需要添加一个禁止指令,后跟一个正斜杠。 通常,当您不希望暂存网站被发现或编入索引时,您可能只需要在暂存环境中执行此操作。 一个示例如下所示:
User-agent: * Disallow: /允许指令
大多数搜索引擎都会遵守允许指令,它基本上会抵消禁止指令。 例如,如果您要阻止 /wp-admin/,它通常会阻止从该路径运行的所有 URL,但是,如果 /wp-admin/admin-ajax.php 有允许规则,那么机器人将抓取 / admin-ajax.php 但阻止任何其他从 /wp-admin/ 运行的路径。 请参见下面的示例:
User-agent: * Disallow: /wp-admin/ Allow: /wp-admin/admin-ajax.php爬行延迟
抓取延迟指令有助于减慢机器人抓取您网站的速度。 并非所有搜索引擎都会遵循抓取延迟指令,因为它是非官方规则。
– 谷歌不会遵循这个指令
– 百度不会遵循这个指令
– Bing 和 Yahoo 支持抓取延迟指令,其中该规则指示机器人在抓取操作后等待“n”秒。
– Yandex 还支持抓取延迟指令,但对规则的解释略有不同,它只会在每“n”秒内访问您的网站一次。

下面是一个抓取延迟指令的示例:
User-agent: BingBot Disallow: /wp-admin/ Crawl-delay: 5站点地图指令
sitemap 指令可以告诉搜索引擎在哪里可以找到您的 XML 站点地图,并且它可以让不同的搜索引擎轻松找到您网站上的 URL。 将遵循该指令的主要搜索引擎包括 Google、Bing、Yandex 和 Yahoo。
建议将站点地图指令放在 robots.txt 文件的底部。 下面是一个例子:
User-agent: * Disallow: /cgi-bin/ Disallow: /wp-admin/ Disallow: /comments/feed/ Sitemap: https://devsemetrical.wpengine.com/sitemap.xml注释
robots.txt 文件可以包含评论,但评论的存在仅适用于人类而不是机器人,因为主题标签之后的任何内容都将被忽略。 由于多种原因,评论可能很有用,其中包括:
– 提供存在某些规则的原因
– 添加规则的参考资料
– 引用规则适用于站点的哪些部分
– 解释规则在做什么
– 下面显示了不同 robots.txt 文件中的注释示例:
#Student Disallow: /student/*-bed-flats-* Disallow: /student/*-bed-houses* Disallow: /comments/feed/ #Added by Semetrical Disallow: /jobs*/full-time/* Disallow: /jobs*/permanent/* #International Disallow: */company/fr/* Disallow: */company/de/*规则的顺序重要吗?
规则的顺序并不重要,但是当多个允许和禁止规则应用于 URL 时,最长匹配路径规则是应用的并且优先于不太具体的较短规则的规则。 如果两条路径的长度相同,则将使用限制较少的规则。 如果您需要允许或禁止特定的 URL 路径,您可以通过使用“*”使字符串变长来使规则变长。 例如,不允许:********/make-longer
在谷歌自己的网站上,他们列出了一组示例情况,显示优先规则。 下表来自谷歌。

如何检查您的 robots.txt 文件?
在推送它之前检查和验证您的 robots.txt 文件始终很重要,因为不正确的规则会对您的网站产生很大影响。
最好的测试方法是使用 Search Console 中的 robots.txt 测试工具并测试应使用现有规则阻止的不同网址。 这也是测试要添加到文件中的任何新规则的好方法。

在 robots.txt 中使用正则表达式的示例
在 robots.txt 文件中创建规则时,您可以使用模式匹配在一个禁止规则中阻止一系列 URL。 正则表达式可用于进行模式匹配,谷歌和必应遵守的两个主要字符包括:
- 与 URL 结尾匹配的美元符号 ($)
- 星号 (*) 是表示任何字符序列的通配符规则。
Semetrical 的模式匹配示例:
Disallow: */searchjobs/*这将阻止任何包含 /searchjobs/ 路径的 URL,例如:www.example.com/searchjobs/construction。 这是客户所需要的,因为需要阻止他们网站的搜索部分,以便搜索引擎不会抓取和索引网站的该部分。
Disallow: /jobs*/full-time/*这将阻止在 /jobs/ 后跟 /full-time/ 之后包含路径的 URL,例如
www.example.com/jobs/admin-secretarial-and-pa/full-time/
. 在这种情况下,我们需要全职作为 UX 的过滤器,但对于搜索引擎,不需要索引页面来满足“职位”+“全职”的需求。
Disallow: /jobs*/*-000-*-999/*这将阻止包含工资过滤器的 URL,例如
www.example.com/jobs/city-of-bristol/-50-000-59-999/
. 在这种情况下,我们需要工资过滤器,但不需要搜索引擎来抓取工资页面并对其进行索引。
Disallow: /jobs/*/*/flexible-hours/这将阻止包含灵活工作时间并在其间包含两个方面路径的 URL。 在这种情况下,我们通过关键词研究发现,用户可能会搜索位置+弹性时间或工作+弹性时间,但用户不会搜索“职位”+“位置”+“弹性时间”。 示例 URL 如下所示
www.example.com/jobs/admin-secretarial-and-pa/united-kingdom/flexible-hours/
.
Disallow: */company/*/*/*/people$这将阻止包含公司和人员之间的三个路径以及以人员结尾的 URL 的 URL。 一个例子是
www.example.com/company/gb/04905417/company-check-ltd/people
.
Disallow: *?CostLowerAsNumber=*此规则将阻止订购定价的参数过滤器。
Disallow: *?Radius=* Disallow: *?radius=*这两条规则阻止机器人爬取改变用户搜索半径的参数 URL。 由于站点包含两个版本,因此添加了大写和小写规则。
robots.txt 的注意事项
- robots.txt 区分大小写,因此您需要在规则中使用正确的大小写,例如,/hello/ 将与 /Hello/ 区别对待。
- 要让 Google 等搜索引擎更快地重新缓存您的 robots.txt 以找到新规则,您可以在 Search Console 中检查 robots.txt 网址并请求编入索引。
- 如果您的网站依赖于包含许多规则的 robots.txt,并且您的 robots.txt 网址长时间提供 4xx 状态代码,则这些规则将被忽略,被阻止的页面将变为可索引。 确保它始终提供 200 状态代码非常重要。
- 如果您的网站已关闭,请确保 robots.txt 返回 5xx 状态代码,因为搜索引擎会了解该网站已关闭以进行维护,并且他们将在稍后再次回来抓取该网站。
- 当 URL 已编入索引并且随后将禁止添加到您的网站以从索引中删除这些 URL 时,删除和删除这些 URL 可能需要一些时间。 此外,URL 仍可以在索引中保留一段时间,但元描述将显示一条消息,例如“由于此站点的 robots.txt,此结果的描述不可用 - 了解更多”。
- robots.txt 禁止规则并不总是保证页面不会出现在搜索结果中,因为 Google 可能仍会根据外部因素(例如传入链接)决定该页面是相关的并且应该被编入索引。
- 如果您有一个禁止规则并且在页面的源代码中放置了“无索引”标签,则“无索引”将被忽略,因为搜索引擎无法访问该页面以发现“无索引”标签。
- 索引页面上的禁止规则,特别是那些带有传入链接的页面,意味着您将失去那些反向链接的链接资产,否则这些反向链接将被传递以使其他页面受益。 这就是为什么在添加禁止规则之前检查页面是否有反向链接很重要的原因。
- 如果在编写允许或禁止规则时路径中缺少前导斜杠,则该规则将被忽略。 例如,“禁止:搜索工作。
如果您想与 Semetrical 的一位技术 SEO 专家交谈,请访问我们的技术 SEO 服务页面以获取更多信息。
