RSS never went mainstream the way it looked like it might in 2008, but it never went away either — it's how feed readers, some newsletter tools, and a meaningful slice of technically-inclined readers still track blogs. For a developer audience specifically, it's disproportionately worth the small effort to add, because developers are exactly the readers still using feed readers.
This covers what a feed actually needs and how to add one, whichever platform you're on. For the rest of what a post needs before publishing, see the technical SEO checklist.
What a feed actually is
An RSS feed is an XML file — conventionally at /rss.xml or /feed.xml — listing your recent posts in a standard format any feed reader can parse. A minimal valid feed looks like this:
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>Your Blog Name</title>
<link>https://yourdomain.com</link>
<description>What your blog is about</description>
<item>
<title>Post Title</title>
<link>https://yourdomain.com/post-slug</link>
<description>Post summary or full content</description>
<pubDate>Mon, 27 Jul 2026 00:00:00 GMT</pubDate>
<guid>https://yourdomain.com/post-slug</guid>
</item>
</channel>
</rss>
Each <item> is one post. pubDate needs RFC 822 format specifically — a common source of feeds that validate visually but fail in strict readers. guid should be a stable, unique identifier per post (the URL works fine) — it's what readers use to detect "have I already shown this one," so changing it after publishing will make old posts reappear as new.
Once the feed exists, point to it from every page with a link tag so browsers and readers can auto-discover it:
<link rel="alternate" type="application/rss+xml" title="Your Blog Name" href="/rss.xml" />
Generating it depending on your setup
Static site generators almost always have this as a plugin or built-in feature rather than something you hand-write: Jekyll has jekyll-feed, Hugo generates one by default per section, Astro has the official @astrojs/rss integration. In each case you configure title/description once and the feed regenerates automatically on every build.
Hosted platforms (Ghost, WordPress, dev.to) generate a feed automatically with no configuration — check /rss or /feed on your domain to confirm.
A platform without built-in RSS yet — worth checking directly rather than assuming, since this varies by tool and changes over time. If it's missing, a static rss.xml file, regenerated whenever you publish (by a small script that reads your post frontmatter and writes the XML above), is a reasonable stopgap that doesn't require much beyond what's already in each post's frontmatter.
Validating it
Don't trust that a feed works just because it renders as XML in a browser. Run it through the W3C Feed Validator — it catches the most common real issues: malformed dates, missing required fields, encoding problems, and unescaped characters in titles or descriptions that break the XML structure.
Then check it in an actual reader (Feedbin, NetNewsWire, or Reeder all work) — validators catch structural errors but won't tell you if your descriptions are truncated oddly or your dates are all showing as the build time instead of the actual publish time, which is a common bug in generated feeds pulling the wrong timestamp field.
Keeping it current
A stale feed — one that stopped updating months ago while the blog kept publishing — is worse than no feed, since it actively tells subscribers you've gone quiet. If you're generating it via a static site generator's plugin, this is automatic. If you're maintaining a hand-rolled one, it's worth a periodic check that it's actually tracking your latest posts and not frozen at an old build.