Feeds guide
RSS guid vs link: which one identifies an item?
Keep RSS item identity stable, use isPermaLink correctly, and avoid duplicate entries when article URLs or titles change.
7 min read · Updated 2026-08-21
The short answer
Use guid as the stable identifier an aggregator can compare across fetches, and use link as the page a reader should open. They may contain the same permanent URL, but they do not have to. When guid is not a browser-retrievable permalink, set isPermaLink="false" explicitly and never recycle or rewrite the identifier for an existing item.Give identity and navigation separate jobs
The RSS specification permits guid to be any unique string. Aggregators may use it to decide whether an item is new, while link points to the associated resource. A durable canonical URL can serve both roles, but a database or tag URI can be a better identifier when public URLs change.
<item>
<title>Release notes</title>
<link>https://example.com/notes/latest</link>
<guid isPermaLink="false">tag:example.com,2026:release-42</guid>
<description>What changed in release 42.</description>
</item>Set isPermaLink instead of relying on its default
The attribute defaults to true. If a guid is an opaque token, URN, tag URI, or internal identifier, omitting isPermaLink can make consumers treat a non-page value as a URL. Writing false makes the intended contract portable and obvious.
- Use true only when the guid is a permanent, retrievable URL for the item.
- Use false for opaque identifiers and non-locating URIs.
- Keep the same guid when correcting title, description, or link.
- Never assign one guid to two different items.
Test updates as a feed reader would
Store yesterday's item set, fetch today's feed, and compare by guid. An edit should update the existing record; a genuinely new item should introduce a new identifier. This catches timestamp-based or URL-derived guid generation that changes during routine publishing edits.
Prove the fix
- Validate the finished feedCheck the serialized items, not only the identifier-generation function.
- Review guid rulesCompare permalink and opaque identifier examples in context.
- Compare two feed snapshotsVerify that edits preserve identity while new items receive new identifiers.
Related guides
- How to fix an RSS pubDateWrite RSS 2.0 publication dates in the expected RFC 822 family, preserve the real instant, and catch values feed readers silently ignore.
- RSS HTML: CDATA or escaped text?Publish HTML-shaped RSS descriptions without producing child markup, double-escaping entities, or breaking on an unexpected CDATA terminator.
- Atom rel=self vs rel=alternatePublish Atom links with explicit relationships so clients can distinguish the feed document from its human-facing site and entry pages.
Get started
Bring order to the XML your team can't afford to ignore.
Create a free account and get a private workspace to search, validate, diff, and monitor your XML feeds, sitemaps, schemas, and vendor integrations.