robots.txt是网站根目录下的一个文本文件,用于告诉搜索引擎蜘蛛哪些页面可以抓取,哪些不可以。这篇教程教你robots.txt的语法、配置方法、常见示例和最佳实践。
一、robots.txt概述
robots.txt(也叫爬虫协议、机器人协议)是一个纯文本文件,放在网站根目录下,用于告诉搜索引擎蜘蛛(如Googlebot、百度蜘蛛)哪些页面或目录可以抓取,哪些不应该抓取。
• 控制抓取范围:告诉搜索引擎不要抓取某些页面(如后台、登录页、重复内容)
• 节省抓取配额:搜索引擎对每个网站有抓取配额,屏蔽不重要的页面可以让重要页面更快被抓取
• 保护隐私:防止敏感页面被搜索引擎收录和公开
• 避免重复内容:屏蔽搜索结果页、分页、打印版等重复内容,避免影响SEO
• 声明sitemap:在robots.txt中声明sitemap位置,帮助搜索引擎发现
• robots.txt是"建议"不是"强制",合规的搜索引擎蜘蛛会遵守,但恶意蜘蛛可能不理会
• robots.txt不能真正隐藏页面,即使屏蔽了,页面仍可能通过外链被收录
• 要真正防止页面被收录,应该在页面中添加noindex标签,而不是只靠robots.txt屏蔽
• 不要用robots.txt屏蔽整个网站(除非网站还在建设中)
• robots.txt必须放在网站根目录,文件名必须是小写的robots.txt
二、robots.txt语法
2.1 基本语法
| 指令 | 说明 | 示例 |
|---|---|---|
| User-agent | 指定搜索引擎蜘蛛,*表示所有蜘蛛 | User-agent: * |
| Disallow | 禁止抓取的路径,/表示整个网站 | Disallow: /admin/ |
| Allow | 允许抓取的路径(覆盖Disallow) | Allow: /admin/login.php |
| Sitemap | 声明sitemap位置(完整URL) | Sitemap: https://example.com/sitemap.xml |
| Crawl-delay | 抓取延迟(秒),部分蜘蛛支持 | Crawl-delay: 10 |
| # | 注释,#后面的内容会被忽略 | # 这是注释 |
2.2 路径匹配规则
- /:表示网站根目录,Disallow: / 表示屏蔽整个网站
- /目录名/:匹配该目录及其所有子目录,如 Disallow: /admin/ 屏蔽admin目录下所有内容
- /文件名:匹配具体文件,如 Disallow: /login.php 屏蔽login.php
- *:通配符,匹配任意字符,如 Disallow: /*? 屏蔽所有带?的URL(动态URL)
- $:匹配URL结尾,如 Disallow: /*.pdf$ 屏蔽所有pdf文件
- 路径区分大小写(部分搜索引擎不区分,但建议统一小写)
- 路径必须以/开头(相对网站根目录)
2.3 指定特定搜索引擎
可以针对不同的搜索引擎设置不同的规则:
User-agent: Googlebot Disallow: /private/ User-agent: Baiduspider Disallow: /private/ Disallow: /test/ User-agent: * Disallow: /admin/
常见搜索引擎蜘蛛名称:
- Google:Googlebot
- 百度:Baiduspider
- Bing:bingbot
- 360:360Spider
- 搜狗:Sogou spider
- 神马:YisouSpider
- Yahoo:Slurp(现在用bingbot)
三、常见配置示例
3.1 最简单的robots.txt(允许全部抓取)
User-agent: * Disallow: Sitemap: https://www.example.com/sitemap.xml
Disallow后面留空表示不屏蔽任何页面,允许抓取所有内容。这是最常用的配置,适合大多数网站。
3.2 WordPress推荐配置
# 新手站长不迷路 robots.txt User-agent: * # 屏蔽后台 Disallow: /wp-admin/ # 允许后台的admin-ajax.php(插件需要) Allow: /wp-admin/admin-ajax.php # 屏蔽登录页 Disallow: /wp-login.php # 屏蔽注册页 Disallow: /wp-register.php # 屏蔽内容目录(防止直接访问PHP文件) Disallow: /wp-content/plugins/ Disallow: /wp-content/themes/ # 屏蔽包含?的动态URL(如搜索页、分页参数) Disallow: /*? # 屏蔽评论feed Disallow: /comments/feed/ # 屏蔽作者归档(防止重复内容) Disallow: /author/ # 屏蔽版本号参数 Disallow: /*?ver= Sitemap: https://www.example.com/sitemap_index.xml
WordPress 5.3+已经内置了虚拟的robots.txt,会自动生成基本规则。如果你在根目录放置了真实的robots.txt文件,会覆盖内置的。上面的配置是参考,根据自己的网站情况调整。不要盲目复制,确保不会屏蔽重要页面。
3.3 屏蔽特定文件类型
User-agent: * # 屏蔽所有pdf文件 Disallow: /*.pdf$ # 屏蔽所有zip压缩包 Disallow: /*.zip$ # 屏蔽所有图片(不推荐,会影响图片搜索) # Disallow: /*.jpg$ # Disallow: /*.png$
3.4 屏蔽重复内容页面
User-agent: * # 屏蔽搜索结果页 Disallow: /search/ Disallow: /*?s= # 屏蔽标签页(如果标签内容和分类重复) # Disallow: /tag/ # 屏蔽日期归档(防止重复内容) Disallow: /2024/ Disallow: /2025/ # 屏蔽分页(第2页及以后,防止重复内容) Disallow: /page/ # 屏蔽评论分页 Disallow: /comment-page-
3.5 网站建设中(屏蔽整个网站)
User-agent: * Disallow: / # 网站建设中,暂时不希望搜索引擎收录 # 上线后记得删除或修改这个文件
网站上线后一定要记得把 Disallow: / 改掉,否则搜索引擎不会收录你的网站!很多新手上线后忘记改,导致网站几个月都没有收录。
四、哪些页面要屏蔽
- 后台管理页面:/admin/、/wp-admin/、/manage/等,防止后台路径暴露
- 登录/注册页面:/login.php、/wp-login.php、/register.php等,不需要被收录
- 用户个人中心:/user/、/member/、/account/等,用户私有页面
- 搜索结果页:/search/、/?s=xxx等,重复内容,不需要收录
- 分页页面:/page/2/、/comment-page-2/等,第2页及以后可能重复内容
- 标签/日期归档:如果和分类内容重复,可以屏蔽标签或日期归档
- 打印版/移动版:/print/、/mobile/等,重复内容
- 临时/测试页面:/test/、/tmp/、/demo/等,不需要收录
- 敏感文件:配置文件、备份文件、日志文件等(如 .bak、.sql、.log)
- 插件/主题目录:/wp-content/plugins/、/wp-content/themes/,防止直接访问PHP文件
- Feed页面:/feed/、/comments/feed/,Feed是给订阅阅读器的,不需要收录
• 首页、文章页、页面(核心内容,必须收录)
• 分类页、标签页(如果内容不重复,有助于收录)
• 图片、CSS、JS等静态资源(屏蔽会影响页面渲染和图片搜索)
• sitemap.xml(搜索引擎需要抓取)
• robots.txt本身
• 任何你希望被搜索引擎收录的页面
五、常见错误与最佳实践
5.1 常见错误
| 错误 | 说明 | 正确做法 |
|---|---|---|
| 屏蔽整个网站 | Disallow: / 导致网站不被收录 | 上线后删除或修改,只屏蔽特定页面 |
| 路径错误 | Disallow: admin/ 少了开头的/ | 路径必须以/开头:Disallow: /admin/ |
| 用robots.txt隐藏敏感内容 | robots.txt是公开的,所有人都能看到你屏蔽了什么 | 敏感内容应该用密码保护或noindex,不要只靠robots.txt |
| 屏蔽CSS/JS/图片 | 导致搜索引擎无法正确渲染页面,影响排名 | 不要屏蔽静态资源目录 |
| 文件名错误 | Robots.txt、ROBOTS.TXT、robots.txt.txt等 | 必须是小写的robots.txt,放在根目录 |
| 编码错误 | UTF-8 BOM、中文注释乱码 | 使用UTF-8无BOM编码,注释用英文或确保编码正确 |
| 规则冲突 | Allow和Disallow顺序错误导致规则不生效 | Allow应该放在Disallow后面,覆盖更具体的路径 |
| 以为robots.txt能防止收录 | 屏蔽了但页面仍可能通过外链被收录 | 要防止收录,在页面中添加noindex标签 |
5.2 最佳实践
- 简单为主:robots.txt越简单越好,只屏蔽真正需要屏蔽的页面,不要过度配置
- 测试验证:配置后用搜索引擎站长平台的robots.txt测试工具验证,确保没有误屏蔽重要页面
- 声明sitemap:在robots.txt末尾添加Sitemap声明,帮助搜索引擎发现sitemap
- 放在根目录:robots.txt必须放在网站根目录,通过 https://你的域名/robots.txt 能访问
- 定期检查:定期检查robots.txt是否正确,网站改版或添加新功能时更新规则
- 不要屏蔽全站:除非网站还在建设中,否则不要用 Disallow: / 屏蔽整个网站
- 不要屏蔽静态资源:不要屏蔽CSS、JS、图片等静态资源,影响搜索引擎渲染和图片搜索
- 用noindex代替屏蔽:如果希望页面不被收录,用noindex标签比robots.txt屏蔽更可靠
- 注释说明:用注释说明每条规则的目的,方便以后维护和理解
- 使用生成器:新手可以用在线robots.txt生成器生成,然后根据需要修改
六、验证与FAQ
6.1 验证robots.txt
- 访问检查:在浏览器中访问 https://你的域名/robots.txt,确认能正常显示内容
- Google测试:Google Search Console → 设置 → robots.txt测试工具,输入URL测试是否被屏蔽
- 百度测试:百度搜索资源平台 → 数据监控 → robots.txt,查看百度抓取的robots.txt内容和状态
- 在线工具:用在线robots.txt测试工具(如technicalseo.com/tools/robots-txt-tester/)测试规则
6.2 常见问题
Q:robots.txt屏蔽了页面,为什么还能在搜索结果中看到?
A:robots.txt只是告诉蜘蛛不要抓取,但如果页面之前已经被收录,或者有其他网站链接到这个页面,搜索引擎可能仍然会显示URL(但不会显示页面内容)。要彻底从搜索结果中移除,需要:①在页面中添加noindex标签;②在Google Search Console中使用"移除"工具;③等待搜索引擎更新。
Q:WordPress需要手动创建robots.txt吗?
A:WordPress 5.3+会自动生成虚拟的robots.txt,不需要手动创建。但如果你在根目录放置了真实的robots.txt文件,会覆盖虚拟的。建议新手使用WordPress默认的虚拟robots.txt,或者用SEO插件(Rank Math/Yoast)编辑robots.txt。
Q:robots.txt中可以写中文注释吗?
A:可以,但必须确保文件是UTF-8编码,否则中文可能乱码。建议注释用英文,避免编码问题。如果用中文,确保编辑器保存为UTF-8无BOM格式。
Q:修改robots.txt后多久生效?
A:修改后立即生效(蜘蛛下次抓取时会读取最新的robots.txt)。但搜索引擎重新抓取和更新索引需要时间,可能几天到几周。可以在站长平台手动请求重新抓取robots.txt。
Q:多个域名可以用同一个robots.txt吗?
A:每个域名需要自己的robots.txt文件,放在各自的根目录下。因为robots.txt是按域名访问的,https://a.com/robots.txt 和 https://b.com/robots.txt 是不同的文件。
Q:robots.txt和sitemap有什么关系?
A:robots.txt告诉搜索引擎哪些页面不要抓取,sitemap告诉搜索引擎有哪些页面可以抓取。两者配合使用:sitemap列出希望收录的页面,robots.txt屏蔽不希望收录的页面。建议在robots.txt中声明sitemap位置,帮助搜索引擎发现sitemap。