Pengertian
SEO (Search Engine Optimization) untuk website statis berfokus pada tiga hal: membuat crawler mudah menemukan halaman, memahami isinya, dan mempercayai strukturnya. Karena tidak ada backend, semua sinyal SEO harus tertanam langsung di HTML dan berkas pendamping.
Tiga komponen utama:
sitemap.xml— daftar seluruh URL agar crawler mengetahui apa yang perlu diindeks.robots.txt— aturan akses crawler dan rujukan ke sitemap.- Data terstruktur (JSON-LD) — memberi tahu mesin pencari jenis konten: artikel, breadcrumb, organisasi.
Tambahan yang tak kalah penting: canonical, meta description, Open Graph, dan URL bersih yang konsisten.
Kelebihan
- Tanpa plugin: semua sinyal ditulis langsung di HTML hasil build.
- Konsisten: dibangkitkan otomatis saat build sehingga tidak pernah basi.
- Cepat: HTML statis dirender instan, disukai crawler.
- Terkontrol penuh: tidak ada CMS yang menambah markup tak terduga.
- Gratis: cukup Search Console untuk memantau.
Kekurangan
- Perubahan perlu build ulang: menambah artikel wajib regenerate sitemap.
- Tanpa CMS: metadata harus diisi manual di sumber data.
- Crawler makin pintar soal JS: konten yang hanya muncul via JS tetap berisiko tidak terindeks.
- Tidak ada optimasi otomatis: berbeda dengan plugin SEO di WordPress.
Catatan penting: Jangan mengandalkan JavaScript untuk konten utama. Pre-render setiap artikel menjadi HTML statis agartitle,description, dan isi lengkap sudah ada saat crawler mengambil halaman.
Sitemap.xml
Bangkitkan sitemap otomatis dari sumber data artikel. Contoh keluaran yang valid:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://masyarakat.id/</loc>
<lastmod>2026-09-15</lastmod>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>https://masyarakat.id/optimasi-seo-website-statis/</loc>
<lastmod>2026-09-15</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
</urlset>Generator sederhana di Node.js:
const urls = [{ loc: domain + '/', pri: '1.0' }];
for (const art of articles) {
urls.push({
loc: domain + '/' + encodeURIComponent(art.slug) + '/',
pri: '0.8',
});
}
const today = new Date().toISOString().slice(0, 10);
const sitemap =
'<?xml version="1.0" encoding="UTF-8"?>\n' +
'<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">\n' +
urls
.map((u) =>
' <url><loc>' + u.loc + '</loc><lastmod>' + today +
'</lastmod><changefreq>weekly</changefreq><priority>' + u.pri + '</priority></url>'
)
.join('\n') +
'\n</urlset>\n';
require('fs').writeFileSync('sitemap.xml', sitemap, 'utf8');Aturan praktis: gunakan URL absolut, sertakan semua halaman publik, dan jangan masukkan halaman noindex (mis. template router).
Robots.txt
User-agent: *
Allow: /
Disallow: /admin/
Sitemap: https://masyarakat.id/sitemap.xmlPastikan URL sitemap absolut dan halaman template (mis. article.html router) memakai noindex, follow agar tidak bersaing dengan versi statisnya.
Canonical dan Meta Description
Setiap artikel harus punya canonical tunggal ke URL bersih:
<link rel="canonical" href="https://masyarakat.id/nama-slug/" />
<meta name="description" content="Ringkasan artikel 120-160 karakter." />Hasil build sebaiknya mengganti canonical, title, dan description di HTML statis — bukan di-inject lewat JavaScript.
Open Graph dan Twitter Card
<meta property="og:type" content="article" />
<meta property="og:title" content="Judul Artikel" />
<meta property="og:description" content="Ringkasan artikel." />
<meta property="og:url" content="https://masyarakat.id/nama-slug/" />
<meta property="og:image" content="https://masyarakat.id/og.png?v=2" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta name="twitter:card" content="summary_large_image" />Ukuran ideal gambar OG adalah 1200x630 piksel.
Data Terstruktur JSON-LD
Sisipkan sebelum </head>. Contoh untuk artikel:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Optimasi SEO Website Statis",
"description": "Panduan optimasi SEO website statis.",
"image": "https://masyarakat.id/og.png?v=2",
"author": { "@type": "Person", "name": "Sugeng" },
"datePublished": "2026-09-15",
"dateModified": "2026-09-15",
"publisher": { "@type": "Organization", "name": "Masyarakat" },
"mainEntityOfPage": { "@type": "WebPage", "@id": "https://masyarakat.id/nama-slug/" }
}
</script>Breadcrumb:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Beranda", "item": "https://masyarakat.id/" },
{ "@type": "ListItem", "position": 2, "name": "Teknologi", "item": "https://masyarakat.id/kategori/teknologi/" }
]
}
</script>Untuk beranda, gunakan WebSite; untuk arsip kategori, gunakan CollectionPage.
Checklist SEO Statis
| Elemen | Wajib | Alat verifikasi |
|---|---|---|
<title> unik per halaman | Ya | DevTools, view-source |
meta description 120-160 karakter | Ya | View-source |
canonical URL bersih | Ya | View-source |
sitemap.xml terbaru | Ya | Buka di browser |
robots.txt + rujukan sitemap | Ya | /robots.txt |
| JSON-LD Article/Breadcrumb | Dianjurkan | Rich Results Test |
| Open Graph + Twitter Card | Dianjurkan | Facebook Debugger |
URL HTTPS & konsisten / | Ya | Uji beberapa URL |
Verifikasi dan Submit
- Uji data terstruktur di Rich Results Test Google.
- Kirim
sitemap.xmllewat Google Search Console. - Cek laporan Pages untuk melihat halaman terindeks dan alasan yang tidak.
- Gunakan URL Inspection untuk meminta indeks ulang artikel baru.
Troubleshooting
- Sitemap tidak terindeks: pastikan URL absolut, XML valid, dan bisa diakses publik tanpa login.
- Artikel baru tidak muncul di Google: minta indeks ulang via URL Inspection; indexing bisa perlu beberapa hari.
- Konten ganda: pastikan versi template (
?slug=) memakainoindexdan canonical mengarah ke URL bersih. - Title ganda/berulang: hasil build harus mengganti title, bukan menambahkan.
- JSON-LD error: validasi lewat Rich Results Test; kesalahan umum adalah tanda kutip ganda tak ter-escape atau properti wajib hilang.
robots.txtmemblokir aset: janganDisallowCSS/JS karena mengganggu rendering oleh crawler.
Kesimpulan
SEO website statis bertumpu pada disiplin bangunan: HTML pra-render, sitemap yang dibangkitkan otomatis, robots.txt yang jelas, serta data terstruktur yang valid. Karena semua dihasilkan saat build, konsistensi terjaga dan crawler selalu menerima halaman terbaik.