如何防止 RSS 输出被采集站批量利用?
RSS无法彻底防止采集,有效策略是降低采集价值、提高抓取成本并留存证据:只输出摘要、延迟发布、强制原文链接和署名,配合Nginx限流、UA过滤、CDN规则及robots.txt和版权声明维权。
结论:RSS 在技术上无法被彻底防住——它是无登录、无验证码的机器可读 XML,只要 feed 存在,采集站就能拉走。真正有效的思路是「降价值 + 提成本 + 留证据」三层叠加,把对方的采集收益压到接近零。
RSS 为什么天生就是采集站的最爱?
结论:因为 RSS 的设计目标就是「让机器自动获取最新内容」,这与采集站的需求完全重合。
一个标准 RSS 文件里包含标题、发布时间、正文(全文或摘要)、原文链接,全是结构化字段。采集站不需要解析 HTML 的复杂结构,不需要处理登录态和验证码,只要每 30 分钟拉一次 feed,就能拿到全站新文章。更麻烦的是:你无法区分「正常阅读器请求」和「采集器请求」,两者发出的 HTTP 请求几乎一模一样。
所以防护目标不是「拦住」,而是「让采走的内容没有 SEO 价值、没有阅读价值」。
最快见效的三招是什么?
结论:只输出摘要、给 feed 加延迟、强制带上原文链接和作者署名,这三招在 10 分钟内就能配置完成。
第一,只输出摘要。以 WordPress 为例:后台「设置 → 阅读 → 对于 feed 中的每篇文章,显示」选择「摘要」。摘要在 200-500 字之间即可,通常取正文前 2-3 段。采集站拿到的是残文,用户读了不完整内容仍需回到原文。
第二,加输出延迟。让 feed 只输出 24-48 小时前的文章,最新内容不在 feed 里。采集站无法抢在你之前或同步发布,搜索引擎会判定你的页面是首次发布来源。
第三,强制溯源。在 feed 的 description 字段末尾固定插入一行原文链接和作者名,例如「本文首发于 example.com,作者 XXX」。采集站往往只做正文抓取,这行文字会跟着被复制走,等于每篇被抄的文章都自带来源声明。
服务器层面如何限制批量抓取?
结论:用 Nginx 限流 + User-Agent 过滤 + CDN 频率规则,可以把单 IP 高频拉取的成本抬到不划算。
Nginx 里针对 feed 路径单独限流,示例参数:
location = /feed {
limit_req zone=feedlimit burst=3 nodelay;
limit_req_status 429;
}
limit_req_zone $binary_remote_addr zone=feedlimit:10m rate=6r/m;
含义是同一 IP 每分钟最多 6 次请求,超出返回 429。正常阅读器(如 Feedly、Inoreader)的抓取间隔通常在 1-6 小时,不会触发;采集脚本按分钟轮询必然被限。
同时过滤 UA:把已知的采集站爬虫 UA 直接返回 403,并在 Cloudflare 里加一条规则——同一 IP 在 60 秒内请求 /feed 超过 20 次即封禁 1 小时。
robots.txt 和协议声明有用吗?
结论:对遵守规则的搜索引擎有用,对采集站基本无用,但它是你后续维权的书面证据。
在 robots.txt 中写明:
User-agent: *
Disallow: /feed
Crawl-delay: 10
需要知道:Google 不支持 Crawl-delay,只支持 Disallow;Yandex、Bing 部分支持。所以 robots.txt 主要价值在于「事前声明意图」,当你发 DMCA 或律师函时,对方无法辩解「不知道你不允许采集」。
配套做法:在每篇文章页脚写明版权声明和转载要求;对全文输出做一次带站点名的隐形水印(在正文中插入零宽字符或特定标点组合),被抄后可快速举证。
什么时候应该直接关掉全文输出?
结论:如果你的核心商业模式依赖内容流量,且已被 3 家以上采集站持续搬运,直接关闭 RSS 全文输出或只保留标题输出是合理选择。
判断标准很具体:在搜索引擎搜你某篇文章的标题,如果前 3 条结果里有 2 条是他人域名,说明采集已经造成实际损失。此时可以:把 feed 改为只输出标题 + 链接;或给 feed 加访问令牌(如 /feed?key=xxx),仅向邮件订阅用户提供。
代价是 RSS 阅读器用户会流失,通常占独立访客的 1%-5%。这是一个流量与版权之间的取舍,没有统一答案。
总结:RSS 防采集没有单点解,靠的是摘要输出控制内容价值、限流和 UA 过滤抬高抓取成本、署名与 robots 声明留下证据,三者叠加后,采集站搬运你的内容既拿不到完整信息,又要承担被封和举证的风险。
转载请注明出处,版权归原作者所有。