Mas Ahmad SafwanSEO & AI Search Knowledge Base Cari
Menu

Structured Data menengah

JSON-LD untuk SEO

JSON-LD memisahkan data dari tampilan, sehingga satu template bisa menghasilkan markup yang konsisten untuk ribuan halaman. Bagian yang jarang dijelaskan: cara menghubungkan beberapa entitas dalam satu graf dengan @id, supaya penulis, situs, dan artikel tidak dideklarasikan berulang-ulang dengan versi yang saling berbeda.

Oleh Diterbitkan 4 menit baca

JSON-LD (JavaScript Object Notation for Linked Data) adalah format untuk menulis structured data sebagai objek JSON di dalam tag <script type="application/ld+json">, terpisah dari HTML tampilan. Google merekomendasikannya di atas Microdata dan RDFa karena lebih mudah dibuat, dibaca, dan diubah tanpa menyentuh markup halaman.

Bentuk dasar

Satu entitas, properti minimal
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "Canonical Tag",
  "author": { "@type": "Person", "name": "Ahmad Safwan", "url": "https://www.masahmadsafwan.com/author/ahmad-safwan/" },
  "datePublished": "2026-09-15T08:00:00+07:00",
  "dateModified": "2026-09-15T08:00:00+07:00"
}
</script>

Tiga kunci yang selalu ada: @context (vocabulary yang dipakai, hampir selalu https://schema.org), @type (tipe entitas), dan properti sesuai tipe. Blok ini boleh ditaruh di <head> atau <body>; Google membaca keduanya, termasuk yang disisipkan JavaScript setelah render (tapi lebih aman di HTML server).

Pola @graph dan @id

Halaman nyata biasanya punya beberapa entitas: situs, penulis, artikel, breadcrumb. Menulisnya sebagai objek terpisah yang saling mengulang (penulis dideklarasikan penuh di Article dan lagi di WebSite) rawan tidak konsisten. Pola yang lebih rapi: satu blok dengan @graph berisi semua entitas, tiap entitas punya @id unik, dan entitas lain merujuknya dengan {"@id": "..."}.

Satu graf untuk satu halaman artikel. Inilah pola yang dipakai di situs ini.
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebSite",
      "@id": "https://www.example.com/#website",
      "name": "Nama Situs",
      "url": "https://www.example.com/",
      "inLanguage": "id",
      "publisher": { "@id": "https://www.example.com/author/nama/#person" }
    },
    {
      "@type": "Person",
      "@id": "https://www.example.com/author/nama/#person",
      "name": "Nama Penulis",
      "url": "https://www.example.com/author/nama/"
    },
    {
      "@type": "WebPage",
      "@id": "https://www.example.com/technical-seo/canonical/#page",
      "url": "https://www.example.com/technical-seo/canonical/",
      "name": "Canonical Tag",
      "isPartOf": { "@id": "https://www.example.com/#website" }
    },
    {
      "@type": "Article",
      "@id": "https://www.example.com/technical-seo/canonical/#article",
      "headline": "Canonical Tag",
      "author": { "@id": "https://www.example.com/author/nama/#person" },
      "publisher": { "@id": "https://www.example.com/author/nama/#person" },
      "datePublished": "2026-09-15T08:00:00+07:00",
      "dateModified": "2026-09-15T08:00:00+07:00",
      "mainEntityOfPage": { "@id": "https://www.example.com/technical-seo/canonical/#page" },
      "image": ["https://www.example.com/assets/og/canonical.png"]
    },
    {
      "@type": "BreadcrumbList",
      "@id": "https://www.example.com/technical-seo/canonical/#breadcrumb",
      "itemListElement": [
        { "@type": "ListItem", "position": 1, "name": "Beranda", "item": "https://www.example.com/" },
        { "@type": "ListItem", "position": 2, "name": "Technical SEO", "item": "https://www.example.com/technical-seo/" },
        { "@type": "ListItem", "position": 3, "name": "Canonical Tag" }
      ]
    }
  ]
}

Aturan @id: harus berupa IRI (URL) yang unik dan sama persis di semua halaman untuk entitas yang sama. Penulis dengan @id .../author/nama/#person di semua artikel memberi tahu sistem bahwa itu satu orang, bukan seratus orang bernama sama. Nilai setelah # bebas; #person, #website, #page hanya konvensi.

Properti yang sering salah

PropertiKesalahan umumYang benar
datePublishedTanggal tanpa zona waktu, atau format lokal ("15/09/2026")ISO 8601 dengan zona waktu: 2026-09-15T08:00:00+07:00
dateModifiedDiisi tanggal build/hari ini di semua halamanHanya berubah saat isi berubah; harus sama dengan tanggal yang tampil di halaman
author.name"Tim Redaksi PT X" atau "Admin", atau nama plus jabatanNama orang atau organisasi saja; Google secara eksplisit meminta tanpa jabatan atau gelar
author.url / sameAsDikosongkan, atau diisi URL berandaURL halaman profil penulis; sameAs ke profil eksternal hanya kalau benar-benar milik penulis
imageSatu gambar kecil, atau URL relatifURL absolut, resolusi tinggi; Google menyarankan beberapa rasio (16:9, 4:3, 1:1)
publisherOrganization dengan nama situs padahal tidak ada organisasiPerson atau Organization yang benar-benar ada; keduanya diterima Google untuk Article
headlineBerbeda jauh dari H1, atau berisi nama situsJudul artikel, ringkas
url di WebPageURL dengan parameter atau tanpa garis miring akhir yang berbeda dari canonicalSama persis dengan canonical

Yang tidak perlu dilakukan

  • Menyalin semua properti Schema.org. Google hanya memakai properti yang ia dokumentasikan per tipe. Properti lain tidak salah, tapi tidak menghasilkan apa pun.
  • Menambahkan aggregateRating tanpa ulasan nyata di halaman. Ini pelanggaran pedoman yang paling sering kena tindakan manual.
  • FAQPage di setiap halaman. Vocabulary-nya valid, tapi Google tidak lagi menampilkan rich result-nya sejak Mei 2026.
  • Beberapa blok JSON-LD yang saling bertentangan (plugin SEO + tema + plugin lain, masing-masing mendeklarasikan Article dengan nilai berbeda). Google mencoba menggabungkan, hasilnya tidak terduga. Satu sumber saja.
  • Markup pada halaman noindex. Tidak ada gunanya.

Cara memvalidasi dan melihat apa yang Google baca

  1. Validasi sintaksTempel JSON ke validator JSON biasa dulu; satu koma salah membuat seluruh blok diabaikan tanpa peringatan di halaman.
  2. Rich Results TestMasukkan URL atau kode. Baca error (menggugurkan syarat) dan peringatan (properti direkomendasikan yang kosong). Untuk tipe yang tidak didukung Google, alat ini hanya menampilkan "tidak ada rich result", bukan error.
  3. Schema Markup ValidatorUntuk memeriksa vocabulary tipe apa pun terhadap Schema.org.
  4. URL InspectionSetelah Google meng-crawl, bagian Enhancements menunjukkan apa yang Google deteksi dari versi tersimpan. Kalau tidak muncul padahal ada di halaman, kemungkinan disisipkan JavaScript yang gagal, atau JSON tidak valid.
  5. Search Console → EnhancementsPantau error di seluruh situs setelah perubahan template.

Menghasilkan JSON-LD dari template

Untuk situs statis atau CMS, buat JSON-LD dari data halaman (judul, tanggal, penulis, breadcrumb) dengan satu fungsi, lalu JSON.stringify. Keuntungannya: tidak mungkin ada koma yang hilang, @id pasti konsisten, dan mengubah struktur entitas cukup di satu tempat. Yang perlu diperhatikan saat menyisipkan ke HTML: karakter </script> di dalam string JSON harus di-escape (misalnya jadi <\/script>) supaya tidak menutup tag lebih awal.

Rujukan

  1. Structured data general guidelines: format Google Search Central
  2. Article structured data Google Search Central
  3. Breadcrumb structured data Google Search Central
  4. Profile page structured data Google Search Central
  5. JSON-LD 1.1 specification W3C
  6. Rich Results Test Google

Tentang penulis

Ahmad Safwan menulis dan mendokumentasikan pembelajaran tentang SEO, technical SEO, search visibility, dan perkembangan AI Search di situs ini. Koreksi dan pertanyaan lewat halaman kontak.