共计 8623 个字符,预计需要花费 22 分钟才能阅读完成。
关于 Robots.txt,相信大部分 WordPress 站长对其都不会感到陌生,一个规范的 Robots.txt 对于 WordPress 网站 SEO 优化来说至关重要。该文件主要用于告诉搜索引擎爬虫,网站哪些页面可以爬取,哪些页面不可以。
我们曾经在“如何编写和优化 WordPress 网站的 Robots.txt”对 Robots.txt 进行了详细地介绍,不过,今天这篇文章将会更加详细,也易于站长解读及更好地利用 Robots.txt 文件。
Robots.txt 是网站中最简单的一个文件,但同时也是最容易出错的。仅仅是一个字符的错误可能会影响你的 SEO 效果、阻碍搜索引擎抓取你网站中的有效内容。
robots.txt 文件的配置错误经常发生,即使经验丰富的 SEO 人员也是如此。
在这篇教程中你将会学到:
Robots.txt 文件是什么
Robots.txt 长什么样
Robots.txt 中的用户代理和指令
什么时候你需要 robots.txt 文件
如何找到你的 robots.txt 文件
如何建立一个 robots.txt 文件
Robots.txt 的最佳做法
Robots.txt 文件示例
如何检测 robots.txt 文件中的问题
Robots.txt 文件是什么?
Robots.txt 文件是用来告诉搜索引擎,网站上的哪些页面可以抓取,哪些页面不能抓取。
首先,它列出了你想从搜索引擎 (如 Google) 中排除的所有内容。你还可以告诉某些搜索引擎 (非 Google) 应该如何抓取网站的内容。
重要提示
大多数搜索引擎都会遵循规则,它们没有打破规则的习惯。换句话说,少部分的搜索引擎则会无视这些规则。
Google 不是那些不守规矩的搜索引擎之一。他们遵守 robots.txt 文件中的声明。
只是我们知道有些搜索引擎完全忽略它。
Robots.txt 长什么样?
以下是 Robots.txt 文件的基本格式:
Sitemap: [URL location of sitemap]
User-agent: [bot identifier]
[directive 1]
[directive 2]
[directive …]
User-agent: [another bot identifier]
[directive 1]
[directive 2]
[directive …]
如果你以前从未看过这些内容,你可能会觉得很难。但实际上,它的语法非常简单。简而言之,你可以通过在文件中指定 user-agents(用户代理)和 directives(指令)来为搜索引擎蜘蛛分配抓取规则。
让我们详细的讨论则两个组件。
User-agents(用户代理)
每个搜索引擎都有一个特定的用户代理。你可以在 robots.txt 文件中针对不同的用户代理分配抓取规则。总共大约有上百种用户代理(实际上,你只要安装 Spider Analyser 插件,即可轻松掌握都有哪些蜘蛛访问爬取您的网站。),以下是一些对 SEO 有用的用户代理:
Google:Googlebot
Google Images: Googlebot-Image
Bing:Bingbot
Yahoo:Slurp
Baidu: Baiduspider
DuckDuckGo: DuckDuckBot
小提示.robots.txt 中的所有用户代理均严格区分大小写。
你也可以使用通配符 (*) 来一次性为所有的用户代理制定规则。
举个例子,假设你想屏蔽除了谷歌以外的搜索引擎蜘蛛,下面就是做法:
User-agent: *
Disallow: /
User-agent: Googlebot
Allow: /
你需要知道,在 robots.txt 文件中,你可以指定无数个用户代理。虽然这么说,每当你指定一个新的用户代理时,它都是独立的。换句话说,如果你陆续为多一个用户代理制定了规则,那么第一个用户代理的规则并不适用于第二个,或者时第三个。
有一个例外就是,如果你针对同一个用户代理制定了多次规则,那么这些规则则会被放在一起执行。
重要提示
蜘蛛只会遵循 准确表明详细用户代理的指令 。所以上方的 robots.txt 文件只会排除除谷歌蜘蛛(以及其它类型的谷歌蜘蛛) 以外的搜索引擎爬虫。谷歌蜘蛛会忽略一些不太具体的用户代理声明。
Directives(指令)
指令指的是你希望用户代理遵循的规则。
目前支持的指令
下面是谷歌目前支持的指令,以及它们的用法.
Disallow 指令
使用此指令来规定搜索引擎不要访问特定路径的文件和页面。例如,如果你想阻止所有搜索引擎访问你的博客及其所有帖子,则 robots.txt 文件就像下方这样:
User-agent: *
Disallow: /blog
小提示.如果你再 disallow 指令后面没有给出详细的路径,那么搜索引擎就会忽略它。
Allow 指令
使用此指令来规定搜索引擎需要访问特定路径的文件和页面——即使在一个被 disallow 指令屏蔽的路径中也可以使用。如果你屏蔽特定文章以外的所有文章页面,那么 robots.txt 应该像下方这样:
User-agent: *
Disallow: /blog
Allow: /blog/allowed-post
在这个例子中,搜索引擎可以访问: /blog/allowed-post. 但是它不能访问:
/blog/another-post/blog/yet-another-post/blog/download-me.pdf
谷歌和必应都支持这个指令。
小提示.和 disallow 指令一样,如果你在 allow 指令之后没有声明路径,那么搜索引擎会忽略它。
有关规则冲突的说明
除非你非常的细心,否则部分情况 disallow 指令会与 allow 指令互相冲突。下方的这个例子,我们阻止了访问了这个页面 /blog/ 同时开放了这个页面 /blog.
User-agent: *
Disallow: /blog/
Allow: /blog
这个例子中,这个 URL /blog/post-title/ 似乎即被阻止了,又被允许了。那么到底是哪一个呢?
对与谷歌和必应来说,它们会遵循指令字符较长的那一个,在这个例子中就是 disallow 指令。
Disallow: /blog/ (6 字符)Allow: /blog (5 字符)
如果 disallow 指令和 allow 指令长度一样,那么限制范围较小的指令会胜出,这种情况就是 allow 指令。
小提示.这里, /blog (没有斜杠为后缀) 是可以被抓取的。
严格来说,这 只适用于谷歌和必应搜索引擎。其它搜索引擎会遵循第一条指令,这种情况就是 disallow 指令。
Sitemap 指令
使用此指令来标记你网站地图所的位置。如果你对网站地图不熟悉,它通常会包含你需要被搜索引擎抓取 & 索引的所有页面链接。
下面就是一个使用 Sitemap 指令的 robots.txt 文件:
Sitemap: https://www.domain.com/sitemap.xml
User-agent: *
Disallow: /blog/
Allow: /blog/post-title/
在 robots.txt 中注明 sitemap 指令有多么重要呢? 如果你已经向谷歌提交了网站地图,那么这一步操作就可有可无。但是,对于其它搜索引擎,比如必应,就可以明确的告诉它你的网站地图在哪里,所以这一步还是很有必要的。
注意,你不需要针对不同的代理重复标注 sitemap 指令。所以最好的方法是将 sitemap 指令写在 robots.txt 的最开始或者最末尾,就像下方这样:
Sitemap: https://www.domain.com/sitemap.xml
User-agent: Googlebot
Disallow: /blog/
Allow: /blog/post-title/
User-agent: Bingbot
Disallow: /services/
谷歌支持 sitemap 指令、同时 Ask、必应、雅虎搜索引擎都支持。
小提示.你可以在 robots.txt 中使用多条 sitemap 指令。
不再支持的指令
下面是一些谷歌不再支持的指令——部分因为技术原因一直都没有被支持过。
Crawl-delay 指令
之前你可以使用这个指令来指定抓取间隔时间(秒)。比如,你希望谷歌蜘蛛再每次抓取之后等待 5 秒,那么你就需要将 Crawl-delay 指令设置为 5:
User-agent: Googlebot
Crawl-delay: 5
谷歌已经不再支持这个指令,但是必应和 Yandex 依然支持。
虽然这么说,在设置这个指令的时候你需要小心,尤其是你有一个大型网站的时候。如果你将 Crawl-delay 指令设置为 5. 那么每天蜘蛛最多只能抓取 17.280 个 URL。如果你有上百万的页面,这个抓取量就非常的小了。反之,如果你是小型网站,则它可以帮你节省带宽。
Noindex 指令
这个指令从来没有被谷歌支持过。但是直到最近,人们认为谷歌有一些“处理不受支持和未发布的规则的代码(例如 noindex)”。所以如果你希望阻止谷歌索引你所有的博客页面,那么你可以使用这个指令:
User-agent: Googlebot
Noindex: /blog/
但是同时,在 2019 年 9 月 1 号,谷歌明确表示 这个指令不被支持。如果你想从搜索引擎中排除一个页面的话,使用 meta robots 标签、或者是 x -robots HTTP 头部指令。
Nofollow 指令
这个指令谷歌也是从来没有从官方支持过的。曾经是用来阻止搜索引擎跟随某一个链接,或者是某个特殊的路径。比如,你想屏蔽谷歌跟随所有的博客链接,你可以这么设置指令:
User-agent: Googlebot
Nofollow: /blog/
谷歌在 2019 年 9 月 1 号声明这个指令不会被支持。如果你想阻止搜索引擎跟随页面上的所有链接,那么你应该使用 meta robots 标签、或者是 x -robots HTTP 头部指令。如果你想指定一个链接不让谷歌跟随,那么你可以在特定链接中加入 rel=”nofollow” 参数。
你需要一个 Robots.txt 文件吗?
对于一部分网站来说,有没有 robots.txt 其实无关痛痒,尤其是小网站。
虽然这么说,但是没有一个好的理由不去拥有它。它可以在搜索引擎访问网站的规则上给你一些额外的控制权,那么这可以帮助你:
防止抓取重复页面;
让网站在某个阶段不公开 (比如:在搭建网站雏形时);
防止抓取内部搜索页面;
防止服务器过载;
防止谷歌浪费 crawl budget(抓取预算);
防止部分图片、视频及其它资源展示在谷歌结果中。
请注意,尽管谷歌通常不会索引 robots.txt 中阻止的网页,但这无法保证使用 robots.txt 文件可以 100% 将其排除在搜索结果之外。
谷歌说过,如果内容从另外一个地方获得链接,那么依然有可能被呈现在搜索结果当中。
如何找到你的 robots.txt 文件?
如果你的网站已经有了 robots.txt 文件,那么你可以通过 domain.com/robots.txt 这个链接进行访问。如果你看到有类似下方这样的信息,这就是你的 robots.txt 文件:
如何建立一个 robots.txt 文件?
如果你没有 robots.txt 文件的话,那么做一个也十分的简单。你只需要打卡一个空的.txt 文件 (记事本文件) 然后按照要求填写指令。比如,你希望搜索引擎不抓取你的 /admin/ 目录,你可以像下方这样设置:
User-agent: *
Disallow: /admin/
你可以继续添加指令,只要你满意为止,然后将文件保存为“robots.txt”。
除此之外,你还可以使用 robots.txt 生成工具来制作,比如 Smart SEO Tool 插件:
利用类似这样工具的优势就是,更加容易编辑管理。当然为了避免指令语法错误,建议任何工具生成的 robots.txt 都应该使用搜索引擎站长工具进行检验,比如百度资源管理平台。
这个非常重要,因为一个小的语法错误都会导致灾难性的后果,还是小心无大错比较好。
在哪里放置 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-shirts?
Disallow: /products/hoodies?
Disallow: /products/jackets?
…
但是这并不简洁,你可以利用通配符,简写成下方这样:
User-agent: *
Disallow: /products/*?
这个例子就是屏蔽了所有的搜索引擎用户抓取 /product/ 目录下,所有包含问号 (?) 的链接。换句话说就是屏蔽了所有带有参数的产品链接。
使用美元符号 ($) 来标注以特定字符结尾的 URL
在指令最后加入”$”。比如,如果你像屏蔽所有以 .pdf 结尾的链接,那么你的可以这样设置你的 robots.txt:
User-agent: *
Disallow: /*.pdf$
这个例子中,搜索引擎无法抓取任何以 .pdf 结尾的链接,意味着搜索引擎无法抓取 /file.pdf,但是搜索引擎可以抓取这个 /file.pdf?id=68937586. 因为它没有以”.pdf“结尾。
相同的用户代理只声明一次
如果你多次声明相同的用户代理,谷歌虽然并不反对,依然可以结合在一起执行。比如,像下方这样…
User-agent: Googlebot
Disallow: /a/
User-agent: Googlebot
Disallow: /b/
… 谷歌蜘蛛 不会 抓取两个中任何一个目录。
虽然这么说,最好只声明一次,因为这不会产生困惑。换句话说,保持简单明了,可以让你不会出现致命的错误。
使用精准的指令避免以外的错误
如果不使用精准的指令,那么很可能会导致 SEO 中产生致命的错误。假设你现在有一个多语言的网站,正在操作一个德语版本的 /de/ 子目录。
因为还未完成,所以暂时你想阻止搜索引擎抓取这个目录内的内容。
下方的 robots.txt 文件可以屏蔽搜索引擎抓取这个目录以及下方的所有内容:
User-agent: *
Disallow: /de
但是,同时这也阻止了搜索引擎抓取所有以 /de. 开头的内容。
比如:
/designer-dresses/
/delivery-information.html
/depeche-mode/t-shirts/
/definitely-not-for-public-viewing.pdf
这种情况,解决方法也很简单,只需要在后面加个斜杠:
User-agent: *
Disallow: /de/
使用注释给开发者提供说明
使用注释功能,可以向开发者说明你的 robots.txt 指令的用途——很可能是未来的你自己。如果需要使用注释,只需要以 (#) 开头即可:
# This instructs Bing not to crawl our site.
User-agent: Bingbot
Disallow: /
蜘蛛会忽略所有以 (#) 开头的指令。
针对不同的子域名使用不同的 robots.txt 文件
Robots.txt 只在当前所属的子域名中生效。如果你需要控制不同的子域名抓取规则,那么你就需要分开设置不同的 robots.txt 文件。
比如,你的主站运行在 domain.com 上,你的博客运行在 blog.domain.com 上。那么你就需要有两个 robots.txt 文件。一个是放在主站的根目录中,一个是放在博客站的根目录中。
Robots.txt 文件示例
下方使一些 robots.txt 的文件示例。这些主要是为了给你一些启发。但是如果碰巧符合你需求的,可以请将其复制粘贴到记事本文档中,另存为“robots.txt”,然后将其上传到对应的根目录中。
允许所有蜘蛛访问
User-agent: *
Disallow: /
小提示.在指令后没有声明 URL 会使该指令变得多余。换句话说,搜索引擎会忽略它。这就是为什么这里的 disallow 指令是无效的原因。搜索引擎仍然可以抓取所有页面和文件。
不允许任何蜘蛛访问
User-agent: *
Disallow: /
针对所有蜘蛛屏蔽一个目录
User-agent: *
Disallow: /folder/
针对所有蜘蛛,屏蔽一个目录(只保留一个页面)
User-agent: *
Disallow: /folder/
Allow: /folder/page.html
针对所有蜘蛛,屏蔽一个文件
User-agent: *
Disallow: /this-is-a-file.pdf
针对所有蜘蛛,屏蔽所有的 pdf 文件
User-agent: *
Disallow: /*.pdf$
针对谷歌蜘蛛,屏蔽所有带参数 URL
User-agent: Googlebot
Disallow: /*?
如何检测 robots.txt 文件中的问题?
Robots.txt 很容易出现错误,因此检测是十分有必要的。
为了检测 robots.txt 相关问题,你只需要查看 Search Console(谷歌资源管理器)中的“Coverage(覆盖率)”报告。下面就是一些常见的错误,包括它们的含义以及解决方法:
是否需要检查与某个页面相关的错误?
将特定 URL 放入 Search Console(谷歌资源管理器)的 URL Inspection tool(网址检测)。如果被 robots.txt 屏蔽了,那么就会像下方这样显示:
小提示. 国内站长可以使用百度搜索资源平台提供的相关功能检测!
提交的 URL 被 robots.txt 屏蔽了
这意味着至少在你提交的 Sitemap 当中,至少有一条 URL 被 robots.txt 屏蔽了。
如果你是正确的创建了你的 sitemap,并且不包含 canonicalized(规范标签)、noindexed(指定不索引)、redirected(跳转)等页面,那么你 提交的所有的链接都不应该被 robots.txt 屏蔽。如果被屏蔽了,调查受影响的页面,然后相应地调整 robots.txt 文件,删除阻止该页面的指令。
你可以使用谷歌的 robots.txt 检测工具或者百度搜索资源平台的 robots 文件检测来查看哪条指令在阻止访问。在修改的时候你需要小心,因为很容易就会影响到其它的页面以及文件。
被 robots.txt 屏蔽了
这代表,当前你有内容被 robots.txt 屏蔽了,但是暂时没有被谷歌索引。
如果这个内容很重要,并且需要被索引,删除 robots.txt 中的阻碍抓取的指令。(同时你得注意这个内容是否被索引标记标注为不索引状态)如果你需要屏蔽的内容也是不需要谷歌索引的话,那么你可以去掉屏蔽抓取的指令,然后使用 meta robots 标签、或者是 x -robots HTTP 头部指令进行屏蔽——这样就可以保证内容不被索引。
小提示.
如果想要将页面从索引中删除,必需先移除抓取阻碍。否则,谷歌无法抓取到页面的 noindex(不索引)标记、或是 HTTP 头部指令——这样只会让搜索引擎保持原有的索引状态。
索引但是被 robots.txt 屏蔽
这意味着虽然一部分内容被 robots.txt 屏蔽了,但是依然是被谷歌索引的。
同样道理,如果你希望从搜索引擎中去除该内容,robots.txt 并不是最好的选择。移除抓取阻碍,并使用 meta robots 标记、或者是 x -robots HTTP 头部指令防止被索引。
如果你是不小心屏蔽了这个内容,并且希望内容被谷歌索引的话,只需要在 robots.txt 中移除阻碍索引的指令即可。这样可以帮助你的内容更好的展现在谷歌当中。
FAQs
下面是经常被问到的,但是并没有涵盖在上方内容中的一些问题。你可以在评论中留下你的问题,我们会根据情况进行更新。
(1)robots.txt 文件大小最大是多少?
500 千字节 (大概).
(2)WordPress 中的 robots.txt 在哪里?
例子: domain.com/robots.txt.
(3)如何在 Wordpress 当中编辑 robots.txt?
你可以手动编辑,或者使用 WordPress SEO 优化插件其中的一个。比如像 Smart SEO Tool,它可以让你直接在后台编辑 robots.txt 文件。
如果我通过 robots.txt 屏蔽了不索引的页面有什么影响?
谷歌则无法看到你 noindex 的标记,因为它无法抓取这个信息。
最后的想法
Robots.txt 是一个简单、但是很强大的我呢见。明智地使用它,可以对 SEO 产生积极影响。随意使用它,可能会造成灾难性的后果。