Creating custom filtered RSS feeds in Ghost
A Ghost site looks like it has a single RSS feed (the one at `/rss/`), but it actually exposes many, and you can add your own filtered feeds on top. This note captures the process so I can explain it to others.
Canonical version: Creating custom filtered RSS feeds in Ghost.
A Ghost site looks like it has a single RSS feed (the one at /rss/), but it actually exposes many, and you can add your own filtered feeds on top. This note captures the process so I can explain it to others.
What Ghost gives you for free
Ghost auto-generates RSS feeds you never had to configure:
/rss/— every post (the front-page collection).{collection}/rss/— one feed per collection defined inroutes.yaml(e.g./blog/rss/,/newsletter/rss/)./tag/{slug}/rss/— one feed for every tag on the site./author/{slug}/rss/— one feed per author.
So "more feeds" is really a discoverability problem, not a missing feature. What's actually missing: feeds that combine or filter content in ways tags and collections can't. Think "three tags merged into one feed", "featured posts only", or "everything except the newsletter archive".
The clean way: channels
A channel is a route in routes.yaml with controller: channel. It does two things: a browsable archive page, and an RSS feed at {route}rss/ (RSS is on by default). It takes an NQL filter, so the filter lives in config, not in a template:
routes:
/feeds/pkm/:
controller: channel
filter: "tag:[personal-knowledge-management,note-taking,obsidian]"
template: feed-pkm
Useful filter shapes:
tag:[a,b,c]— posts having any of these tags (a merged topic feed).featured:true— a curated "best of" feed.primary_tag:-newsletter— everything except one category (-negates).
The feed above is then served at /feeds/pkm/rss/.
The way to avoid: custom RSS templates
The other option is to point a route at a hand-written rss.hbs template with content_type: text/xml, fetching posts via {{#get "posts" filter="..."}}. Skip it. The RSS XML is hardcoded, so it drifts out of sync with Ghost upgrades, and limit="all" is deprecated (use an explicit limit). Channels keep the filter in config and let Ghost own the feed format.
Caveats
- Feeds are paginated (
{route}rss/, then/2/, …); each page returns a capped number of items. - Channels are overlapping views. Unlike collections, a post can appear in many channels and its permalink is unchanged.
routes.yamlis uploaded separately in Ghost (Settings → Labs → Routes); it is not part of the theme package.- RSS feeds are for readers and RSS clients. No need to submit them to search engines; a normal sitemap already covers the posts.
References
- The Autodidacts — Create Custom Filtered RSS Feeds With Ghost CMS Routes & Channels: https://www.autodidacts.io/create-custom-filtered-rss-feeds-with-ghost-cms-routes-channels/
- Ghost docs — Dynamic routing (
routes.yaml, collections, channels): https://ghost.org/docs/themes/routing/ - Ghost docs —
gethelper filtering (NQL): https://ghost.org/docs/themes/helpers/get/#filtering
Related
About Sébastien
I'm Sébastien Dubois, and I'm on a mission to help knowledge workers escape information overload. After 20+ years in IT and seeing too many brilliant minds drowning in digital chaos, I've decided to help people build systems that actually work. Through the Knowii Community, my courses, products & services and my Website/Newsletter, I share practical and battle-tested systems.
I write about Knowledge Work, Personal Knowledge Management, Note-taking, Lifelong Learning, Personal Organization, Productivity, and more. I also craft lovely digital products and tools.
If you want to follow my work, then become a member and join our community.
Ready to get to the next level?
If you're tired of information overwhelm and ready to build a reliable knowledge system:
- 📚 KM for Beginners — 10+ hours of structured video lessons
- 🚀 Obsidian Starter Kit — Ready-made vault with 40+ templates
- 💼 Knowledge Worker Kit — Complete guides + lifetime community
- 🦉 1-on-1 Coaching — Personalized guidance
- 🎯 Join Knowii — Community + ALL courses & tools
Found this valuable? Share it with someone who needs it.