robots.txt是一个存放于站点根目录的纯文本文件,用来向搜索引擎爬虫声明哪些路径允许抓取、哪些需要回避。文件看似简单,但配置不当的代价并不小:轻则新页面迟迟不被收录,重则后台或测试环境被爬虫索引。掌握其语法规则与常见陷阱,是每个站点运营者的基本功。
robots.txt的基本单位是规则块,每个块以User-agent开头,指明该组规则针对哪个爬虫,随后用Disallow或Allow对路径加以限制。一个典型示例:
User-agent: *
Disallow: /admin/
这段配置的意思是:所有爬虫不得抓取/admin/目录下的内容。这里有两个高频误解需要澄清:其一,Disallow后填写的是相对路径,写成"Disallow: https://域名/admin/"这类完整URL格式不会生效;其二,路径匹配对大小写敏感,/Admin/与/admin/会被视为完全不同的地址,书写时需按实际目录精确填写。
不同阶段和需求下,robots.txt的写法有所差异。以下三个场景基本覆盖了绝大多数站点会遇到的配置情况。
当站点处于开发或重构阶段,需要暂停所有爬虫访问时,通常这样写:
User-agent: *
Disallow: /
这里的斜杠代表根目录,表示全站禁止抓取。但如果写成Disallow:(冒号后留空),含义则完全相反,相当于声明所有路径均可抓取。两种写法只差一个斜杠,效果却截然不同。不少站点上线后收录异常,排查后才发现是这一行写反了。修改文件后,建议用抓取测试工具核对这两行的实际差异。
假设你希望爬虫不进入/private/目录,但其中/private/demo/下的页面需要被索引。仅凭一条Disallow无法满足需求,需要显式增加Allow规则:
User-agent: *
Disallow: /private/
Allow: /private/demo/
搜索引擎对路径匹配遵循"最长匹配优先"原则,即越具体的规则优先级越高。如果遗漏最后的Allow行,demo子目录会被连同父目录一起拦截。判断是否需要补充Allow的标准很直接:凡是需要穿透禁止范围的"特例"路径,都必须单独添加一条放行指令。
Googlebot、Bingbot与百度蜘蛛对基础指令的解读基本一致,但部分小众爬虫并不支持Allow指令。推荐的做法是先以User-agent: *设定一套通用的兜底规则,再按需为特定爬虫追加专属配置块。需要提醒的是,不要在同一个文件里对同一爬虫重复声明规则块,后者会覆盖前者的配置,容易引发预期之外的抓取行为。
robots.txt支持有限的通配符表达,例如星号(*)代表任意字符序列,美元符号($)表示路径结尾。比如Disallow: /*.pdf$可以禁止爬虫抓取所有PDF文件。但需谨慎使用通配符,过于宽泛的匹配可能误伤正常页面。另外,空路径与根目录的含义极易混淆,Disallow: /表示全站禁止,而Disallow: (空)表示允许全部,这两者必须严格区分,建议每次修改后核对一遍行尾是否存在多余空格。
文件写好后并非万事大吉,验证是必不可少的环节。第一步,在浏览器地址栏直接访问域名/robots.txt,确认内容正常展示且没有语法错误。第二步,使用搜索引擎站长平台自带的抓取测试工具,输入关键URL,查看抓取结果是否为"允许"或"禁止"状态,同时观察报错信息。第三步,观察服务器日志中的爬虫访问记录,确认重要目录是否真的不再出现爬虫请求。若发现工具显示结果与预期不符,优先检查路径大小写、斜杠有无以及通配符的使用是否超出预期范围。
不会。robots.txt的作用是声明抓取规则,属于指导性文件而非强制屏障,搜索引擎不会因文件配置不当而主动惩罚站点。但配置错误会造成抓取资源的浪费或有效页面的漏抓,长期不修正仍会间接影响收录效果。若确有敏感内容需要保护,应同时配合其他访问控制手段。
取决于路径的匹配长度。搜索引擎按"最长匹配"原则比较Allow与Disallow指令,哪个规则的路径匹配得更具体、更长,哪个就优先生效。例如Disallow: /private/与Allow: /private/demo/,后者路径更长,因此demo子目录被放行。理解这一原则,就能准确预判同块内的规则结果。
推荐写入。在robots.txt末尾单独一行写Sitemap: https://你的域名/sitemap.xml,可以帮助爬虫更快发现站点地图文件,对收录效率有一定提升。此声明不属于任何User-agent块,独立于规则之外,位置不影响其作用,放在文件末尾即可。
robots.txt的配置本质是"明确告知爬虫哪些能抓、哪些不能抓"。建议每次修改后仅变更一处规则,并借助抓取测试工具逐一验证效果;同时做一份关键规则清单,记录每条Disallow和Allow的意图与变更日期。将配置流程规范化,才能避免因一行斜杠的疏忽而让整站收录陷入被动。