5 Kesalahan Tersembunyi Sitemap.xml: Mengapa Google Mengabaikan Halaman Anda
Lingkup Teknis: Artikel ini berfokus pada Next.js App Router (
sitemap.ts), pembuatan XML Node.js, and jebakan umum yang diperkenalkan oleh AI Code Assistant (Cursor, Copilot, ChatGPT).
Aplikasi Next.js Anda akhirnya dideploy. UI terlihat sempurna, fitur-fiturnya lengkap, dan skor Lighthouse berwarna hijau. Namun, dua minggu kemudian, Google Search Console masih menunjukkan angka yang menakutkan: “0 Halaman Terindeks.”
Anda ingat pernah menggunakan asisten AI untuk membuat logika routing dalam waktu sekitar lima detik. Kelihatannya benar. Berhasil dikompilasi. Namun di balik layar, vibe-coding baru saja merusak SEO teknis Anda. Mari kita bongkar lima kesalahan sitemap.xml tersembunyi yang dibuat AI saat membuat peta situs Anda, dan cara memperbaikinya.
Ilusi XML Sederhana
Vibe-coding membuat pembuatan peta situs tampak sepele. Anda memberikan perintah: “Buat sitemap untuk blog Next.js saya.” LLM akan langsung menghasilkan file sitemap.ts.
Namun logika AI bekerja secara buta. Ia tidak memverifikasi sistem file yang sebenarnya, tidak menanyakan database untuk memastikan produk masih ada, dan pada dasarnya tidak memahami batasan skala mesin pencari. Ia menciptakan kode yang secara struktur sehat namun secara logika menghancurkan.
Critical — Pemborosan Anggaran Crawl — Kegagalan Arsitektur
URL Hantu (404 dalam Peta Situs)
Kesalahan yang paling umum dibuat oleh LLM adalah berasumsi bahwa array rute Anda bertindak sebagai sumber kebenaran selamanya. Jika Anda meminta AI untuk memetakan array slug, ia sering kali menyertakan rute lama yang telah Anda hapus atau ganti namanya saat melakukan pembersihan kode (refactoring).
Kode AI yang Buruk:
// AI menulis rute lama secara manual atau tidak memeriksa apakah entri database berstatus 'published'
const rute = ["/blog/slug-lama", "/blog/slug-baru"];
return rute.map((r) => ({ url: `https://example.com${r}` }));
Dampaknya: URL Hantu. Peta situs dengan bangga menyajikan halaman kepada Google yang mengembalikan status 404 Not Found. Crawler Google membuang-buang anggarannya untuk mengunjungi tautan mati, yang secara drastis mengurangi skor kepercayaan seluruh domain Anda.
Critical — Penurunan Kualitas Sinyal — Manipulasi Metadata
Spam Dinamis di <lastmod>
Jika Anda meminta AI untuk menambahkan properti lastModified ke sitemap.ts Next.js Anda, AI hampir selalu menggunakan solusi JavaScript yang paling mudah: new Date().
Kode AI yang Buruk:
// AI secara dinamis menghasilkan tanggal saat ini pada setiap deployment
return {
url: "https://example.com/about",
lastModified: new Date(),
changeFrequency: "monthly",
};
Dampaknya: Tag <lastmod> seharusnya memberi tahu Google kapan konten tersebut benar-benar berubah. Jika Anda menggunakan new Date(), Anda memperbarui tanggal pada setiap build atau rendering server. Google mendeteksi inkonsistensi metadata ini seiring waktu, menandai perilaku crawler sebagai manipulatif untuk konten yang tidak berubah, dan berhenti memercayai sinyal lastmod Anda.
High — Penolakan Indeksasi — Kegagalan Sintaks XML
Tag Hilang dan Struktur XML Rusak
Saat AI digunakan untuk membuat string XML secara manual (sering terlihat di Node.js streaming API atau endpoint Express khusus), AI sering kali lupa menutup tag.
Kode AI yang Buruk:
let xml = `<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">`;
urls.forEach((url) => {
// Tag penutup </loc> hilang: seharusnya <loc>${url}</loc>
xml += `<url><loc>${url}</url>`;
});
// Tag penutup </urlset> hilang
Dampaknya: Google Search Console memproses XML secara ketat. Satu tag </loc> yang hilang atau karakter ampersand (&) yang tidak di-escape dalam URL akan membatalkan seluruh file, memblokir semua halaman Anda agar tidak ditemukan.
Medium — Konflik Kanonikal — Manajemen URL
Campuran Protokol (HTTP vs HTTPS)
AI sangat menyukai interpolasi string, dan jarang mempertimbangkan konteks lingkungan kecuali diminta secara eksplisit.
Kode AI yang Buruk:
// AI menulis http secara manual, bukan menggunakan header dinamis atau variabel env
const domain = process.env.DOMAIN || "example.com";
const url = `http://${domain}/pricing`;
Dampaknya: Jika situs live Anda menggunakan HTTPS, tetapi peta situs Anda menyiarkan URL HTTP, Google memperlakukannya sebagai entitas yang terpisah. Hal ini menyebabkan masalah konten duplikat, peringatan rantai pengalihan di Search Console, dan ketidaksesuaian URL kanonikal.
Critical — Pembekuan Indeksasi Total — Kegagalan Penskalaan
Mengabaikan Batas Keras Google
Jika Anda meminta AI untuk membuat peta situs untuk situs e-commerce dengan 150.000 produk, AI akan dengan senang hati mengeluarkan satu array besar.
Dampaknya: Google memiliki batas keras yang ketat: 50.000 URL atau 50MB (tanpa kompresi) per file peta situs. Satu array datar yang besar melanggar aturan ini. Parser akan macet, peta situs akan ditolak, dan katalog dinamis Anda akan gagal terindeks secara diam-diam. Anda harus secara eksplisit meminta AI untuk menerapkan arsitektur “Sitemap Index” untuk membagi URL ke dalam beberapa file yang sesuai.
Fact-Check: Peta Situs yang Dihasilkan Secara Otomatis
- Bukti: Dalam arsitektur Next.js, file
sitemap.tsstatis sering kali dibuat sekali pada saat build. Menggunakannew Date()hanya menulis timestamp build secara permanen, membuat implementasi dinamis tersebut cacat secara teknis. - Bukti: Google Search Central secara jelas menetapkan batas 50MB dan 50.000 URL, yang mengharuskan penggunaan Sitemap Indexing untuk aplikasi skala besar.
- Opini: Dalam pengalaman kami, asisten AI memprioritaskan pembuatan kode yang bisa jalan daripada kode yang patuh pada pedoman webmaster pihak ketiga.
Mengotomatiskan Pemeriksaan dengan WebValid
Asisten AI Anda tidak bermaksud buruk, ia hanya kekurangan konteks saat runtime. Saat Anda menjalankan WebValid, sitemap-scanner mengaudit XML yang dihasilkan dalam hitungan milidetik.
| Pola Kesalahan | Kemampuan WebValid |
|---|---|
| URL Hantu | Secara otomatis melakukan ping ke setiap rute untuk mendeteksi tautan mati |
Spam <lastmod> Dinamis | Mengidentifikasi pola heuristik dari timestamp yang identik di seluruh file |
| Protokol Rusak | Menandai konten campuran dan protokol dalam lingkungan HTTPS |
| Batas Keras Google | Mengevaluasi berat payload dan batas URL yang ketat sebelum deployment |
WebValid memeriksa respons HTTP dan XML yang diproses. Ia tidak menulis ulang handler rute Next.js Anda, tetapi memberikan konteks kesalahan yang tepat yang dibutuhkan AI Anda untuk memperbaikinya.
Daftar Periksa Peta Situs Anda
Template prompt untuk disalin ke asisten AI Anda:
- Periksa 404: Verifikasi bahwa setiap URL di peta situs sesuai dengan rute live 200 OK.
- Perbaiki
<lastmod>: Ambil tanggal dari kolomupdatedAtdatabase yang sebenarnya, bukannew Date(). - Verifikasi XML: Gunakan validator XML yang ketat pada output produksi akhir.
- Sitemap Index: Jika terdapat >45.000 URL (batas keras Google adalah 50.000 — melakukan pembagian lebih awal memberikan margin keamanan), terapkan struktur Sitemap Index.
Asisten AI Anda dapat menulis kode yang bagus — ia hanya tidak tahu di mana kesalahannya. Berikan peta kesalahan dari WebValid, dan ia akan memperbaikinya sendiri.