首页 / SEO book / 技术 SEO / robots.txt 完整指南

robots.txt 与 SEO:完整指南

robots.txt 完整指南技术 SEO

robots.txt 是网站上最简单的文件之一,也最容易出错。一个字符位置不对,就可能严重破坏 SEO,并阻止搜索引擎访问网站上的重要内容。

robots.txt 是网站上最简单的文件之一,也最容易出错。一个字符位置不对,就可能严重破坏 SEO,并阻止搜索引擎访问网站上的重要内容。

正因如此,robots.txt 的配置错误才极为常见——即便是经验丰富的 SEO 从业者也会出错。

本指南将介绍:

robots.txt 文件是什么?

robots.txt 文件会告诉搜索引擎,网站哪些地方可以访问、哪些地方不能访问。

最主要的是,它列出了所有你希望对 Google 等搜索引擎隐藏起来的内容。还可以告知某些搜索引擎(并非 Google)它们如何抓取被允许访问的内容。

robots.txt 长什么样?

下面是 robots.txt 文件的基本格式:

若从未见过这类文件,可能会觉得有些吓人。不过,它的语法其实相当简单。简而言之,先声明机器人的 user-agent(用户代理),再跟上 directives(指令),即可为它们分配规则。

下面更详细地了解这两个组成部分。

User-agents(用户代理)

每个搜索引擎都用不同的 user-agent 标识自己。可以在 robots.txt 文件中为它们分别设置自定义指令。user-agent 有成百上千种,但以下这些对 SEO 比较有用:

  • Google:Googlebot
  • Google 图片:Googlebot-Image
  • Bing:Bingbot
  • Yahoo:Slurp
  • 百度:Baiduspider
  • DuckDuckGo:DuckDuckBot

也可以使用星号(*)通配符,把指令应用到所有 user-agent。

例如,假设要阻止除 Googlebot 之外的所有机器人抓取网站,可以这样写:

需要注意,robots.txt 文件可以包含任意多个 user-agent 的指令。但每次声明一个新的 user-agent,都相当于从头开始。换句话说,若为多个 user-agent 添加了指令,为第一个 user-agent 声明的指令并不会应用到第二个、第三个、第四个,以此类推。

这条规则有一个例外:多次声明同一个 user-agent 时,所有相关指令会被合并并一并执行。

Directives(指令)

指令就是希望所声明的 user-agent 遵守的规则。

受支持的指令

以下是 Google 目前支持的指令及其用途。

Disallow

使用该指令可以要求搜索引擎不要访问特定路径下的文件和页面。例如,若要阻止所有搜索引擎访问博客及其全部文章,robots.txt 文件可能长这样:

Allow

使用该指令可以允许搜索引擎抓取某个子目录或页面——即便它位于一个本被禁止的目录之中。例如,若要阻止搜索引擎访问博客上的每一篇文章、只放行其中一篇,robots.txt 文件可能长这样:

在这个例子中,搜索引擎可以访问 /blog/allowed-post,但无法访问:

/blog/another-post/blog/yet-another-post/blog/download-me.pdf

Google 和 Bing 都支持该指令。

Sitemap

使用该指令可以向搜索引擎指定站点地图所在位置。若不熟悉站点地图,它通常包含希望搜索引擎抓取和索引的页面。

下面是一个使用 sitemap 指令的 robots.txt 文件示例:

在 robots.txt 中纳入站点地图有多重要?若已通过 Search Console 提交过,对 Google 来说算是有些多余。不过,它确实能告诉 Bing 等其他搜索引擎到哪里去找站点地图,所以仍然是个好习惯。

需要注意,不需要为每个 user-agent 重复多次 sitemap 指令——它并不只针对某一个 user-agent。因此,最好把 sitemap 指令放在 robots.txt 的开头或结尾。例如:

Google 支持 sitemap 指令,Ask、Bing 和 Yahoo 也支持。

不受支持的指令

以下是 Google 不再支持的指令——其中有些从技术上来说从未被支持过。

Crawl-delay

过去可以用该指令以秒为单位指定抓取延迟。例如,若希望 Googlebot 在每次抓取动作后等待 5 秒,就把 crawl-delay 设为 5,像这样:

Google 已不再支持该指令,但 Bing 和 Yandex 支持。

设置该指令时要小心,尤其在拥有大型网站时。若把 crawl-delay 设为 5 秒,就等于把机器人每天的抓取上限限制在 17,280 个 URL。若有数百万个页面,这并不太有用;但若网站较小,它可以节省带宽。

Noindex

该指令从未被 Google 官方支持过。不过,直到最近,人们还认为 Google 有「一些处理未支持、未公开规则(如 noindex)的代码」。所以,若想阻止 Google 索引博客上的所有文章,可以使用以下指令:

然而,在 2019 年 9 月 1 日,Google 明确表示该指令不受支持。若想把某个页面或文件从搜索引擎中排除,请改用 meta robots 标签或 x-robots HTTP 响应头。

Nofollow

这也是 Google 从未官方支持过的另一条指令,用于要求搜索引擎不要跟踪特定路径下页面和文件中的链接。例如,若要阻止 Google 跟踪博客上的所有链接,可以使用以下指令:

Google 于 2019 年 9 月 1 日宣布该指令正式不再受支持。若想对页面上的所有链接都加上 nofollow,现在应使用 robots meta 标签或 x-robots 响应头。若想告诉 Google 不要跟踪页面上的特定链接,请使用 rel="nofollow" 链接属性。

你需要 robots.txt 文件吗?

对很多网站来说,尤其是小型网站,拥有 robots.txt 文件并非至关重要。

不过,也没有任何理由不去拥有一个。它能让你更好地控制搜索引擎可以访问和不能访问网站的哪些地方,有助于处理以下事情:

  • 防止抓取重复内容;
  • 让网站的某些部分保持私密(例如你的测试站点 staging site);
  • 防止抓取站内搜索结果页面;
  • 防止服务器过载;
  • 防止 Google 浪费「抓取预算」。
  • 防止图片、视频和资源文件出现在 Google 搜索结果中。

需要注意,虽然 Google 通常不会索引 robots.txt 中被屏蔽的网页,但无法保证通过 robots.txt 文件一定能把内容从搜索结果中排除。

正如 Google 所说,若内容被网络上的其他地方链接,它仍有可能出现在 Google 搜索结果中。

如何找到你的 robots.txt 文件

若网站上已经有 robots.txt 文件,可以在 domain.com/robots.txt 访问到它。在浏览器中打开该 URL,若看到类似这样的内容,就说明你有 robots.txt 文件:

如何创建 robots.txt 文件

若还没有 robots.txt 文件,创建它很简单。只需打开一个空白的 .txt 文档,然后开始输入指令。例如,若要禁止所有搜索引擎抓取 /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,还可以在声明指令时用它匹配 URL 模式。例如,若要阻止搜索引擎访问网站上带参数的产品分类 URL,可以像这样把它们一一列出:

但这样效率并不高。更好的做法是用通配符简化,像这样:

这个例子会阻止搜索引擎抓取 /product/ 子文件夹下所有包含问号的 URL。换句话说,就是所有带参数的产品分类 URL。

用「$」指定 URL 的结尾

使用「$」符号来标记 URL 的结尾。例如,若要阻止搜索引擎访问网站上的所有 .pdf 文件,robots.txt 文件可以这样写:

在这个例子中,搜索引擎无法访问任何以 .pdf 结尾的 URL。这意味着它们无法访问 /file.pdf,但可以访问 /file.pdf?id=68937586,因为后者并不以「.pdf」结尾。

每个 user-agent 只使用一次

若多次指定同一个 user-agent,Google 并不介意。它只会把各次声明中的所有规则合并成一条,然后全部遵守。例如,若 robots.txt 文件中有以下 user-agent 和指令……

……那么 Googlebot 不会抓取这两个子文件夹中的任何一个。

不过,每个 user-agent 只声明一次是合理的,因为这样更不容易混淆。换句话说,保持整洁简单,犯严重错误的机会就更小。

使用具体性来避免无意的错误

在设置指令时若未能给出具体的指示,可能导致一些容易被忽视的错误,从而对 SEO 造成灾难性影响。例如,假设有一个多语言网站,正在制作一个将放在 /de/ 子目录下的德语版本。

由于它还没完全准备好上线,你想阻止搜索引擎访问它。

下面这个 robots.txt 文件会阻止搜索引擎访问该子文件夹及其中的所有内容:

但它也会阻止搜索引擎抓取任何以 /de 开头的页面或文件。

例如:

/designer-dresses//delivery-information.html/depeche-mode/t-shirts//definitely-not-for-public-viewing.pdf

在这种情况下,解决办法很简单:加一个结尾斜杠。

使用注释向人解释你的 robots.txt 文件

注释有助于向开发者解释你的 robots.txt 文件——甚至可能帮到未来的你自己。要添加注释,请以井号(#)开头来开始该行。

抓取工具会忽略以井号开头的行上的所有内容。

为每个子域使用单独的 robots.txt 文件

robots.txt 只能控制它所托管子域上的抓取行为。若要控制另一个子域上的抓取,就需要一个单独的 robots.txt 文件。

例如,若主站位于 domain.com,博客位于 blog.domain.com,那么需要两个 robots.txt 文件:一个放在主域的根目录,另一个放在博客的根目录。

robots.txt 示例文件

以下是几个 robots.txt 文件的示例,主要供你参考借鉴。若其中某个恰好符合需求,把它复制粘贴到一个文本文档里,保存为「robots.txt」,再上传到相应的目录即可。

所有机器人均可访问全部内容

所有机器人都无法访问

为所有机器人屏蔽一个子目录

为所有机器人屏蔽一个子目录(其中放行一个文件)

为所有机器人屏蔽一个文件

为所有机器人屏蔽一种文件类型(PDF)

仅对 Googlebot 屏蔽所有带参数的 URL

如何审查你的 robots.txt 文件是否存在错误

robots.txt 的错误相当容易溜过去,所以留意问题所在是值得的。

为此,请定期在 Search Console 的「Coverage」(覆盖率)报告中检查与 robots.txt 相关的问题。下面是一些可能会看到的错误、它们的含义,以及相应的修复方式。

已提交的 URL 被 robots.txt 屏蔽

这表示你提交的站点地图中至少有一个 URL 被 robots.txt 屏蔽。

若你正确地创建了站点地图,并排除了已规范化的、已设为 noindex 的以及已重定向的页面,那么不应有任何已提交的页面被 robots.txt 屏蔽。若有,请排查是哪些页面受影响,然后相应调整 robots.txt 文件,为该页面解除屏蔽。

可以使用 Google 的 robots.txt 测试工具查看是哪条指令屏蔽了该内容。不过操作时要当心,很容易犯下影响其他页面和文件的错误。

被 robots.txt 屏蔽

这表示有内容被 robots.txt 屏蔽,且目前未被 Google 索引。

若这些内容很重要且应当被索引,请移除 robots.txt 中的抓取屏蔽(同时值得确认该内容没有被设为 noindex)。若在 robots.txt 中屏蔽内容本意是想把它从 Google 索引中排除,请移除抓取屏蔽,改用 robots meta 标签或 x-robots 响应头。这是保证内容从 Google 索引中排除的唯一方法。

已被索引,尽管被 robots.txt 屏蔽

这表示部分被 robots.txt 屏蔽的内容仍然被 Google 索引了。

再次强调,若想把这些内容从 Google 搜索结果中排除,robots.txt 并不是正确的解决方案。请移除抓取屏蔽,改用 meta robots 标签或 x-robots-tag HTTP 响应头来阻止索引。

若是无意中屏蔽了这些内容,并希望它保留在 Google 索引中,请移除 robots.txt 中的抓取屏蔽。这可能有助于提升该内容在 Google 搜索中的可见度。

推荐阅读:如何在 GSC 中修复「已被索引,尽管被 robots.txt 屏蔽」

常见问题(FAQ)

以下是一些无法自然融入本指南其他部分的常见问题。若有遗漏,欢迎在评论区告诉我们,我们会相应更新这一节。

robots.txt 文件的最大体积是多少?

大约 500 KB。

WordPress 中的 robots.txt 在哪里?

同一个位置:domain.com/robots.txt。

如何在 WordPress 中编辑 robots.txt?

可以手动编辑,也可以使用像 Yoast 这样能让你从 WordPress 后台编辑 robots.txt 的众多 WordPress SEO 插件之一。

如果我在 robots.txt 中禁止访问已设为 noindex 的内容,会怎样?

Google 将永远看不到那条 noindex 指令,因为它无法抓取该页面。

最后总结

robots.txt 是一个简单却强大的文件。善用它,它就能对 SEO 产生积极影响;随意乱用,则可能带来严重后果。

还有更多问题?欢迎留言,或者在 Twitter 上找我。