· Tutorials

Membuat Sendiri Cronjob Generator llms.txt di WordPress Tanpa Plugin

Siapkan website WordPress Anda menyambut era AI SEO. Pelajari cara meng-generate file llms.txt secara otomatis menggunakan Cronjob server dan skrip PHP murni, tanpa perlu membebani situs dengan plugin tambahan. Langkah esensial agar konten Anda mudah dirangkum oleh ChatGPT, Gemini, dan Claude.

Membuat Sendiri Cronjob Generator llms.txt di WordPress Tanpa Plugin

Kehadiran Large Language Models (LLM) seperti ChatGPT, Gemini, dan Claude telah mengubah cara orang mencari informasi di internet. Search engine kini tidak hanya memberikan daftar link, tetapi langsung membaca, merangkum, dan menyajikan jawaban kepada pengguna.

Agar website Anda—terutama website company profile—dapat dibaca dengan mudah oleh bot AI, Anda memerlukan sebuah standar baru yang disebut file llms.txt. File ini bertindak sebagai peta jalan yang menyajikan ringkasan rapi mengenai isi website Anda khusus untuk dikonsumsi oleh mesin AI.

Untuk memahami lebih dalam mengenai urgensi implementasi file ini demi masa depan SEO website Anda, Anda bisa membaca artikel referensi kami di: Pentingnya llms.txt: Optimasi SEO untuk Kutipan AI.

Cronjob Generator llms.txt di WordPress Tanpa Plugin

Sebagai developer atau pengelola web, kita tentu menghindari penggunaan plugin yang berlebihan agar website tetap ringan. Pada artikel ini, kita akan membahas cara membuat cronjob untuk meng-generate file llms.txt di WordPress secara otomatis dengan pure PHP.

Kita akan membagi panduan ini ke dalam dua skenario: Company Profile murni (tanpa blog) dan Company Profile dengan blog/artikel.


Skenario 1: Company Profile Murni (Tanpa Blog)

Banyak website perusahaan yang sepenuhnya berisi halaman statis (seperti About Us, Services, Portfolio, dan Contact) tanpa adanya publikasi artikel rutin. Untuk skenario ini, kita hanya akan mengekstrak data dari page.

Skrip PHP

Buat file bernama generate-llms.php di root direktori WordPress Anda (sejajar dengan file wp-config.php), lalu salin kode berikut:

<?php
// Memuat environment WordPress
require_once( dirname( __FILE__ ) . '/wp-load.php' );
$file_path = ABSPATH . 'llms.txt';
// Header Informasi Perusahaan
$content = "# " . get_bloginfo('name') . "\n";
$content .= "> " . get_bloginfo('description') . "\n\n";
$content .= "## Informasi Perusahaan\n\n";
// Query untuk mengambil Halaman (Pages)
$page_args = array(
'post_type' => 'page',
'post_status' => 'publish',
'posts_per_page' => -1, // Ambil semua halaman
'orderby' => 'menu_order',
'order' => 'ASC'
);
$page_query = new WP_Query($page_args);
if ($page_query->have_posts()) {
while ($page_query->have_posts()) {
$page_query->the_post();
$content .= "### [" . get_the_title() . "](" . get_permalink() . ")\n";
$excerpt = wp_strip_all_tags(get_the_excerpt());
if (empty($excerpt)) {
$excerpt = wp_trim_words(wp_strip_all_tags(get_the_content()), 50, '...');
}
if (!empty($excerpt)) {
$content .= $excerpt . "\n\n";
}
}
}
wp_reset_postdata();
file_put_contents($file_path, $content);
echo "File llms.txt untuk Company Profile berhasil diperbarui!\n";
?>

Penjelasan Fungsi PHP

Agar skrip di atas lebih mudah dipahami, berikut rincian fungsi bawaan WordPress dan PHP yang digunakan:

  • require_once( ... '/wp-load.php' );: Kunci utama agar skrip mandiri (standalone) ini bisa menggunakan fungsi-fungsi WordPress (seperti WP_Query) dari luar lingkungan tema atau plugin.
  • get_bloginfo('name' / 'description'): Mengambil judul dan deskripsi (tagline) website secara dinamis.
  • WP_Query: Class bawaan WordPress untuk menarik (query) data spesifik. Pada skenario ini, kita membatasi pencarian hanya pada post_type berupa page.
  • posts_per_page => -1: Parameter untuk mengambil seluruh halaman tanpa batasan paginasi, sangat ideal untuk company profile yang jumlah halamannya statis dan sedikit.
  • have_posts() & the_post(): Fungsi perulangan standar WordPress (The Loop) untuk mengecek dan menyiapkan data tiap halaman.
  • wp_strip_all_tags(): Membersihkan seluruh tag HTML (seperti <b>, <div>) agar teks yang dihasilkan adalah teks murni (plain text) untuk markdown.
  • wp_trim_words( ... , 50 ): Jika halaman tidak memiliki ringkasan khusus (excerpt), fungsi ini otomatis memotong isi konten utama menjadi 50 kata pertama.
  • file_put_contents(): Fungsi native PHP untuk membuat dan menulis string teks ke dalam file fisik llms.txt.

Skenario 2: Company Profile dengan Blog / Berita Terkini

Jika website perusahaan Anda juga aktif mempublikasikan press release, studi kasus, atau berita terbaru, AI perlu mengetahui konten dinamis ini.

Skrip PHP

Kita akan menambahkan satu query khusus untuk artikel di bawah query halaman tadi:

<?php
require_once( dirname( __FILE__ ) . '/wp-load.php' );
$file_path = ABSPATH . 'llms.txt';
$content = "# " . get_bloginfo('name') . "\n";
$content .= "> " . get_bloginfo('description') . "\n\n";
// 1. HALAMAN PROFIL PERUSAHAAN
$content .= "## Informasi Perusahaan\n\n";
$page_args = array(
'post_type' => 'page',
'post_status' => 'publish',
'posts_per_page' => -1,
'orderby' => 'menu_order',
'order' => 'ASC'
);
$page_query = new WP_Query($page_args);
if ($page_query->have_posts()) {
while ($page_query->have_posts()) {
$page_query->the_post();
$content .= "### [" . get_the_title() . "](" . get_permalink() . ")\n";
$excerpt = wp_strip_all_tags(get_the_excerpt());
if (empty($excerpt)) {
$excerpt = wp_trim_words(wp_strip_all_tags(get_the_content()), 50, '...');
}
if (!empty($excerpt)) $content .= $excerpt . "\n\n";
}
}
wp_reset_postdata();
// 2. ARTIKEL & BERITA TERBARU
$content .= "## Artikel & Berita Terbaru\n\n";
$post_args = array(
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => 10, // Batasi 10 artikel terbaru
'orderby' => 'date',
'order' => 'DESC'
);
$post_query = new WP_Query($post_args);
if ($post_query->have_posts()) {
while ($post_query->have_posts()) {
$post_query->the_post();
$content .= "- [" . get_the_title() . "](" . get_permalink() . ")\n";
$excerpt = wp_strip_all_tags(get_the_excerpt());
if (empty($excerpt)) {
$excerpt = wp_trim_words(wp_strip_all_tags(get_the_content()), 30, '...');
}
$content .= " " . $excerpt . "\n\n";
}
} else {
$content .= "Belum ada artikel yang dipublikasikan.\n\n";
}
wp_reset_postdata();
file_put_contents($file_path, $content);
echo "Sukses: llms.txt berhasil diperbarui.\n";
?>

Penjelasan Tambahan

Terdapat beberapa perbedaan kunci pada skenario kedua ini:

  • Penggabungan String Konten: Kita menggunakan dua perulangan ($page_query dan $post_query), yang keduanya terus menyambungkan string ke dalam variabel $content. Ini menciptakan satu dokumen utuh yang terstruktur.
  • Penggunaan wp_reset_postdata(): Fungsi ini dipanggil setelah setiap perulangan. Ini sangat krusial karena kita menjalankan dua buah query secara berurutan. Tanpa fungsi ini, data query pertama bisa tumpang tindih (conflict) dan merusak struktur data pada query kedua.
  • Pembatasan Post (posts_per_page => 10): Berbeda dengan halaman yang diambil semuanya (-1), artikel berita dibatasi hanya 10 terbaru. Hal ini dilakukan untuk menjaga ukuran file llms.txt agar tidak terlalu besar dan hanya memberikan konteks terkini bagi perayap AI.

Mengatur Cronjob di Server

Agar file llms.txt ini tidak perlu di-generate manual dan selalu diperbarui secara otomatis setiap kali Anda merilis halaman atau artikel baru, kita harus mengatur penjadwalan (Cronjob).

Buka terminal (console) atau panel hosting Anda, dan tambahkan baris cron berikut untuk mengeksekusi skrip setiap malam pada pukul 00:00:

Terminal window
0 0 * * * /usr/bin/php /path/ke/folder/wordpress/generate-llms.php >/dev/null 2>&1

(Pastikan untuk mengganti /path/ke/folder/wordpress/ dengan path/lokasi absolut instalasi WordPress Anda. Jika menggunakan panel seperti cPanel, biasanya berada di struktur /home/username/public_html/).

Sebagai alternatif, Anda juga bisa memicu skrip ini menggunakan curl jika file skrip tersebut dapat diakses dari luar:

Terminal window
0 0 * * * curl -s "https://domain-perusahaan.com/generate-llms.php" >/dev/null 2>&1

Kesimpulan

Mengotomatisasi pembuatan file llms.txt merupakan langkah taktis dalam strategi SEO modern. Kini, website Anda telah selangkah lebih siap disajikan dalam format yang sangat ramah terhadap berbagai platform Large Language Models.

Pemahaman komprehensif AI mengenai halaman layanan utama perusahaan beserta update terkininya, tentu akan berdampak positif pada seberapa baik brand Anda direkomendasikan di dalam jawaban berbasis kecerdasan buatan.

Selamat mencoba dan happy coding!

Komentar (0)

Belum ada komentar. Jadilah yang pertama!

Artikel terkait

Lihat semua »