什么是 robots.txt

robots.txt(又称“爬虫协议”或“机器人协议”)是一个纯文本文件,它存放在网站的根目录下(https://www.example.com/robots.txt)。

网站 robots.txt
(图片来源网络,侵删)

它的作用是向搜索引擎的爬虫(如 Googlebot、Bingbot 等)发出指令,告诉它们网站的哪些部分可以抓取,哪些部分不可以抓取。

重要提示: robots.txt 是一个“君子协议”,它不是一个强制性的法律或技术屏障,一个行为不端的爬虫完全可以忽略它,对于高度敏感或私有的数据,不能仅仅依赖 robots.txt 来保护,而应使用其他安全措施(如登录认证、IP 黑名单等)。


robots.txt 的主要作用

  1. 控制服务器负载:防止爬虫抓取网站的后端管理页面、搜索结果页、API 接口等对服务器压力大的动态内容。
  2. 防止重复内容:告诉爬虫忽略那些会产生大量重复内容的页面(如分页、打印版本、排序后的列表),从而避免这些页面与原始页面竞争排名。
  3. 保护私有或敏感区域:阻止搜索引擎抓取用户登录后的个人资料页面、购物车、管理员后台等。
  4. 引导爬虫高效抓取:通过 Sitemap 指令,主动向搜索引擎提供网站所有重要页面的列表,帮助它们更快、更全面地发现你的网站内容。

robots.txt 的基本语法

robots.txt 文件由一个或多个“记录块”组成,每个记录块包含一个或多个指令。

记录块结构

一个记录块由两行或多行组成:

网站 robots.txt
(图片来源网络,侵删)
  1. User-agent (必需):指定这条规则适用于哪个爬虫。
    • 代表所有爬虫。
    • Googlebot:代表 Google 的爬虫。
    • Bingbot:代表微软必应的爬虫。
    • 你可以指定多个 User-agent,也可以使用通配符 。
  2. Disallow (可选):告诉指定的爬虫,不允许抓取哪个路径。
    • 禁止抓取整个网站。
    • /private/:禁止抓取 private 目录下的所有内容。
    • /admin.php:禁止抓取根目录下的 admin.php 文件。
    • 空值 (Disallow:Disallow):表示允许抓取所有内容。
  3. Allow (可选):通常与 Disallow 结合使用,用于“例外”允许某个路径。
    • Disallow: /private/user-images/ 禁止了整个 user-images 目录,但 Allow: /private/user-images/logo.png 可以允许抓取该目录下的特定文件。
  4. Sitemap (可选):指定网站地图文件的 URL,这个指令可以出现在文件的任何位置,并且可以有多个 Sitemap 指令。

常见指令详解

指令 描述 示例
User-agent 定义规则适用的对象 User-agent: Googlebot
Disallow 禁止抓取的路径 Disallow: /admin/
Allow 允许抓取的路径(常用于 Disallow 的例外) Allow: /public/admin/
Sitemap 指向网站地图的位置 Sitemap: https://www.example.com/sitemap.xml
*``** 通配符,代表所有字符或所有爬虫 User-agent: *
Disallow: /secret*.php
通配符,代表字符串的末尾 Disallow: /*.jpg$ (禁止所有以 .jpg 结尾的 URL)

实战示例

示例 1:一个简单的博客网站

# 允许所有搜索引擎抓取所有内容
User-agent: *
Disallow:
# 或者直接不写 Disallow,效果也是允许所有
# User-agent: *

示例 2:禁止所有爬虫

# 告诉所有爬虫,这个网站的所有内容都不要抓取
User-agent: *
Disallow: /

示例 3:一个常见的电商网站配置

# 针对 Google 图片爬虫的特殊规则
User-agent: Googlebot-Image
Disallow:
Allow: /
# 针对 Google 新闻爬虫的特殊规则
User-agent: Googlebot-News
Disallow: /
# 针对所有其他爬虫的规则
User-agent: *
# 禁止抓取管理后台、用户数据、临时文件和配置文件
Disallow: /admin/
Disallow: /my-account/
Disallow: /cart/
Disallow: /checkout/
Disallow: /tmp/
Disallow: /config.php
# 允许抓取公共目录下的所有内容
Allow: /public/
# 指定网站地图
Sitemap: https://www.example.com/sitemap.xml
Sitemap: https://www.example.com/news-sitemap.xml

示例 4:使用通配符

User-agent: *
# 禁止抓取所有以 `private` 开头的目录
Disallow: /private*/
# 禁止抓取所有 URL 中包含 `?id=` 的页面(通常代表会话ID或动态参数)
Disallow: /*?id=
# 禁止抓取所有以 `.pdf` 结尾的文件
Disallow: /*.pdf$

常见误区和最佳实践

robots.txt 是保护隐私的防火墙

事实:如前所述,robots.txt 只是一个指导性文件,恶意用户或爬虫可以轻松绕过它,不要用它来保护真正的敏感数据。

Disallow 中使用密码

事实Disallow 只处理路径,不处理认证。Disallow: /admin/login.php 是无效的,因为爬虫无法处理登录流程,正确的做法是禁止整个 /admin/ 目录。

禁止抓取 /?s=(搜索结果页)会影响 SEO

事实:搜索结果页包含大量重复内容,抓取它们没有价值,还会浪费爬虫的“抓取预算”(Crawl Budget),禁止抓取它们是推荐做法,有助于爬虫更好地发现你真正重要的页面。

最佳实践

  1. 放在根目录:确保文件位于 https://yourdomain.com/robots.txt
  2. 使用小写字母:虽然标准不强制,但路径通常是小写的,使用小写可以避免混淆。
  3. 清晰注释:使用 添加注释,解释每条规则的目的,方便自己和他人维护。
  4. 不要用 Disallow: / 来隐藏网站:如果你不希望网站被搜索引擎收录,应该在站长工具中设置“从搜索结果中移除”,或者使用 noindex meta 标签。Disallow: / 只是告诉爬虫“不要抓取”,但已经抓取并收录的页面可能仍然会显示在搜索结果中。
  5. 测试!测试!测试!:在发布前,务必使用 Google 的 robots.txt 测试工具 或 Bing 的 robots.txt 测试工具 来验证你的语法是否正确,规则是否按预期工作。

如何查看和创建 robots.txt

  • 查看:在浏览器地址栏中输入 你的网站域名/robots.txt 即可查看。https://www.google.com/robots.txt
  • 创建
    1. 使用任何文本编辑器(如记事本、VS Code、Sublime Text)创建一个新文件。
    2. 编写你的 robots.txt 规则。
    3. 将文件保存为 robots.txt(注意没有后缀名)。
    4. 通过 FTP、SFTP 或网站管理后台,将文件上传到你网站的根目录下。

希望这份详细的指南能帮助你全面理解和使用 robots.txt

网站 robots.txt
(图片来源网络,侵删)