robots.txt国内搜索配置:搞定国内主流搜索robots配置
配置robots.txt国内搜索配置的核心结论非常明确:绝对不能无脑照抄国外针对Google那一套规范,国内搜索引擎(百度、神马、搜狗、360、头条字节跳动)对通配符、频次控制协议的支持参差不齐,最稳妥的策略是“通用兜底+针对各家蜘蛛明确放行核心资源+屏蔽高频无意义动态路径+把字节爬虫单独拎出来限流”。
很多技术人员容易犯的严重错误,就是拿网上千篇一律的模板往根目录一扔,结果要么是动态分页被百度当成死循环疯狂抓取把MySQL打满,要么是字节跳动的Bytespider像DDoS一样瞬间把服务器CPU干到100%,甚至有人在robots.txt里写了后台地址,反向给黑客指明了攻击目标。
一、 核心方案速览(生产环境开箱即用模板)
别整虚的,如果你的网站主要面向国内流量(资讯、电商、企业官网、B2B站点等),下面这套配置可直接作为基准模板套用。复制前把里面的域名换成你自己的:
# 1. 默认通用规则:允许大部分页面抓取,屏蔽后台与无意义系统路径
User-agent: *
Disallow: /admin/
Disallow: /api/
Disallow: /wp-admin/
Disallow: /*?*sort=
Disallow: /*?*filter=
Disallow: /*.json$
Allow: /
# 2. 百度蜘蛛专项优化:明确允许抓取CSS/JS渲染资源,拦截搜索聚合垃圾页
User-agent: Baiduspider
Disallow: /search/
Disallow: /api/
Disallow: /user/
Allow: /*.js$
Allow: /*.css$
Allow: /*.png$
Allow: /*.jpg$
# 3. 字节跳动蜘蛛(今日头条/抖音搜索):这家抓取最凶残,单独控制
User-agent: Bytespider
Disallow: /search/
Disallow: /api/
Disallow: /user/
Disallow: /*?*
# 4. 360与搜狗搜索
User-agent: 360Spider
Disallow: /api/
User-agent: Sogou web spider
Disallow: /api/
# 5. 明确告知Sitemap地址(必须用绝对路径,单行一个)
Sitemap: https://www.yourdomain.com/sitemap.xml
Sitemap: https://www.yourdomain.com/sitemap_index.xml
二、 实操细节深度拆解与避坑指南
1. 国内各家蜘蛛的“官方代号”千万别拼错
很多人写了配置发现根本不生效,排查半天发现是UA名字写错了。国内几大家蜘蛛的真实声明名称如下:
- 百度:PC与移动端统一叫
Baiduspider(虽然细分还有Baiduspider-image、Baiduspider-video,但一般统写Baiduspider即可覆盖)。 - 搜狗:
Sogou web spider(注意中间有空格,不要连着写)。 - 360搜索:
360Spider(大小写敏感,不要写成 360spider)。 - 神马搜索(阿里旗下,移动端大户):
YisouSpider(注意它叫“宜搜/神马”,历史上一直用这个UA)。 - 字节跳动(今日头条/抖音搜索):
Bytespider。
踩坑提醒:不要在同一个txt文件里给同一个User-agent重复写多段配置。搜索引擎爬虫读到重复块时,各家的解析逻辑不同,百度可能会就近覆盖,有的爬虫可能直接忽略后半段。
2. 通配符与正则陷阱:国内蜘蛛并不是完全支持标准正则
robots协议本身只支持简单的模式匹配,主要就是 *(匹配任意字符序列)和 $(匹配URL结尾)。
- 错误写法:
Disallow: /*.php?id=*- 很多国内小蜘蛛对连续的
*或者复杂的URL参数匹配支持极差,直接导致整条规则失效,甚至误杀全站。
- 很多国内小蜘蛛对连续的
- 安全写法:
- 如果要屏蔽所有带查询参数的分页或排序,写
Disallow: /*?*即可。 - 如果要屏蔽某一类后缀,写
Disallow: /*.action$或Disallow: /*.json$,末尾的$必须加上,代表以此结尾。如果不加$,比如写了Disallow: /tag,它会把你/tags-list/这种优质页面也一并拦掉。
- 如果要屏蔽所有带查询参数的分页或排序,写
3. 别指望 Crawl-delay 控制国内爬虫的并发!
在国外的生态里,你写 Crawl-delay: 5(表示抓取间隔5秒),Bing和Yahoo是认的。但国内除了极少数小爬虫,百度和字节跳动的官方蜘蛛基本不遵守 Crawl-delay 参数!
- 实操方案:
- 如果你发现
Baiduspider抓取过猛导致数据库连接池被占满,别在robots.txt里敲Crawl-delay,那纯属自欺欺人。直接去百度搜索资源平台 -> 抓取频次上限调整,手动拉低抓取频次。 - 如果是
Bytespider暴力拉取,直接在Nginx层通过limit_req模块对User-Agent: Bytespider进行单IP速率限制,或者在robots.txt里更粗暴地屏蔽它访问开销大的聚合筛选接口。
- 如果你发现
4. 不要把robots.txt当成安全防护手段
这是初级运维和新手开发最常犯的低级错误:把隐藏的后台地址、测试环境地址、接口地址全列在Disallow里:
# 极其愚蠢的“自爆”写法
Disallow: /admin_secret_login/
Disallow: /test_database_backup/
robots.txt是全公开的,任何人直接访问 yourdomain.com/robots.txt 就能看到。黑客拿到域名的第一步就是看robots.txt找隐蔽后台。
- 正解:这类后台和开发环境,直接在Web服务器(Nginx/Apache)层做内网IP白名单限制、走Basic Auth认证,或者URL干脆改成复杂的无规律路径,压根不要写进robots.txt里。
三、 高频关联问题拓展排查
Q1:修改了robots.txt,百度搜索为什么还是狂抓老路径?
答:缓存周期问题。 各大搜索引擎的爬虫不是每次发起请求前都重新拉取一次robots.txt,它们会在本地缓存数小时甚至数天(百度一般缓存7-14天不等)。
- 实操解法:
- 登录百度搜索资源平台;
- 找到“管理与抓取” -> “Robots”工具;
- 点击“检测并更新”,手动触发百度蜘蛛立即拉取你服务器上最新的文件;
- 测试你的最新URL,确认生效后再观察抓取日志。
Q2:某页面在robots.txt里Disallow了,为什么在百度里依然能搜到?
答:禁止抓取(Disallow)不等于禁止索引(Noindex)。
这是SEO里最经典的混淆概念。当你写了 Disallow: /page-a.html,百度确实不会再去请求这个页面的内容,但如果互联网上其他网站甚至你站内其他页面有外链指向 /page-a.html,百度依然会把这个URL记录入库,并在搜索结果里展示标题(通常展示为一个只有链接没有摘要的死板结果)。
- 实操解法:
- 如果页面绝对不想出现在搜索结果中,千万别在robots.txt里Disallow它!
- 正确做法是:允许蜘蛛抓取它,但在该页面的HTML
<head>区域加上<meta name="robots" content="noindex, nofollow">,或者服务端直接返回HTTP 404/410状态码。等蜘蛛抓到了noindex或404并把快照删除后,你再考虑在robots里封禁。
Q3:服务器返回403或500时,国内搜索引擎怎么处理?
- 如果搜索引擎访问你的
/robots.txt返回的是 404 Not Found:各大蜘蛛会认为你“全站均可抓取”,直接通行无阻。 - 如果返回的是 500/502/503 服务端错误:百度为了防止在你的网站故障期间把好页面删掉,会启动保护机制,直接暂缓或拒绝抓取全站任何页面。
- 如果返回的是 403 Forbidden:部分国内蜘蛛会判定为全站拒绝抓取,直接引发全站降权或快照大面积消失。
- 检查命令:上线后务必用curl检查一下响应头与状态码:
curl -I -A "Baiduspider" https://www.yourdomain.com/robots.txt必须确保返回状态码是
HTTP/1.1 200 OK,且Content-Type为text/plain。
四、 总结与日常维护逻辑
配置robots.txt国内搜索配置本质上是站长与国内爬虫博弈后的一种妥协规范。你不需要把规则写得像天书一样复杂,抓大放小才是关键:
- 管好大门:只用简单的目录级别路径(如
/api/、/admin/)封死无关内容,少用过于复杂的双通配符正则; - 盯紧高负载爬虫:给字节、神马这几家单独开小灶限制动态查询参数,保住服务器的承载能力;
- 闭环验证:文件改完后,不要甩手不管,必须去百度平台和抓取日志(Access Log)里盯24小时,确认蜘蛛的抓取状态码是200还是被拦截,用数据验证规则的有效性。

