Auto-submit URL ke API IndexNow (Bing, Yandex, dll) menggunakan Google Apps Script (GAS), lengkap dengan pencatatan log ke Google Sheets untuk keperluan monitoring, debugging, dan audit.
- ⚡ Submit Otomatis: berjalan otomatis lewat Time-Driven Trigger untuk mengecek sitemap secara berkala.
- 🛠️ Submit Manual: fungsi khusus untuk force submit semua URL atau halaman statis kapan saja.
- 📦 Batch Processing: membagi URL menjadi beberapa batch agar tidak melampaui limit API.
- 🛡️ Anti-Bentrok (LockService): mencegah race condition saat submit otomatis dan manual terjadi bersamaan.
- 📊 Audit Log: semua respons dicatat di Google Sheets.
- 🧹 Auto-Cleanup: menghapus log yang berusia lebih dari 7 hari secara otomatis.
[ Sitemap.xml ] ➡️ [ GAS: Sitemap Parser ] ➡️ [ GAS: API Kurir ]
⬇️
[ Google Sheets Log ] ⬅️ [ Response Code ] ⬅️ [ IndexNow API ]
Project ini dibangun dengan prinsip modular architecture agar mudah di-maintain:
Config.gs: pusat konfigurasi, validasi, dan inisialisasi Script Properties.Main.gs: fungsi eksekutor utama yang dipanggil trigger atau manual.Api.gs: fungsi kurir yang menangani HTTP request, retry logic, dan chunking URL.Sitemap.gs: intelijen untuk mengambil dan parsingsitemap.xml/sitemap-pages.xml.Utils.gs: helper umum sepertiLockService, cache, dan pengecekan sheet.TriggerUtils.gs: manajemen trigger otomatis, validasi, dan pembersihan trigger lama.
Sebelum menggunakan project ini, pastikan Anda sudah memiliki:
- Akun Google
- Google Apps Script
- Google Sheets
- API Key IndexNow dari Bing
- Akses ke spreadsheet untuk mencatat log
Dapatkan API key Anda di: https://www.bing.com/indexnow/getstarted
Buat spreadsheet baru atau gunakan spreadsheet yang sudah ada, lalu catat:
- Spreadsheet ID
- Nama sheet yang digunakan untuk menyimpan log
Buka Google Apps Script, lalu masuk ke:
- Project Settings
- Script properties
Tambahkan properti berikut:
IndexNow_KEY:YOUR_INDEXNOW_KEYSPREADSHEETS_ID:YOUR_SPREADSHEET_IDTARGET_POINTS:["https://api.indexnow.org/indexnow", "https://yandex.com/indexnow", "https://search.seznam.cz/indexnow", "https://searchadvisor.naver.com/indexnow"]idx_cache_final:[]
Catatan penting:
- Jangan pernah menyimpan API key asli di repository publik.
- Gunakan placeholder atau variable environment untuk dokumentasi.
const scriptProperties = {
IndexNow_KEY: "YOUR_INDEXNOW_KEY",
SPREADSHEETS_ID: "YOUR_SPREADSHEET_ID",
TARGET_POINTS: [
"https://api.indexnow.org/indexnow",
"https://yandex.com/indexnow"
],
idx_cache_final: []
};Jika ingin menembak URL secara manual tanpa menunggu trigger, jalankan salah satu fungsi berikut di editor GAS:
submitToIndexNowWithLog(): mengecek sitemap dan hanya mengirim URL baru dalam 6 jam terakhir.forceSubmitAllToIndexNow(): memaksa kirim semua URL darisitemap.xml(mengabaikan cache).submitPagesToIndexNow(): mengirim semua halaman statis darisitemap-pages.xml.
Jalankan fungsi setupTriggerFinal() satu kali di editor GAS untuk membuat atau memperbarui trigger otomatis.
Trigger yang diatur:
submitToIndexNowWithLog: setiap 6 jamautoDeleteIndexNowLog: setiap Senin pukul 08.00
Setiap request akan dicatat ke spreadsheet, termasuk Waktu, URL, Status HTTP, dan Response dari API.
| HTTP Code | Status | Keterangan |
|---|---|---|
| 200 | OK | URL submitted successfully |
| 202 | Accepted | URL received. IndexNow key validation pending |
| 400 | Bad request | Invalid format |
| 403 | Forbidden | Key is not valid |
| 422 | Unprocessable Entity | URL does not belong to the host or key mismatch |
| 429 | Too Many Requests | Potential spam |
- Pastikan URL yang dikirim sesuai dengan host yang valid.
- API key harus sesuai dengan domain yang digunakan.
- Hindari pengiriman URL secara berulang tanpa kontrol, karena dapat memicu rate limiting.
- Jangan membagikan Spreadsheet ID atau API key di repository publik.
Jika project ini bermanfaat, Anda dapat mendukung pengembangannya melalui Saweria:
- Saweria — dukung pengembangan dan maintenance project.
Kontribusi dan saran sangat diterima. Jika Anda ingin memperbaiki atau menambahkan fitur baru, silakan buka pull request atau buat issue di repository ini.