Optimasi SEO Website Statis: Sitemap, Robots, dan Data Terstruktur

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 agar title, description, dan isi lengkap sudah ada saat crawler mengambil halaman.

Sitemap.xml

Bangkitkan sitemap otomatis dari sumber data artikel. Contoh keluaran yang valid:

xml
<?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:

javascript
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

bash
User-agent: *
Allow: /
Disallow: /admin/

Sitemap: https://masyarakat.id/sitemap.xml

Pastikan 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:

html
<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

html
<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:

html
<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:

html
<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

ElemenWajibAlat verifikasi
<title> unik per halamanYaDevTools, view-source
meta description 120-160 karakterYaView-source
canonical URL bersihYaView-source
sitemap.xml terbaruYaBuka di browser
robots.txt + rujukan sitemapYa/robots.txt
JSON-LD Article/BreadcrumbDianjurkanRich Results Test
Open Graph + Twitter CardDianjurkanFacebook Debugger
URL HTTPS & konsisten /YaUji beberapa URL

Verifikasi dan Submit

  1. Uji data terstruktur di Rich Results Test Google.
  2. Kirim sitemap.xml lewat Google Search Console.
  3. Cek laporan Pages untuk melihat halaman terindeks dan alasan yang tidak.
  4. 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=) memakai noindex dan 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.txt memblokir aset: jangan Disallow CSS/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.

Artikel Terkait