本文约 4,854 字,预计阅读 13 分钟。文中命令与配置均经过实测,可直接参考执行。
引言:RSS 还在,而且它比你想象的重要
“RSS 已经死了”这句话在国内说了十几年,但做独立博客的人会发现:RSS 依然是最稳定的内容分发渠道之一。它不需要算法推荐,不需要平台审核,读者用 Inoreader、Feedly、RSSHub 或者自建的阅读器就能持续收到更新。更重要的是,很多内容聚合平台、AI 工具、邮件订阅服务,底层抓取的都是你的 feed。
问题在于 WordPress 默认的 feed 输出相当简陋:只有标题、摘要或正文、日期,没有特色图,没有分类标签,末尾没有版权链接。直接把这样的 feed 给第三方抓取,等于主动放弃引流。另一边,邮件订阅是国内读者更习惯的方式,但接入 SMTP、处理退订、应对反垃圾规则又有一堆坑。两者其实可以共用一套内容输出逻辑,一起解决。
原理分析:feed 是怎么生成的,能改什么
WordPress 在 wp-includes/feed-rss2.php 等模板里组织 feed 输出,add_feed() 可以注册新的 feed 类型。默认提供 rss2、atom、rdf、comments-rss2 几种,通过 https://站点/feed/ 访问。输出内容由几个关键的钩子和过滤器控制:
the_title_rss:过滤标题the_excerpt_rss/the_content_feed:控制摘要或全文rss2_item:在每个<item>末尾追加自定义标签wp_feed_cache_transient_lifetime:控制外部 feed 的缓存时间
关于”全文还是摘要”,在”设置 → 阅读”里可以全局选择。但从引流角度看,建议输出摘要 + 特色图 + 原文链接,既能保证 feed 可读,又能带来点击。无条件输出全文的后果是:聚合站直接搬走全文,读者不再回访。
| 方案 | 抓取方式 | 适合场景 |
|---|---|---|
| 原生 RSS | feed 主动拉取 | 阅读器、AI 工具、聚合站 |
| 邮件订阅 | 发布时推送 | 国内读者、深度订阅者 |
| 微信公众号 | 手动同步 | 需要社交传播 |
| 站内自建 feed 页 | 定期拉取 | 内容二次加工 |
保姆级实操
步骤 1:确认 feed 可访问且格式正确。 先验证基础输出,再谈定制。
# 检查默认 feed 状态码
curl -s -o /dev/null -w '%{http_code} %{content_type}\n' https://mimangfei.com/feed/
# 查看 feed 前 30 行,确认根节点与 channel 信息
curl -s https://mimangfei.com/feed/ | head -n 30
若返回 404,多半是固定链接未刷新或 SEO 插件关闭了 feed;若返回 HTML 而非 XML,检查是否有插件输出了额外内容(常见是 BOM 或调试输出导致 XML 解析失败,页面提示 “XML parsing failed”)。
步骤 2:在 RSS item 中加入特色图与版权信息。 使用 rss2_item 钩子追加自定义命名空间字段。
add_action( 'rss2_item', 'mimangfei_rss_extra_fields' );
function mimangfei_rss_extra_fields() {
if ( has_post_thumbnail() ) {
$thumb_id = get_post_thumbnail_id();
$url = wp_get_attachment_image_url( $thumb_id, 'medium_large' );
$meta = wp_get_attachment_metadata( $thumb_id );
printf(
'<media:content url="%1$s" type="image/jpeg" width="%2$d" height="%3$d" medium="image" />',
esc_url( $url ),
(int) $meta['width'],
(int) $meta['height']
);
}
echo '<dc:creator><![CDATA[' . esc_html( get_the_author() ) . ']]></dc:creator>';
}
add_action( 'rss2_ns', function () {
echo 'xmlns:media="http://search.yahoo.com/mrss/"';
} );
步骤 3:控制摘要长度与结尾链接。 摘要输出时自动追加”阅读原文”链接,避免聚合站只搬摘要却不署名。
add_filter( 'the_excerpt_rss', 'mimangfei_rss_excerpt_footer' );
function mimangfei_rss_excerpt_footer( $excerpt ) {
$excerpt = wp_trim_words( $excerpt, 80, '…' );
$excerpt .= '<p><a href="' . esc_url( get_permalink() ) . '">阅读原文</a>';
$excerpt .= ' · 版权归 ' . esc_html( get_bloginfo( 'name' ) ) . ' 所有</p>';
return $excerpt;
}
步骤 4:注册一个”仅摘要不含评论”的自定义 feed。 给需要干净内容的第三方用。
add_action( 'init', function () {
add_feed( 'clean', 'mimangfei_render_clean_feed' );
} );
function mimangfei_render_clean_feed() {
header( 'Content-Type: application/rss+xml; charset=UTF-8' );
echo '<?xml version="1.0" encoding="UTF-8"?>';
echo '<rss version="2.0"><channel>';
echo '<title>' . esc_html( get_bloginfo( 'name' ) ) . '</title>';
echo '<link>' . esc_url( home_url() ) . '</link>';
$q = new WP_Query( array( 'posts_per_page' => 20, 'post_type' => 'post' ) );
while ( $q->have_posts() ) {
$q->the_post();
echo '<item><title>' . esc_html( get_the_title() ) . '</title>';
echo '<link>' . esc_url( get_permalink() ) . '</link>';
echo '<pubDate>' . esc_html( get_the_date( DATE_RSS ) ) . '</pubDate>';
echo '<description><![CDATA[' . wp_trim_words( get_the_excerpt(), 60 ) . ']]></description></item>';
}
wp_reset_postdata();
echo '</channel></rss>';
}
步骤 5:接入邮件订阅。 国内场景推荐两种路径:一是用 Mailchimp for WordPress(MC4WP)或 MailerLite 的表单收集邮箱,由第三方负责发送与退订;二是用 MailPoet 或 Newsletter 插件在站内自建发送队列,数据留在自己手里,但需要配好 SMTP 并做好退信处理。
<!-- MC4WP 表单简写,字段需在插件后台配置 -->
<div class="subscribe-box">
<p>每周一封,只发 WordPress 实战笔记,随时退订。</p>
[mc4wp_form id="123"]
</div>
步骤 6:合规要点。 收集邮箱必须明示用途并提供退订入口。国内适用《个人信息保护法》,面向欧盟读者还需符合 GDPR 的事前同意要求。每封邮件底部保留一行退订链接是底线。
常见踩坑
- feed 页面提示 “XML parsing failed: syntax error”,通常是主题或插件在
<?php前输出了空行/UTF-8 BOM。 - 改了摘要钩子不生效,因为”设置 → 阅读”里选的是”全文”,
the_excerpt_rss根本没被调用。 - 特色图未生效,因为主题未
add_theme_support( 'post-thumbnails' )。 - 邮件进了垃圾箱,缺少 SPF、DKIM、DMARC 记录,可用
dig -t txt mimangfei.com检查 SPF。 - 自建邮件队列发送过快被服务商限流,应分批发送并控制频率。
- 案例:某博客接了邮件订阅但没做二次确认(double opt-in),被人批量灌入邮箱地址,导致发送域名被列入黑名单,正常订阅者也收不到邮件。补救措施包括清理无效地址、改为双重确认、重新申请移除黑名单,前后折腾了近两个月。
- feed 被整站缓存插件缓存,新文章发布后 RSS 不更新。
- 只提供
feed地址却没在页面暴露,读者根本找不到入口。
总结
feed 与邮件订阅的验收标准:用三个不同的阅读器订阅自己的 feed,确认标题、链接、特色图、日期都正常;再用两个不同服务商的邮箱订阅一次邮件,确认能收到且能正常退订。行动清单:① feed 输出摘要 + 原文链接;② 追加特色图与作者字段;③ 保留自定义 feed 给第三方;④ 邮件订阅用双重确认;⑤ 配好 SPF/DKIM/DMARC;⑥ 每封邮件带退订入口。订阅体系搭好之后,配合 独立博客内容更新节奏、博客归档页与标签体系设计 与 WordPress 邮件发送配置 一起维护。
