• Indonesian
  • English
  • Cara Block AI Bot & Crawler Nakal via .htaccess — Server

    Kecepatan:

    Difficulty: Beginner
    Last Updated: 20 Juli 2026
    Tested On: Apache 2.4, cPanel/WHM, HestiaCP, CloudLinux, CentOS 7/8, AlmaLinux 8/9

    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 topload 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-10Pola 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:

    1. Terima koneksi TCP — kernel resource untuk handshake
    2. Spawn/reuse worker process — ambil 1 slot dari MaxRequestWorkers
    3. Parse HTTP request — baca header, URL, user-agent
    4. Proses .htaccess — baca file .htaccess, evaluasi rule mod_rewrite
    5. Generate response 403 — render halaman error, kirim ke client
    6. 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 ChatGPT
    • ChatGPT-User — OpenAI, crawling saat user pakai ChatGPT browsing
    • OAI-SearchBot — OpenAI, untuk SearchGPT
    • ClaudeBot — Anthropic, training Claude (ini yang paling agresif di kasus saya)
    • Google-Extended — Google, training Gemini
    • PerplexityBot — Perplexity AI, training + search
    • Bytespider — ByteDance/TikTok, training AI
    • Applebot-Extended — Apple, training Apple Intelligence
    • Amazonbot — Amazon/Alexa, training
    • CCBot — Common Crawl, dataset untuk training AI umum
    • cohere-ai — Cohere, training
    • Diffbot — AI data extraction
    • ImagesiftBot — Image AI training
    • meta-externalagent — Meta, training Llama
    • FacebookBot — Meta/Facebook
    • YouBot — You.com

    SEO/Scraper Bots:

    • AhrefsBot — SEO tool, crawl agresif
    • SemrushBot — SEO tool
    • MJ12bot — web crawler
    • DotBot — Moz crawler
    • PetalBot — Huawei search engine
    • DataForSeoBot — SEO data

    Botnet/Crawler Agresif:

    • Baiduspider — Baidu (sering abuse di luar China)
    • YandexBot — Yandex (sama, sering agresif)
    • Sogou — Chinese search engine
    • python-requests, python-httpx, curl/, wget, scrapy — scripting library yang sering dipakai scraper

    Step-by-Step Solution — Block via .htaccess

    PERINGATAN KEAMANAN: Backup Sebelum Mengedit .htaccess

    Mengedit .htaccess yang salah bisa bikin seluruh website down (error 500 untuk semua visitor). Sebelum melanjutkan:

    1. Backup file .htaccess yang adacp .htaccess .htaccess.backup-$(date +%Y%m%d-%H%M)
    2. Pastikan mod_rewrite aktif — jalankan apache2ctl -M | grep rewrite atau httpd -M | grep rewrite
    3. Test di browser incognito setelah edit — pastikan website masih bisa diakses
    4. 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 variable bad_bot
    • <RequireAll> Require not env bad_bot — tolak semua request yang punya environment variable bad_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_rewrite lainnya. 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 .htaccess dibaca 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 biasaGooglebot berbeda dengan Google-Extended. Googlebot biasa diperlukan untuk indexing di Google Search. Yang kita block adalah Google-Extended yang 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.htaccess hanya 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/ dan wget — kalau Anda atau tim Anda sering pakai curl/wget untuk maintenance, rule ini akan memblokir akses Anda juga. Solusi: tambahkan SetEnvIfNoCase X-Maintenance "true" good_bot dan Require env good_bot sebagai bypass
    • Simpan log block — tambahkan CustomLog logs/blocked-bots.log common env=bad_bot di 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.