Lowongan sudah terisi, tetapi halaman masih menawarkan tombol melamar dan markup masih menyebutnya terbuka. Kesalahan seperti ini tidak selesai hanya dengan membuat JSON yang valid.
JobPosting structured data perlu mengikuti keadaan pekerjaan sejak dibuka sampai ditutup. Saya akan mengajak kamu menyiapkan kontrak datanya, menguji satu lowongan, lalu menentukan tindakan ketika perekrutan berakhir. Cara ini berguna untuk pengelola situs karier, tim HR, publisher lowongan, dan developer yang menghubungkan sistem rekrutmen ke website.
Mulai dari satu lowongan yang benar-benar tersedia
Google mengarahkan markup JobPosting ke halaman detail satu lowongan, bukan halaman pencarian yang berisi banyak pekerjaan. Informasi markup harus sesuai dengan isi yang terlihat, dan pelamar harus memiliki jalur untuk mengajukan lamaran. Validasi teknis tidak menjamin lowongan tampil dalam fitur pencarian pekerjaan. Panduan JobPosting Google.
Buat satu catatan sumber sebelum menyentuh template:
| Fakta yang perlu diputuskan | Pemilik jawaban | Bukti yang disimpan |
|---|---|---|
| Posisi masih terbuka | Penanggung jawab rekrutmen | Status dan waktu konfirmasi |
| Nama posisi dan organisasi | HR atau pemberi kerja | Naskah lowongan yang disetujui |
| Tempat bekerja dan wilayah pelamar | HR | Ketentuan kerja yang eksplisit |
| Tanggal pembukaan dan penutupan | HR | Jadwal beserta zona waktu |
| Tujuan tombol melamar | Pengelola sistem rekrutmen | URL dan hasil uji alur |
Kalau jawaban dua sistem berbeda, hentikan pembaruan markup untuk lowongan itu sampai pemilik fakta memutuskan. Misalnya, status “closed” pada sistem rekrutmen lebih perlu diselesaikan daripada peringatan properti opsional di validator.
Bedakan lokasi kantor, lokasi kerja, dan lokasi pelamar
jobLocation menjelaskan tempat pekerjaan dilakukan. applicantLocationRequirements menjelaskan wilayah tempat pelamar boleh berada; properti itu bukan pengganti persyaratan kewarganegaraan atau visa. datePosted adalah tanggal publikasi lowongan, sedangkan validThrough menunjukkan batas berlakunya. Perbedaan makna ini penting sebelum kamu menghubungkan field CMS ke markup. Definisi JobPosting di Schema.org.
Untuk pekerjaan yang sepenuhnya dapat dilakukan jarak jauh, Google menggunakan jobLocationType: "TELECOMMUTE" dan ketentuan lokasi pelamar yang sesuai. Kesempatan sesekali bekerja dari rumah tidak otomatis menjadikan pekerjaan 100% remote. Jika batas penutupan diketahui, isi validThrough; jangan mengarang tanggal ketika belum ditentukan. Ketentuan lokasi dan tanggal JobPosting.
Uji tiga kalimat ini dengan HR:
- “Bekerja dari mana saja di Indonesia” menjelaskan pembatasan wilayah pelamar.
- “Masuk kantor Jakarta tiga hari per minggu” menjelaskan kewajiban hadir yang harus terlihat.
- “Kantor pusat berada di Jakarta” belum menjawab tempat pekerjaan tersebut dilakukan.
Ketiganya bisa muncul dalam profil perusahaan yang sama. Menyalin alamat kantor pusat ke semua posisi akan menghapus perbedaan yang dibutuhkan pelamar.
Contoh: lowongan remote dengan wilayah yang jelas
Berikut contoh fiktif untuk latihan, bukan lowongan yang tersedia. Anggap sebuah halaman menampilkan seluruh informasi di bawah dan mempunyai formulir lamaran yang berfungsi.
{
"@context": "https://schema.org",
"@type": "JobPosting",
"title": "Editor Konten",
"identifier": {
"@type": "PropertyValue",
"name": "Studio Contoh",
"value": "EDITOR-2026-01"
},
"description": "<p>Studio Contoh membuka posisi Editor Konten penuh waktu. Tugasnya menyunting panduan, memeriksa rujukan, dan berkoordinasi dengan penulis.</p><p>Pelamar perlu mampu menyunting bahasa Indonesia dan menyertakan dua contoh tulisan. Pekerjaan dilakukan sepenuhnya jarak jauh dari Indonesia, Senin sampai Jumat pukul 09.00–17.00 WIB.</p><p>Lamaran diajukan melalui formulir pada halaman ini sampai 20 November 2026 pukul 17.00 WIB.</p>",
"datePosted": "2026-10-20",
"validThrough": "2026-11-20T17:00:00+07:00",
"employmentType": "FULL_TIME",
"hiringOrganization": {
"@type": "Organization",
"name": "Studio Contoh"
},
"jobLocationType": "TELECOMMUTE",
"applicantLocationRequirements": {
"@type": "Country",
"name": "Indonesia"
}
}
Jangan memasang contoh ini sebagai lowongan sungguhan. Saat menerapkannya pada data asli, masukkan deskripsi lengkap yang disetujui, termasuk ketentuan penting yang belum ada pada contoh. Jangan menambahkan gaji atau benefit hanya agar properti terlihat lebih lengkap.
Nomor lowongan pada identifier membantu tim mencocokkan satu rekaman dengan halaman yang benar. Saya menyarankan identitas internal itu tetap stabil ketika hanya ada koreksi ejaan. Ini keputusan pengelolaan data, bukan jaminan fitur Google.
Uji perubahan keadaan, bukan hanya keadaan awal
Untuk satu lowongan percobaan di lingkungan uji, siapkan tiga perubahan: masih terbuka, jadwal diperbarui, lalu posisi terisi lebih awal. Setelah setiap perubahan, bandingkan data sumber, teks halaman, tombol lamaran, dan markup yang benar-benar ter-render.
Gunakan lembar penerimaan berikut:
| Pemeriksaan | Kondisi diterima |
|---|---|
| Identitas | URL dan nomor lowongan menunjuk rekaman yang sama |
| Isi | Judul, organisasi, deskripsi, serta ketentuan lokasi konsisten |
| Waktu | Tanggal pembukaan asli tetap benar; batas penutupan memakai zona waktu yang disepakati |
| Lamaran | Posisi terbuka dapat dilamar; posisi ditutup tidak menawarkan lamaran aktif |
| Markup | Hasil Rich Results Test ditinjau bersama fakta halaman |
| Perubahan | Hasil setelah pembaruan dicatat, bukan memakai tangkapan layar sebelum perubahan |
Jika JSON lolos tetapi judul pekerjaan salah, hasilnya belum diterima. Jika tampilan sudah benar tetapi markup lama masih muncul, periksa cache dan sumber generator. Situs bisa menghasilkan markup dari plugin sekaligus template khusus. Kerangka validasi structured data di luar sintaks JSON membantu memisahkan jenis kegagalan itu.
Tentukan apa yang terjadi saat lowongan ditutup
Google menyediakan beberapa cara untuk menangani lowongan kedaluwarsa: membuat validThrough berada di masa lalu, menghapus halaman hingga merespons 404/410, atau menghapus markup JobPosting. Penutupan lebih awal juga perlu ditangani; jangan menunggu tanggal rencana berakhir. Penanganan lowongan kedaluwarsa.
Pilih tindakan berdasarkan kebutuhan halaman:
| Keputusan website | Perubahan yang perlu diperiksa |
|---|---|
| Halaman tetap menjadi arsip informatif | Tampilkan status ditutup, hentikan lamaran, hapus markup JobPosting |
| Halaman tidak diperlukan lagi | Hapus halaman dan buktikan respons 404 atau 410 |
| Halaman harus tetap dapat dibuka tetapi dikeluarkan dari indeks | Tampilkan status ditutup, hentikan lamaran, lalu terapkan noindex yang dapat dibaca crawler |
Ada perbedaan penting pada notifikasi Indexing API. URL_UPDATED memberi tahu perubahan halaman. URL_DELETED digunakan setelah URL merespons 404/410 atau memiliki noindex. Menghapus markup dari arsip yang tetap berstatus 200 dan dapat diindeks tidak sama dengan menghapus URL. Respons API juga bukan bukti bahwa indeks telah berubah. Penggunaan Indexing API.
Panduan cakupan IndexNow dan Google Indexing API membahas pemilihan kanal serta batas buktinya. Untuk operasional harian, cukup simpan nomor lowongan, keadaan sebelum dan sesudah, waktu perubahan, URL, pemilik tindakan, dan hasil pemeriksaan.
Mulailah dari satu posisi yang baru ditutup. Buka halaman seperti seorang pelamar, periksa apakah masih bisa melamar, lalu cocokkan markup dengan status rekrutmen. Perbaikan pertama yang paling berguna sering kali adalah menyamakan empat tempat itu.




