Post

Fixing RSS Feed Limits in Jekyll Chirpy

How to customize the RSS feed in Jekyll Chirpy. The theme limits feeds to 5 posts and truncates summaries to 400 characters by default, which works for typical blogs but not for AI agents or integrations that need full content. The solution: override the feed template and use the description field in front matter for full control.

Fixing RSS Feed Limits in Jekyll Chirpy

The Problem

If you’re using RSS feeds for anything beyond basic blog subscriptions, you might run into issues with Jekyll Chirpy. This could affect AI agents that search your content, feed readers that display full summaries, or any integration that relies on complete RSS data.

By default, Chirpy limits the feed to 5 posts and truncates summaries to 400 characters. This makes sense for typical blog feeds where readers only need recent posts and short previews. However, for use cases that need full context or access to all content, these limits become a problem.

For example, if you have 35 posts, only 5 appear in the feed, and summaries may get cut off like this:

1
...This course is desi...

Not helpful for anything trying to understand what the post is about.

The Cause

Jekyll Chirpy’s feed template has two hardcoded limits:

1
{% for post in site.posts limit: 5 %}
1
<summary>{% include post-summary.html max_length=400 %}</summary>

This limits the RSS feed to 5 posts and truncates summaries to 400 characters. This is fine for blog preview cards on a website, but not for use cases that need full context.

The template lives inside the Chirpy gem and cannot be edited directly:

1
~/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/jekyll-theme-chirpy-7.4.1/assets/feed.xml

Finding the Template

To locate the feed template in the gem, use:

1
find $(bundle show jekyll-theme-chirpy) -name "*.xml"

To see where the truncation is happening:

1
grep -r "truncate\|excerpt\|summary" $(bundle show jekyll-theme-chirpy)/_includes

The Fix

Copy the template to your project to override the gem version:

1
cp $(bundle show jekyll-theme-chirpy)/assets/feed.xml assets/feed.xml

Make two changes to assets/feed.xml

Change limit: 5 to limit: 100:

1
{% for post in site.posts limit: 100 %}

Or remove the limit entirely to include all posts:

1
{% for post in site.posts %}

Change the summary line from:

1
<summary>{% include post-summary.html max_length=400 %}</summary>

to:

1
<summary>{{ post.description | default: post.excerpt | strip_html | xml_escape }}</summary>

This removes the 400 character truncation and increases the post limit. The summary now uses description from front matter if it exists, otherwise falls back to excerpt (the content above <!--more--> in your post, or the first paragraph if <!--more--> is not used).

Controlling the Summary

There are two approaches:

Option 1: Use description in front matter (recommended)

Best when your intro has multiple paragraphs you want to keep for readability:

1
2
3
4
5
6
7
8
9
10
---
title: "My Post"
description: "Full summary for the RSS feed. Write as much as you need here. No truncation."
---

Intro with paragraphs for readability on the website.

More text here.

## The Rest of the Post

The description controls the RSS summary. Your paragraphs stay readable on the website.

Option 2: Use <!--more-->

Best when your intro is a single block of text and you want the RSS summary to match exactly what’s on the page:

1
2
3
4
5
6
7
8
---
title: "My Post"
---
Single block intro that becomes the RSS summary. It needs to be one block without blank lines, otherwise Jekyll only uses the first paragraph.

<! --more-->

## The Rest of the Post

For most cases, description is cleaner because it gives full control and allows paragraphs in the intro for readability.

Use <!--more--> when you want the RSS summary to match exactly what appears on the page and your intro is a single block of text. This avoids duplicating content between the front matter and the body.

This post is licensed under CC BY 4.0 by the author.