rss
Comment générer un fichier rss.xml pour votre site.
Qu'est-ce que le rss ?
Le rss est un fichier XML qui contient des informations sur vos articles, et est utilisé pour suivre les actualités d'un site.
Par exemple, sur ce site cela donne rss.xml.
N'importe qui peut s'abonner à ce flux, ainsi dès qu'un nouveau post est publié la personne n'aura qu'à actualiser son flux pour voir qu'il y a de nouveaux articles.
Comment générer un fichier rss.xml ?
Avec Astro, la fonction suivante utilise @astrojs/rss pour construire la réponse XML :
import rss from "@astrojs/rss";
import XMLBuilder from "fast-xml-builder";
import { EMAIL, SITE_METADATA } from "../src/lib/constants";
import type { Post } from "../src/lib/posts";
export function generateRss(posts: Post[], site: URL) {
const date = new Date().toUTCString();
return rss({
title: SITE_METADATA.title,
description: SITE_METADATA.description,
site,
trailingSlash: false,
xmlns: { atom: "http://www.w3.org/2005/Atom" },
customData: new XMLBuilder({ ignoreAttributes: false }).build({
language: SITE_METADATA.locale,
managingEditor: `${EMAIL} (${SITE_METADATA.author})`,
generator: SITE_METADATA.title,
pubDate: date,
lastBuildDate: date,
"atom:link": {
"@_href": new URL("rss.xml", site).href,
"@_rel": "self",
"@_type": "application/rss+xml",
},
image: {
url: new URL(SITE_METADATA.image, site).href,
title: SITE_METADATA.title,
link: site.href,
},
category: [...new Set(posts.flatMap((post) => post.fullTags))],
}),
items: posts.map((post) => ({
title: post.title,
description: post.description,
link: post.url,
pubDate: new Date(post.datePublished),
categories: post.fullTags,
})),
});
}L'endpoint src/pages/rss.xml.ts appelle cette fonction avec les articles et l'URL du site. Astro génère ensuite /rss.xml pendant le build :
import type { APIRoute } from "astro";
import { generateRss } from "../../scripts/generate-rss";
import { getPosts } from "../lib/posts";
export const GET: APIRoute = async ({ site }) =>
generateRss(await getPosts(), site!);Voir la documentation de @astrojs/rss.
Comment voir si ça marche ?
Pour tester j'ai utilisé la cli nom
nom add https://vahor.fr/rss.xml
nom

On se retrouve maintenant avec un sitemap.xml, un llms.txt et un rss.xml, je pense que les 5 articles du site ont assez de visibilité 🤣