robots.txt 里的 Disallow、星号和美元符号分别是什么约定
robots.txt 里 Disallow、通配星号和行尾美元符号分别代表什么含义?这套规则由标准化文档 RFC 9309 定义:基础指令是 Allow 与 Disallow 两类字段,分别表示允许和禁止抓取某类路径;星号是通配符,匹配任意一段字符;美元符号写在行尾,表示地址匹配到该位置精确结束。理解这三个约定,能覆盖日常绝大部分抓取规则的读写需求。
两个基础指令的作用范围
Allow 与 Disallow 都以「用户组 + 路径前缀」为对象:文件按用户组(最常见的通配全体抓取器)分段,段内逐条声明哪些路径允许、哪些禁止。默认情况下没有声明的路径不受限制;Disallow 指向某个目录,即以该前缀开头的一整片地址都被排除。
两条容易混淆的边界:空值的 Disallow 表示「什么都不禁止」,即整个用户组可抓取全站的约定写法;而同一路径同时被 Allow 和 Disallow 覆盖时,按更精确(更长前缀)的一条生效,这是标准里明确的匹配思路,与「写在前面的优先」无关。
通配与行尾符号的标准化
星号解决「中间不定长」的匹配:比如想排除所有带排序参数的列表页,可以在路径中用星号代替参数段。美元符号解决「到此为止」的精确匹配:行尾加美元符号后,规则只命中在该位置结束的地址,带任何后缀的更长地址都不受影响。两者组合,能表达「排除无结尾的裸目录、保留其下带后缀页面」这类精细意图。
| 写法片段 | 含义 | 典型用途 |
|---|---|---|
| Disallow 路径 | 禁止该前缀下全部地址 | 排除后台、内部工具目录 |
| Allow 路径 | 显式允许某前缀 | 在被禁目录下放行个别公开页 |
| 星号 | 匹配任意字符序列 | 覆盖带参数的地址段 |
| 行尾美元符号 | 地址在此精确结束 | 只匹配无查询参数的裸地址 |
注意美元符号只影响结尾判断,不是正则引擎——想靠它写复杂正则逻辑会失望,标准的匹配语法就只有这两类通配加前缀。
为什么它只约束抓取、不约束收录
robots 文件管的是「来不来取」,不管「取到后收不收录」。已被禁止抓取的页面依然可能因为外链出现在索引里(引擎只收录地址而不取正文),这是最常见的误解。想把页面彻底挡出搜索结果,要靠页面级的控制或访问权限,而不是往 robots 里写一行。同样地,robots 是君子协定,对无视协议的批量采集器没有强制力——防内容被整页拿走,要另配防采集手段。
还有一条安全红线:不要把敏感后台地址「藏」在 Disallow 里。公开文件等于向所有人公告了这个路径的存在,暴露入口反而更容易被定向试探。后台的防护应该落在鉴权与访问控制层。
站内的 robots 配置入口与复查时机
AnQiCMS 支持 robots 配置,后台修改后生成到站点根目录。需要主动复查 robots 规则的两个时机:一是改动伪静态规则之后——地址的表现形式变了,原来按路径前缀写的排除规则可能不再命中,或误伤了新格式的公开页;二是栏目结构调整之后——被排除的旧前缀可能已经换成新前缀,规则与实际路由脱节。复查方法很直接:拿规则清单对当前站点地图里的代表性地址逐条比对,确认每条 Disallow 仍然只挡想挡的那片地址。
常见问题
改了 robots 多久生效? 取决于各引擎下次抓取该文件的时间,没有即时推送;急切的收录动作配合链接推送,比干等文件重抓有效。
多个用户组段可以分别写不同规则吗? 可以,按引擎用户组分别限定,但要对主流抓取器都验证一遍匹配结果,避免只测了通配段。
Sitemap 声明应该写在哪里? 可以写在 robots 文件中指向站点地图地址,这是给它「指路」,与允许或禁止抓取互不冲突。