The RSS / Atom Feed Validator checks a pasted feed against the requirements of the RSS 2.0 and Atom 1.0 (RFC 4287) specifications. It tells you which required elements are missing and which recommended ones are worth adding — all parsed locally in your browser.
How it works
The tool parses your XML with the browser’s DOMParser. If the document is not
well-formed, it surfaces the parser’s first error and stops. Otherwise it
inspects the root element:
<rss>— checks for a<channel>containing<title>,<link>and<description>. Every<item>must have a<title>or a<description>, and a missing<guid>raises a warning.<feed>— checks (per Atom) for<id>,<title>and<updated>on the feed and on each<entry>, and warns when no<author>is present at feed level.
Issues are grouped by element so you can see exactly where a feed deviates from the spec. Errors indicate a genuine violation; warnings indicate a recommendation.
Common feed problems and how to fix them
Unescaped ampersands are the most frequent cause of “not well-formed” errors. In XML you must write & not & inside element text. A URL like example.com/search?a=1&b=2 in a <link> element must become example.com/search?a=1&b=2.
Missing <guid> on items is the most common warning. Aggregators like Feedly and NetNewsWire use <guid> to de-duplicate entries across refreshes — without it they may show the same item multiple times if its position in the feed shifts. The simplest guid is the permanent URL of the article.
Atom <updated> format: the value must be a valid RFC 3339 datetime, such as 2026-06-01T12:00:00Z. Plain dates like 2026-06-01 fail spec. Many CMS generators output ISO 8601 dates without the time component — this validator flags that.
No items or entries found: this usually means the XML parsed correctly but the channel or feed wrapper is misconfigured — for example an <rss> tag with version="1.0" instead of version="2.0" uses a different namespace and is not RSS 2.0.
Quick RSS 2.0 skeleton
<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title>My Feed</title>
<link>https://example.com</link>
<description>Latest posts from My Site</description>
<item>
<title>First Post</title>
<link>https://example.com/first-post</link>
<guid>https://example.com/first-post</guid>
<description>Summary of the first post.</description>
</item>
</channel>
</rss>
Paste this skeleton, confirm it validates green, then replace the placeholder values with your real content. Validating a minimal working feed first makes it easier to isolate which addition breaks the document.