WordPress防RSS采集的核心是切断自动入口,主要方法有四:1. 关闭全部Feed并返回404;2. 仅保留摘要并添加版权干扰;3. 屏蔽常见采集UA;4. 移除前端RSS链接暴露。

WordPress防止爬虫采集RSS内容,核心思路是切断采集工具最依赖的自动入口——RSS Feed。因为绝大多数简易采集程序(如FeedSky、火车头基础模式、各类聚合器)都靠抓取/feed或/feed/rss2等地址批量获取标题、摘要和链接,不涉及页面渲染,成本极低。防护重点不是“完全阻止”,而是让RSS失去可用性:要么不让访问,要么只给无效信息。
关闭或禁用全部RSS输出
这是最直接有效的方式。一旦RSS端点返回404或强制中断,90%以上轻量级采集工具会立即失效。
- 在主题的
functions.php中添加以下代码:
function disable_all_feeds() {
wp_die('RSS feed is disabled.', 'Error', array('response' => 404));
}
add_action('do_feed', 'disable_all_feeds', 1);
add_action('do_feed_rdf', 'disable_all_feeds', 1);
add_action('do_feed_rss', 'disable_all_feeds', 1);
add_action('do_feed_rss2', 'disable_all_feeds', 1);
add_action('do_feed_atom', 'disable_all_feeds', 1);
add_action('do_feed_rdc', 'disable_all_feeds', 1);保存后,访问yourdomain.com/feed将直接显示404错误页,且HTTP状态码为404,比单纯跳转更利于搜索引擎识别该Feed不可用。
仅保留摘要并添加干扰链接
若需兼顾真实订阅用户(如邮件列表、少数忠实读者),可退一步:保留RSS但大幅降低其采集价值。
- 进入WordPress后台 → 设置 → 阅读 → 将“对于每个文章,在Feed中显示”设为“摘要”
- 在
functions.php中追加如下代码,使每条摘要末尾插入不可点击、含版权提示的HTML片段:
function append_copyright_to_feed($content) {
if (is_feed()) {
$copyright = '<p style="display:none;">© ' . get_bloginfo('name') . ' | ' . home_url() . ' | Do not republish.</p>';
return $content . $copyright;
}
return $content;
}
add_filter('the_excerpt_rss', 'append_copyright_to_feed');
add_filter('the_content_feed', 'append_copyright_to_feed');这样采集到的内容会混入隐藏版权标记,发布后可能触发SEO惩罚或被人工识别为盗用。
屏蔽常见RSS采集User-Agent
部分采集工具(如老版本火车头、某些PHP脚本)会在请求RSS时使用固定UA,例如FeedFetcher-Google、UniversalFeedParser、FeedDemon等。可在服务器层(Nginx/Apache)或插件中拦截。
- Nginx示例(放入server块):
if ($http_user_agent ~* (FeedFetcher|UniversalFeedParser|FeedDemon|NetNewsWire|Liferea|TinyTinyRSS)) {
return 403;
}注意:此法对伪造UA无效,但能过滤掉大量默认配置的自动化工具。
移除RSS链接的前端暴露
很多主题会在<head>中自动输出类似<link rel="alternate" type="application/rss+xml" title="...">的标签,这等于主动告诉爬虫“我有RSS”。可彻底禁用:
- 在
functions.php中加入:
function remove_feed_links() {
remove_action('wp_head', 'feed_links_extra', 3); // 去除评论等feed
remove_action('wp_head', 'feed_links', 2); // 去除主feed
remove_action('wp_head', 'rsd_link'); // 去除RSD
remove_action('wp_head', 'wlwmanifest_link'); // 去除WLW
}
add_action('init', 'remove_feed_links');此举不会影响功能,但让RSS更难被发现,属于“降低攻击面”的务实做法。


















