robots.txt 与 SEO:完整指南
robots.txt 是网站上最简单的文件之一,也最容易出错。一个字符位置不对,就可能严重破坏 SEO,并阻止搜索引擎访问网站上的重要内容。
robots.txt 是网站上最简单的文件之一,也最容易出错。一个字符位置不对,就可能严重破坏 SEO,并阻止搜索引擎访问网站上的重要内容。
正因如此,robots.txt 的配置错误才极为常见——即便是经验丰富的 SEO 从业者也会出错。
本指南将介绍:
- robots.txt 文件是什么
- robots.txt 长什么样
- robots.txt 的 user-agent 与指令
- 你是否需要 robots.txt 文件
- 如何找到你的 robots.txt 文件
- 如何创建 robots.txt 文件
- robots.txt 最佳实践
- robots.txt 示例文件
- 如何审查你的 robots.txt 文件是否存在问题
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 上找我。