Astro Firefly 主题 RSS 配置:全文还是摘要,这是个问题
前言
Firefly 是一款非常优秀的 Astro 主题,但在使用过程中我发现 RSS 订阅功能默认只能输出全文,对于一些内容较长的文章来说,RSS 阅读器会显得比较臃肿。如果能添加一个配置选项,让站长自主选择输出全文还是摘要,那就更完美了。
经过一番研究和实践,我找到了一个非常简单的实现方法,只需要修改 3 个文件,就能在配置文件中一键切换 RSS 的输出模式。今天就把这个方法分享给同样使用 Firefly 主题的朋友们。
记录实现的方法与步骤
实现的方法总共只需要改动 Firefly 主题的三个文件。提前说明一下我当前使用的 Firefly 主题版本 v6.5.8关于这个需求作者后续有可能也会主动跟进。下面的实现过程只针对当前的版本,请自行判断风险。总归一句,多备份准没错。
1. src/config/siteConfig.ts
在 analytics 后面加个 rss 配置:
// 统计分析analytics: { googleAnalyticsId: "", microsoftClarityId: "",},
// RSS 配置rss: { fullText: false, // true=全文,false=摘要},
// 字体配置font: fontConfig,fullText: false 就是只输出摘要。
2. src/types/config.ts
TypeScript 得知道有这个配置。文件末尾,analytics 后面:
analytics?: { googleAnalyticsId?: string; microsoftClarityId?: string; },
rss?: { fullText: boolean, },3. src/pages/rss.xml.ts
这是关键。原来的代码大概是这样的:
feedItems.push({ title: post.data.title, pubDate: post.data.published, description: post.data.description || "", link: url(`/posts/${post.id}/`), content: sanitizeHtml(cleanedContent, { allowedTags: sanitizeHtml.defaults.allowedTags.concat(["img"]), }),});问题就在那个 content,全文都塞进去了。改成条件判断:
feedItems.push({ title: post.data.title, pubDate: post.data.published, description: post.data.description || "", link: url(`/posts/${post.id}/`), ...(siteConfig.rss?.fullText && { content: sanitizeHtml(cleanedContent, { allowedTags: sanitizeHtml.defaults.allowedTags.concat(["img"]), }), }),});用的是展开运算符。fullText 为 true 时才加 content 字段。
修改后的实际效果
摘要模式下 RSS 长这样:
<item> <title>文章标题</title> <description>这是文章摘要...</description> <link>https://example.com/posts/article-slug/</link> <pubDate>Mon, 06 Feb 2025 00:00:00 GMT</pubDate></item>就一个 description,干净利落。
全文模式会多一个 content:
<item> <title>文章标题</title> <description>这是文章摘要...</description> <link>https://example.com/posts/article-slug/</link> <pubDate>Mon, 06 Feb 2025 00:00:00 GMT</pubDate> <content><![CDATA[<p>完整内容...</p>]]></content></item>完整文章全在里面。
全文还是摘要,我怎么选?
这得看文章类型。
摘要模式适合:
- 文章超过 800 字
- 代码块多、图片多
- 想引导回网站看完整版
- RSS 文件小一点,加载快点
全文模式适合:
- 短文,300-500 字
- 没啥图没啥代码
- 希望读者在阅读器里直接看完
- 技术文档类,内容即目的
我现在大部分用摘要,偶尔很短的通知类文章会切回全文。
但也留下了一点坑
提醒自己要记得写 description。没写的话 RSS 会空着,很尴尬的~
改完要重启 npm run dev,不然配置不生效。
SEO 不受影响。搜索引擎爬的是 HTML 页面,不读 RSS。
改完之后 RSS 文件从几十 KB 降到几 KB,Feedly 刷新也快多了。读者看个大概,感兴趣的点链接回来看完整内容,这样做也希望好朋友们偶尔能回来看看。
如果你也在用 Firefly,有一样的需求不妨也试试。代码不多,三分钟搞定。
最后提醒:改完 build 一下,去 dist/rss.xml 看看效果。
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!
喵斯基部落