Bagi para Narablog, terutama yang menggunakan platform Blogger.com, kecepatan indeks artikel di mesin pencari seperti Google sangat penting. Namun, sering kali kita mengalami kendala: artikel yang sudah dipublikasikan belum juga muncul di hasil pencarian meskipun sudah beberapa hari.
Nah, di artikel ini, saya ingin mencoba berbagi pengalaman tentang cara mempercepat proses pengindeksan artikel blog menggunakan Google Indexing API yang diterapkan di blog pribadi saya.
Langkah-langkah yang akan saya jelaskan sudah pernah saya praktikkan sendiri. Hasilnya cukup signifikan dalam hal membantu mempercepat munculnya artikel di hasil pencarian Google. Tapi, sebelum lanjut, ada satu hal penting yang harus saya sampaikan:
Apa Itu Google Indexing API?
Google Indexing API awalnya diperkenalkan untuk membantu pengindeksan halaman dari jenis konten tertentu seperti low-latency jobs dan konten event live. Namun, dalam praktiknya, banyak yang memanfaatkannya untuk mendorong halaman blog agar lebih cepat dikenali oleh bot Google.
Biasanya, proses ini memakan waktu berhari-hari jika hanya mengandalkan sitemap atau permintaan manual via Search Console.
Dengan Indexing API, kita bisa "memberi tahu Google secara langsung" setiap kali ada URL baru yang diterbitkan di blog.
Persiapan yang Dibutuhkan
Sebelum memulai, pastikan kamu sudah memiliki 6 aset digital berikut:
- Akun Google Cloud Platform (GCP).
- Project baru di GCP untuk mengaktifkan Indexing API.
- Service Account + private key.
- Spreadsheet Google Sheet untuk mencatat hasil indeks.
- Blog berbasis Blogger dengan RSS Feed aktif.
- Akun Gmail untuk menerima notifikasi hasil indeks.
Langkah-Langkah Setup Google Indexing API untuk Blogger
Langkah #1. Buat Proyek di Google Cloud Platform
- Kunjungi Google Cloud Console
- Buat proyek baru, beri nama sesuai keinginan (misal: "IndexingAPI-Blog")
- Aktifkan Indexing API melalui API & Services > Library > Search "Indexing API" > Enable
Langkah #2. Buat Service Account
- Masuk ke menu IAM & Admin > Service Accounts
- Klik Create Service Account
- Beri nama, deskripsi, lalu klik selesai
- Setelah dibuat, klik pada Service Account tadi, lalu buat kunci baru (Create Key) dan pilih JSON
- Simpan file JSON tersebut, karena akan digunakan di script nanti
Langkah #3. Tambahkan Service Account ke Search Console
- Buka Google Search Console
- Tambahkan email Service Account (biasanya dengan formati seperti ini: indexing-api@namaproject.iam.gserviceaccount.com) sebagai Owner ke properti blog Anda
Langkah #4. Siapkan Spreadsheet
- Buat spreadsheet dan berikan nama "Indexed"
- Buat header kolom: URL | Tanggal | Status | Pesan
- Salin ID spreadsheet dari URL
Langkah #5. Buat Script di Google Apps Script
- Buka Google Apps Script
- Buat proyek baru
- Copy-paste script Indexing API di bawah ini:
const SERVICE_ACCOUNT_EMAIL = 'indexing-api@xxx.iam.gserviceaccount.com'; const PRIVATE_KEY = `-----BEGIN PRIVATE KEY-----\nMIIEvQIB...`; const SCOPES = ['https://www.googleapis.com/auth/indexing']; const SPREADSHEET_ID = 'SPREADSHEET_ID_KAMU'; const FEED_URL = 'https://www.dirman.web.id/feeds/posts/default?alt=json'; const EMAIL_PENERIMA = 'halo@dirman.web.id'; function checkAndPingNewPosts() { const feed = UrlFetchApp.fetch(FEED_URL); const json = JSON.parse(feed.getContentText()); const entries = json.feed.entry || []; if (entries.length === 0) return; const sheet = SpreadsheetApp.openById(SPREADSHEET_ID).getSheetByName('Indexed'); const lastRow = sheet.getLastRow(); const existingUrls = lastRow > 1 ? sheet.getRange(2, 1, lastRow - 1, 1).getValues().flat() : []; let emailBody = ''; for (const entry of entries) { const url = entry.link.find(l => l.rel === 'alternate').href; const publishedDate = new Date(entry.published.$t); const today = new Date(); today.setHours(0, 0, 0, 0); if (!existingUrls.includes(url) && publishedDate >= today) { const result = pingIndexingAPI(url); const status = result.success ? 'Sukses' : 'Gagal'; const message = result.message; sheet.appendRow([url, new Date(), status, message]); emailBody += `${result.success ? '✅' : '❌'} ${url} — ${message}\n`; } } if (emailBody) { MailApp.sendEmail({ to: EMAIL_PENERIMA, subject: 'Laporan Indexing Blogger Hari Ini', body: `Hasil indexing:\n\n${emailBody}` }); } } function pingIndexingAPI(urlToPing) { try { const jwt = createJwtToken(SERVICE_ACCOUNT_EMAIL, PRIVATE_KEY, SCOPES[0]); const accessToken = getAccessToken(jwt); const payload = { "url": urlToPing, "type": "URL_UPDATED" }; const response = UrlFetchApp.fetch('https://indexing.googleapis.com/v3/urlNotifications:publish', { method: 'post', contentType: 'application/json', payload: JSON.stringify(payload), headers: { Authorization: `Bearer ${accessToken}` } }); const result = JSON.parse(response.getContentText()); Logger.log(`Indexed: ${urlToPing}`); let message = 'Indexed successfully.'; if (result.urlNotificationMetadata && result.urlNotificationMetadata.latestUpdate) { message += ` Notified at ${result.urlNotificationMetadata.latestUpdate.notifyTime}`; } return { success: true, message }; } catch (e) { Logger.log(`Gagal index: ${urlToPing} - ${e}`); return { success: false, message: e.toString() }; } } // Fungsi pendukung function createJwtToken(email, privateKey, scope) { const now = Math.floor(Date.now() / 1000); const jwtHeader = Utilities.base64EncodeWebSafe(JSON.stringify({ alg: 'RS256', typ: 'JWT' })); const jwtClaimSet = Utilities.base64EncodeWebSafe(JSON.stringify({ iss: email, scope: scope, aud: 'https://oauth2.googleapis.com/token', exp: now + 3600, iat: now })); const signatureInput = `${jwtHeader}.${jwtClaimSet}`; const signatureBytes = Utilities.computeRsaSha256Signature(signatureInput, privateKey); const signature = Utilities.base64EncodeWebSafe(signatureBytes); return `${signatureInput}.${signature}`; } function getAccessToken(jwt) { const response = UrlFetchApp.fetch('https://oauth2.googleapis.com/token', { method: 'post', payload: { grant_type: 'urn:ietf:params:oauth:grant-type:jwt-bearer', assertion: jwt } }); const json = JSON.parse(response.getContentText()); return json.access_token; }
- Ganti konfigurasi: SERVICE_ACCOUNT_EMAIL, PRIVATE_KEY, FEED_URL, SPREADSHEET_ID, dan EMAIL_PENERIMA
- Simpan dan jalankan fungsi checkAndPingNewPosts()
- Beri izin akses saat diminta
Langkah #6. Atur Trigger Otomatis
- Di menu Apps Script, klik Clock Icon (Triggers)
- Tambah trigger untuk fungsi checkAndPingNewPosts()
- Setel agar berjalan secara berkala (misal: setiap jam atau per hari)
Hasil dan Catatan Penting
Setelah menjalankan script ini, hasilnya bisa dilihat pada:
- Spreadsheet yang mencatat URL yang berhasil atau gagal diindeks.
- Email notifikasi yang akan mengirimkan laporan tiap kali ada URL yang di-ping.
Beberapa hal yang saya temukan selama mencoba:
- Script kadang gagal jika format private key salah (pastikan baris dan escape \n benar)
- Artikel yang di-ping hari itu biasanya akan muncul di Google dalam hitungan menit hingga beberapa jam
- Jika URL pernah di-ping sebelumnya, Google tetap bisa mengabaikannya — ini normal
Tanya Jawab & Diskusi
Apakah ini aman digunakan untuk blog Blogger?
Sepanjang pengalaman saya, aman. Namun pastikan penggunaan tidak berlebihan (spam URL).
Bisakah digunakan untuk blog dengan custom domain?
Bisa, selama domain tersebut terverifikasi di Search Console.
Kenapa tidak semua URL langsung muncul di Google?
Karena Google tetap memakai sistem seleksi. Indexing API hanya membantu mempercepat proses crawl, bukan jaminan tampil.
Penutup
Tutorial ini berdasarkan praktik langsung yang saya lakukan di blog dirman.web.id. Jika tertarik mencoba, pastikan mengikuti langkah-langkah dengan cermat.
Dan untuk kebutuhan tambahan, laporan dari status indexing ini juga dapat dikirimkan ke grup atau kanal telegram dengan cara memanfaatkan fitur bot telegram.
Saya ingin mendengar pendapatmu juga:
- Sudahkah kamu mencoba Indexing API sebelumnya?
- Apa saja tantangan yang kamu hadapi?
- Menurutmu, apa dampaknya pada performa blogmu?
Yuk diskusi di kolom komentar atau kontak langsung via halaman kontak blog saya. Jangan lupa bagikan artikel ini jika bermanfaat. Terima kasih sudah membaca sampai akhir 🙌
Posting Komentar
✔ Centang kolom Beri Tahu Saya/Notify Me untuk mendapatkan notifikasi respon komentar.