robots txt怎么写,参数组合无限增长时怎样定义有效地址集合

📍 WDQWDWQD987AAAAA:216.73.217.114
📱 Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
🔗 /fb408a09051e.html
📄

robots txt怎么写,参数组合无限增长时怎样定义有效地址集合

当筛选参数、排序参数、追踪参数可以自由组合时,URL 空间在理论上是无限的。robots.txt 的 Disallow 只能按路径前缀或通配符做粗粒度匹配,无法枚举所有组合,因此正确的做法不是“把所有参数组合写进规则”,而是先定义哪些地址值得保留为有效地址,再把其余部分交给规范化、抓取预算控制和退出策略共同处理。robots.txt 适合拦截已知的、稳定的、无价值的路径族,不适合作为参数组合的唯一治理工具。

先定义有效地址集合,而不是先写规则

有效地址集合的判定标准通常有三类:有独立搜索需求、有稳定外链或转化路径、被内部链接体系实际使用。满足其中一类,就倾向于保留;三类都不满足,就倾向于退出索引。

关键判断依据是“参数取值是否有限”。有限则可以在规则里用少量通配符覆盖,无限则必须承认 robots.txt 无法穷举,只能按前缀或目录切分。

robots.txt 能做什么、不能做什么

Disallow 的作用是阻止抓取,不是移除索引。一个已经被抓取并建立索引的参数 URL,即使之后被 robots.txt 拦截,仍可能出现在结果中,因为爬虫无法读取页面上的 noindex 来确认移除。要真正退出索引,通常需要先允许抓取、返回 noindex 或 404/410,等状态被处理后再考虑是否加回拦截。这个顺序如果颠倒,退出动作会失效。

通配符和结尾匹配的支持程度在不同搜索引擎之间存在差异,规则上线前应分别核查目标搜索引擎的官方文档说明,不要假设所有爬虫对 * 和 $ 的解释完全一致。

另外,robots.txt 位于站点根目录,只对同一主机、同一协议下的路径生效。子域、CDN 域名或历史遗留域名需要各自的规则文件,这在小规模站点上容易被忽略。

无限参数组合下的取舍写法

假设一个电商筛选页,参数为 color、size、sort、page,每个参数有若干取值且可任意叠加,组合数量随品类增长而膨胀。可以这样划分:

  1. 分页参数 page 保留抓取,因为它指向不同内容集合,且数量有上限。
  2. 排序参数 sort 改写处理,通过 canonical 指向默认排序地址。
  3. 颜色和尺寸叠加组合若没有独立搜索需求,按筛选目录前缀整体拦截,例如 Disallow: /filter/。
  4. 追踪参数不写进 robots.txt,而是在入口生成链接时清理,或由服务端忽略。

这里有一个可执行的判断动作:从服务器日志或抓取统计中抽取最近一段时间内被访问的参数 URL,按参数名分组,看每个参数名下的唯一 URL 数量是收敛还是持续增长。收敛的参数适合保留或改写,持续增长的参数适合按前缀退出。这个动作的结果直接决定下一步是补充 canonical 规则,还是追加一条 Disallow 前缀。

需要提醒的是,抓取量下降本身不能证明拦截正确,因为流量波动、日志采样方式变化、爬虫策略调整都可能造成同样的现象。要结合索引状态和有效地址集合的覆盖情况一起判断。

退出之后还要检查什么

按前缀拦截后,应确认三件事:被拦截的路径下没有仍然需要被抓取的有效地址;已经索引的旧地址有对应的移除路径,而不是仅靠拦截;站内链接不再大量指向被拦截地址,否则会浪费抓取预算并产生死链体验。

如果发现某个被拦截前缀下其实存在少量高价值地址,更稳妥的做法是把这些地址迁移到不受规则影响的路径,再维持整体拦截,而不是为个别地址在 robots.txt 里写例外。规则越简单,后续维护和排查成本越低。

站点地图可以列出希望被抓取的地址,但不保证收录,因此它适合配合有效地址集合使用,不能替代对无效参数组合的退出决策。

图1 图2

nginx