robots.txt是放在网站根目录下的一个纯文本指令文件,用于告知搜索引擎爬虫哪些页面允许抓取、哪些需要绕行。合理的配置能帮助搜索引擎将抓取预算集中在高价值页面上,从而加快新内容的收录。然而,一旦语法写错或路径判断出现偏差,轻则导致抓取异常,重则拖累整站搜索表现。了解它的工作原理和踩坑高发点,是站点管理者绕不开的基本功。
robots.txt对爬虫来说只是建议性协议,没有强制力。任何人只要在浏览器输入"你的域名/robots.txt",就能看到文件全貌。它更像一张园区导览图,指明哪些区域可以参观,但涉及后台、支付或用户数据的区域,绝不能只靠这张图来防守。
这份文件只决定爬虫是否发请求,并不直接控制已被抓取页面能否进入索引。比如某个页面在robots.txt里被设为禁止抓取,但只要它获得不少外部链接,搜索引擎仍有可能把它纳入索引,只是展示的快照可能来自缓存或摘要。
还要注意一个现实:该协议完全依赖爬虫自觉。主流搜索引擎的蜘蛛通常遵守,但很多采集工具和恶意爬虫根本不理会。涉及隐私、交易流程、管理后台等敏感区域,务必同时启用登录校验、IP白名单或防火墙等硬性阻断手段,别把安全全押在这份"君子协议"上。
robots.txt的内容由一个或多个规则组构成,每组必须以User-agent字段开头,标明适用对象。所有指令都是"名称: 值"格式,冒号必须用英文半角,建议冒号后跟一个空格。虽然多数爬虫对格式有一定容忍度,但保持规范写法,能减少解析时的意外。
这一行决定规则组作用于哪类爬虫。若只想约束谷歌搜索蜘蛛,写User-agent: Googlebot;若想对所有搜索引擎一视同仁,则用通配符User-agent: *。通过拆分成多个规则组,可以实现差异化管控,比如对谷歌开放权限,同时给必应设定更严格的抓取限制。
Disallow用来声明禁止访问的路径,Allow用来声明允许访问的路径,二者经常搭配出现。容易被忽略的是:当Disallow后什么都不写时,代表清空所有限制,爬虫可自由抓取全站。当一条URL同时命中多条规则时,搜索引擎普遍遵循"最长匹配优先"原则——路径越具体,优先级越高。例如同时存在Disallow: /api/和Allow: /api/public/两条规则,因为后者匹配路径更长更细,public子目录下的内容会被正常放行。
Sitemap指令用于指定站点地图的完整URL,帮助爬虫快速了解全站结构,一般放在文件末尾。Crawl-delay指令用于设定两次抓取之间的间隔秒数,但要特别留意:谷歌蜘蛛不支持该指令,抓取频率由搜索引擎算法自行决定,所以此项需谨慎使用,避免拖慢其他爬虫的效率。
robots.txt支持两种通配符:星号(*)表示匹配任意字符序列,美元符号($)表示匹配行尾。合理搭配能提高规则表达效率,但过度使用反而容易出错。例如Disallow: /user/*/edit$可以精确屏蔽所有用户编辑页,而Disallow: *.pdf$则能统一拦住PDF文件。建议尽量使用简单明确的路径,必要时用浏览器或在线工具验证匹配结果,避免规则互相覆盖造成权限混乱。
常见的坑包括:把Disallow误写成Disallow: /;在文件里出现中文冒号或多余空格;规则组之间缺少空行导致解析错乱;把Sitemap放在用户代理组内部等。要排查问题,可以在搜索引擎站点管理后台的抓取工具里模拟测试,也可以直接访问/robots.txt检查内容是否正常输出。修改后建议先用测试工具验证,再等待爬虫重新抓取,别反复改动导致抓取频率不稳。
不见得。主流搜索引擎的蜘蛛会遵循它,但前提是语法正确、路径清晰。如果文件中有严重格式错误,爬虫可能按默认规则执行,甚至放弃抓取整个站点。所以务必定期检查文件能否正常访问,并确保没有语法漏洞。
并不可靠。该指令只阻碍抓取,不能阻止页面因外部链接等因素被收录。若想彻底移除已有索引页面,应使用meta robots标签中的noindex指令,或在站点地图中移除该URL,双管齐下更有效。
每个爬虫只匹配与自己名字相对应的那一组规则;如果没有精确匹配,则应用User-agent: *的通配组。不会出现多个组同时作用于同一爬虫的情况,所以优先保证通配组没有错误,再按需细化具体蜘蛛的规则。
robots.txt的核心价值在于引导爬虫合理分配抓取资源,而不是作为安全屏障。配置时务必备份原文件,每次改动前先理清路径关系,改完用官方工具验证,并及时检查日志确认爬虫行为是否如预期。建议至少每季度审查一次,确保站点结构调整后规则依然准确有效。