# Alternatif reCAPTCHA untuk formulir website

> Bandingkan alternatif reCAPTCHA untuk formulir, dari Turnstile dan hCaptcha hingga proof-of-work dan tanpa captcha sama sekali, lalu beralih dengan perubahan kecil yang aman.

Terbit 2026-10-25 · https://ikiform.com/id/guides/spam-protection/recaptcha-alternatives

Cloudflare Turnstile adalah pengganti reCAPTCHA yang paling dekat: sebagian besar tak terlihat, memakai pola site key dan secret key yang sama, dan pemeriksaan servernya memakai parameter yang sama. hCaptcha cocok untuk situs yang ingin tantangan gambar dari pihak selain Google, dan alat proof-of-work seperti ALTCHA berjalan tanpa pihak ketiga sama sekali. Untuk banyak formulir kontak, honeypot, skor konten, dan rate limit membuat captcha tidak diperlukan.

## Mengapa orang beralih dari reCAPTCHA

reCAPTCHA masih berfungsi. Alasan menggantinya biasanya soal biaya bagi pengunjung dan bagi Anda. Versi 2 menampilkan teka-teki gambar ke sebagian pengunjung, yang lambat di ponsel dan sulit bagi pengguna screen reader. Versi 3 tak terlihat tetapi mengembalikan skor yang ambangnya harus Anda tentukan sendiri, tanpa tantangan sebagai cadangan. Dan reCAPTCHA kini merupakan produk Google Cloud: dokumentasi billing Google mencantumkan kuota gratis 10.000 penilaian per bulan, dengan tingkatan berbayar di atasnya.

Sebagian tim juga ingin lebih sedikit skrip pihak ketiga di halaman mereka. Apakah hal itu penting bagi kewajiban privasi Anda adalah pertanyaan untuk tinjauan hukum Anda sendiri; halaman ini hanya membandingkan cara kerja alat-alatnya.

## Perbandingan alternatif

| Opsi | Yang dilihat pengunjung | Siapa yang memverifikasi | Perlu diketahui |
| --- | --- | --- | --- |
| reCAPTCHA v2 | Checkbox, kadang teka-teki gambar | Server Anda, dengan Google | Familier. Teka-tekinya adalah keluhan utama |
| reCAPTCHA v3 | Tidak ada | Server Anda, dengan Google | Mengembalikan skor dari 0.0 hingga 1.0. Anda memilih batasnya dan menangani area abu-abu |
| [Cloudflare Turnstile](https://ikiform.com/id/guides/spam-protection/cloudflare-turnstile.md) | Biasanya tidak ada, kadang checkbox | Server Anda, dengan Cloudflare | Tanpa teka-teki gambar. Tanpa biaya untuk hingga 20 widget |
| hCaptcha | Checkbox, kadang teka-teki gambar | Server Anda, dengan hCaptcha | Bentuknya mirip reCAPTCHA v2, dari perusahaan lain. Ada paket Basic gratis, dengan paket Pro dan Enterprise berbayar |
| Friendly Captcha | Widget kecil yang memecahkan teka-teki di latar belakang | Server Anda, dengan Friendly Captcha | Proof of work, bukan sinyal pelacakan. Gratis untuk situs kecil non-komersial, paket berbayar untuk yang lain |
| ALTCHA | Widget kecil yang memecahkan teka-teki di latar belakang | Hanya server Anda sendiri | Open source dan di-host sendiri, jadi tanpa pihak ketiga. Anda yang menjalankan dan memeliharanya |
| [No captcha](https://ikiform.com/id/guides/spam-protection/without-captcha.md) | Tidak ada | Server Anda | Honeypot, waktu bertanda tangan, skor konten, dan rate limit. Menghentikan sebagian besar bot, tidak semua |

Setiap opsi kecuali yang terakhir tetap bergantung pada pemeriksaan sisi server. Widget saja tidak menghentikan apa pun, karena bot bisa mengirim ke endpoint Anda tanpa memuat halaman.

## Apa yang diminta setiap opsi dari orang

Nilai setiap opsi dari sudut pandang pengunjung yang paling kesulitan dengannya. Teka-teki gambar lambat di ponsel dan sulit atau mustahil bagi orang yang penglihatannya terbatas; alternatif audio membantu sebagian orang dan membuat frustrasi yang lain. Pemeriksaan tak terlihat, seperti mode biasa Turnstile, reCAPTCHA v3, dan widget proof-of-work, tidak meminta apa-apa dari kebanyakan pengunjung, tetapi tetap bisa gagal bagi orang yang memakai browser berfokus privasi, jaringan ketat, atau perangkat lama. Saat itu terjadi, orang tersebut butuh jalan keluar: checkbox yang terlihat, pesan yang jelas, atau alamat email untuk menulis sebagai gantinya. Formulir yang gagal tanpa kabar kehilangan justru pesan-pesan yang tidak pernah Anda ketahui.

## Pilih dengan dua pertanyaan

Diagram: Memilih pengganti reCAPTCHA dengan dua pertanyaan

1. Pertama, tanyakan apakah bot lolos dari pemeriksaan tak terlihat. Jika tidak, tetap tanpa captcha dengan honeypot, skor, dan rate limit.
2. Jika ya, tanyakan apakah Anda bisa menjalankan kode server. Jika bisa, pilih widget seperti Turnstile, hCaptcha, atau ALTCHA dan verifikasi di server Anda.
3. Tanpa server, kirim formulir ke backend yang memverifikasi key Turnstile Anda, atau pakai pemeriksaan terkelola yang tidak butuh key.

Kebanyakan formulir kontak berhenti di pertanyaan pertama. Ukur spam Anda sebelum menambahkan widget apa pun.

## Beralih dari reCAPTCHA ke Turnstile

Keduanya cukup mirip sehingga peralihannya hanya beberapa baris di setiap sisi. Buat widget Turnstile di dashboard Cloudflare untuk hostname yang sama, lalu ubah markup dan pemeriksaan server bersamaan.

| Bagian | reCAPTCHA v2 | Turnstile |
| --- | --- | --- |
| Skrip | `https://www.google.com/recaptcha/api.js` | `https://challenges.cloudflare.com/turnstile/v0/api.js` |
| Elemen | `<div class="g-recaptcha" data-sitekey>` | `<div class="cf-turnstile" data-sitekey>` |
| Field token | `g-recaptcha-response` | `cf-turnstile-response` |
| URL verifikasi | `https://www.google.com/recaptcha/api/siteverify` | `https://challenges.cloudflare.com/turnstile/v0/siteverify` |
| Parameter verifikasi | `secret`, `response`, `remoteip` | `secret`, `response`, `remoteip`, `idempotency_key` |

**Sebelum** (`contact.html`)

```html
<form action="/api/contact" method="POST">
  <input name="email" type="email" required />
  <textarea name="message" required></textarea>
  <div class="g-recaptcha" data-sitekey="RECAPTCHA_SITE_KEY"></div>
  <button>Send</button>
</form>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
```

**Sesudah** (`contact.html`)

```html
<form action="/api/contact" method="POST">
  <input name="email" type="email" required />
  <textarea name="message" required></textarea>
  <div class="cf-turnstile" data-sitekey="TURNSTILE_SITE_KEY" data-action="contact"></div>
  <button>Send</button>
</form>
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
```

**Sebelum** (`verify.ts`)

```ts
const form = await request.formData();
const body = new URLSearchParams({
  secret: process.env.RECAPTCHA_SECRET_KEY!,
  response: String(form.get("g-recaptcha-response") ?? ""),
});
const check = await fetch("https://www.google.com/recaptcha/api/siteverify", { method: "POST", body });
const { success } = (await check.json()) as { success: boolean };
```

**Sesudah** (`verify.ts`)

```ts
const form = await request.formData();
const body = new URLSearchParams({
  secret: process.env.TURNSTILE_SECRET_KEY!,
  response: String(form.get("cf-turnstile-response") ?? ""),
});
const check = await fetch("https://challenges.cloudflare.com/turnstile/v0/siteverify", { method: "POST", body });
const { success, action } = (await check.json()) as { success: boolean; action?: string };
const human = success && action === "contact";
```

- Ini berlaku untuk key reCAPTCHA klasik, yang diverifikasi di `siteverify`. Key yang dibuat di Google Cloud diperiksa lewat API assessment reCAPTCHA Enterprise; sisi Turnstile-nya tetap sama.
- Jika Anda memakai v3, hapus ambang skor Anda. Turnstile menjawab lolos atau gagal; periksa `action` di jawabannya sebagai gantinya.
- Perbarui Content Security Policy Anda: izinkan `https://challenges.cloudflare.com` di `script-src` dan `frame-src`, dan hapus entri Google begitu tidak ada lagi yang memakainya.
- Kirim perubahan markup dan server dalam satu deploy. Halaman dengan widget baru yang mengirim ke server yang masih mengharapkan `g-recaptcha-response` akan menggagalkan setiap kiriman.

## Mengganti reCAPTCHA dengan Ikiform

Jika formulir Anda mengirim ke Ikiform, hapus widget reCAPTCHA sepenuhnya. Ikiform tidak memverifikasi token reCAPTCHA atau hCaptcha. Nilai `g-recaptcha-response` yang tersisa akan masuk sebagai field tambahan, atau gagal dengan `422 validation_failed` sebagai field tak dikenal jika Anda mendefinisikan field formulir. Lalu pilih penggantinya:

- **Tidak ada tambahan.** Honeypot, skor konten, dan rate limit berjalan di setiap formulir. Banyak formulir kontak tidak butuh lebih dari itu.
- **Spam check diatur ke Ikiform.** Cloudflare Turnstile, dijalankan oleh Ikiform, tanpa akun atau key. Kiriman HTML biasa mendapat halaman pemeriksaan singkat; kode `fetch` memanggil `challenge()` dari `@ikiform/sdk`.
- **Key Turnstile Anda sendiri.** Pertahankan widget Anda sendiri di halaman, tempel key-nya ke pengaturan formulir, dan Ikiform memverifikasi token-nya.

**HTML** (`contact.html`)

```html
<form action="https://ikiform.com/f/frm_xxxxxxxxxxxxxxxx" method="POST">
  <input name="email" type="email" required />
  <textarea name="message" required></textarea>
  <input name="_gotcha" type="text" tabindex="-1" autocomplete="off" hidden />
  <button>Send</button>
</form>
```

Formulir itu sama sekali tidak punya widget. Dengan **Spam check** diatur ke **Ikiform**, pemeriksaan manusia terjadi di ikiform.com setelah kiriman, jadi halaman Anda tidak memuat skrip captcha apa pun. [Dokumentasi spam](https://ikiform.com/id/docs/spam.md#human-check) membahas setiap mode.

> Jika Anda sekaligus beralih dari layanan formulir hosted, halaman perbandingan untuk [Formspree](https://ikiform.com/alternatives/formspree) dan [Netlify Forms](https://ikiform.com/alternatives/netlify-forms) membahas apa lagi yang berubah.

## Pastikan berfungsi

1. Kirim formulir setelah peralihan. Kiriman diterima dan Anda paling banyak hanya melihat checkbox.
2. Kirim ke endpoint dengan curl tanpa token. Kiriman ditolak, yang membuktikan server memeriksa token baru.
3. Cari `g-recaptcha` dan `recaptcha/api.js` di halaman-halaman Anda. Tidak ada yang tersisa.
4. Buka **Submissions** di dashboard. Kiriman baru ada di sana dengan setiap field yang Anda kirim.
5. Tidak ada yang masuk? Ubah filter status di dashboard ke **Spam**. Spam mendapat jawaban sukses yang sama dengan kiriman asli.

## Hal yang sering menjebak

- **Pengaturan pembuat situs.** Pembuat situs dengan pengaturan reCAPTCHA bawaan mungkin mewajibkan elemen itu di setiap formulir selama pengaturannya aktif. Matikan pengaturannya sebelum menghapus elemen.
- **Halaman yang di-cache.** Pengunjung dengan halaman lama yang di-cache masih mengirim `g-recaptcha-response` untuk sementara setelah Anda deploy. Perkirakan beberapa kegagalan, atau terima kedua token selama sehari.
- **Skor v3 di laporan.** Jika dashboard atau peringatan membaca skor reCAPTCHA, semuanya akan diam setelah peralihan. Perbarui.

## Pertanyaan

### Apa alternatif terbaik untuk reCAPTCHA?

Untuk sebagian besar formulir, Cloudflare Turnstile: biasanya tak terlihat, tanpa biaya di skala kecil, dan memverifikasi dengan parameter secret dan response yang sama. Jika Anda sama sekali tidak ingin pihak ketiga, alat proof-of-work yang di-host sendiri seperti ALTCHA bisa dipakai. Banyak formulir kontak tidak butuh captcha begitu honeypot, skor, dan rate limit sudah terpasang.

### Apakah reCAPTCHA masih gratis?

Dokumentasi billing Google mencantumkan kuota gratis 10.000 penilaian per bulan, dengan tingkatan berbayar di atasnya. Cek harga Google yang berlaku sebelum membuat rencana berdasarkan itu.

### Bisakah Ikiform memverifikasi token reCAPTCHA atau hCaptcha?

Tidak. Ikiform hanya memverifikasi Cloudflare Turnstile, baik pemeriksaan terkelolanya sendiri maupun key Turnstile Anda sendiri. Hapus widget captcha lain dari formulir yang mengirim ke Ikiform.

### Apakah beralih dari reCAPTCHA ke Turnstile butuh banyak kerja?

Biasanya tidak. Anda mengubah URL skrip, class elemen, nama field token, dan URL verifikasi, dan mempertahankan parameter secret dan response yang sama. Deploy perubahan halaman dan server bersamaan.

## Panduan lainnya

- [Hentikan spam formulir kontak](https://ikiform.com/id/guides/spam-protection.md): Hentikan spam formulir kontak dengan lapisan yang tidak membebani orang sungguhan: honeypot, waktu pengisian, skor konten, rate limit, dan pemeriksaan manusia hanya bila perlu.
- [Cloudflare Turnstile](https://ikiform.com/id/guides/spam-protection/cloudflare-turnstile.md): Tambahkan Cloudflare Turnstile ke formulir HTML biasa: widget, siteverify di sisi server, key uji, dan cara menjalankannya tanpa key atau server sendiri.
- [Tanpa captcha](https://ikiform.com/id/guides/spam-protection/without-captcha.md): Hentikan sebagian besar spam formulir tanpa captcha sama sekali: honeypot, waktu render bertanda tangan, skor konten, dan rate limit, digabungkan alih-alih dipakai sendiri-sendiri.
- [Field honeypot](https://ikiform.com/id/guides/spam-protection/honeypot.md): Tambahkan honeypot ke formulir apa pun yang menangkap bot tanpa mengganggu screen reader, keyboard, atau autofill, dengan pemeriksaan server untuk setiap stack.
- [Rate limiting](https://ikiform.com/id/guides/spam-protection/rate-limiting.md): Batasi rate kiriman formulir per pengunjung dengan store bersama, jawab 429 dengan Retry-After, dan hindari mengunci kantor yang berbagi satu IP.
- [Situs statis](https://ikiform.com/id/guides/spam-protection/static-site.md): Hentikan spam di formulir situs statis meskipun situs itu tidak bisa menyimpan secret atau menghitung kiriman, dengan partial honeypot, skrip yang aman, dan pemeriksaan sisi server.
