先说清楚一件事:robots.txt只是一个"请勿入内"的告示牌,不是一把锁。百度蜘蛛完全可以选择无视它继续抓取——只是正规搜索引擎一般都会遵守这个君子协议。所以想让百度真的看不到你的网站信息,不能只靠一个robots.txt,得三层防护一起上。下面按"还没被收录"和"已经被收录了"两种情况分别说。
一、robots.txt是第一道防线,但多数人写错了
robots.txt要放在网站根目录下,浏览器访问 你的域名/robots.txt 能直接打开才生效。最常见的写法是:
Disallow: /
这两行的意思是:对所有百度蜘蛛(Baiduspider),禁止抓取网站所有页面。但这里有三个坑,多数人踩了还不知道:
坑一:百度蜘蛛不止一个UA
百度除了 Baiduspider,还有 Baiduspider-mobile(移动端蜘蛛)、Baiduspider-image(图片蜘蛛)、Baiduspider-video(视频蜘蛛)等多个变体。如果你只写 Baiduspider,其他蜘蛛照样来抓。正确写法应该是通配:
User-agent: Baiduspider-mobile
User-agent: Baiduspider-image
Disallow: /
坑二:robots.txt只管"不抓",不管"不展示"
就算百度遵守robots.txt不去抓你的页面内容,但如果别的网站已经链接到了你的网站,百度依然可能在搜索结果里展示你的网址和标题(只是没有内容摘要)。这叫"只索引不抓取"——百度通过外链知道你这个URL的存在,但因为robots.txt的限制没有去抓内容。搜索结果里会显示一句"由于该网站的robots.txt文件存在限制,无法提供内容摘要"。
坑三:robots.txt改完不是立刻生效
百度蜘蛛不是24小时盯着你的robots.txt。它有自己的抓取周期,短则几小时,长则几天。你改了robots.txt之后,百度可能要过3到7天才会在下一次抓取时看到新的规则。这期间如果有别的页面已经链接到你,百度还是会按旧规则处理。
二、meta标签才是真正的"不收录"指令
robots.txt告诉百度"别来抓",但已经抓过的、或者通过外链知道的页面,robots.txt管不了是否展示。真正让百度不在搜索结果中显示某个页面的,是HTML里的meta标签:
这行代码放在HTML的 <head> 区域。效果是:

| 指令 | 作用 | 百度遵守情况 |
|---|---|---|
| noindex | 不要把这个页面加入搜索结果索引 | 百度明确支持,是最有效的禁止收录方式 |
| nofollow | 不要追踪这个页面上的链接 | 百度支持,但主要用于阻止权重传递 |
| noarchive | 不要保存网页快照 | 百度部分支持,可能不生成快照 |
| noimageindex | 不要索引页面上的图片 | 百度图片搜索会参考此指令 |
robots.txt 和 meta noindex 的核心区别
| 对比维度 | robots.txt Disallow | meta noindex |
|---|---|---|
| 百度会不会抓取页面 | 不抓取内容 | 会抓取内容,但不索引 |
| 搜索结果中是否出现 | 可能出现网址+标题(无摘要) | 完全不出现在搜索结果中 |
| 适用场景 | 阻止抓取节省服务器带宽 | 页面内容不想被任何人搜到 |
| 建议 | 两者配合使用:robots.txt阻止抓取 + meta标签禁止索引,双保险 | |
三、服务器层面的拦截——.htaccess和Nginx规则
前面两个方法都是"协议层面"的——告诉百度"请你别来"。但如果你的需求是彻底不让百度蜘蛛访问服务器(比如网站有敏感数据,或者不想给百度贡献任何流量),可以在服务器层面直接拒绝百度蜘蛛的请求。
Apache (.htaccess)
在网站根目录的 .htaccess 文件中添加:
RewriteCond %{HTTP_USER_AGENT} Baiduspider [NC]
RewriteRule .* - [F,L]
效果:所有来自百度蜘蛛的请求直接返回 403 Forbidden,连robots.txt都不会被读取。
Nginx
在 nginx.conf 的 server 块中添加:
return 403;
}
效果同上,直接返回403。如果想让百度蜘蛛觉得"这个网站不存在",可以把403改成444(Nginx专用,直接断开连接不返回任何内容)。
⚠ 服务器拦截的副作用要注意
服务器直接返回403,百度蜘蛛会把这个URL标记为"无法访问",多次尝试失败后可能会把页面从索引中移除——如果你想要的就是这个效果,那正好。但要注意:
- 百度站长平台的"抓取诊断"会显示失败,但不影响正常用户访问
- 如果你的网站用了CDN(如百度云加速),CDN层可能会缓存403响应,需要额外处理
- 只屏蔽百度蜘蛛不影响Google、必应等其他搜索引擎
四、已经被百度收录了,怎么让它"消失"?
以上三种方法是"预防"——在百度还没收录的时候阻止它。但如果你的页面已经被收录了,搜索结果里能搜到,这时候只加robots.txt或meta标签是来不及的——因为百度已经把你的页面存进索引库了。
你需要走百度官方提供的"删除"流程:
步骤一:让页面返回404状态码
这是最核心的一步。百度只接受已经确实不存在的页面进行删除。操作方式:
- 如果你真的想删掉这个页面:直接删除文件,让服务器返回404
- 如果页面还在但要隐藏:可以在代码层面设置——当检测到百度蜘蛛UA时返回404,普通用户访问时正常显示。但这属于"cloaking",有风险
- 最简单的方法:把页面删掉或用301跳转到新页面(301只能转移权重,不会删除旧URL的展示)
步骤二:去百度站长平台提交死链
登录 ziyuan.baidu.com(百度搜索资源平台),验证你的网站所有权后:
- 左侧菜单找到 "网页抓取 → 死链提交"
- 准备一个txt文件,每行一个需要删除的URL
- 上传文件,百度会在2-7个工作日内处理
步骤三:使用"闭站保护"(整站隐藏)
如果你的需求是整个网站都不想出现在百度搜索结果里,可以直接用百度站长平台的"闭站保护"功能。开启后,百度会在1-3天内将你的网站所有页面从搜索结果中移除。关闭保护后,网站会恢复展示。
适用场景:网站改版期间、被黑后清理期、临时下架整个站点、企业更换域名过渡期
五、只对百度隐藏,不影响Google和其他搜索引擎
很多外贸站、海外业务站点的需求很明确:我只想让百度看不到,Google、Bing照样要收录。这个需求实现起来其实很简单——因为robots.txt、meta标签和服务器规则都支持按搜索引擎单独设置。

robots.txt 按搜索引擎分别设置
User-agent: Baiduspider
Disallow: /
User-agent: Baiduspider-mobile
Disallow: /
# 允许Google
User-agent: Googlebot
Allow: /
# 允许Bing
User-agent: Bingbot
Allow: /
# 允许其他所有搜索引擎(兜底)
User-agent: *
Allow: /
关键点:把百度相关的规则放在前面,其他搜索引擎放后面。robots.txt是从上到下匹配的,先匹配到的规则生效。
.htaccess/Nginx 按UA分别拦截
上面第三节的服务器规则,本身就是按 User-Agent 匹配的,只对含 Baiduspider 的UA返回403,Googlebot、Bingbot等完全不受影响。这是最干净的做法。
六、三个容易被忽略的"百度能看见你"的入口
很多人把robots.txt、meta标签、服务器拦截全做了,结果过段时间一搜,百度还是能看到自己的信息。排查下来,往往是漏了这几个地方:
入口一:CDN/云加速缓存了旧页面
如果你用了百度云加速、Cloudflare等CDN服务,CDN会缓存你的页面。你在源站改了robots.txt或加了noindex标签,但CDN缓存的是旧版本——百度蜘蛛访问CDN节点时看到的还是老内容。改完规则后一定要刷新CDN缓存。
入口二:其他网站转载了你的内容
这是最无奈的情况。你自己的网站屏蔽了百度,但有人把你的文章转载到了别的网站(可能是采集站、论坛、知乎等),百度通过那些网站一样能搜到你的内容。这种情况下你只能联系转载方删除,或者用百度站长平台的"快照删除"功能逐一投诉。
入口三:百度系产品自带的索引
百度不仅仅通过网页搜索收录内容。如果你在百度知道、百度贴吧、百度文库、百度百科等百度自家产品里提到过你的网站或内容,这些信息在你的网站屏蔽后依然能被搜到。百度系产品的删除需要走各自的申诉渠道,和站长平台的死链提交是两套流程。
七、选哪种方案?看你的具体需求
| 你的需求 | 推荐方案 | 生效时间 |
|---|---|---|
| 新网站,从一开始就不想让百度收录 | robots.txt + meta noindex 双保险 | 立即(对新页面) |
| 只想不让百度抓取,Google照常 | robots.txt中只对Baiduspider设Disallow | 3-7天 |
| 已经被收录,想把单个页面删掉 | 页面返回404 → 百度站长平台死链提交 | 2-7个工作日 |
| 整个网站想从百度消失 | 百度站长平台闭站保护 + 服务器拦截 | 1-3天 |
| 彻底不给百度任何访问 | .htaccess/Nginx 403拦截 + robots.txt + meta | 立即 |
最后说一点:技术层面上,让百度看不到你的网站完全能做到,而且方法很成熟。真正的问题是——你是不是真的需要这样做?大部分情况下,百度收录是免费流量来源,屏蔽百度等于自断一条路。如果是担心某些敏感页面被搜到(比如内部系统、测试页面、用户隐私数据),那就用meta noindex精准控制单页,不用整站屏蔽。如果是外贸站担心百度展示中文搜索结果影响品牌形象——那就在robots.txt里只屏蔽百度,Google和Bing照常收录,完全不冲突。
八、用百度站长平台"抓取诊断"验证是否生效
做完以上设置后,怎么确认百度真的看不到你的网站了?不能光等——等几天后搜一下发现还在,就白等了。用百度站长平台的"抓取诊断"工具可以立刻验证:
- 登录 ziyuan.baidu.com,验证网站所有权
- 左侧菜单 "网页抓取 → 抓取诊断"
- 输入你要测试的URL,点击"抓取"
- 如果显示 "robots封禁" 或 "服务器错误" 或 "403",说明拦截生效了
- 如果显示 "抓取成功",说明还有漏洞,回去检查上面七个步骤哪个没做好
一个小技巧:如果你的网站还没被百度收录、也没注册站长平台,可以先把robots.txt和meta标签配好,然后用百度站长平台的"手动提交"功能提交首页——如果提交后几天都没被收录,就说明你的拦截设置生效了。
九、常见误区和注意事项
误区:"robots.txt里写Disallow就够了"
不够。robots.txt只是告诉百度"别来抓",但百度通过外链分析、域名备案信息等渠道依然可以知道你的网站存在。如果别人链接到你,搜索结果里可能出现你的网址(没有内容摘要)。要做到完全不出现,必须加上meta noindex标签。
误区:"改完就立刻生效"
robots.txt和meta标签的生效都需要百度蜘蛛下次访问时才能读取。这个周期可能是几小时到一周。服务器层面的403拦截是立刻生效的,但百度已经索引的内容不会立刻删除,需要配合死链提交或闭站保护。
误区:"加了noindex后之前的收录就自动消失了"
不会。noindex只对新抓取的内容生效。已经被索引的页面,需要百度重新抓取时读到noindex标签才会从索引中移除。这个过程可能长达数周。想快速删除,还是得走死链提交流程。
一个你可能会忽略的问题:域名备案信息
即使你的网站内容完全不被百度收录,你的域名如果在中国大陆备案了,百度搜索你的域名本身时,可能还是会出现备案信息相关的记录。这不是网页收录,是域名层面的信息,robots.txt和meta标签都无法屏蔽。唯一的办法是使用海外域名注册商且不做国内备案。
说穿了,让百度看不到你的网站信息这件事,技术实现不难,关键是想清楚你到底要什么效果。是只对百度隐藏?还是整站从互联网上消失?是还没被收录提前预防?还是已经被收录了要删除?不同场景对应的方案完全不一样。把robots.txt、meta noindex、服务器拦截三层组合起来用,再配合百度站长平台的死链提交和闭站保护,基本没有搞不定的情况。唯一的例外是——如果你的内容被第三方网站转载了,那百度搜出来的结果不是从你网站来的,你管不了。
