robots 只写了禁止抓取,为什么拦不住内容被拿走
站点只写了禁止抓取、拦不住内容被拿走的原因在这份文件的性质:robots 是一份请求,不是闸门,效力取决于对方愿不愿意配合。自愿遵守规则的抓取方会读它、按它调整范围,采集脚本从来不读,它们只看响应里有没有正文。所以要把”限制抓取”和”保护内容”当成两件事:前者靠配置,后者靠访问控制、限流与内容层的干扰设计。
指令与强制的差别
robots 配置告诉抓取方哪些路径不希望被访问,搜索引擎按它调整抓取范围,这是协作式的约定。约定的效力取决于对方是否愿意配合:正规的爬虫会读、会遵守,采集脚本不会。它甚至不会”违反”什么,因为它本来就没有接受这份约定的意图。所以只在 robots 里写禁止抓取,等于把防线交给了对方的自觉。真正具有强制力的是响应层:需要登录才能看的内容、按用户组放开的读取范围、服务端返回的数据裁剪。这些在请求到达时才起作用,也不依赖对方的道德判断。
谁真的会读这份文件
按动机分三类。搜索引擎读,用来控制抓取范围与收录节奏,它们在意长期可见度,因此会遵守;研究类与商业类 AI 抓取方多数也读,但读取不等于不使用已经拿到的公开文本;采集脚本不读,它们按列表批量拉取,看见的是响应正文。判断自己站点的暴露程度,别看 robots 写了什么,看访问日志:同一时段集中出现的单一来源地址、成倍拉取分页参数的请求形态、以及只取正文不取静态资源的 UA 分布,这三类特征基本能还原出谁在批量拿内容。
被拿走的是价值,不是入口
采集方真正需要的是文本、结构和可复用信息,而这些在页面可访问的那一刻就已经交出去了。所以限制入口只降低效率,降低被搬走内容的可复用性才影响收益。防采集干扰码的思路正在这里:在渲染内容里加入对读者无害、对批量采集有害的干扰,让整段搬运得到的是脏数据。它和敏感词过滤不是一回事,也不冒充访问控制,作用面在内容层而不是权限层。
防线怎么分层
先把范围理清:需要账号才能读的部分,robots 里根本不该出现;公开给读者的正文,靠干扰码与来源说明保护;对未登录的大流量拉取,靠服务端限流与异常识别,表单入口再挂 reCAPTCHA 挡住自动化提交;权限层用 JWT 校验会话,别靠前端隐藏字段冒充访问控制。已经发生搬运时,靠证据留存与投诉流程。内容采集功能也提醒另一面:同一套抓取技术,别人可以拿来拿你的内容,你也可以拿来整理外部资料,用途的差别取决于源授权与发布策略,后台的采集能力更需要配套审核。
站内能做的基础项还包括:把已删除的正式文档留在回收站而不是直接物理删除,出问题时能比对是谁在什么时候改了什么;数据备份要覆盖静态文件,避免恢复后页面缺图、正文缺段被采集方当成”原版”。
限制抓取该配在哪一层
robots 的正确用法是省配额而不是防采集:把无内容的组合地址、内部检索结果、测试环境路径挡在抓取范围外,让有效页面被更完整地读取。写完还要验证:抓取日志里这些路径的请求量是否真的下降;搜索引擎报表里重要页面有没有被误伤。把这一层做好,再谈权限、限流与干扰码,顺序不能倒过来。
常见问题
问:robots 写了 Disallow,内容还是被搬走了,是不是配置写错了? 不是。这一行只影响自愿遵守的抓取方。搬运用的是直接请求,需要靠访问控制、限流与内容层保护来处理。
问:能不能靠禁止 JavaScript 执行来防抓正文? 不能,正文在 HTML 响应里就已经交付。相反的做法是把需要保护的部分放到登录后请求,未授权时不返回。
问:干扰码会不会影响正常读者? 设计上对读者不可见或近似噪声,重点在批量搬运时污染数据,因此不要同时把它当成权限控制使用。
问:日志里怎么区分搜索引擎和采集脚本? 看来源 IP 段的归属、请求节奏与资源组合。真实抓取方通常伴随静态资源请求,采集脚本往往只取正文。
问:加了水印管理还有用吗? 图片水印解决的是素材归属,文本搬运要靠内容层干扰与权限设计,两者不能互相替代。