Lewati ke konten

Laravel Shieldv1.2.x

Bot dan crawler

Shield bisa saja memblokir Googlebot kalau tidak ada penanganan khusus. Halaman ini menjelaskan bagaimana Shield memastikan crawler asli tetap bisa mengindeks situs Anda.

Crawler sah dan bot jahat sering memakai User-Agent yang sama. Contohnya, siapa pun bisa mengirim header:

User-Agent: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)

Kalau Shield hanya membaca User-Agent, request itu dianggap Googlebot. Dua kemungkinan yang sama-sama tidak diinginkan:

  • penyerang menyamar sebagai Googlebot supaya tidak di-rate-limit,
  • aplikasi Anda memblokir Googlebot asli sehingga halaman tidak masuk indeks.

Shield menyelesaikannya dengan memverifikasi klaim itu, bukan dengan mempercayainya.

SHIELD_BOT_MODE=observe
Nilai Perilaku
off Verifikasi crawler dimatikan. Bot diperlakukan seperti klien biasa.
observe Default. Bot dicatat, tidak pernah diblokir karena faktor bot.
challenge Bot yang gagal diverifikasi boleh di-challenge.

Untuk kebanyakan situs, biarkan di observe.

Tingkat Yang terjadi
Crawler terverifikasi Semua sinyal perilaku dinolkan. Bot bebas mengindeks tanpa kena rate limit. Aturan (signature) tetap diperiksa.
Klaim tidak terverifikasi Mendapat sinyal unverified_crawler_claim dengan skor kecil. Bot tetap boleh, tapi tercatat.

Perhatikan kata “signature tetap diperiksa”. Kalau Googlebot meminta /.env, request itu tetap diblokir. Kepercayaan bot hanya berlaku untuk membebaskan sinyal perilaku, bukan untuk melewati aturan.

Shield melakukan dua pemeriksaan berurutan.

Shield membalik IP sumber menjadi nama host, lalu memeriksa apakah nama itu berakhiran dengan suffix yang sah untuk crawler tersebut:

'verification' => [
'hostnames' => [
'googlebot' => ['.googlebot.com', '.google.com'],
'bingbot' => ['.search.msn.com'],
'yandexbot' => ['.yandex.ru', '.yandex.net'],
// ...
],
],

Kalau 203.0.113.10 membalas dns.googlebot.com, verifikasinya lolos.

Kalau hostname tidak tersedia — DNS lambat, atau diblokir jaringan Anda — verifikasi bisa mengandalkan CIDR resmi:

'verification' => [
'ip_ranges' => [
'googlebot' => ['66.249.64.0/19', '66.249.65.0/20'],
'bingbot' => ['157.55.0.0/16'],
],
],

Untuk pemeliharaan, isi ip_ranges dengan daftar resmi:

  • Google: googlebot.googlebot.com dan special-crawlers.googlebot.com
  • Bing: www.bing.com/toolbar
  • Yandex: yandex.com/bots
'verification' => [
'ttl_hours' => 24,
],

Reverse-DNS tidak dijalankan untuk setiap request. Hasilnya disimpan 24 jam. Ini menjaga performa, sekaligus membatasi diperiksa berulang kali untuk IP yang berpindah-pindah.

SHIELD_BOT_UNVERIFIED_CLAIM_SIGNAL=4

Nilai bawaan 4 sengaja rendah: cukup tercatat di log, belum cukup untuk memicu challenge. Kalau Anda melihat banyak bot palsu kena challenge, naikkan ke 10. Kalau Anda melihat crawler sah Anda ikut kena challenge, turunkan atau matikan verifikasinya.

Shield mengenali 18 crawler secara bawaan:

Kelompok User-Agent
Mesin pencari googlebot, bingbot, yandexbot, baiduspider, duckduckbot
SEO ahrefsbot, semrushbot, dotbot, mj12bot, bytespider
AI gptbot, chatgpt-user, claudebot, anthropic, openai, oai-searchbot, perplexitybot
Lainnya ccbot

Daftar ini bisa ditambah:

'bots' => [
'known_agents' => [
'googlebot', 'bingbot', 'yandexbot',
'my-own-monitor', // monitor internal Anda
],
],

Coba langkah ini berurutan.

  1. Cek apakah IP-nya benar-benar Googlebot. Buka https://developers.google.com/search/tools/crawler-overview, atau balik IP-nya secara manual.

  2. Isi ip_ranges Google. Ini menghilangkan ketergantungan pada DNS.

  3. Naikkan ttl_hours sementara kalau DNS Anda sering lambat:

    'verification' => ['ttl_hours' => 168], // 7 hari
  4. Periksa log dengan php artisan shield:report untuk melihat apakah bot ditolak karena unverified_crawler_claim.

Rule Shield mencocokkan URI dan body, bukan User-Agent — jadi tidak ada cara memberi skor berdasarkan gptbot atau claudebot.

Yang bisa Anda lakukan:

| Tujuan | Cara | | Mengurangi beban tanpa memblokir | | Menahan AI crawler | robots.txt plus aturan di level CDN. | | Mengurangi beban tanpa memblokir | Naikkan behavior.suspicious_user_agents dengan nama AI crawler, supaya dapat sinyal lemah +2 dan tercatat di log. | | Memblokir sepenuhnya | Aturan di level reverse proxy atau CDN. |

Untuk dua hal terakhir, intervene sedekat mungkin dengan pengunjung — di Cloudflare, atau di nginx — jauh lebih murah daripada membakar siklus CPU PHP untuk setiap request.

# Contoh di nginx: blokir AI crawler sebelum menyentuh PHP
if ($http_user_agent ~* "(gptbot|claudebot|perplexitybot)") {
return 403;
}

Powered by PT Ganadev Multi Solusi