---
title: "RSS, Atom or JSON Feed: What 340 Sites With a Blog Actually Ship"
slug: rss-atom-json-feed-census
published: 2026-10-30T03:13:30.679505+00:00
updated: 2026-11-01T13:13:54.135666+00:00
author: "M Asif Rahman"
author_url: https://ar.bd
category: "AI Readiness"
tags: RSS feed, Atom feed, JSON Feed, rel=alternate, AI readiness, corpus study, check:E5
description: "Of 340 sites with a blog, 31.5% serve no feed and 12.9% of feeds are never declared. RSS is 82% of feeds. Data from AIScan check E5, 30 Oct 2026."
url: https://aiscan.site/blog/rss-atom-json-feed-census
---

Of the 340 sites in our scan corpus that have a blog, news or articles section, 233 serve a feed, and 191 of those feeds are RSS. Atom is on 6 sites. JSON Feed is on 36. The bigger story is not the format: 107 of the 340 sites (31.5%) serve no feed at all, and another 30 serve one that no page declares.

The data below is first-party. It comes from check E5 in AIScan's own scan database, read on 30 October 2026, and every number is a count of distinct hosts.

## Quick summary

**Direct answer:** In 2026, ship an RSS 2.0 feed and declare it with a `<link rel="alternate">` tag in `<head>` of every page that links to your posts. Add Atom only if your generator emits it by default. Add JSON Feed only if your stack makes it free. The format matters far less than whether the feed exists and is declared.

| Question | Answer from 340 sites with a periodical section |
|---|---|
| Sites serving a feed of any kind | 233 (68.5%) |
| Sites with no feed at the conventional paths | 107 (31.5%) |
| Feeds that are declared in `<head>` | 203 of 233 (87.1%) |
| Feeds found only by convention, never declared | 30 of 233 (12.9%) |
| RSS share of all feeds | 191 of 233 (82.0%) |
| JSON Feed share of all feeds | 36 of 233 (15.5%) |
| Atom share of all feeds | 6 of 233 (2.6%) |
| Check that grades this | E5, in the content dimension |

**Best for:** anyone deciding which feed format to ship, and anyone who wants to know whether their own missing or undeclared feed is unusual. It is not.

If you would rather skip the reading, run the scan first: `npx aiscan-cli yoursite.com`, or paste your address at [aiscan.site](https://aiscan.site/). It is free and needs no account. Look at the E5 line. The fix for a declared-feed gap is one tag, and [the hub guide](/blog/add-rss-feed-declare-in-head) shows where it goes on each stack.

## What E5 measures and what it does not

E5 is the content feed check. [Its documentation](/docs/checks/content) says AIScan looks for a feed at the conventional paths and checks whether the feed is declared in `<head>` with `<link rel="alternate">`. A declared feed gets full credit. A feed found only by convention gets partial credit. The check is graded only where periodical content is expected: a blog, news or articles section, or a platform such as WordPress or Ghost. Everywhere else it reports N/A and costs the site nothing.

That N/A matters for reading the numbers. Of 795 hosts, 455 reported "no periodical content section detected". We treat those as "not detected", not as "has no blog". A site whose posts live behind a script-rendered page, or under a path the detector does not recognize, lands in that bucket. So every percentage in this article uses the 340 graded hosts as its base, and none uses 795.

The evidence strings tell us the format and how it was found. They come in five shapes:

| Evidence string (hosts, URLs removed) | Status | Hosts |
|---|---|---|
| RSS feed at URL (declared via `<link rel="alternate">`) | pass | 165 |
| JSON feed at URL (declared via `<link rel="alternate">`) | pass | 36 |
| ATOM feed at URL (declared via `<link rel="alternate">`) | pass | 2 |
| RSS feed at URL (found by convention, not declared in `<head>`) | partial | 26 |
| ATOM feed at URL (found by convention, not declared in `<head>`) | partial | 4 |
| No RSS, Atom or JSON Feed found at the conventional paths | fail | 107 |
| No periodical content section detected | N/A | 455 |

One thing stands out in that table. Every JSON Feed in the corpus is declared. None is found by convention only. That is not surprising once you think about it: there is no widely shared convention for where a JSON Feed lives, so a site that ships one has to point to it.

## How we counted

- **Source:** AIScan's production scan database, queried on 30 October 2026.
- **Rubric:** one rubric version only (2026.08.2), so a check's definition does not change mid-sample.
- **Scope:** site-level scans only, not single-page scans.
- **One scan per host:** the latest scan for each hostname. A site scanned fifty times counts once.
- **Exclusions:** aiscan.site is excluded, because it scores 100 and would flatter every average.
- **Result:** 795 hosts, of which 340 were graded on E5.
- **Privacy:** every figure is an aggregate. No scanned host is named here, and none will be.

**A limit you should know about.** This is not a random sample of the web. These are sites that someone chose to scan with AIScan, or that we scanned ourselves while building the product. Sites that care about agent readiness are probably over-represented, which would make the no-feed number look better than the real web. Treat the shares as a floor on the problem, not a measurement of all websites.

## Finding 1: nearly a third of sites with a blog serve no feed

107 of 340 graded sites returned nothing at the conventional feed paths. That is 31.5%, or roughly one blog in three.

The scores line up in the direction you would expect, though a feed is only one check among many and this is a correlation, not a cause:

| E5 result | Hosts | Mean overall score | Median overall score |
|---|---|---|---|
| Declared feed (pass) | 203 | 71.8 | 69 |
| Found by convention (partial) | 30 | 66.0 | 65.5 |
| No feed (fail) | 107 | 59.4 | 61 |
| All graded | 340 | 67.4 | 66 |

Sites with no feed score about 12 points below sites with a declared one. We would not claim the feed causes that gap. A site that never added a feed has usually skipped other housekeeping too: a sitemap with accurate dates, a clean robots.txt, an llms.txt. The feed is a marker of a site that is maintained.

## Finding 2: the declared-versus-findable gap is 30 sites

Of the 233 feeds, 30 exist and work but no page says so. That is 12.9% of feeds.

This is the gap most worth closing, because it costs the least. A feed that exists at `/feed/` or `/index.xml` but has no `<link>` tag is like a phone number that works but is not listed anywhere. Anyone who already knows the digits can reach you. Nobody finds you by looking.

Of those 30, 26 are RSS and 4 are Atom. The cause is nearly always a theme or template that dropped the tag, or a generator that writes the file but leaves the declaration to you. The fix is one line:

```html
<link rel="alternate" type="application/rss+xml" title="Blog" href="/feed.xml">
```

Atom uses `type="application/atom+xml"`. JSON Feed 1.1 uses `type="application/feed+json"`. After you add it, scan again. E5 should move from partial to pass.

## Finding 3: the format split is lopsided, and platform explains most of it

RSS is 82.0% of feeds. JSON Feed is 15.5%. Atom is 2.6%. If you expected a three-way contest, the data does not show one.

The split follows the platform more than any decision the site owner made. Where the scanner could identify the stack and the sample had at least 8 graded hosts:

| Platform | Graded on E5 | Declared | Found by convention only | No feed | Mean overall score |
|---|---|---|---|---|---|
| WordPress | 199 | 162 (81.4%) | 9 (4.5%) | 28 (14.1%) | 67 |
| Platform not identified | 96 | 15 (15.6%) | 11 (11.5%) | 70 (72.9%) | 66 |
| Astro | 17 | 16 (94.1%) | 1 (5.9%) | 0 | 86 |
| Next.js | 11 | 4 (36.4%) | 7 (63.6%) | 0 | 67 |

Read that table in three passes.

**WordPress is the reason RSS dominates.** WordPress core builds a feed and its themes declare it through `wp_head()`. 162 of 199 WordPress sites declare a feed with no extra work. The 28 with no feed are the interesting ones: a security plugin, a theme that removed the hook, or a custom setup that disabled feeds on purpose.

**Unidentified stacks are where the missing feeds are.** 70 of the 107 sites with no feed are on a stack the scanner could not name. That is 65% of all the feedless blogs. These are mostly custom-built or hosted-builder sites, where nobody ships a feed unless a developer writes one.

**Astro and Next.js show two different failure modes.** Every Astro site in the sample had a feed, and 16 of 17 declared it. The Next.js sites also all had a feed, but 7 of 11 left it undeclared. A framework that makes the file easy to produce does not make the `<link>` tag automatic. In Next.js the tag belongs in the metadata for your root layout, and it is easy to forget because nothing breaks when it is missing. Both samples are small (17 and 11), so take the direction and not the percentages.

## Which format should you ship in 2026?

The answer from the data is to ship RSS 2.0 and declare it. The reasoning, using the three specifications:

| Format | Specification | Content type for the `<link>` | Where it showed up in our data | Ship it when |
|---|---|---|---|---|
| RSS 2.0 | [RSS 2.0 Specification](https://www.rssboard.org/rss-specification) | `application/rss+xml` | 191 of 233 feeds | Always. It is the default of the largest platform and the one every reader and crawler handles. |
| Atom 1.0 | [RFC 4287](https://www.rfc-editor.org/rfc/rfc4287) | `application/atom+xml` | 6 of 233 feeds | Your generator emits it by default, or you want a formal IETF standard with strict date and ID rules. |
| JSON Feed 1.1 | [JSON Feed Version 1.1](https://www.jsonfeed.org/version/1.1/) | `application/feed+json` | 36 of 233 feeds | Your stack produces it with no extra code. Do not build it by hand to chase a trend. |

Three points keep this practical rather than ideological.

First, nothing in E5 rewards one format over another. A declared Atom feed and a declared RSS feed both earn full credit. The 2 declared Atom sites scored the same E5 status as the 165 declared RSS sites.

Second, you can serve more than one. A site can declare an RSS feed and a JSON Feed with two `<link>` tags. If your generator gives you both, declare both. If it gives you one, do not write a second.

Third, the cost of choosing wrong is low and the cost of shipping nothing is not. The 107 sites with no feed are in a worse position than any site that picked the "wrong" format. Pick RSS, declare it, validate it, and move on.

## The five failures behind a failing or partial E5

Everything in the 137 non-passing results (107 fail plus 30 partial) comes down to one of these:

| Failure | What you see | Fix | Time |
|---|---|---|---|
| No feed generated at all | Fail, no feed at any conventional path | Turn on your platform's feed or add a generator | 15 to 60 minutes |
| Feed exists, no `<link>` tag | Partial, "found by convention" | Add the tag to the shared `<head>` | 5 minutes |
| `<link>` points at the wrong URL | Declared, but the target returns HTML or a 404 | Point `href` at the real feed path | 5 minutes |
| Feed refused to bots | The path answers 403 or a challenge page | Allow the feed path in your firewall rules, see [the Cloudflare feed 403 fix](/blog/rss-feed-403-cloudflare-bot-protection) | 10 minutes |
| Feed is malformed | Reader or validator rejects it | Validate and fix the XML or JSON | 15 to 30 minutes |

E5 reports the first two directly. The third, fourth and fifth are cases where the scanner may or may not see a problem, so check them yourself.

If you would rather check by hand, the fast test is:

```bash
curl -s https://yoursite.com/ | grep -io '<link[^>]*rel="alternate"[^>]*>'
```

That prints every declared alternate. Then request the `href` it shows and confirm you get XML or JSON, not your homepage. The [hub guide](/blog/add-rss-feed-declare-in-head) has platform-by-platform paths for Hugo, Docusaurus, WordPress, Ghost and Squarespace.

## Where a feed fits next to the rest of your discovery files

A feed is a dated changelog of your site. A sitemap lists URLs and can carry a `lastmod`, but a feed also carries titles, summaries and publication dates in one small file. They answer different questions, which is why [llms.txt, robots.txt and the sitemap](/blog/llms-txt-vs-robots-txt-vs-sitemap) are not substitutes for each other, and a feed is a fourth file in the same family.

For the wider picture of how ready sites are across all the checks, the [state of AI agent readiness in 2026](/blog/state-of-ai-agent-readiness-2026) study covers the full rubric. E5 is one of the lighter-weight checks (it is graded as recommended, not required), so a fix here is a quick win rather than a rescue.

## Your next action

1. Run `npx aiscan-cli yoursite.com` or paste your address at [aiscan.site](https://aiscan.site/).
2. Find the E5 line. If it says N/A and you do have a blog, check that your posts sit under a path such as `/blog/` or `/news/`.
3. If it says fail, switch on your platform's feed. If it says partial, add the `<link>` tag.
4. Scan again to confirm E5 reads pass.
5. Work through the other content checks in the [content dimension docs](/docs/checks/content), and browse the [AIScan guides](/guides) for the next fix.

## Frequently asked questions

**Should I use RSS, Atom or JSON Feed?**
Use RSS 2.0 unless your generator already produces something else. In our 340-site sample, 191 of 233 feeds were RSS, and all three formats earn the same E5 credit when they are declared.

**My feed works at /feed.xml but E5 says partial. Why?**
Because no page declares it. E5 found the file by trying conventional paths, which earns partial credit. Add a `<link rel="alternate">` tag to the `<head>` of your pages and scan again.

**My scan says E5 is N/A but I have a blog. What went wrong?**
The scanner did not detect a periodical section. 455 of 795 hosts hit this result. Make sure your posts are listed on a crawlable page, such as `/blog/`, with real links in the HTML rather than links built only by a script.

**I declared a feed and E5 still fails. What should I check?**
Open the `href` from your `<link>` tag in a browser. If it returns your homepage, a 404 or a challenge page, the tag points at the wrong place. Fix the URL, and make sure your firewall lets the feed path through.

**Does a feed help AI search or only feed readers?**
A feed gives any crawler a small, dated list of what you published. We have not measured a citation effect from it, so we do not claim one. The measurable part is that it is a cheap, standard freshness signal, and E5 grades it.

**Do I need JSON Feed in 2026?**
No. 36 of 233 feeds in our sample were JSON Feed, and every one of them was declared. Add it only if your stack emits it without extra work.

**Is it worth declaring two feeds, one RSS and one Atom?**
It is allowed and harmless, but it is rarely useful. Most readers handle RSS, so a second format adds a file to maintain without adding reach.

**How do I stop my feed getting blocked by my own firewall?**
Check that the feed path is not covered by a bot-challenge rule or a rate limit, then request it with `curl` and look for a 200 with an XML or JSON content type. A 403 from your own host is a firewall problem, not a feed problem.

## Sources and dates

- AIScan scan database, E5 results, 795 hosts, 340 graded, rubric 2026.08.2, queried 30 October 2026 (first-party).
- [AIScan documentation: content checks (E5)](/docs/checks/content), read 30 October 2026.
- [RSS 2.0 Specification](https://www.rssboard.org/rss-specification), RSS Advisory Board.
- [RFC 4287: The Atom Syndication Format](https://www.rfc-editor.org/rfc/rfc4287), IETF.
- [JSON Feed Version 1.1](https://www.jsonfeed.org/version/1.1/).

