Tutorial Coding: Cara Membuat Blog Menggunakan Next JS dan Notion API! Simak YuK!

Profile
Prasatya

16 Oktober 2025

Tutorial Coding: Cara Membuat Blog Menggunakan Next JS dan Notion API! Simak YuK!

Tutorial Coding - ini akan membawa Anda melalui journey lengkap dalam membangun blog modern yang cepat, efisien, dan mudah dikelola. Di era di mana content adalah king, memiliki platform blog yang responsif dan mudah di-maintain menjadi kebutuhan primer bagi setiap developer dan content creator.

Dalam Tutorial Coding komprehensif ini, kita akan memanfaatkan Next.js 14 sebagai framework React yang powerful dan Notion sebagai headless CMS. Kombinasi ini memungkinkan kita membuat blog dengan writing experience yang luar biasa di Notion, sambil menikmati benefits technical dari Next.js seperti Server-Side Rendering, Static Site Generation, dan optimasi performa otomatis.

Apa yang membuat berbeda adalah pendekatan real-worldnya. Kita tidak hanya sekedar menyambungkan API, tetapi membangun solusi production-ready dengan pertimbangan arsitektur yang solid, error handling, dan optimasi performa. Anda akan belajar bagaimana mengubah Notion dari sekedar note-taking app menjadi CMS yang powerful untuk blog Anda.

Mengapa Memilih Next.js dan Notion API?

Keunggulan Next.js 14 untuk Blog

Next.js telah menjadi standar industri untuk pengembangan aplikasi React modern. Dalam Tutorial Coding ini, kita memanfaatkan fitur-fitur terbaru Next.js 14 termasuk:

  • App Router: Paradigma routing baru yang lebih intuitif dan powerful
  • Server Components: Memungkinkan rendering di server untuk performa yang lebih baik
  • Static Site Generation: Generate halaman statis untuk loading yang instan
  • Image Optimization: Optimasi gambar otomatis untuk berbagai device

Penggunaan Next.js sangat tepat untuk blog karena kemampuan SEO-nya yang luar biasa. Dengan Server-Side Rendering, konten blog Anda dapat di-crawl dengan mudah oleh search engines, memberikan keunggulan kompetitif dalam hal visibilitas.

Notion sebagai Headless CMS

Notion bukan hanya sekedar tool untuk mencatat, tetapi telah berkembang menjadi platform yang powerful untuk manajemen konten. Dengan Notion API, kita dapat:

  • Memanfaatkan writing experience yang sudah familiar bagi banyak orang
  • Mengelola konten secara terstruktur dengan database properties
  • Berkolaborasi dengan tim dalam pembuatan konten
  • Mengakses dari berbagai device secara real-time

Yang menarik dari pendekatan ini adalah Anda tidak perlu membangun admin panel yang kompleks. Notion menjadi admin panel itu sendiri dengan user experience yang sudah sangat refined.

Baca Juga: Tutorial JavaScript: 5 Jenis Operator Logika JavaScript yang Harus Kamu Ketahui

Persiapan Development Environment

Prasyarat dan Tools yang Diperlukan

Sebelum memulai Tutorial Coding ini, pastikan Anda telah menyiapkan environment development dengan tools berikut:

  • Node.js (versi 18 atau lebih baru)
  • npm atau yarn sebagai package manager
  • Code editor (VS Code direkomendasikan)
  • Akun Notion (gratis sudah cukup)
  • Akun Vercel untuk deployment

Inisialisasi Project Next.js

Mari kita mulai dengan membuat project Next.js baru. Buka terminal dan jalankan perintah berikut:

npx create-next-app@latest blog-pribadi --typescript --tailwind --eslint --app --src-dir --import-alias "@/*"

Pilihan konfigurasi yang kita gunakan dalam Tutorial Coding ini:

  • TypeScript: Untuk type safety dan developer experience yang更好
  • Tailwind CSS: Untuk styling yang efisien dan konsisten
  • App Router: Menggunakan paradigm routing terbaru dari Next.js
  • src directory: Memisahkan source code dari configuration files

Setelah proses instalasi selesai, masuk ke directory project dan jalankan development server:

cd blog-pribadi npm run dev

Konfigurasi Notion sebagai CMS

Membuat Integration di Notion

Pertama-tama, kita perlu membuat integration di Notion untuk mengakses API:

  1. Kunjungi https://www.notion.com/my-integrations
  2. Klik "New integration"
  3. Beri nama "Blog Integration" dan pilih workspace yang ingin digunakan
  4. Setelah integration dibuat, copy "Internal Integration Secret" yang akan kita gunakan sebagai NOTION_TOKEN

Membuat Database untuk Blog Posts

Database dalam Notion akan berfungsi sebagai content repository untuk blog kita. Buat database baru dengan properties berikut:

Image

Koneksikan Integration dengan Database

Setelah database dibuat, kita perlu memberikan akses ke integration yang telah kita buat:

  1. Buka database di Notion
  2. Klik tombol "Share" di pojok kanan atas
  3. Klik "Invite" dan pilih integration yang telah dibuat
  4. Database ID dapat ditemukan dari URL: https://www.notion.so/your-workspace/{database_id}?v=...

Implementasi Teknis: Integrasi Next.js dengan Notion API

Setup Environment Variables

Buat file .env.local di root project dan tambahkan variabel berikut:

NOTION_TOKEN=secret_your_integration_token_here NOTION_DATABASE_ID=your_database_id_here

Jangan lupa menambahkan .env.local ke .gitignore untuk keamanan.

Membuat Notion Client

Buat file src/lib/notion.ts untuk menangani semua interaksi dengan Notion API:

import { Client } from '@notionhq/client'; const notion = new Client({ auth: process.env.NOTION_TOKEN, }); export interface BlogPost { id: string; title: string; slug: string; description: string; status: string; publishedDate: string; author: string; content?: string; } export const getPublishedPosts = async (): Promise<BlogPost[]> => { try { const response = await notion.databases.query({ database_id: process.env.NOTION_DATABASE_ID!, filter: { property: 'Status', select: { equals: 'Published', }, }, sorts: [ { property: 'Published Date', direction: 'descending', }, ], }); return response.results.map((page) => { const properties = page.properties as any; return { id: page.id, title: properties.Title.title[0]?.plain_text || '', slug: properties.Slug.rich_text[0]?.plain_text || '', description: properties.Description.rich_text[0]?.plain_text || '', status: properties.Status.select?.name || 'Draft', publishedDate: properties['Published Date']?.date?.start || '', author: properties.Author.select?.name || '', }; }); } catch (error) { console.error('Error fetching posts from Notion:', error); return []; } };

Implementasi Halaman Blog List

Buat file src/app/page.tsx untuk menampilkan daftar blog posts:

import { getPublishedPosts } from '@/lib/notion'; import Link from 'next/link'; export default async function Home() { const posts = await getPublishedPosts(); return ( <div className="container mx-auto px-4 py-8"> <h1 className="text-4xl font-bold mb-8">Blog Saya</h1> <div className="grid gap-6"> {posts.map((post) => ( <article key={post.id} className="border-b border-gray-200 pb-6"> <h2 className="text-2xl font-semibold mb-2"> <Link href={`/blog/${post.slug}`} className="text-blue-600 hover:text-blue-800 hover:underline" > {post.title} </Link> </h2> <p className="text-gray-600 mb-2">{post.description}</p> <div className="flex justify-between items-center text-sm text-gray-500"> <span>Oleh: {post.author}</span> <span>{new Date(post.publishedDate).toLocaleDateString('id-ID')}</span> </div> </article> ))} </div> </div> ); }

Implementasi Dynamic Routing untuk Blog Posts

Membuat Halaman Blog Detail

Buat directory src/app/blog/[slug] dan buat file page.tsx di dalamnya:

import { getPublishedPosts } from '@/lib/notion'; import { notFound } from 'next/navigation'; interface PageProps { params: { slug: string; }; } export async function generateStaticParams() { const posts = await getPublishedPosts(); return posts.map((post) => ({ slug: post.slug, })); } export default async function BlogPost({ params }: PageProps) { const posts = await getPublishedPosts(); const post = posts.find((p) => p.slug === params.slug); if (!post) { notFound(); } return ( <article className="container mx-auto px-4 py-8 max-w-3xl"> <header className="mb-8"> <h1 className="text-4xl font-bold mb-4">{post.title}</h1> <div className="flex justify-between items-center text-gray-600"> <span>Oleh: {post.author}</span> <span>{new Date(post.publishedDate).toLocaleDateString('id-ID')}</span> </div> </header> <div className="prose prose-lg max-w-none"> {/* Konten blog akan ditampilkan di sini */} <p>{post.description}</p> </div> </article> ); }

Optimasi SEO dan Metadata

Implementasi Dynamic Metadata

Untuk memastikan setiap halaman blog memiliki metadata yang optimal, kita perlu mengimplementasikan generateMetadata:

import { Metadata } from 'next'; export async function generateMetadata({ params }: PageProps): Promise<Metadata> { const posts = await getPublishedPosts(); const post = posts.find((p) => p.slug === params.slug); if (!post) { return { title: 'Postingan Tidak Ditemukan', }; } return { title: `${post.title} | Blog Saya`, description: post.description, openGraph: { title: post.title, description: post.description, type: 'article', publishedTime: post.publishedDate, authors: [post.author], }, twitter: { card: 'summary_large_image', title: post.title, description: post.description, }, }; }

Baca Juga: Tutorial JavaScript: Perulangan For dan Bentuk Lainnya Pada JavaScript

Advanced Features dan Optimasi

Implementasi Static Site Generation (SSG)

Salah satu keunggulan Next.js adalah kemampuan untuk generate static pages. Dalam src/app/blog/[slug]/page.tsx, kita sudah mengimplementasikan generateStaticParams untuk pre-render semua halaman blog pada build time.

Incremental Static Regeneration (ISR)

Untuk konten yang mungkin update, kita bisa implement ISR:

export const revalidate = 3600; // Regenerate every hour

Error Handling dan Fallback

Implementasi error handling yang robust sangat penting untuk user experience:

import { ErrorBoundary } from 'next/dist/client/components/error-boundary'; // Dalam komponen Anda <ErrorBoundary fallback={<div>Terjadi error saat memuat konten</div>}> {/* Konten blog Anda */} </ErrorBoundary>

Deployment dan Production Ready

Persiapan Deployment ke Vercel

  1. Push code ke GitHub repository
  2. Hubungkan repository ke Vercel
  3. Konfigurasi environment variables di Vercel dashboard
  4. Deploy secara otomatis

Optimasi Performance

  • Image Optimization: Next.js Image component untuk optimasi gambar otomatis
  • Font Optimization: Menggunakan next/font untuk web font yang optimal
  • Bundle Analysis: Gunakan @next/bundle-analyzer untuk menganalisis bundle size

Kesimpulan

Tutorial Coding ini telah membimbing Anda melalui proses lengkap membangun blog modern dengan Next.js dan Notion API. Kami telah mencakup segala aspek mulai dari setup awal, integrasi API, implementasi fitur, hingga optimasi untuk production. Yang membuat tutorial ini ini valuable adalah pendekatan practical-nya. Anda tidak hanya belajar teori, tetapi implementasi nyata yang bisa langsung diaplikasikan. Arsitektur yang kita bangun scalable dan maintainable, memungkinkan Anda untuk mengembangkan fitur-fitur tambahan di masa depan.

Image

Tutorial Coding membangun blog dengan Next.js dan Notion API adalah langkah awal yang bagus dalam journey fullstack development Anda. Namun, masih banyak konsep advanced yang perlu dikuasai untuk menjadi developer yang kompeten di industri. Jika Anda serius ingin membangun karir di bidang web development atau ingin membuat aplikasi web yang lebih kompleks, pertimbangkan untuk mengikuti Kelas Fullstack di Codepolitan. Program ini dirancang khusus untuk:

  • Menguasai fullstack development dari fundamental hingga advanced concepts
  • Memahami arsitektur aplikasi yang scalable dan maintainable
  • Mempelajari best practices industri yang sesungguhnya
  • Membangun portfolio project yang impressive
  • Mempersiapkan karir dengan skill yang dicari industri

Kelas Fullstack Codepolitan tidak hanya mengajarkan coding, tetapi juga cara berpikir seperti software engineer yang dapat menyelesaikan masalah kompleks dan menghasilkan solusi yang robust.

Daftar hari ini dan mulailah journey menjadi Fullstack Developer yang kompeten!

References:

  1. Notion API Documentation - Getting Started
  2. Next.js Documentation - App Router
  3. Building a Blog with Next.js - Max Leiter
  4. Notion Help Center - API Integrations

What do you think?

Reactions