Specifying external links in feed items

I recently discovered Jim Nielsen’s linkblog. It’s very good! (https://notes.jim-nielsen.com)

However, the external links for his posts don’t show up in NetNewsWire. I looked at his RSS source code, and he’s specifying them like this, using the RSS source element:

    <item>
      <pubDate>Fri, 15 May 2026 14:38:00 GMT</pubDate>
      <title>How and why I journal</title>
      <link>https://notes.jim-nielsen.com/n/2026-05-15-0838/</link>
      <guid isPermaLink="false">2026-05-15-0838</guid>
      <source url="https://jan.miksovsky.com/posts/2026/05-11-journaling.html">
[...]

He’s got his permalink in the <link> element, and external source in <source>. I couldn’t remember the <source> element even being a thing, so I looked at the RSS 2.0 spec, and now I remember why:

<source> is an optional sub-element of <item>.

Its value is the name of the RSS channel that the item came from, derived from its <title>. It has one required attribute, url, which links to the XMLization of the source.

<source url="http://www.tomalak.org/links2.xml">Tomalak's Realm</source>

The purpose of this element is to propagate credit for links, to publicize the sources of news items. It can be used in the Post command of an aggregator. It should be generated automatically when forwarding an item from an aggregator to a weblog authoring tool.

Clearly what Jim is doing with <source> is outside the spec. I was going to write to Jim personally to suggest he change this, but I realized I’m not sure exactly what he should change it to.

What are the best practices for this? Brent’s Ranchero linkblog uses <guid> as the URL permalink and <link> as the external URL, but what about a feed like Jim’s Notes blog where his <guid> is not a permalink, and <link> is the post’s own permalink?

What should he do?

What RSS and Atom elements/syntax does NetNewsWire already recognize for the external_link attributes of an item?

I don’t know what values NNW parses from the XML – however the feed template exposes (using values from an example from the DF feed):

external_link_label: Link:
external_link_stripped: www.404media.co/new-arxiv-rules-ai-generated-papers-ban/
external_link: https://www.404media.co/new-arxiv-rules-ai-generated-papers-ban/

So only one really – the link.

I haven’t internalised the nuts and bolts of RSS/Atom/etc, but I’d be delighted to learn that there is an RSS feed property that would populate (a hypothetical)external_link_title!?

More realistically perhaps, I would be happy to see more links feeds take advantage of external_url

The best case scenario for NetNewsWire:

  • guid is a permalink
  • link is a link to elsewhere

So, instead of…

    <item>
      <pubDate>Tue, 12 May 2026 15:23:00 GMT</pubDate>
      <title>The Mythical Agent-Month</title>
      <link>https://notes.jim-nielsen.com/n/2026-05-12-0923/</link>
      <guid isPermaLink="false">2026-05-12-0923</guid>
      <source url="https://codemanship.wordpress.com/2026/04/06/the-mythical-agent-month/"></source>

…he would have…

    <item>
      <pubDate>Tue, 12 May 2026 15:23:00 GMT</pubDate>
      <title>The Mythical Agent-Month</title>
      <link>https://codemanship.wordpress.com/2026/04/06/the-mythical-agent-month/</link>
      <guid>https://notes.jim-nielsen.com/n/2026-05-12-0923/</guid>

(guid is a permalink by default)

But what if he doesn’t want GUID to be a permalink? I know NNW prefers it but I personally have mixed feelings about it. The scenario that gives me pause – which I run into periodically at DF – is when I change the URL for a post, perhaps because I made a typo in the slug. I’d like to change the URL without having the item appear as a new one in the feed.

Is there a way to have just plain <link> be the item’s permalink and specify an external link in RSS?

There aren’t other fields for permalinks or external links.

I think the issue of having to change the guid/permalink due to a typo or whatever, and thereby causing reruns for some people, is just one of those things that happens from time to time and people are forgiving about it.

(Way back in the day I’d get bug reports every time. These days not — people understand.)

You could create a new namespace extension for RSS for permalink and/or external link, but I suspect you’d get pushback from people who would say that these things are already accounted for in the spec.

Would the <dc:source> tag work for this one? Maybe that’s what the feed publisher meant by the <source> tag anyway? It’s Dublin Core which the RSS spec recognizes.

I’m not sure I’ve ever seen dc:source in the wild — at least not in a long time. Dublin Core seems to be used a lot less often these days.

And here’s the thing: if I support something like this in NetNewsWire, I’m adding complexity to an already-complex world for feed publishers. There are several RSS and RSS-like formats already, and decisions to be made about which to use (and whether or not to publish more than one format). I don’t want them to have to come up with another decision on how to encode permalinks and external links.

The spec is already clear about guid being a permalink by default, and by convention that leaves link for external links. I get the drawback to this, but it actually works fine pretty much all the time, and I recommend sticking with it rather than coming up with a parallel solution.

@gruber use https://notes.jim-nielsen.com/feed.json

I had been meaning to chime in that one of the many things I love about JSON Feed – above and beyond preferring JSON to XML – is that JSON Feed handles this problem perfectly. It did not occur to me to check if Nielsen had a JSON Feed!

That said, if I subscribe to a new feed in NNW and enter the home page (https://notes.jim-nielsen.com/) as the input, I get the feed.xml RSS feed, with no indication that JSON Feed was an option. Jim doesn’t seem to mention or link to the JSON Feed other than in the HTML <link> tags.

I’m guessing that NNW picks his RSS feed because it’s the first <link> tag in the HTML. I can also see the argument – I know how Brent thinks – that NNW should generally do something automatically here rather than ask the user to choose. Most users have no idea what the difference is between RSS and JSON Feed so asking them to choose is asking them to make a choice they don’t understand. But this is a case where they will wind up with a significantly worse experience with the RSS feed. They won’t see the permalinks.

My thinking is that the existence of a JSON Feed at all is more of a signal than the order of the <link> tags in the HTML, and if NNW needs to make a choice, it should prefer a JSON Feed over an RSS or Atom feed.

There are two reasons it prefers RSS.

First is compatibility — not all of the various syncing systems support JSON Feed. Preferring RSS makes it more likely that (for instance) dragging a feed from one account to another will work. (Same issue with exporting OPML from one account and importing it to another.)

(Individual users who prefer JSON Feed on their own are more likely to find it and use it and prefer syncing systems that work with JSON Feed.)

Second is the health of the open web. RSS is a critical component of that health. Yes, when people talk about RSS they mean “RSS and similar formats” — but I think it strengthens our position when we stick as much as possible to referencing RSS specifically. Otherwise the water gets muddy and RSS apps look like nerd quicksand rather than something normal people could use.

1 Like

I don’t disagree with any of that, but I’d like you to meet the authors of the JSON Feed spec.

Wait…