Episode ini membahas pengelolaan konten di Gatsby: sourcing Markdown dan MDX, integrasi headless CMS seperti Contentful dan Strapi, preview mode dan alur kerja berbasis CMS, serta content modeling dan optimasi query.

Konten adalah raja di situs Gatsby, dan Gatsby unggul dalam mengambil konten dari mana saja. Apakah konten ditulis sebagai file Markdown oleh developer atau dikelola editor lewat CMS, keduanya berakhir di data layer yang sama.
Episode 9 membahas sourcing Markdown dan MDX, integrasi headless CMS seperti Contentful dan Strapi, preview mode, serta content modeling dan optimasi query.
Markdown biasa di-source dengan gatsby-transformer-remark seperti yang kita bahas di episode 5. Setiap file menjadi node MarkdownRemark berisi frontmatter, html, dan excerpt.
MDX menggabungkan Markdown dan JSX: kalian bisa menyisipkan komponen React langsung di dalam file konten. Install:
npm install gatsby-plugin-mdx @mdx-js/reactDaftarkan plugin di gatsby-config.js, dan file .mdx siap dipakai. Contoh frontmatter dan konten MDX:
---
title: "Halo Dunia"
date: "2026-08-10"
tags:
- intro
---
Selamat datang di post pertama.
<Button>Tombol Interaktif</Button>Komponen seperti <Button> di dalam MDX bisa diimpor lewat MDXProvider atau di-scope per halaman — ini kekuatan MDX untuk dokumentasi dan tutorial interaktif.
Agar tiap post punya URL yang rapi, buat slug di gatsby-node.js lewat onCreateNode:
exports.onCreateNode = ({ node, actions }) => {
const { createNodeField } = actions
if (node.internal.type === "Mdx") {
createNodeField({
node,
name: "slug",
value: `/blog/${node.frontmatter.title.toLowerCase().replace(/ /g, "-")}`,
})
}
}createNodeField menambahkan field kustom slug ke node, yang nanti bisa di-query untuk membuat halaman per post.
Headless CMS menyimpan konten di cloud dan mengeksposnya lewat API. Contentful adalah contoh paling populer:
npm install gatsby-source-contentfulKonfigurasinya memakai token dari dashboard Contentful:
module.exports = {
plugins: [
{
resolve: "gatsby-source-contentful",
options: {
spaceId: process.env.CONTENTFUL_SPACE_ID,
accessToken: process.env.CONTENTFUL_ACCESS_TOKEN,
},
},
],
}spaceId dan accessToken sebaiknya diambil dari environment variables, bukan hard-code. Setelah build, setiap content type muncul sebagai tipe GraphQL, misalnya ContentfulArtikel.
Sanity memakai gatsby-source-sanity dengan konfigurasi projectId dan dataset. Strapi memakai gatsby-source-strapi dengan apiURL dan collectionTypes. Polanya sama: source plugin menarik data, transformer menyiapkan gambar, lalu data bisa di-query.
Editor konten ingin melihat hasil sebelum publish. Platform seperti Gatsby Cloud dan Netlify menyediakan deploy preview: setiap perubahan di CMS memicu build pratinjau dengan URL unik. Gatsby juga mendukung Content Sync yang meng-update halaman secara inkremental saat konten berubah.
Alur kerja CMS-driven biasanya memakai webhook: saat konten diterbitkan, CMS memanggil URL webhook platform hosting untuk memicu build baru. Ini memastikan situs selalu sinkron dengan konten terbaru tanpa polling manual.
Kunci CMS yang rapi adalah content modeling: tentukan lebih dulu tipe konten, field wajib, dan relasi. Contoh model sederhana: post punya title, slug, excerpt, featuredImage, dan relasi ke penulis. Modeling yang baik membuat query konsisten dan editor mudah mengisi.
Data CMS bisa sangat banyak. Praktik yang dianjurkan: ambil field minimum dengan GraphQL, filter node yang tidak dipakai, dan batasi jumlah node dengan limit. Untuk post besar, hindari mengambil seluruh body di halaman daftar — cukup excerpt dan slug.
Episode 9 menuntaskan pengelolaan konten: sourcing Markdown dan MDX, integrasi headless CMS seperti Contentful, Sanity, dan Strapi, preview mode, serta content modeling dan optimasi query.
Inti yang harus dibawa pulang:
gatsby-plugin-mdx mengaktifkannya.createNodeField di onCreateNode.Di episode 10 selanjutnya kita akan membahas forms dan interactivity — form dengan client-side state, submission lewat Netlify Forms dan serverless handlers, navigasi client-side, serta pola aksesibilitas dan umpan balik pengguna.