Use Cases (Diperbarui: 2/6/2026)

Membuat RSS Feed dengan Claude Code: panduan RSS 2.0, Atom, dan Astro

Buat RSS 2.0 dan Atom dengan Claude Code: XML escaping, tanggal, URL absolut, feed multibahasa, validasi, dan cache.

Membuat RSS Feed dengan Claude Code: panduan RSS 2.0, Atom, dan Astro

RSS masih berguna untuk distribusi konten teknis

Menerbitkan artikel tidak sama dengan membuat pembaca melihatnya. Search, media sosial, newsletter, Slack, dan RSS reader adalah jalur yang berbeda. RSS feed adalah file XML yang berisi judul, link, deskripsi, tanggal publikasi, dan kategori. XML ketat: satu & tanpa escape bisa membuat feed rusak.

Atom adalah format feed lain yang didefinisikan di RFC 4287. Untuk kebanyakan static site, mulai dari RSS 2.0 dulu. Atom bisa ditambahkan ketika integrasi membutuhkannya. Dengan Claude Code, targetnya bukan hanya membuat XML, tetapi membuat feed yang bisa divalidasi.

Gunakan sumber utama: RSS Advisory Board RSS 2.0 Specification, IETF RFC 4287, W3C Feed Validation Service, dan Astro RSS recipe. Untuk operasi konten yang lebih luas, baca Blog CMS dengan Claude Code, SEO dengan Claude Code, dan sitemap generation.

Use case nyata

Pertama, RSS membantu pembaca kembali ke blog teknis. Pengguna Feedly, Inoreader, atau reader sendiri biasanya membaca banyak sumber. Artikel baru masuk ke alur baca mereka tanpa bergantung pada media sosial.

Kedua, RSS berguna untuk knowledge internal. Release notes, incident report, security notice, dan architecture decision record bisa dibaca oleh Slack bot atau portal internal dari sumber konten yang sama.

Ketiga, RSS membantu publikasi multibahasa. Situs dengan Indonesia, Inggris, Jepang, dan Spanyol sebaiknya tidak mencampur semua bahasa dalam satu feed. /id/rss.xml harus memakai collection Indonesia, prefix /id/blog/, dan language yang benar.

Keempat, RSS mendukung monetisasi. Di ClaudeCodeLab, artikel mengarah ke template, produk, training, dan konsultasi. Training dan konsultasi Claude Code terasa natural ketika pembaca sudah mendapat solusi praktis dari artikel.

Tentukan kontrak feed sebelum coding

Tulis aturan sebelum meminta Claude Code mengubah file.

AreaRekomendasiAlasan
FormatRSS 2.0 dulu, Atom opsionalSederhana dan luas dukungannya
URLURL absolutReader eksternal bisa membuka link
TanggaltoUTCString() untuk RSS, toISOString() untuk AtomMengurangi bug sorting
KontenMulai dari descriptionFull HTML perlu sanitize
Limit20 sampai 50 artikelFeed tetap ringan
CachePolicy eksplisitUpdate setelah publish lebih jelas
ValidasiScript lokal dan W3C ValidatorTampilan browser saja tidak cukup

RSS 2.0 memakai channel untuk site dan item untuk artikel. guid harus stabil, biasanya permalink artikel.

Generator RSS tanpa dependency

Simpan sebagai scripts/generate-rss.mjs, lalu jalankan node scripts/generate-rss.mjs.

// scripts/generate-rss.mjs
import fs from "node:fs";
import path from "node:path";

const siteUrl = "https://example.com";
const outputPath = path.join(process.cwd(), "dist", "rss.xml");

const posts = [
  {
    title: "Membuat RSS Feed dengan Claude Code",
    description: "Generate dan validasi RSS 2.0 untuk static site.",
    slug: "claude-code-rss-feed",
    pubDate: "2026-06-02T09:00:00+09:00",
    tags: ["Claude Code", "RSS"],
  },
];

function escapeXml(value) {
  return String(value ?? "")
    .replace(/&/g, "&")
    .replace(/</g, "&lt;")
    .replace(/>/g, "&gt;")
    .replace(/"/g, "&quot;")
    .replace(/'/g, "&apos;");
}

function toRssDate(value) {
  const date = new Date(value);
  if (Number.isNaN(date.getTime())) throw new Error(`Invalid date: ${value}`);
  return date.toUTCString();
}

const items = posts.map((post) => {
  const url = new URL(`/id/blog/${post.slug}/`, siteUrl).toString();
  return `    <item>
      <title>${escapeXml(post.title)}</title>
      <link>${url}</link>
      <guid isPermaLink="true">${url}</guid>
      <description>${escapeXml(post.description)}</description>
      <pubDate>${toRssDate(post.pubDate)}</pubDate>
    </item>`;
}).join("\n");

const xml = `<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>ClaudeCodeLab Indonesia</title>
    <link>${siteUrl}/id/</link>
    <description>Panduan praktis Claude Code</description>
    <language>id</language>
    <lastBuildDate>${new Date().toUTCString()}</lastBuildDate>
    <ttl>60</ttl>
${items}
  </channel>
</rss>
`;

fs.mkdirSync(path.dirname(outputPath), { recursive: true });
fs.writeFileSync(outputPath, xml, "utf8");
console.log(`Generated ${outputPath}`);

Guard pentingnya adalah escapeXml(), new URL(), dan validasi tanggal. Jangan biarkan Claude Code menghapus guard ini saat refactor.

Implementasi Astro

Pakai package resmi @astrojs/rss.

npm install @astrojs/rss
// src/pages/id/rss.xml.ts
import rss from "@astrojs/rss";
import { getCollection } from "astro:content";

export async function GET(context: { site: URL }) {
  const posts = await getCollection("blog-id", ({ data }) => !data.draft);

  const items = posts
    .sort((a, b) => {
      const aDate = new Date(a.data.updatedDate ?? a.data.pubDate).getTime();
      const bDate = new Date(b.data.updatedDate ?? b.data.pubDate).getTime();
      return bDate - aDate;
    })
    .slice(0, 30)
    .map((post) => ({
      title: post.data.title,
      description: post.data.description,
      pubDate: post.data.updatedDate ?? post.data.pubDate,
      link: `/id/blog/${post.id}/`,
      categories: post.data.tags,
    }));

  return rss({
    title: "ClaudeCodeLab Indonesia",
    description: "Panduan praktis Claude Code",
    site: context.site,
    items,
    customData: "<language>id</language><ttl>60</ttl>",
  });
}

Tambahkan discovery link di head.

<link rel="alternate" type="application/rss+xml" title="ClaudeCodeLab RSS" href="/id/rss.xml" />
<link rel="alternate" type="application/atom+xml" title="ClaudeCodeLab Atom" href="/id/atom.xml" />

Atom, multibahasa, dan validasi

Atom perlu id stabil dan tanggal ISO.

function atomEntry(post, siteUrl) {
  const url = new URL(`/id/blog/${post.slug}/`, siteUrl).toString();
  return `  <entry>
    <title>${escapeXml(post.title)}</title>
    <link href="${url}" />
    <id>${url}</id>
    <updated>${new Date(post.pubDate).toISOString()}</updated>
    <summary>${escapeXml(post.description)}</summary>
  </entry>`;
}

Satukan collection, prefix, dan language:

const feeds = [
  { collection: "blog", prefix: "", language: "ja", title: "ClaudeCodeLab" },
  { collection: "blog-en", prefix: "/en", language: "en", title: "ClaudeCodeLab English" },
  { collection: "blog-id", prefix: "/id", language: "id", title: "ClaudeCodeLab Indonesia" },
];

Script validasi lokal:

// scripts/check-feed.mjs
const feedUrl = process.argv[2] ?? "http://localhost:4321/id/rss.xml";
const response = await fetch(feedUrl);
const xml = await response.text();
const failures = [];

if (!response.ok) failures.push(`HTTP status is ${response.status}`);
if (!xml.includes("<rss")) failures.push("missing rss root");
if (!xml.includes("<channel>")) failures.push("missing channel");
if (!xml.includes("<item>")) failures.push("missing item");
if (/&(?!amp;|lt;|gt;|quot;|apos;|#\d+;|#x[a-fA-F0-9]+;)/.test(xml)) failures.push("unescaped ampersand");
if (!/<guid[^>]*>https?:\/\//.test(xml)) failures.push("guid should be absolute");

if (failures.length) {
  console.error(failures.map((failure) => `- ${failure}`).join("\n"));
  process.exit(1);
}

console.log(`OK: ${feedUrl}`);

Failure yang sering terjadi: R&D tidak di-escape, draft masuk feed, URL relatif, tanggal ambigu, feed Indonesia mengarah ke halaman Inggris, dan cache CDN terlalu lama.

Prompt Claude Code dan verifikasi

Implementasikan RSS 2.0 untuk Astro static site ini.
- Edit hanya src/pages/id/rss.xml.ts.
- Gunakan @astrojs/rss.
- Exclude draft.
- Sort by updatedDate atau pubDate, terbaru dulu.
- Limit 30 artikel.
- Pertahankan prefix /id/blog/.
- Tambahkan language dan ttl.
- Laporkan command dan hasil validasi.
Review implementasi RSS secara kritis.
Prioritaskan XML escaping, URL relatif, draft leakage, format tanggal, guid stabil, prefix multibahasa, cache, dan validasi W3C.

Saya mencoba workflow ini pada data kecil bergaya Astro. Script lokal menangkap & tanpa escape dan guid yang bukan URL absolut sebelum browser dibuka. Review manusia tetap perlu untuk kualitas lokalisasi, CTA, dan tampilan di reader nyata. Untuk menjadikan RSS, sitemap, QA artikel, dan conversion path sebagai workflow tim, mulai dari training dan konsultasi Claude Code.

#Claude Code #RSS #Atom #Astro #static site
Gratis

PDF gratis: cheatsheet Claude Code

Masukkan email dan unduh satu halaman berisi command, kebiasaan review, dan workflow aman.

Kami menjaga datamu dan tidak mengirim spam.

Masa

Tentang penulis

Masa

Engineer yang berfokus pada workflow Claude Code praktis dan adopsi tim.