The Wonderful World of Web Feeds

by Maureen Holland published on

Web feeds are incredible! And a bit confusing! Why are the feed links often called “RSS”? And why is this “RSS” feed in an atom.xml file… hang on, what is feed.json for? What are they even feeding into anyway?

To start, web feeds are often referred to as “RSS” because RSS is the oldest format. RSS stands for Really Simple Syndication. It is an XML-based specification for web content syndication (including podcasts).

Syndication is the sale or licensing of material for publication or broadcasting by others. In broadcast syndication, networks sell reruns of their original shows to other platforms, where those shows might reach a larger audience. In web content syndication, feeds package web content into a format that can “rerun” on a feed reader application. A key difference is that feeds are not sold to feed readers. The “audience” for web feeds has a much more active role to play. They are subscribers, choosing what content they want to follow and what reader they want to follow it on.

Other web content syndication specifications include Atom (also XML-based) and JSON. If you’re interested, CSS Tricks has a breakdown of the technical distinctions between these formats. A web feed (even one that says it’s an “RSS” feed) could be any of these formats under the hood.

A very basic web feed looks like this: https://maureenholland.ca/magpie/feed.xml

Simplified example below:

<rss version="2.0">
<channel>
<atom:link href="https://maureenholland.ca/magpie/feed.xml" rel="self" type="application/rss+xml"/>
<title>Magpie</title>
<link>https://maureenholland.ca/magpie/</link>
<description>
Blog of writer and web developer Maureen Holland. Untidy nest of shiny things.
</description>
<language>en-ca</language>
<item>
<title>A Vanilla Personal Site</title>
<link>
https://maureenholland.ca/magpie/a-vanilla-personal-site
</link>
<guid isPermaLink="true">
https://maureenholland.ca/magpie/a-vanilla-personal-site
</guid>
<pubDate>Tue, 18 Apr 2023 12:00:00 GMT</pubDate>
<description>
I rebuild my personal site every few years. This time, I decided I wanted to go as minimal as possible. It's been the most enjoyable iteration.
</description>
</item>
</channel>
</rss>

This XML file includes general info about the feed (channel) and lists one item which contains a title, link, description, publication date (pubDate), and globally unique identifier (guid).

A feed reader, like Feedbin, NetNewsWire, or NewsBlur, is able to parse that information and serve it in a human-readable format that will look something like this:

Black text on white background. Title: A Vanilla Personal Site. Description: I rebuild my personal site every few years. This time, I decided I wanted to go as minimal as possible. It’s been the most enjoyable iteration. Gray text: maureenholland.ca, Apr 18 2023.

It uses the unique identifier to determine if an item in the feed is new. It can do this for any number of feeds, constantly updating a reading list of your favourite web content.

Importantly, feed readers have no proprietary control over your feed list. If you are dissatisfied with your reader, you can export your feeds to an OPML (Outline Processor Markup Language) file and import them to a new reader later.

The Joy of Autodiscovery

Remember all that stuff about RSS and Atom and XML and JSON? Forget it!

A subscriber shouldn’t have to know any of that technical detail. This is where RSS Autodiscovery comes in.

You can implement autodiscovery with a single line of HTML in the head of your website (and if you’re using a blog platform, chances are it’s already there by default):

<link rel="alternate" type="application/rss+xml" title="Magpie" href="https://maureenholland.ca/magpie/feed.xml">

Now, no one has to hunt for your site’s subscribe link (or “RSS” link or whatever). They can copy/paste the website address into their feed reader and let the application do the work of finding the feeds.

A feed reader search input with the value: 'https://maureenholland.ca/magpie'. The search correctly returns one rss.xml feed: Magpie, Blog of writer and web developer Maureen Holland.

If you want, you can also include separate links for different categories. WordPress, for example, automatically generates feeds for entries and comments. Ghost includes a main post index, author archive, and tag archive.

This is not required but can be helpful if your site has a lot of frequently updated content or a wide range of topics. Subscribers may prefer a subset of content (i.e. long form articles or short “Today I Learned” posts).

<link rel="alternate" type="application/rss+xml" title="Everything" href="https://example.com/feed.xml">
<link rel="alternate" type="application/rss+xml" title="Articles" href="https://example.com/articles.xml">
<link rel="alternate" type="application/rss+xml" title="TIL" href="https://example.com/til.xml">

Wrapping Up

I started subscribing to web feeds after reading Tim Kadlec’s Investing in RSS. When I’m online, at some point, I will be checking my feed reader for a bit of inspiration. It’s a form of self-care to step out of the daily grind and step into someone else’s brain for a while. As much as I’ve learned from the articles I’ve read, it’s the feeling I’ve had reading them that I remember most, that spark of connection or revelation. If I’ve been offline for a while, the unread notifications can pile up, so I also consider it a form of self-care to select “Mark all as read.”

If you’re already a fan of web feeds, check you’ve made it easy for others to find your feed with autodiscovery. If you’re new to web feeds, pick a reader and try it out for a month. Then switch to a different one, just because you can.

This post owes a lot to Matt Webb’s great work on https://aboutfeeds.com/.

About Maureen Holland

Lead front-end web developer at silverorange.com. Passionate about accessibility, performance, and biking around Scotland.

Work: blog.silverorange.com
Personal: maureenholland.ca/magpie
Mastodon: @maureenholland

Comments

There are no comments yet.

Leave a comment

HTML is not supported, but you can use Markdown.