# RSS Feeds

Any [group](/docs/groups) can generate an RSS 2.0 feed. Add `feed: true` to a group in `settings/groups.md` and the build produces a feed file at `/{groupName}/feed.xml` — blog posts, changelog entries, roadmap updates, or any collection of pages you want syndicated.

RSS feed XML files are written to disk during [activated builds](/docs/build-modes#activated). In trial mode, feeds render in the dev server but no files are produced.

## How to enable a feed

Add `feed: true` to any group definition in `settings/groups.md`:

```yaml
# settings/groups.md
groups:
  - name: blog
    feed: true
    indexPage: blog.md
    locations:
      - sidebar:
          - group: blog
    items:
      - Blog: /blog
      - First Post: /blog/first-post
      - Second Post: /blog/second-post
```

That's it. The next production build generates `/blog/feed.xml`.

## What goes into the feed

Each feed includes all non-draft pages that are members of the group, with these exclusions:

- The group's index page (if set via `indexPage` in groups.md)
- Pages marked `robots: noindex` in frontmatter

Items are sorted by `published` date in frontmatter (newest first), capped at 50 entries. Pages without a `published` date sort to the end.

### Feed item fields

Each item in the feed includes:

| Field | Source |
|---|---|
| `<title>` | Page title (suffix stripped) |
| `<link>` | Full URL (`{siteUrl}{slug}`) |
| `<guid>` | Same as link (permalink) |
| `<pubDate>` | `published` from frontmatter (RFC 2822 format) |
| `<description>` | Page description from frontmatter |
| `<content:encoded>` | Full rendered HTML content |

### Setting published dates

Add a `published` date to your page frontmatter so feed readers can sort and display posts correctly:

```yaml
---
title: My Blog Post
published: 2026-03-25
---
```

Pages without `published` still appear in the feed — they sort after dated entries.

## Feed autodiscovery

Every page that belongs to a feed-enabled group gets a `<link>` tag in its `<head>`:

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

This tag is also injected on the group's index page (e.g. `/blog`). Feed readers and browsers use this tag to auto-discover the feed — visitors don't need to know the feed URL.

Pages that aren't members of a feed-enabled group don't get the tag.

## Multiple feeds

Enable feeds on as many groups as you want. Each generates its own `feed.xml` at its group path:

```yaml
groups:
  - name: blog
    feed: true
    indexPage: blog.md
    items:
      - ...

  - name: changelog
    feed: true
    indexPage: changelog.md
    items:
      - ...
```

This produces:
- `/blog/feed.xml` — blog posts
- `/changelog/feed.xml` — changelog entries

Each page gets autodiscovery tags for whichever feed-enabled groups it belongs to.

## Feed XML structure

The generated feed follows the RSS 2.0 specification with the `content:encoded` and Atom `self` link extensions:

```xml
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Blog — My Site</title>
    <link>https://example.com/blog</link>
    <description>Site description</description>
    <atom:link href="https://example.com/blog/feed.xml"
      rel="self" type="application/rss+xml"/>
    <language>en</language>
    <lastBuildDate>Wed, 25 Mar 2026 00:00:00 GMT</lastBuildDate>
    <item>
      <title>My Post</title>
      <link>https://example.com/blog/my-post</link>
      <guid isPermaLink="true">https://example.com/blog/my-post</guid>
      <pubDate>Tue, 25 Mar 2026 00:00:00 GMT</pubDate>
      <description>Post description</description>
      <content:encoded><![CDATA[<p>Full HTML content...</p>]]></content:encoded>
    </item>
  </channel>
</rss>
```

The channel title combines the group name and your site's `brandName` from `settings/meta.md`. The `language` comes from `settings/seo.md`.

## Build output

When feeds are generated, the build summary includes the count:

```text
Generated: sitemap.xml, robots.txt, llms.txt, llms-full.txt, 1 feed, 10 emails
```

## Related

- [Groups](/docs/groups) — defining page groups and membership
- [SEO](/docs/seo) — sitemaps, structured data, and other auto-generated SEO files
- [Pages & Content](/docs/pages-and-content#frontmatter) — frontmatter fields including `published`