📑 Daftar Isi
- Pendahuluan
- Gejala & Log — Apa yang Terjadi di Server?
- Root Cause — Kenapa Server Lambat Padahal Bot Kena 403?
- Step-by-Step Solution — Block via .htaccess
- Langkah 1: Backup .htaccess yang Ada
- Langkah 2: Identifikasi Bot di Access Log
- Langkah 3: Tambahkan Rule Block di .htaccess
- Langkah 4: Untuk Apache 2.2 (cPanel Lama)
- Langkah 5: Verifikasi
- Langkah 6: Monitor Hasilnya
- Pro Tips & Warnings
- FAQ
- Q: Apakah block AI bot via .htaccess ini akan mempengaruhi SEO website saya di Google?
- Q: Kenapa tidak pakai robots.txt saja? Kan lebih simpel?
- Q: Saya pakai LiteSpeed/OpenLiteSpeed, bukan Apache. Apakah .htaccess ini bisa dipakai?
- Q: Berapa lama efeknya terasa setelah .htaccess diedit?
- Q: Bagaimana kalau ada bot baru yang belum ada di daftar?
- Kesimpulan
Pendahuluan
Jam 3 pagi. Telepon saya berdering — bukan alarm, tapi telepon beneran dari operator helpdesk Pengadilan Agama di salah satu kabupaten di Jawa Tengah. Suaranya panik: “Pak, website SIPP-nya lambat banget. Dari tadi pagi user pada komplain, halaman tidak bisa dibuka. Ini kenapa ya?”
SIPP itu Sistem Informasi Penelusuran Perkara — aplikasi yang dipakai pengadilan untuk publikasi data perkara ke masyarakat. Domain fiktif kita sebut saja pa-contohkabupaten.go.id. Website-nya jalan di atas Apache + PHP + MySQL, hosting di server dedicated yang seharusnya cukup untuk traffic pengadilan kabupaten.
Saya bangun, buka laptop, SSH ke server. Jalankan top — load average naik ke 45. Padahal server ini cuma punya 8 core. netstat -tlnp | grep :443 | wc -l — ada 487 koneksi aktif ke Apache. Padahal biasanya paling 30-40 koneksi di jam sibuk.
“Ini server diserang,” pikir saya pertama kali. Tapi setelah cek access log, ternyata bukan DDoS biasa. Yang nyerang bukan botnet dari ribuan IP — tapi segelintir AI bot dan crawler yang request-nya gila-gilaan banyak.
Dari pengalaman saya menangani kasus server lambat akibat Apache slot penuh dan LiteSpeed slot penuh, pola masalahnya mirip: resource habis bukan karena traffic legitimate, tapi karena bot yang menguras koneksi. Bedanya, kali ini pelakunya adalah AI training bot yang memang dirancang untuk crawl seluruh halaman web sebanyak-banyaknya.
Artikel ini adalah catatan lengkap bagaimana saya menemukan, menganalisis, dan memblokir AI bot serta crawler nakal menggunakan .htaccess — sampai server kembali ngebut dalam waktu kurang dari 15 menit.
Gejala & Log — Apa yang Terjadi di Server?
Langkah pertama saat dapat komplain server lambat: baca log. Jangan nebak-nebak, jangan langsung restart service. Log tidak pernah bohong.
Berikut potongan access log Apache yang saya temukan di /usr/local/apache/logs/domlogs/pa-contohkabupaten.go.id-ssl_log. Saya tampilkan lengkap — bukan disumari — supaya Anda bisa lihat polanya dengan mata sendiri:
111.225.214.137 - - [20/Jul/2026:08:50:52 +0700] "GET /show_detil/SWpRdUk0NzJrRFltdFN5... HTTP/2" 302 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36"
216.73.217.65 - - [20/Jul/2026:08:50:52 +0700] "GET /list_perkara/type/UFhiY2t4RTkzdz... HTTP/2" 403 1242 "-" "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)"
103.125.51.222 - - [20/Jul/2026:08:50:52 +0700] "GET /show_putusan/YWpFeGRoRlNMd05... HTTP/2" 302 0 "https://pa-contohkabupaten.go.id/detil_perkara/index/id/YWpFeGRo..." "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36"
190.114.43.132 - - [20/Jul/2026:08:50:53 +0700] "GET /show_detil/aHNBakJ1TXFPRk9... HTTP/1.1" 302 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/537.36 (KHTML, like Gecko, Mediapartners-Google) Chrome/84.0.4147.140 Safari/537.36"
216.73.217.65 - - [20/Jul/2026:08:50:53 +0700] "GET /show_detil/N1FyRXNDcmZ0OXF... HTTP/2" 403 1242 "-" "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)"
111.225.214.159 - - [20/Jul/2026:08:50:53 +0700] "GET /index.php/detil_perkara HTTP/2" 302 771 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36"
14.236.142.196 - - [20/Jul/2026:08:50:53 +0700] "GET /show_detil/bFRlVXlTbUtDTjB... HTTP/1.1" 302 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36"
216.73.217.65 - - [20/Jul/2026:08:50:53 +0700] "GET /show_detil/V2tGZkpLRnRzMjE... HTTP/2" 403 1242 "-" "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)"
14.236.142.196 - - [20/Jul/2026:08:50:53 +0700] "GET /index.php/detil_perkara HTTP/1.1" 302 771 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36"
190.114.43.132 - - [20/Jul/2026:08:50:53 +0700] "GET /index.php/detil_perkara HTTP/1.1" 302 771 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/537.36 (KHTML, like Gecko, Mediapartners-Google) Chrome/84.0.4147.140 Safari/537.36"
14.249.49.40 - - [20/Jul/2026:08:50:54 +0700] "GET /list_perkara/type/aDg1ZWdnUGdiMG... HTTP/1.1" 200 5206 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.90 Safari/537.36"
216.73.217.65 - - [20/Jul/2026:08:50:54 +0700] "GET /show_detil/UnBTdlBtV2xWbW9... HTTP/2" 403 1242 "-" "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)"
27.71.85.208 - - [20/Jul/2026:08:50:54 +0700] "GET /show_detil/WUVrcEk2RENNcVB... HTTP/1.1" 302 0 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36"
200.225.113.205 - - [20/Jul/2026:08:50:54 +0700] "GET /show_detil/ZGU4Y29nc0NhbnF... HTTP/1.1" 302 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4137.1 SputnikBrowser/5.6.6280.0 (GOST) Safari/537.36"
116.179.33.146 - - [20/Jul/2026:08:50:58 +0700] "GET /resources/css/bootstrap.css HTTP/1.1" 404 582 "https://pa-contohkabupaten.go.id/detil_perkara" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36"
216.73.217.65 - - [20/Jul/2026:08:50:58 +0700] "GET /show_detil/dXIvUmZWQWJFbTF... HTTP/2" 403 1242 "-" "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)"
216.73.217.65 - - [20/Jul/2026:08:50:59 +0700] "GET /show_detil/aFpWWGh2bGdEczc... HTTP/2" 403 1242 "-" "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)"
216.73.217.65 - - [20/Jul/2026:08:51:00 +0700] "GET /show_detil/MTdwaThJMnVUKzQ... HTTP/2" 403 1242 "-" "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)"
216.73.217.65 - - [20/Jul/2026:08:51:00 +0700] "GET /show_detil/eXNwTk9rd3ZqYit... HTTP/2" 403 1242 "-" "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)"
116.179.33.209 - - [20/Jul/2026:08:51:00 +0700] "GET /resources/css/bootstrap.css HTTP/1.1" 404 582 "https://pa-contohkabupaten.go.id/list_perkara/type/..." "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36"
Trace Pattern — Membaca Log dari Gejala ke Root Cause
Mari kita baca log di atas baris per baris. Perhatikan pola yang muncul:
Baris 1 — IP 111.225.214.137, user-agent Chrome 48 (rilis tahun 2016!). Request ke /show_detil/ dengan parameter base64 panjang. Response 302 redirect. Ini bukan browser manusia normal — browser modern tidak pakai Chrome 48 lagi. Ini bot yang menyamar sebagai browser lama.
Baris 2 — Nah, ini yang paling mencolok. IP 216.73.217.65, user-agent ClaudeBot/1.0. Request ke /list_perkara/type/. Response 403 Forbidden. Artinya server sudah punya mekanisme block, tapi bot-nya tetap request — setiap detik, berkali-kali.
Baris 3-4 — Traffic legitimate dari user asli (Chrome 146 di Mac) dan Mediapartners-Google (bot Google untuk Adsense). Response-nya 302 redirect, ini normal.
Baris 5-10 — Pola yang sama berulang: ClaudeBot dari IP yang sama (216.73.217.65) terus-menerus request ke /show_detil/ dan /list_perkara/, semua dapat 403. Tapi bot tidak berhenti. Di saat yang sama, IP dari range 111.225.214.x, 14.236.142.x, 190.114.43.x juga spam redirect chain — request ke /show_detil/ → redirect ke /index.php/detil_perkara → redirect lagi ke /detil_perkara. Tiga kali redirect untuk satu halaman — ini membebani Apache 3x lipat.
Baris 11 — IP 14.249.49.40, response 200 OK, ukuran 5206 bytes. Ini traffic legitimate — user asli yang berhasil load halaman.
Baris 12-18 — Kembali ClaudeBot. Tujuh request dalam 6 detik dari satu IP yang sama, semua 403. Dan di baris 15-16 dan 20, ada IP 116.179.33.x (Baidu botnet) yang scan /resources/css/bootstrap.css dan dapat 404. File tidak ada, tapi Apache tetap harus proses request-nya.
Ringkasan Pola
Dari 20 baris log di atas, kita bisa hitung:
- ClaudeBot: 9 request (45%) — semua 403, dari 1 IP yang sama
- Bot lama (Chrome 48/89/90): 5 request (25%) — redirect chain 302
- Baidu botnet (Chrome 99): 2 request (10%) — scan file yang tidak ada, 404
- Traffic legitimate: 2 request (10%) — 200 OK
- Google/Mediapartners: 2 request (10%) — normal
Jadi 80% request di server ini berasal dari bot. Dan ini baru 20 baris dari log yang isinya ribuan baris per menit. Tidak heran load average naik ke 45.
Root Cause — Kenapa Server Lambat Padahal Bot Kena 403?
Banyak yang berpikir: “Kan sudah 403, berarti sudah di-block, tidak masalah.” Ini salah besar.
Bahkan ketika response-nya 403, Apache tetap harus:
- Terima koneksi TCP — kernel resource untuk handshake
- Spawn/reuse worker process — ambil 1 slot dari
MaxRequestWorkers - Parse HTTP request — baca header, URL, user-agent
- Proses .htaccess — baca file .htaccess, evaluasi rule
mod_rewrite - Generate response 403 — render halaman error, kirim ke client
- Write ke access log + error log — disk I/O tambahan
Ibaratnya begini: Anda punya satpam di depan gedung. Setiap ada orang mencurigakan masuk, satpam harus berhenti dari tugasnya, periksa orang itu, bilang “tidak boleh masuk”, lalu catat di buku tamu. Kalau yang datang 5 orang per menit, satpamnya masih oke. Tapi kalau yang datang 500 orang per menit — meskipun semuanya ditolak — satpamnya tetap overwhelmed. Tidak ada yang masuk ke gedung, tapi satpamnya sudah tidak bisa lagi mengurus tamu yang seharusnya dilayani.
Itulah yang terjadi di server ini. ClaudeBot kirim ratusan request per menit. Meskipun semua kena 403, Apache tetap habiskan slot worker untuk memproses masing-masing request. Slot worker yang terpakai = slot yang tidak bisa dipakai user asli. Ini persis seperti kasus Apache slot penuh yang menyebabkan 503 — bedanya, kali ini yang habiskan slot bukan user manusia, tapi AI bot.
Daftar AI Bot & Crawler yang Perlu Diblokir
Berdasarkan riset dan pengalaman, berikut user-agent yang paling sering menguras resource server:
AI Training Bots:
GPTBot— OpenAI, training ChatGPTChatGPT-User— OpenAI, crawling saat user pakai ChatGPT browsingOAI-SearchBot— OpenAI, untuk SearchGPTClaudeBot— Anthropic, training Claude (ini yang paling agresif di kasus saya)Google-Extended— Google, training GeminiPerplexityBot— Perplexity AI, training + searchBytespider— ByteDance/TikTok, training AIApplebot-Extended— Apple, training Apple IntelligenceAmazonbot— Amazon/Alexa, trainingCCBot— Common Crawl, dataset untuk training AI umumcohere-ai— Cohere, trainingDiffbot— AI data extractionImagesiftBot— Image AI trainingmeta-externalagent— Meta, training LlamaFacebookBot— Meta/FacebookYouBot— You.com
SEO/Scraper Bots:
AhrefsBot— SEO tool, crawl agresifSemrushBot— SEO toolMJ12bot— web crawlerDotBot— Moz crawlerPetalBot— Huawei search engineDataForSeoBot— SEO data
Botnet/Crawler Agresif:
Baiduspider— Baidu (sering abuse di luar China)YandexBot— Yandex (sama, sering agresif)Sogou— Chinese search enginepython-requests,python-httpx,curl/,wget,scrapy— scripting library yang sering dipakai scraper
Step-by-Step Solution — Block via .htaccess
Mengedit .htaccess yang salah bisa bikin seluruh website down (error 500 untuk semua visitor). Sebelum melanjutkan:
- Backup file .htaccess yang ada —
cp .htaccess .htaccess.backup-$(date +%Y%m%d-%H%M) - Pastikan
mod_rewriteaktif — jalankanapache2ctl -M | grep rewriteatauhttpd -M | grep rewrite - Test di browser incognito setelah edit — pastikan website masih bisa diakses
- Siapkan akses SSH/FTP — supaya bisa rollback kalau website error setelah edit
Langkah 1: Backup .htaccess yang Ada
Sebelum menambahkan apapun, backup dulu file yang ada:
# Masuk ke document root website
cd /home/pa-contohkab/public_html/
# Backup
cp .htaccess .htaccess.backup-$(date +%Y%m%d-%H%M)
# Verifikasi backup
ls -la .htaccess*
Expected output:
-rw-r--r-- 1 pa-contohkab pa-contohkab 2345 Jul 20 03:15 .htaccess
-rw-r--r-- 1 pa-contohkab pa-contohkab 2345 Jul 20 03:15 .htaccess.backup-20260720-0315
Langkah 2: Identifikasi Bot di Access Log
Sebelum block, kita perlu tahu bot apa saja yang aktif di server Anda. Jalankan command ini untuk melihat user-agent yang paling banyak request:
# Lihat top 20 user-agent berdasarkan jumlah request
awk -F'"' '{print $6}' /usr/local/apache/logs/domlogs/pa-contohkabupaten.go.id-ssl_log | sort | uniq -c | sort -rn | head -20
Expected output (contoh):
8472 Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
3215 Mozilla/5.0 (compatible; GPTBot/1.0; +https://openai.com/gptbot)
2891 Mozilla/5.0 (compatible; PetalBot;+https://webmaster.petalsearch.com/site/petalbot)
1523 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36
987 Mozilla/5.0 (compatible; AhrefsBot/7.0; +http://ahrefs.com/robot/)
812 CCBot/2.0 (https://commoncrawl.org/faq/)
654 Mozilla/5.0 (Linux; Android 13) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Mobile Safari/537.36
445 Bytespider/1.0 (compatible; bytespider; bytedance.com)
...
Dari output ini, kita bisa lihat ClaudeBot paling banyak (8472 request), disusul GPTBot (3215) dan PetalBot (2891). Sementara traffic legitimate (Chrome 146) hanya 1523 request. Jadi bot memang mendominasi.
Langkah 3: Tambahkan Rule Block di .htaccess
Buka file .htaccess di document root, lalu tambahkan blok berikut di bagian paling atas (sebelum rule WordPress/Laravel/CodeIgniter):
# ============================================
# BLOCK AI TRAINING BOTS
# ============================================
SetEnvIfNoCase User-Agent "GPTBot" bad_bot
SetEnvIfNoCase User-Agent "ChatGPT-User" bad_bot
SetEnvIfNoCase User-Agent "OAI-SearchBot" bad_bot
SetEnvIfNoCase User-Agent "ClaudeBot" bad_bot
SetEnvIfNoCase User-Agent "Google-Extended" bad_bot
SetEnvIfNoCase User-Agent "PerplexityBot" bad_bot
SetEnvIfNoCase User-Agent "Bytespider" bad_bot
SetEnvIfNoCase User-Agent "Applebot-Extended" bad_bot
SetEnvIfNoCase User-Agent "Amazonbot" bad_bot
SetEnvIfNoCase User-Agent "CCBot" bad_bot
SetEnvIfNoCase User-Agent "cohere-ai" bad_bot
SetEnvIfNoCase User-Agent "Diffbot" bad_bot
SetEnvIfNoCase User-Agent "ImagesiftBot" bad_bot
SetEnvIfNoCase User-Agent "meta-externalagent" bad_bot
SetEnvIfNoCase User-Agent "FacebookBot" bad_bot
SetEnvIfNoCase User-Agent "YouBot" bad_bot
SetEnvIfNoCase User-Agent "Omgilibot" bad_bot
# ============================================
# BLOCK SEO/SCRAPER BOTS
# ============================================
SetEnvIfNoCase User-Agent "AhrefsBot" bad_bot
SetEnvIfNoCase User-Agent "SemrushBot" bad_bot
SetEnvIfNoCase User-Agent "MJ12bot" bad_bot
SetEnvIfNoCase User-Agent "DotBot" bad_bot
SetEnvIfNoCase User-Agent "PetalBot" bad_bot
SetEnvIfNoCase User-Agent "BLEXBot" bad_bot
SetEnvIfNoCase User-Agent "DataForSeoBot" bad_bot
# ============================================
# BLOCK AGGRESSIVE BOTNET / CRAWLERS
# ============================================
SetEnvIfNoCase User-Agent "Baiduspider" bad_bot
SetEnvIfNoCase User-Agent "YandexBot" bad_bot
SetEnvIfNoCase User-Agent "Sogou" bad_bot
SetEnvIfNoCase User-Agent "Exabot" bad_bot
SetEnvIfNoCase User-Agent "ZoominfoBot" bad_bot
SetEnvIfNoCase User-Agent "Nimbostratus-Bot" bad_bot
SetEnvIfNoCase User-Agent "Go-http-client" bad_bot
SetEnvIfNoCase User-Agent "python-requests" bad_bot
SetEnvIfNoCase User-Agent "python-httpx" bad_bot
SetEnvIfNoCase User-Agent "curl/" bad_bot
SetEnvIfNoCase User-Agent "wget" bad_bot
SetEnvIfNoCase User-Agent "scrapy" bad_bot
# ============================================
# DENY ACCESS — Apache 2.4+
# ============================================
<RequireAll>
Require all granted
Require not env bad_bot
</RequireAll>
Penjelasan cara kerjanya:
SetEnvIfNoCase User-Agent "ClaudeBot" bad_bot— kalau user-agent mengandung “ClaudeBot” (case-insensitive), set environment variablebad_bot<RequireAll> Require not env bad_bot— tolak semua request yang punya environment variablebad_bot- Bot langsung dapat 403 di level Apache, sebelum PHP/MySQL diproses — ini jauh lebih ringan daripada memproses request sampai ke aplikasi
Langkah 4: Untuk Apache 2.2 (cPanel Lama)
Jika server Anda masih pakai Apache 2.2 (biasanya cPanel versi lama), ganti blok <RequireAll> terakhir dengan:
# ============================================
# DENY ACCESS — Apache 2.2
# ============================================
Order Allow,Deny
Allow from all
Deny from env=bad_bot
Langkah 5: Verifikasi
Setelah simpan file .htaccess, kita verifikasi bahwa block-nya bekerja:
# Test dari server lain (atau gunakan curl dengan user-agent ClaudeBot)
curl -I -A "Mozilla/5.0 (compatible; ClaudeBot/1.0)" https://pa-contohkabupaten.go.id/
Expected output:
HTTP/2 403
server: Apache
content-type: text/html; charset=UTF-8
x-robots-tag: noindex, nofollow, noarchive
Status 403 — ClaudeBot berhasil di-block.
Sekarang test dengan user-agent normal:
curl -I -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/125.0.0.0" https://pa-contohkabupaten.go.id/
Expected output:
HTTP/2 200
server: Apache
content-type: text/html; charset=UTF-8
Status 200 — user legitimate tetap bisa akses normal.
Langkah 6: Monitor Hasilnya
Tunggu 5-10 menit, lalu cek lagi access log. Bandingkan jumlah request bot sebelum dan sesudah:
# Hitung request ClaudeBot dalam 5 menit terakhir
grep "ClaudeBot" /usr/local/apache/logs/domlogs/pa-contohkabupaten.go.id-ssl_log | awk '{print $4}' | cut -d: -f1-4 | sort | uniq -c
# Cek load average sekarang
uptime
Di kasus saya, setelah rule .htaccess diterapkan:
- Load average turun dari 45 → 3.2 dalam 5 menit
- Koneksi aktif ke Apache turun dari 487 → 52
- Response time halaman SIPP kembali ke 200-400ms (sebelumnya 15-30 detik)
Pro Tips & Warnings
- Taruh rule block di paling atas .htaccess — supaya diproses sebelum rule
mod_rewritelainnya. Kalau taruh di bawah, request bot tetap diproses rule-rule lain dulu sebelum akhirnya di-block — tetap boros resource - Untuk performa terbaik, taruh di VirtualHost config — rule di
.htaccessdibaca ulang di setiap request. Kalau taruh langsung di Apache VirtualHost config (<VirtualHost> ... </VirtualHost>), rule hanya dibaca sekali saat Apache start. Tapi ini butuh akses root dan restart Apache setelah edit - Jangan block Googlebot biasa —
Googlebotberbeda denganGoogle-Extended. Googlebot biasa diperlukan untuk indexing di Google Search. Yang kita block adalahGoogle-Extendedyang khusus untuk training AI Gemini - Jangan block Bingbot — sama seperti Googlebot, Bingbot diperlukan untuk indexing di Bing
- Update daftar bot secara berkala — AI bot baru muncul terus. Cek log sebulan sekali, lihat apakah ada user-agent baru yang mencurigakan
- Pertimbangkan Cloudflare —
.htaccesshanya block di level Apache, yang berarti request tetap sampai ke server. Dengan Cloudflare, bot di-block di edge network — bahkan tidak sampai ke server Anda. Free tier sudah cukup untuk Bot Fight Mode - Hati-hati block
curl/danwget— kalau Anda atau tim Anda sering pakai curl/wget untuk maintenance, rule ini akan memblokir akses Anda juga. Solusi: tambahkanSetEnvIfNoCase X-Maintenance "true" good_botdanRequire env good_botsebagai bypass - Simpan log block — tambahkan
CustomLog logs/blocked-bots.log common env=bad_botdi Apache config supaya bisa analisis bot apa saja yang di-block
FAQ
Q: Apakah block AI bot via .htaccess ini akan mempengaruhi SEO website saya di Google?
Tidak. Googlebot biasa (yang dipakai untuk indexing) memiliki user-agent Googlebot — bukan Google-Extended. Kita hanya block Google-Extended yang khusus dipakai untuk training AI Gemini. Jadi indexing Google tetap normal. Begitu juga Bingbot, DuckDuckBot — semua tidak terpengaruh. Kalau ragu, Anda bisa verifikasi user-agent Google yang resmi di dokumentasi resmi Google.
Q: Kenapa tidak pakai robots.txt saja? Kan lebih simpel?
robots.txt itu ibarat papan “Dilarang Masuk” di pagar rumah. Orang yang hormati aturan akan berhenti. Tapi pencuri? Mereka tetap masuk. AI bot — terutama yang agresif — tidak peduli robots.txt. ClaudeBot yang ada di log saya tadi tetap request meskipun server sudah kasih 403. Jadi robots.txt bisa dipakai sebagai lapisan tambahan, tapi bukan pengganti .htaccess. Block di .htaccess itu ibarat pagar yang benar-benar terkunci — mau bot-nya peduli aturan atau tidak, tetap tidak bisa masuk.
Q: Saya pakai LiteSpeed/OpenLiteSpeed, bukan Apache. Apakah .htaccess ini bisa dipakai?
Bisa, dengan catatan. LiteSpeed Web Server kompatibel dengan syntax .htaccess Apache — termasuk SetEnvIfNoCase dan <RequireAll>. Tapi OpenLiteSpeed perlu restart setelah edit .htaccess (beda dengan Apache yang langsung apply). Untuk LiteSpeed Enterprise, perubahan .htaccess langsung terdeteksi. Kalau pakai LiteSpeed, Anda juga bisa pakai fitur Rate Limiting bawaan yang lebih powerful — bisa batasi request per IP per detik.
Q: Berapa lama efeknya terasa setelah .htaccess diedit?
Langsung. Apache baca file .htaccess di setiap request — begitu file disimpan, request berikutnya sudah pakai rule baru. Tidak perlu restart Apache. Tapi kalau Anda pakai OPcache atau caching layer lain, mungkin perlu beberapa menit sampai resource server benar-benar turun karena ada request yang masih di-cache.
Q: Bagaimana kalau ada bot baru yang belum ada di daftar?
Cek access log secara berkala — minimal sebulan sekali. Jalankan command di Langkah 2 untuk melihat user-agent baru yang muncul. Kalau ada yang mencurigakan (request ribuan kali, user-agent tidak dikenal), tambahkan ke daftar block. Anda juga bisa subscribe ke repository ai.robots.txt di GitHub yang di-update komunitas secara berkala untuk daftar AI bot terbaru.
Kesimpulan
AI bot training dan crawler agresif adalah kenyataan baru yang harus dihadapi setiap sysadmin. Mereka tidak berbahaya dalam artian tidak mencuri data atau merusak server — tapi mereka menguras resource sampai website tidak bisa diakses user asli. Di kasus server pengadilan ini, 80% traffic berasal dari bot, dan load average naik 10x lipat hanya karena ClaudeBot yang request terus-menerus meskipun sudah kena 403.
Solusi paling praktis dan cepat: block via .htaccess menggunakan SetEnvIfNoCase. Rule-nya sederhana, langsung bekerja tanpa restart, dan bisa diterapkan di server manapun yang pakai Apache atau LiteSpeed. Untuk perlindungan lebih lanjut, kombinasikan dengan Cloudflare Bot Fight Mode supaya bot di-block bahkan sebelum sampai ke server.
Pelajaran dari kasus ini: jangan percaya 403 berarti masalah selesai. Response code 403 tetap butuh resource untuk diproses. Kalau request-nya ribuan per menit, resource tetap habis. Block di level paling awal — sebelum Apache perlu spawn worker, sebelum PHP perlu load, sebelum database perlu query. Itulah kenapa .htaccess di paling atas adalah solusi yang paling efisien.
Author: NOC Engineer — ditulis berdasarkan pengalaman menangani server SIPP pengadilan yang lumpuh akibat AI bot crawling, Juli 2026.