Cara Otomatisasi IndexNow Bing di Next.js dan Cloudflare Pages CMS

PE
Pena Edukasi
Ilustrasi integrasi otomatis IndexNow Bing dengan Next.js dan Cloudflare Pages CMS untuk mempercepat pemberitahuan publikasi artikel kepada mesin pencari dan mendukung optimasi SEO website.

Gambar: Integrasi IndexNow Bing, Next.js, dan Cloudflare Pages CMS untuk mengotomatisasi pemberitahuan artikel baru kepada mesin pencari.

Mempercepat indeksasi artikel oleh mesin pencari adalah langkah krusial untuk SEO. Fitur IndexNow dari Bing memungkinkan website untuk langsung memberi tahu mesin pencari secara instan setiap kali ada konten baru yang diterbitkan, tanpa harus menunggu crawler datang secara berkala.

Panduan ini membahas cara mengimplementasikan sistem Auto-IndexNow pada arsitektur terpisah (Decoupled), di mana front-end menggunakan Next.js App Router dan sistem manajemen konten (CMS) menggunakan Cloudflare Pages Functions.

⚠️ Penting Sebelum Menyalin Kode: Sesuaikan Data Anda

Panduan teknis di bawah ini menggunakan data referensi contoh agar mudah dipahami. Sebelum Anda menerapkan dan menyalin kode ke proyek (repository) Anda, wajib hukumnya untuk mengganti tiga elemen berikut dengan data asli milik Anda:

  • 1. Domain Website: Pada seluruh contoh kode, ganti teks domainkamu.com menjadi nama domain live Anda yang sebenarnya.
  • 2. API Key IndexNow: Ganti kode 000002827dac419c9d85ed8959fd000a dengan 32 karakter rahasia API Key yang Anda peroleh dari dasbor Bing Webmaster Tools.
  • 3. Slug URL: Pada langkah ke-4 (pembuatan trigger CMS), terdapat variabel bernama slug. Slug adalah bagian akhir dari URL yang merepresentasikan judul artikel Anda (contoh: pada domainkamu.com/judul-artikel, maka judul-artikel adalah slug-nya). Pastikan parameter ini terisi otomatis oleh CMS Anda agar URL yang dikirim ke Bing benar-benar valid.

Langkah 1: Memasang File Verifikasi Kepemilikan Bing

Sebelum API dapat berfungsi, Bing memerlukan bukti bahwa Anda adalah pemilik sah dari domain tersebut.

  1. Dapatkan API Key khusus IndexNow dari dasbor Bing Webmaster Anda.
  2. Buat sebuah file teks menggunakan key tersebut sebagai namanya (contoh: 000002827dac419c9d85ed8959fd000a.txt).
  3. Isi file tersebut hanya dengan rentetan karakter key tersebut, tanpa spasi atau baris baru.
  4. Letakkan file ini di dalam folder public pada direktori proyek Next.js Anda.
Lokasi penempatan file txt verifikasi Bing di dalam folder public Next.js
Pastikan file .txt berada di dalam folder public agar dapat diakses langsung oleh mesin pencari.

Baca Juga: Adab kepada Orang Tua dan Guru: Dua Pintu Keberkahan dalam Hidup

Langkah 2: Mengonfigurasi Environment Variables di Server

Untuk menjaga keamanan sistem agar API tidak disalahgunakan, simpan konfigurasi kredensial Anda di Environment Variables pada pengaturan hosting Anda (misalnya Cloudflare Pages).

  • INDEXNOW_KEY: Masukkan key IndexNow 32 karakter Anda.
  • INDEXNOW_KEY_LOCATION: Masukkan URL lengkap menuju file teks verifikasi di folder public (contoh: https://domainanda.com/89b81...txt).
  • HOSTNAME: Masukkan nama domain utama Anda tanpa https://.
  • INDEXNOW_SECRET: Buat kata sandi acak yang panjang sebagai kunci pengaman komunikasi antar server Anda.
Pengaturan Environment Variables di dasbor Cloudflare Pages
Simpan kunci Anda di Environment Variables agar aman dan tidak terekspos di kode sumber, contoh konfigurasi IndexNow yang ditandai angka 1,2,3 dan yang berwarna merah

Penjelasan setiap variabel:

  • INDEXNOW_KEY: Kunci IndexNow sepanjang 32 karakter yang digunakan untuk verifikasi.
  • INDEXNOW_KEY_LOCATION: URL publik file verifikasi. Pastikan alamat tersebut dapat dibuka dan isi file 000012827dac419c9d85ed8959fd000a.txt hanya berisi nilai INDEXNOW_KEY yang sama.
  • HOSTNAME: Nama host yang diizinkan oleh API, tanpa awalan https://. Nilainya harus sesuai dengan domain pada URL artikel yang dikirim.
  • INDEXNOW_SECRET: Rahasia internal untuk mengautentikasi permintaan dari CMS ke endpoint Next.js. Nilainya harus sama dengan secretCode pada fungsi pemicu CMS.

Contoh Pengisian Variabel di File .env.local (Next.js)

Jika proyek Next.js dijalankan atau dikembangkan secara lokal, buat file bernama .env.local di direktori utama proyek—sejajar dengan file package.json. Masukkan empat variabel berikut sesuai konfigurasi website Pena Edukasi:

INDEXNOW_KEY=000012827dac419c9d85ed8959fd000a
INDEXNOW_KEY_LOCATION=https://web.penaeducasi.com/000012827dac419c9d85ed8959fd000a.txt
HOSTNAME=web.penaeducasi.com
INDEXNOW_SECRET=penaeducasi571a0b6c9d2e7f8a1b3c4d5e6f7a8b9c0d1e2f3a4b5c6d00000

Langkah setelah menyimpan: Simpan file sebagai .env.local (pastikan bukan .env.local.txt), lalu mulai ulang server pengembangan Next.js agar variabel terbaca. Untuk produksi/Cloudflare Pages, masukkan variabel yang diperlukan melalui pengaturan Environment Variables atau Secrets pada hosting, kemudian deploy ulang bila diperlukan. Jangan unggah file .env.local ke repositori publik atau menaruh nilainya di kode sisi klien. Karena INDEXNOW_SECRET adalah rahasia, jika nilai ini pernah dipublikasikan, ganti dengan nilai acak baru dan perbarui nilainya di kedua sisi (Next.js dan CMS).

Catatan kompatibilitas: Contoh API pada Langkah 3 menggunakan process.env. Pastikan variabel tersedia di runtime endpoint Next.js. Jika endpoint dijalankan sepenuhnya sebagai Cloudflare Pages Function, gunakan environment bindings milik Cloudflare sesuai runtime tersebut.

Ingat kode key Indexnow, Host, IndexNow_Key_Location, Indexnow_Secret diatas hanyalah contoh, ganti key, host dan secret milik kalian masing-masing

Pengaturan Indexnow Key di .env.local Vscode
Simpan kunci Anda di .env.local agar aman dan tidak terekspos di kode sumber, contoh konfigurasi IndexNow yang ditandai angka 1,2,3 dan yang berwarna merah

Langkah 3: Membuat API Route IndexNow di Next.js

Buat endpoint penerima di proyek Next.js yang akan bertugas meneruskan URL artikel baru ke server Bing. Buat file di lokasi app/api/indexnow/route.ts.

Penting: Sertakan aturan runtime = 'edge' agar Cloudflare Pages tidak mengalami kegagalan proses build.
import { NextResponse } from "next/server";

export const runtime = 'edge'; 

export async function POST(req: Request) {
  try {
    const payload = await req.json() as { url?: string; secret?: string };

    // Validasi keamanan menggunakan secret key
    if (process.env.INDEXNOW_SECRET && payload.secret !== process.env.INDEXNOW_SECRET) {
      return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
    }

    const url = payload.url;
    
    // Validasi format URL dan pencocokan domain
    if (!url || !url.startsWith(`https://${process.env.HOSTNAME}/`)) {
      return NextResponse.json({ error: "Invalid or missing url" }, { status: 400 });
    }

    const body = {
      host: process.env.HOSTNAME,
      key: process.env.INDEXNOW_KEY,
      keyLocation: process.env.INDEXNOW_KEY_LOCATION,
      urlList: [url]
    };

    // Proses pengiriman ke server Bing
    const r = await fetch("https://www.bing.com/indexnow", {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify(body)
    });

    const text = await r.text();
    return NextResponse.json({ status: r.status, body: text });
  } catch (err: any) {
    return NextResponse.json({ error: err.message }, { status: 500 });
  }
}

Baca Juga: Cara Generate dan Verifikasi API Key IndexNow di Bing Webmaster Tools

Langkah 4: Menanamkan Pemicu (Trigger) di CMS

Tanamkan fungsi pemicu yang berjalan otomatis saat redaksi mempublikasikan artikel di CMS Anda (misalnya di functions/api/[[route]].js pada Cloudflare Pages CMS). Gunakan fungsi waitUntil agar request berjalan di latar belakang.

Pastikan variabel slug yang dikirimkan oleh CMS benar-benar mencerminkan akhiran URL artikel Anda.

// Fungsi background untuk memicu IndexNow
const triggerIndexNow = (slug, waitUntil) => {
  // Ganti web.penaeducasi.com dengan domain Anda
  const articleUrl = `https://web.penaeducasi.com/${slug}`; 
  const secretCode = "MASUKKAN_INDEXNOW_SECRET_ANDA_DI_SINI";

  waitUntil(
    fetch("https://domainkamu.com/api/indexnow", {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({ url: articleUrl, secret: secretCode })
    })
    .then(res => res.json())
    .then(data => console.log("IndexNow Triggered:", data))
    .catch(err => console.error("IndexNow Failed:", err))
  );
};

Langkah 5: Melakukan Deployment Kode ke Server Live

Setelah seluruh file API route, file verifikasi Bing, dan fungsi pemicu CMS selesai ditulis serta disimpan di komputer lokal Anda, perubahan tersebut harus diunggah (deploy) ke server agar dapat diakses secara publik.

Buka terminal (Command Prompt / PowerShell) di direktori proyek Anda, lalu jalankan perintah Git secara berurutan berikut:

git add .
git commit -m "Menambahkan fitur integrasi otomatis IndexNow"
git push origin main

Catatan: Ganti kata main dengan master apabila branch utama repositori GitHub Anda menggunakan nama tersebut.

Setelah perintah di atas dijalankan, buka dasbor Cloudflare Pages Anda dan pantau proses *build* hingga statusnya berubah menjadi Success.

Baca Juga: Pendaftaran Institut Teknologi Bacharuddin Jusuf Habibie (ITH): Jalur SNBP, SNBT, Mandiri, dan KIP Kuliah 2027/2028

Langkah 6: Pengujian Sistem (Troubleshooting & Validasi)

Setelah proses deployment berhasil, sangat disarankan untuk menguji endpoint Next.js melalui terminal (seperti PowerShell atau CMD).

Jalankan perintah ini di terminal Anda (jangan lupa ganti URL dan Secret Key-nya!):

Invoke-RestMethod -Uri "https://domainkau.com/api/indexnow" -Method Post -ContentType "application/json" -Body '{"url":"https://web.penaeducasi.com/artikel-tes-slug","secret":"MASUKKAN_INDEXNOW_SECRET_ANDA_DI_SINI"}'

Cara Membaca Respon HTTP:

  • Status 200 / 202: Sukses! URL telah diterima oleh Bing.
  • Status 401: Secret key tidak cocok. Periksa ketikkan (typo).
  • Status 429 (Too Many Requests): Ini adalah pertanda baik! Jalur API Anda 100% berhasil menembus server Bing, namun terblokir sementara karena Anda melakukan ping terlalu banyak dalam waktu singkat (anti-spam).

Kesimpulan

Integrasi IndexNow pada ekosistem Next.js dan sistem headless CMS memangkas waktu tunggu indeksasi artikel dari hitungan hari menjadi hanya beberapa menit. Tim editorial kini bisa fokus 100% memproduksi tulisan, sementara infrastruktur kode memastikan setiap karya tersebut langsung dikenali oleh mesin pencari secara otomatis saat dipublikasikan.

Artikel Terkait