Cara Memasang Schema Markup di WordPress Tanpa Plugin
Ada satu pertanyaan yang muncul hampir setiap kali saya mengerjakan website WordPress untuk klien UMKM: bukankah sudah ada plugin SEO yang pasting schema markup otomatis?
Betul, dan sebagian besar memang otomatis. Tapi ada momen ketika plugin itu justru jadi masalah.
Bisa karena klien sedang pindah dari satu plugin ke plugin lain dan tidak mau ada dua plugin SEO bertabrakan. Bisa karena plugin-nya sudah terlalu berat dan saya sedang mengurangi beban. Bisa karena schema yang dibutuhkan tidak ada di paket gratis plugin tersebut. Dan yang paling sering, bisa karena klien memakai tema khusus atau layanan hosting yang sama sekali tidak punya cara aman untuk menambah kode.
Di semua kasus itu, jawabannya sama: pasang sendiri. Dan kabar baiknya, memasang schema markup di WordPress tanpa plugin jauh lebih tidak menakutkan dari yang dibayangkan.
Kapan Manual Jadi Pilihan yang Tepat
Sebelum masuk ke teknis, jujur soal ini dulu. Kalau Anda belum punya plugin SEO sama sekali, saya tidak menyarankan Anda memasang manual. Ambil yang termurah: Rank Math gratis, atau biarkan apa adanya kalau Anda memang ingin nol plugin.
Manual masuk akal karena alasan-alasan berikut.
Satu, Anda sudah punya plugin SEO dan tidak mau dua-duanya. Dua plugin SEO di satu website hampir selalu berakhir dengan schema duplikat. Google membaca dua blok yang menyatakan hal sama dengan format sedikit berbeda, dan hasilnya bukan menggabungkan, tapi membingungkan. Ini penyebab nomor satu schema rusak yang pernah saya temui.
Dua, Anda butuh tipe schema yang tidak ada di plugin Anda. Saya pernah mengerjakan website untuk klien fotografi pengantin yang membutuhkan schema untuk layanan dan paket foto, yang tidak tersedia di paket gratis plugin yang dipakai. Lebih sehat daripada meng-upgrade plugin.
Tiga, Anda sedang menjaga situs tetap ringan. Setiap plugin menambah query database, menambah file yang dimuat, dan menambah permukaan masalah keamanan. Untuk website UMKM yang masih kecil, setiap milidetik yang dihemat berarti sesuatu.
Empat, Anda butuh satu blok di satu halaman tertentu saja. Plugin schema bekerja lintas seluruh situs. Kalau yang Anda butuhkan cuma satu blok JSON-LD di satu landing page, menambah hook di functions.php jauh lebih ringan.
Kalau salah satu dari empat ini adalah situasi Anda, artikel ini untuk Anda. Kalau bukan, pakai plugin gratis saja dan hemat tenaga Anda.

Metode 1: functions.php (Paling Stabil, Paling Direkomendasikan)
Ini metode yang saya gunakan hampir selalu, karena paling stabil: berada di dalam tema, aktif otomatis, tidak perlu di-copy-paste ulang tiap kali halaman dimuat.
Buka Appearance → Theme Editor → functions.php. Kalau menu itu tidak terlihat, install plugin Code Snippets (gratis) dulu, lalu tambahkan kode dari sana.
Lalu tambahkan kode berikut di bagian paling bawah file, sebelum tag penutup:
function tambah_schema_markup() {
if ( ! is_front_page() ) {
return;
}
$schema = array(
'@context' => 'https://schema.org',
'@type' => 'LocalBusiness',
'name' => 'Nama Usaha Anda',
'url' => home_url('/'),
'telephone' => '+62-812-3456-7890',
'address' => array(
'@type' => 'PostalAddress',
'streetAddress' => 'Jl. Kemang Raya No. 10',
'addressLocality' => 'Jakarta Selatan',
'addressRegion' => 'Jakarta',
'postalCode' => '12730',
'addressCountry' => 'ID',
),
'geo' => array(
'@type' => 'GeoCoordinates',
'latitude' => -6.2600,
'longitude' => 106.8140,
),
'openingHoursSpecification' => array(
array(
'@type' => 'OpeningHoursSpecification',
'dayOfWeek' => array('Monday','Tuesday','Wednesday','Thursday','Friday'),
'opens' => '09:00',
'closes' => '18:00',
),
),
'sameAs' => array(
'https://www.instagram.com/akunanda',
'https://www.facebook.com/akunanda',
),
);
echo '<script type="application/ld+json">' .
wp_json_encode( $schema, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES ) .
'</script>';
}
add_action( 'wp_head', 'tambah_schema_markup' );
Ada dua detail di kode itu yang wajib Anda perhatikan, dan ini yang paling sering membuat orang gagal.
Yang pertama, nama fungsi. Di kode di atas, fungsi yang didefinisikan dan fungsi yang dipanggil di `add_action` harus persis sama. Kalau Anda mengubah salah satunya, PHP tidak akanroat ERROR “call to undefined function” dan seluruh halaman bisa ikut mati. Karena itu, pakai nama fungsi tanpa tanda hubung dan tanpa spasi. `tambah_schema_markup` aman. `tambah-schema-markup` tidak aman, karena tanda hubung membuat PHP membacanya sebagai pengurangan, bukan sebagai nama.
Yang kedua, selalu pakai `wp_json_encode`, bukan `json_encode` biasa. Fungsi bawaan WordPress itu otomatis menangani karakter khusus dan memastikan output-nya aman untuk ditaruh di dalam HTML.
Setelah selesai, buka homepage website Anda, tekan Ctrl+U, lalu cari `application/ld+json`. Kalau blok itu muncul di sana, Anda berhasil.

Metode 2: Widget HTML (Tanpa PHP sama sekali)
Kalau Anda sama sekali tidak ingin menyentuh kode PHP, ada cara yang lebih sederhana: pakai widget HTML di sidebar atau footer.
Buka Appearance → Widgets, cari blok Custom HTML atau HTML, lalu tempel kode JSON-LD di sana:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "Nama Usaha Anda",
"url": "https://namadomainanda.com",
"telephone": "+62-812-3456-7890",
"address": {
"@type": "PostalAddress",
"addressLocality": "Jakarta Selatan",
"addressRegion": "Jakarta",
"addressCountry": "ID"
}
}
</script>
Keuntungan cara ini: cepat, tidak ada risiko error PHP, dan bisa dipakai per halaman.
Kekurangannya nyata, dan perlu Anda tahu sebelum memilih. Widget HTML sering diletakkan di footer atau sidebar, yang berarti schema hanya muncul di halaman yang memang menampilkan footer atau sidebar tersebut. Untuk schema yang idealnya di beranda, ini masih cukup, karena Google membacanya dari mana saja di dalam halaman. Tapi kalau theme Anda menyembunyikan footer secara otomatis di halaman tertentu, ada halaman yang schema-nya tidak ikut muncul.
Variasinya: kalau Anda ingin JSON-LD hanya di satu halaman tertentu, tambahkan blok Custom HTML di dalam editor halaman itu sendiri, di bawah konten.
Metode 3: Blok Custom HTML (Paling Hemat Risiko)
Ini metode ketiga, dan yang paling aman kalau Anda benar-benar tidak ingin menyentuh file apa pun.
Buka halaman atau artikel yang Anda tuju, klik ikon + di editor Gutenberg, cari blok Custom HTML, lalu tempel kode JSON-LD di dalamnya. Simpan.
Kodenya sama persis dengan yang di Metode 2, tanpa tag script-nya sendiri, karena blok Custom HTML sudah membungkusnya secara otomatis.
Kelebihannya jelas: tidak menyentuh file theme, tidak menyentuh PHP, dan kalau ada yang salah, tinggal hapus bloknya. Ini metode yang saya sarankan untuk siapa pun yang baru pertama kali memasang schema secara manual.
Kekurangannya: harus diulang di setiap halaman yang Anda perlukan, dan kalau lupa di satu halaman, schema di halaman itu tidak ada.
Menambahkan Schema ke Halaman Tertentu dengan if
Satu hal yang sering ditanyakan: bagaimana cara menambahkan schema berbeda di halaman yang berbeda tanpa membuat banyak file?
Jawabannya pakai kondisi di dalam fungsi yang sama. Fungsi `is_page()` dan `is_single()` membuat Anda bisa Continental output berbeda tergantung halaman yang sedang dibuka.
Contoh sederhana: JSON-LD untuk beranda (LocalBusiness), dan JSON-LD untuk halaman artikel (Article) sekaligus dalam satu fungsi:
function tambah_schema_kondisi() {
if ( is_front_page() ) {
$schema = array(
'@context' => 'https://schema.org',
'@type' => 'LocalBusiness',
'name' => 'Nama Usaha Anda',
'url' => home_url('/'),
);
} elseif ( is_single() ) {
$schema = array(
'@context' => 'https://schema.org',
'@type' => 'Article',
'headline' => get_the_title(),
'datePublished' => get_the_date(),
'author' => array(
'@type' => 'Person',
'name' => 'Nama Penulis',
),
'publisher' => array(
'@type' => 'Organization',
'name' => 'Nama Usaha Anda',
),
'mainEntityOfPage' => get_permalink(),
);
} else {
return;
}
echo '<script type="application/ld+json">' .
wp_json_encode( $schema, JSON_UNESCAPED_SLASHES ) .
'</script>';
}
add_action( 'wp_head', 'tambah_schema_kondisi' );
Dengan satu fungsi ini, Anda sudah punya schema untuk beranda dan untuk semua artikel tanpa menambah beban plugin apa pun. WordPress menyediakan banyak fungsi bawaan lain untuk kondisi, seperti `is_category()` untuk halaman kategori dan `is_page()` untuk halaman statis.
Menambahkan FAQPage Manual di WordPress
Ini kasus yang paling sering ditanyakan setelah LocalBusiness, dan perlu dijelaskan terpisah karena aturannya berbeda.
FAQPage schema hanya boleh dipasang untuk pertanyaan dan jawaban yang benar-benar terlihat di halaman. Ini bukan rekomendasi, ini aturan. Google secara eksplisit memperingatkan bahwa menandai FAQ yang tersembunyi melanggar pedoman dan bisa berakibat penalti.
Artinya, kalau Anda menulis FAQ di dalam konten artikel, Anda perlu membungkus bagian itu dengan penanda. Cara paling aman adalah memisahkan pertanyaan dan jawaban ke dalam Heading dan Paragraf terpisah, lalu menandai keduanya.
Contoh markup untuk satu pasangan tanya-jawab:
<div class="wp-block-group">
<h3>Berapa lama pengerjaan website UMKM?</h3>
<p>Untuk website UMKM standar, pengerjaannya 1 sampai 2 minggu tergantung jumlah halaman dan tingkat revisi yang dibutuhkan.</p>
</div>
Setelah seluruh FAQ terlihat di halaman, tambahkan blok JSON-LD-nya di bawah:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "Berapa lama pengerjaan website UMKM?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Untuk website UMKM standar, pengerjaannya 1 sampai 2 minggu tergantung jumlah halaman dan tingkat revisi yang dibutuhkan."
}
}
]
}
</script>
Perhatikan bahwa isi pada `name` dan pada `text` harus sama persis dengan yang tertulis di halaman. Kalau berbeda, Google bisa menganggap schema itu tidak mencerminkan konten, daniment effects-nya sama dengan tidak memasang sama sekali.
Ada satu hal penting soal FAQPage di 2026. Tampilan kotak tanya-jawab di hasil pencarian sudah Google persempit hanya untuk situs yang otoritatif di bidang kesehatan atau pemerintahan. Artinya, bagi website UMKM, jangan harassed-harapan dari hasil kaya visual itu.
Yang tetap bernilai: FAQ schema adalah salah satu sumber sitasi yang paling sering dibaca AI Overviews dan asisten AI ketika menjawab pertanyaan pengguna. Jadi gunakan untuk ditulis dan dibaca manusia, dan treated sebagai mesin akan mengambilnya dengan sendirinya.
Dua Pertanyaan yang Sering Muncul
“Kalau saya sudah pakai plugin SEO, apakah saya boleh tambah manual?”
Bisa, tapi hanya untuk tipe yang tidak dipakai plugin itu. Kalau plugin Anda sudah mengeluarkan schema Organization dan Article, jangan tambah ulang. Yang aman ditambahkan manual adalah tipe khusus seperti Service, Offer, atau LocalBusiness dengan sub-tipe spesifik.
“Apakah schema hilang setiap kali theme di-update?”
Kalau Anda edit `functions.php` langsung, iya, bisa hilang. Solusinya ada dua: pakai child theme, atau pakai plugin Code Snippets yang menyimpan kode di database sehingga tidak menyentuh file theme sama sekali. Untuk kasus kedua, jangan lupa nonaktifkan kode setelah theme sudah diperbarui dengan benar.

Menguji Hasilnya (Jangan Lewati Langkah Ini)
Memasang kode bukan berarti selesai. Harus diuji, dan ada dua alat gratis untuk itu.
Pertama, Rich Results Test dari Google. Buka `search.google.com/test/rich-results`, masukkan URL halaman Anda, jalankan. Alat ini memberi tahu apakah Google membaca schema Anda, tipe apa yang terdeteksi, dan apa saja yang salah.
Kedua, validator schema.org. Buka `validator.schema.org`, tempel kode JSON-LD Anda. Alat ini menangkap kesalahan yang tidakAlways terlihat di Rich Results Test, seperti tanda kutip yang salah atau koma yang kurang.
Jalankan keduanya. Kalau lolos, teruskan.
Yang ketiga, dan ini yang paling sering terlewat: cek langsung kode sumber halaman. Buka website Anda di browser, tekan Ctrl+U, cari `application/ld+json`. Kalau blok itu tidak ada berarti hook Anda tidak jalan, atau ada plugin caching yang masih menyimpan versi lama halaman.
Kalau Anda memakai plugin caching seperti LiteSpeed Cache atau WP Rocket, bersihkan cache setelah memasang schema. Ini penyebab paling umum schema sudah terpasang tapi tidak muncul.
Dan pantau Google Search Console. Di laporan Enhancements, Anda bisa melihat apakah Google mengakui schema Anda. Kalau jenis schema Anda muncul di sana, artinya sudah diterima dan Anda bisa berhenti khawatir.
Empat Kesalahan yang Paling Sering Terjadi
Kesalahan pertama, nama fungsi PHP mengandung tanda hubung. Sudah dibahas di atas. Ini penyebab paling sering orang merasa gagal memasang schema manual, padahal kodenya sebenarnya benar.
Kesalahan kedua, JSON-nya tidak valid. Salah koma, tanda kutip kurung, atau baris baru yang tidak sengaja ikut terbawa. Karena itu, selalu cek dulu di validator schema.org sebelum memuat ke website, jangan langsung simpan lalu percaya begitu saja.
Kesalahan ketiga, schema duplikat. Plugin SEO Anda ternyata sudah punya LocalBusiness, lalu Anda tambah satu lagi secara manual. Sekarang halaman punya dua blok yang sama. Buka kode sumber dan hitung: berapa kali `application/ld+json` muncul? Kalau lebih dari satu untuk tipe yang sama, hapus salah satunya.
Kesalahan keempat, tidak sengaja memasang di child theme atau file yang akan hilang saat update. Kalau Anda edit `functions.php` langsung, perubahan Anda akan hilang saat theme di-update. Solusinya: pakai child theme, atau pakai plugin Code Snippets yang menyimpan kode di database, terpisah dari file theme.
Ini yang paling sering kejadian pada klien yang tidak sadar. Website berjalan baik selama setahun, lalu theme di-update, lalu schema hilang tanpa ada yang sadar.
Ringkasan
Install manual schema di WordPress itu tidak sulit. Yang sulit adalah tahu metode mana yang sesuai dengan kondisi website Anda.
Kalau website Anda sudah rapi dan cuma butuh satu blok stabil untuk seluruh situs, pakai functions.php dengan child theme atau Code Snippets. Kalau Anda tidak ingin menyentuh PHP sama sekali, pakai blok Custom HTML di halaman yang Anda butuhkan. Kalau Anda butuh sesuatu yang cepat dan tidak penting di halaman mana pun, widget HTML cukup.
Dan yang utama: uji setiap kali Anda mengubah sesuatu. Schema yang tidak diuji sama saja dengan schema yang tidak ada.
Kalau Anda sudah memasang schema tapi masih bingung kenapa belum dampaknya, biasanya masalahnya bukan di kodenya, tapi di konsistensi data bisnis Anda di luar website. Google Business Profile, halaman kontak, dan direktori harus saling cocok dulu sebelum data terstruktur di website akan dipercaya.
Kalau Anda butuh bantuan untuk website bisnis Anda, saya menyediakan jasa pembuatan dan optimasi website untuk UMKM. Ceritakan saja kendalanya, dan kita bisa lihat dari mana masalahnya sebenarnya.