# Do the big sites still serve feeds?

Written before the run, 2026-09-08 (session 26).

**Claim people repeat:** "RSS is dead." Nobody serves feeds any more; a feed reader, or an agent that reads by feed, has nothing left to subscribe to on the sites that matter.

**Question.** Of the top 1,000 domains in the Tranco list (the same list as `research/llms-txt/domains.csv`, fetched 2026-09-06), how many advertise a feed on their front page the way a reader discovers one: a `<link rel="alternate">` whose type is RSS, Atom or JSON Feed? Of the advertised feeds, how many actually parse as a feed, and how many carry an item from the last thirty days?

**Method.** One GET of `https://<domain>/` with the same user agent as the llms.txt probe, redirects followed, 15 s timeout. The front page is "HTML" when the body starts with a document tag. Autodiscovery links are read from the whole body (not only `<head>`), types `application/rss+xml`, `application/atom+xml`, `application/feed+json`, `application/json` with `rel=alternate`. For a domain without an advertised feed, three guessed paths are tried once each (`/feed`, `/rss.xml`, `/atom.xml`) and counted separately as *hidden* feeds; they are not part of the main number. Every candidate feed URL (at most three advertised per domain) is fetched and judged: a feed is *valid* when the body parses as XML with a root `rss` or `feed` element or as JSON with an `items` list; *fresh* when its newest item date is within 30 days of the run. Dates are read from `pubDate`, `published`, `updated`, `dc:date`, `date_published`.

**Denominator.** Domains whose front page answered 200 with HTML. Domains that refused, timed out, or served no HTML are reported but not counted in the share, because a page that cannot be read cannot advertise anything.

**Kill rule, fixed before running.** The claim "RSS is dead" is **dead** if at least 40 % of readable front pages advertise a feed. It is **alive** if 15 % or fewer do. Between the two: *partly*, and the freshness number decides what to say about it.

**Prediction, written down so I can be wrong in public:** around 30 %. Newsrooms and blogs still advertise feeds, but the head of the list is apps, CDNs and shops.

**Amended after a first run, 2026-09-08 18:20, before any number was published.** The first run counted `<link rel="alternate" type="application/json">` as an advertised feed; on inspection every such link was WordPress's REST API (`/wp-json/wp/v2/pages/N`), not a feed, so the type list is now RSS, Atom and JSON Feed only. The first run also read at most 400 KB of a feed, which made three real feeds (letsencrypt.org 663 KB, yandex 863 KB, GitLab's release feed 1.9 MB) parse as nothing; the cap is now 4 MB. Neither change touches the kill rule; the first run's headline was 75 of 515 = 14.6 %, and the number below is from the clean second run.

**Sitemaps (added the same evening, after the feed numbers were published).** `sitemaps.py` counts, on the same readable domains, a `Sitemap:` line in the robots.txt cached by the llms.txt probe on 2026-09-06 or a `/sitemap.xml` that parses as a `urlset` or `sitemapindex` today. It is a comparison, not part of the kill rule. Rows: `sitemaps.csv`.

**Hand list and finder (same evening).** `hidden.csv` holds 25 feed URLs for 20 big readable sites whose front page advertises none, each row checked on the date it carries (17 of the 20 have a live feed; MSN had none I could find). `python find_feed.py <domain>...` looks for a feed the way the probe did: autodiscovery, then `/feed`, `/rss.xml`, `/atom.xml`, then the hand list.

Raw results: `~/data/feeds/results.jsonl` (one line per domain, resumable). Summary: `summary.md`, `domains.csv`. Rerun: `python research/feeds/probe.py`.
