robots.txt 本质上是网站与搜索引擎爬虫之间的一份“访问协议”,它明确了哪些内容允许被收录,哪些区域需要拒之门外。配置得当,可以节省抓取配额并保护敏感数据;配置失误,则可能导致整站收录异常或屏蔽规则完全失效。接下来就从文件放置开始,逐层拆解核心语法与那些最容易踩中的坑。
搜索引擎只会到一个固定地址寻找该文件:域名根目录下的 robots.txt。文件必须使用全小写字母命名,放置在站点根路径,例如 https://yourdomain.com/robots.txt。一旦文件名大小写出错或放错层级,爬虫便视为文件缺失,进而默认放行所有页面,屏蔽规则全部落空。
文件内容按“规则组”组织,每一组以 User-agent 行开头,后面跟随若干指令,组间用空行分隔以提高可读性。字段名称不区分大小写,但路径值通常区分大小写,书写时务必保持一致。
使用 # 符号添加注释,既可独占一行,也可附在规则之后,便于日后维护时理解每条指令的设计意图,注释内容不会影响抓取判定。
User-agent 指定规则面向的爬虫对象,Disallow 声明禁止抓取的路径,Allow 则用于在禁区内开放个别例外路径。三者配合,才能实现精细的抓取控制。
例如,屏蔽全站收录的写法:
User-agent: *
Disallow: /
仅禁止爬虫进入管理后台的写法:
User-agent: *
Disallow: /admin/
这里藏着一个极易翻车的细节:Disallow 末尾的斜杠决定了匹配范围。/admin/ 限定于 admin 目录及其子页面;若漏掉末尾斜杠写成 /admin,则凡是 admin 开头的路径都会被屏蔽,诸如 /administrator、/admin-center 等正常页面将一并遭殃。
当同一路径同时命中 Allow 与 Disallow,最终结果并不取决于书写先后。判定的总原则是:若两条规则路径长度相同,Allow 指令优先;若长度不同,则路径更长、更具体的那条规则胜出。
举例来说,若想屏蔽整个博客目录、但单独放行某个专题页面,应配置为:
User-agent: *
Disallow: /blog/
Allow: /blog/featured-post/
这样专题页可正常被抓取,其余博客内容依然受控。动手配置之前,建议先整理一份需要限制的路径清单,逐条推演是否会产生交叉匹配,避免出现非预期的放行或封禁。
在文件末尾追加一行 Sitemap: https://yourdomain.com/sitemap.xml,可主动告知爬虫站点地图的地址,有助于加速新内容的发现与索引。该声明与具体爬虫规则相互独立,不影响任何抓取限制。
实践中常见的问题还有:
改写时注意:robots.txt 是爬虫的参考而非强制命令,不同搜索引擎对规则的支持程度存在差异;涉及商业机密或用户数据的页面,务必配合后台的权限校验实现双重保障。
配置完成并上线后,建议周期性检查抓取统计中的被屏蔽页面数量,验证规则是否按预期运行,同时留意搜索引擎后台的 robots.txt 报告,及时捕获解析错误提示。
生效时间并无固定标准。搜索引擎会定期重新抓取该文件,通常在数小时到数天之间。若希望加速更新,可以在搜索引擎站长工具中提交抓取请求;同时应优先确认服务器缓存未影响文件的即时更新。
不能。它只是限制爬虫的抓取行为,但若其他网站通过外链指向该页面,搜索引擎仍有可能仅凭链接信息将网址编入索引,只是不会展示页面内容摘要。想要彻底阻止收录,需结合 noindex 标签使用。
是的。根域名的 robots.txt 并不适用于子域名,每个子域名都必须在自身根目录放置对应的独立文件。此外,不同协议版本(http 与 https)也应各自确认文件的可访问性。
写好 robots.txt 并不复杂,关键在于精准与克制。先明确需要保护与开放的路径清单,再按组配置规则,特别留意末尾斜杠和 Allow 的优先级逻辑。上线前用浏览器验证文件可访问,上线后结合站长工具持续监控抓取数据。建议将文件视为动态配置而非一成不变的静态产物,随站点结构调整定期复查更新。