The RSS 2.0 feed format
The channel and item elements that make a feed, which ones are required, and the date and identifier rules readers enforce.
Channel and items
An RSS 2.0 feed is an XML document with a single <rss> root, version 2.0, containing exactly one <channel>. The channel describes the publication; each <item> describes one entry.
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Example Dev Blog</title>
<link>https://example.com/</link>
<description>Notes on building and running web systems.</description>
<language>en-us</language>
<lastBuildDate>Fri, 18 Sep 2026 09:00:00 GMT</lastBuildDate>
<atom:link href="https://example.com/feed.xml" rel="self" type="application/rss+xml"/>
<item>
<title>Understanding HTTP caching</title>
<link>https://example.com/posts/http-caching</link>
<guid isPermaLink="false">urn:uuid:9d4f7a1c-3b2e-4c5a-8f01-1a2b3c4d5e6f</guid>
<pubDate>Thu, 17 Sep 2026 12:00:00 GMT</pubDate>
<description><p>Freshness, validators and the 304 response.</p></description>
</item>
</channel>
</rss>| Element | Required | Notes |
|---|---|---|
channel/title | Yes | Plain text, no markup |
channel/link | Yes | Absolute URL of the site or section |
channel/description | Yes | One-line summary of the feed |
channel/language | No | Language tag such as en-us |
channel/lastBuildDate | No | When the feed content last changed |
item/title | One of title or description | The entry headline |
item/link | Practically yes | Readers link here |
item/guid | Practically yes | Permanent identifier, unique per item |
item/pubDate | No but expected | Publication time, RFC 822 format |
item/description | One of title or description | Summary or full content, HTML escaped |
⚠️
One malformed character invalidates the entire feed, not just one item. A single unescaped ampersand in a headline makes every reader show 'feed error' until it is fixed — escape or wrap content in CDATA, and validate before publishing.
The details readers rely on
guidmust never change for the same content. Change it and every reader re-announces the item; keep it and edits stay invisible.isPermaLink="false"tells the reader the value is not a URL, which prevents it from trying to open a URN.- Dates use RFC 822 / RFC 2822 with the English day and month abbreviations and a four-digit year:
Thu, 17 Sep 2026 12:00:00 GMT. - An RFC 3339 timestamp such as
2026-09-17T12:00:00Zis not valid in RSS 2.0, even though Atom uses ISO 8601. descriptionmay contain escaped HTML. Full-content feeds put the whole article there; summary feeds put a teaser.enclosureattaches a file for podcast feeds: a URL, a byte length and a media type.category,authorandcommentsare optional but widely displayed.
<item>
<title>Episode 12: Shipping small</title>
<enclosure url="https://cdn.example.com/ep12.mp3" length="48213004" type="audio/mpeg"/>
<category>engineering</category>
<author>[email protected] (Platform Team)</author>
<comments>https://example.com/posts/ep12#comments</comments>
</item>Note the author convention: in RSS 2.0 it is an email address, optionally followed by a name in parentheses. Atom splits this into separate name and email elements, which is one of several places where the two formats are not interchangeable.
FAQ
Should the feed contain full articles or summaries?
Full content suits readers who read inside the app and are less likely to click through; summaries drive traffic. Most publishers start with full content and shorten it if analytics matter more than reach.
How many items should a feed carry?
Enough to cover the polling gap — commonly the latest 20 to 50. Trimming old items also keeps the file small, which matters because clients re-download the whole feed on every update.
Related
Generating a valid feed Atom and how readers consume feeds
Last refreshed 2026-09-18.