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>&lt;p&gt;Freshness, validators and the 304 response.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
ElementRequiredNotes
channel/titleYesPlain text, no markup
channel/linkYesAbsolute URL of the site or section
channel/descriptionYesOne-line summary of the feed
channel/languageNoLanguage tag such as en-us
channel/lastBuildDateNoWhen the feed content last changed
item/titleOne of title or descriptionThe entry headline
item/linkPractically yesReaders link here
item/guidPractically yesPermanent identifier, unique per item
item/pubDateNo but expectedPublication time, RFC 822 format
item/descriptionOne of title or descriptionSummary 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

  • guid must 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:00Z is not valid in RSS 2.0, even though Atom uses ISO 8601.
  • description may contain escaped HTML. Full-content feeds put the whole article there; summary feeds put a teaser.
  • enclosure attaches a file for podcast feeds: a URL, a byte length and a media type.
  • category, author and comments are 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.

Generating a valid feed Atom and how readers consume feeds

Last refreshed 2026-09-18.