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指令用于声明站点地图的完整访问地址,帮助爬虫更高效地掌握全站页面结构,通常置于文件末尾。Crawl-delay指令用于指定爬虫两次抓取之间的间隔时长,单位为秒。但这一点要特别留意:谷歌的蜘蛛不识别Crawl-delay,其抓取频率完全由自身算法决定,该指令需谨慎使用,否则可能拖慢其他搜索引擎的抓取进度。
robots.txt支持两种通配符:星号(*)表示匹配任意数量的任意字符,美元符号($)表示匹配路径结尾。例如Disallow: /*.pdf$这条规则,可以阻止爬虫抓取所有以.pdf结尾的文件,从而节省抓取预算。
路径匹配时,规则是以目录为界限进行前缀匹配的。Disallow: /private表示既禁止/private目录,也禁止以/private开头的任何路径,比如/private-setting。而Disallow: /private/则仅限制/private/目录下的内容,不会影响/private-setting这类路径。书写时务必明确是否需要结尾的斜杠,这是极易踩坑的细节。
另一个常见误区是误用通配符表达模糊路径。比如有人会写Disallow: /*?page=,希望能屏蔽所有带乱码参数的页面,但不少爬虫对查询参数的匹配支持并不完整,这种写法未必达到预期效果。相较之下,将带参数的URL写入Sitemap之外,或通过规范链接统一页面地址,往往是更可控的做法。
此外,空行是分隔规则组的重要标识。每个规则组之间建议保留一个空行,组内不要再出现空行,否则可能导致解析器误判规则归属。文件编码务必使用UTF-8(不带BOM),避免中文字符或特殊符号因编码问题而产生解析错误。
首次配置robots.txt,可以按照以下流程循序渐进,减少疏漏:
配置过程中,有几个问题需要反复检查。一是不要把禁止登录页的规则写反,例如Disallow: /login会同时拦截爬虫访问登录页内容和相关资源,而此类页面通常并不需要被抓取,建议将静态资源目录如CSS、JS单独放行。二是版本更新后忘记清理旧规则,导致历史路径与新站点结构冲突,建议每次调整都先在测试站点上验证。三是不加区分地使用Disallow: /,将整站封禁,这对依赖搜索引擎流量的站点而言几乎是灾难性的操作。
搜索引擎的蜘蛛通常会定期重新抓取robots.txt文件,频率约在数小时到一天之间,具体时间取决于抓取频次。修改后一般不会立即生效,可以主动通过搜索引擎的站长工具提交该文件,请求重新抓取,以缩短等待时间。
原则上按“最长匹配优先”进行判断,即更长的路径描述拥有更高优先级,而不直接取决于Allow还是Disallow这个关键词。路径长度一致时,多数搜索引擎会以Disallow为准,但为了避免歧义,建议在书写时避免产生重叠规则,保持逻辑清晰。
对于遵守协议的搜索引擎蜘蛛,可以通过Crawl-delay或站长工具中的抓取速率设置来限制频率。但恶意爬虫和采集工具根本不读这个文件,单纯依赖robots.txt无法解决服务器负载问题。对此需要考虑通过UA过滤、IP限速、防火墙拦截等手段从服务器层面实施更严格的访问控制。
配置robots.txt并不复杂,但要写出准确且高效的规则,还是需要对语法细节保持足够的敏感。建议在每次修改后都从搜索引擎站长平台获取检测反馈,观察抓取统计是否有异常波动。同时要明确它的角色边界:它是一份抓取指引,不是安全防护手段,敏感区域的保护必须配合技术层面的访问控制措施。把规则写得清晰、合理,让爬虫把力气花在你真正重要的内容上,收录质量和站点稳定性自然会有明显改观。