Syndicator Blog

RSS

What 114 Aggregated Sites Show About Hugo and WordPress Feed URLs

Syndicator reads 114 feeds. Every one of them is listed in a single file, feeds.json, with the site's address and its feed address. That makes it a small but clean sample of how real sites name their feeds. Here's what's in it.

Three URL patterns cover everything

Feed pathSitesWhat publishes it
/index.xml73Hugo
/feed/32WordPress
/rss.xml9Custom generators, including the engine behind this blog

No exceptions. No /atom.xml, no /feed.json, no FeedBurner URLs. The 105 Hugo and WordPress feeds are RSS 2.0, which is what both platforms produce by default, and nothing in the list is registered as a JSON Feed.

That's not a survey of the web. It's a network of sites run by one publisher, so it reflects the tools that publisher picked. But it does show something true in general: the feed URL is decided by the CMS, not by the person writing posts, and most people never change the default.

Hugo: index.xml everywhere

Hugo writes a feed called index.xml for the home page and for every section, tag and category. So example.com/index.xml is the whole site, example.com/posts/index.xml is just posts, and example.com/tags/rss/index.xml is one tag.

That's generous. A reader can subscribe to exactly the slice they want. The downside is that index.xml is not a name people guess. Someone typing a feed URL by hand tries /feed or /rss first. Good autodiscovery tags matter more on Hugo sites for that reason.

WordPress: /feed/ and its relatives

WordPress serves RSS 2.0 at /feed/, and Atom at /feed/atom/ if you ask. Every category, tag and author also gets one, as does every post's comment thread. There's a plugin-free query string form too, /?feed=rss2, which works even when pretty permalinks are off.

WordPress also does the HTTP side well out of the box. pxef.com, one of the WordPress sites in the list, sends ETag and Last-Modified headers and answers a repeat request with 304 Not Modified. That's conditional GET, and it saves both sides a lot of bandwidth.

rss.xml: the custom crowd

Nine sites publish at /rss.xml. That's the most common name among smaller generators and hand-built setups, and it's what the jollyroger engine that runs this blog writes too. Short, obvious, easy to guess.

The one that broke

Here's the useful finding. One site in the list, vpnw.com, was registered with a WordPress-style feed URL, https://vpnw.com/feed/. The site runs on Hugo. That URL returns 404. The real feed is at https://vpnw.com/index.xml and works fine.

So the aggregator was asking for a feed in the wrong place on every rebuild. The build log did report the 404, but the site itself just showed nothing from vpnw.com, and one empty source out of 114 doesn't change how the front page looks. That entry has now been corrected.

That's the most common feed failure there is. Not a broken parser or a bad date. Just a URL copied from the wrong pattern, or a site that changed platforms and kept its old feed address in somebody's list.

Takeaways for anyone maintaining a list of feeds

  • Copy the feed URL from the site's autodiscovery tag, not from memory of what the platform usually uses.
  • When a site moves from WordPress to Hugo or back, its feed URL changes. Add a redirect from the old one.
  • Read the build log, or better, have something read it for you. A dead feed that only shows up in a log can hide for months.
  • Check the list from time to time against the sites themselves. It takes a few minutes and finds things.