Create an RSS feed (or multiple feeds) for your Gatsby site. Please note: This plugin only generates the xml
file(s) when run in production
mode! To test your feed, run: gatsby build && gatsby serve
.
npm install gatsby-plugin-feed
gatsby-plugin-feed
uses the rss package to generate the RSS feed. We recommend using the siteMetadata
information inside your gatsby-config
to define the title
, description
, and site_url
of the RSS feed. Those keys directly get passed to the rss feedOptions.
module.exports = {
siteMetadata: {
title: `Your site title`,
description: `Your site desccription`,
site_url: `https://your-site-url.com`,
}
}
Afterwards, you should configure gatsby-plugin-feed
inside your gatsby-config
like so (this example assumes the site uses Markdown pages):
module.exports = {
siteMetadata: {
title: `Your site title`,
description: `Your site desccription`,
site_url: `https://your-site-url.com`,
},
plugins: [
{
resolve: `gatsby-plugin-feed`,
options: {
feeds: [
{
serialize: ({ query: { site, allMarkdownRemark } }) => {
return allMarkdownRemark.nodes.map(node => {
return Object.assign({}, node.frontmatter, {
description: node.excerpt,
date: node.frontmatter.date,
url: site.siteMetadata.siteUrl + node.fields.slug,
guid: site.siteMetadata.siteUrl + node.fields.slug,
custom_elements: [{ "content:encoded": node.html }],
})
})
},
query: `
{
allMarkdownRemark(
sort: { order: DESC, fields: [frontmatter___date] },
) {
nodes {
excerpt
html
fields {
slug
}
frontmatter {
title
date
}
}
}
}
`,
output: "/rss.xml",
title: "Your Site's RSS Feed",
},
],
},
},
],
}
gatsby-plugin-feed
accepts two top-level plugin options:
-
query
(optional): A GraphQL query to fetch thetitle
,description
, andsite_url
. By default, the plugin queries forsiteMetadata
. -
feeds
(required): One or multiple RSS feeds you want to define.
feeds
itself has these required keys:
-
title
: Title of the RSS feed -
output
: Output location of thexml
file -
serialize
: You get access to the GraphQL query inside the top-levelquery
key and insidefeeds.query
. You have to return an array of objects containing keys of rssitemOptions
-
query
: GraphQL query to get contents for RSS items
Need more help? Check out the documentation Adding an RSS Feed.
As mentioned above, gatsby-plugin-feed
accepts optional additions.
feeds
has these additional options:
-
match
: Configuration, indicating which pages will have feed reference included. The accepted types ofmatch
arestring
orundefined
. By default, whenmatch
is not configured, all pages will have feed reference inserted. Ifstring
is provided, it will be used to build a RegExp and then to test whetherpathname
of current page satisfied this regular expression. Only pages that satisfied this rule will have feed reference included. -
link
: Configuration that will override the default generated rss link fromoutput
.
All additional options are passed through to the feedOptions
section of the rss
package. Thus you could write something like this:
module.exports = {
siteMetadata: {/* siteMetadata contents */},
plugins: [
{
resolve: `gatsby-plugin-feed`,
options: {
feeds: [
{
serialize: ({ query: { site, allMarkdownRemark } }) => {
/* contents go here */
},
query: `/* query goes here */`,
output: "/rss.xml",
title: "Your Site's RSS Feed",
// Optional configuration specific for plugin:
match: "^/blog/",
link: "https://feeds.feedburner.com/gatsby/blog",
// Optional configuration passed through to itemOptions
custom_namespaces: {
media: 'http://search.yahoo.com/mrss/',
},
language: `en-US`,
},
],
},
},
],
}
The serialize
function can return all keys of the rss itemOptions
setup.