# Cara menghentikan spam formulir Webflow

> Lindungi formulir Webflow yang mengirim ke form backend, tempat pengaturan spam Webflow tidak pernah berjalan, dengan honeypot di luar layar dan pemeriksaan manusia.

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

reCAPTCHA, pemblokiran bot, dan filter spam Webflow hanya bekerja pada kiriman yang diterima Webflow sendiri. Jika formulir Anda memakai custom action untuk mengirim ke form backend, pengaturan itu tidak pernah melihat kirimannya, jadi perlindungannya harus terjadi di backend. Tambahkan honeypot di luar layar lewat Designer, atur domain dan rate limit di backend, lalu nyalakan pemeriksaan manusianya, yang bekerja dengan kiriman Webflow biasa tanpa kode.

## Apa yang berbeda di Webflow

Webflow punya alat spam sendiri: reCAPTCHA v2, pengaturan pemblokiran bot yang menjalankan Cloudflare Turnstile, dan filter spam yang membaca isi setiap kiriman. Semuanya ada di sisi Webflow, jadi hanya bekerja pada kiriman yang sampai ke Webflow. Begitu Anda mengatur **Send to** formulir ke custom action, browser mengirim langsung ke URL itu. Webflow tidak pernah melihat kirimannya, jadi tidak satu pun pemeriksaannya berjalan, bagaimanapun pengaturannya.

Diagram: Di mana pemeriksaan spam berjalan untuk formulir Webflow, dengan dan tanpa custom action

1. Saat Webflow menangani formulir, kiriman masuk ke Webflow, yang menjalankan reCAPTCHA, pemblokiran bot, dan filter spam sebelum menyimpannya.
2. Dengan custom action, browser mengirim formulir yang sama langsung ke Ikiform.
3. Pemeriksaan Webflow tidak pernah melihat kiriman itu, apa pun pengaturannya.
4. Ikiform menjalankan honeypot, skor, rate limit, dan pemeriksaan manusia, lalu menyimpan kiriman sebagai diterima atau spam.

Memindahkan formulir ke custom action juga memindahkan perlindungan spamnya. Siapkan di backend pada hari yang sama.

## Pengaturan Webflow sendiri, setelah beralih

| Pengaturan Webflow | Dengan custom action | Yang harus dilakukan |
| --- | --- | --- |
| Elemen dan validasi reCAPTCHA | Tidak diverifikasi siapa pun. Nilai `g-recaptcha-response`-nya tiba sebagai field tambahan | Hapus elemennya. Matikan validasi reCAPTCHA hanya jika tidak ada formulir yang masih ditangani Webflow yang membutuhkannya, karena pengaturan itu berlaku untuk setiap formulir di situs |
| Pemblokiran bot | Tidak berlaku untuk kiriman yang menuju tempat lain | Biarkan untuk formulir yang masih ditangani Webflow |
| Penyaringan spam | Tidak berlaku | Gunakan skor konten dari backend sebagai gantinya |
| Batas kiriman formulir dan notifikasi | Tidak berlaku | Backend yang menyimpan dan mengirim email sebagai gantinya |

[Panduan Webflow](https://ikiform.com/id/docs/guides/webflow.md) di dokumentasi membahas cara mengarahkan Form Block ke Ikiform. Langkah di bawah menambahkan perlindungan spam di atasnya.

## Tambahkan honeypot di Designer

Cara cepat Webflow untuk menyembunyikan input adalah **Display: none**. Sebagian bot melewati field yang disembunyikan dengan cara itu, jadi taruh jebakannya di wrapper di luar layar. Hanya butuh satu menit dan tidak perlu paket berbayar:

- Di dalam formulir, tambahkan **Div Block** dan beri class seperti `hp`. Di panel Style, atur **Position** ke **Absolute**, **Left** ke `-10000px`, **Width** dan **Height** ke `1px`, serta **Overflow** ke **Hidden**.
- Di **Custom attributes** milik Div Block, tambahkan `aria-hidden` bernilai `true`, agar pembaca layar melewati semua isinya.
- Taruh **Label** dengan teks **Leave this empty** (biarkan kosong) dan sebuah **Input** di dalam Div Block. Atur **Name** Input ke `_gotcha`, lalu tambahkan custom attribute `tabindex` = `-1` dan `autocomplete` = `off`.
- Jangan centang **Required** di situ. Field wajib yang tidak bisa dilihat siapa pun memblokir setiap kiriman yang jujur.

`_gotcha` yang terisi menambah 5 ke skor spam Ikiform, cukup untuk mencapai ambang 5 dengan sendirinya. Anda bisa mengganti nama field per formulir di **Honeypot field** jika template yang Anda pakai sudah punya jebakan dengan nama lain.

## Beri nama field untuk penilaian skor

Webflow menamai setiap input sesuai labelnya, jadi Anda mendapat `Name`, `Email`, dan `Field 2`. Ganti namanya di pengaturan setiap input menjadi `name`, `email`, dan `message`. Nama itu penting untuk skor spam sekaligus untuk data Anda:

- Link di field nama, seperti `name`, `first_name`, atau `subject`, menambah 3. Spammer sering menaruh URL mereka di sana, dan orang sungguhan tidak pernah melakukannya.
- Alamat dengan domain email sekali pakai menambah 2, dibaca dari field mana pun yang berisi alamat email.
- Tiga link atau lebih di seluruh formulir menambah 2, dan frasa spam yang dikenal menambah 2.

## Nyalakan pemeriksaan manusia

Di pengaturan formulir Ikiform, atur **Spam check** ke **Ikiform**. Tidak ada yang berubah di Webflow. Saat formulir mengirim dengan cara biasa, Ikiform menjawab dengan halaman singkat **Checking you're human** di ikiform.com yang menjalankan Cloudflare Turnstile dan meneruskan field-nya, lalu pengunjung mendarat di halaman **Redirect after submit** Anda. Tanpa akun Cloudflare, key, atau kode kustom.

Jika Anda menambahkan skrip dari dokumentasi untuk mempertahankan blok sukses dan error Webflow, skrip itu mengirim dengan `fetch`, dan kiriman `fetch` tanpa token mendapat `403 challenge_required`. Versi ini menanganinya: kembali ke kiriman biasa untuk pemeriksaan manusia, dan menampilkan waktu tunggu saat pengunjung terkena rate limit.

`Sebelum tag </body>`:

```html
<script>
  document.querySelectorAll('form[action^="https://ikiform.com/f/"]').forEach((form) => {
    const wrapper = form.closest(".w-form");
    const done = wrapper?.querySelector(".w-form-done");
    const fail = wrapper?.querySelector(".w-form-fail");
    const button = form.querySelector('[type="submit"]');

    function showError(text) {
      const slot = fail?.querySelector("div") ?? fail;
      if (slot) slot.textContent = text;
      if (fail) fail.style.display = "block";
    }

    form.addEventListener("submit", async (event) => {
      event.preventDefault();
      const label = button?.value;
      if (button) {
        button.disabled = true;
        button.value = button.dataset.wait || label;
      }
      try {
        const response = await fetch(form.action, {
          method: "POST",
          headers: { Accept: "application/json" },
          body: new FormData(form),
        });
        const result = await response.json();
        if (result.ok) {
          form.style.display = "none";
          if (fail) fail.style.display = "none";
          if (done) done.style.display = "block";
          return;
        }
        if (result.error.code === "challenge_required") {
          form.submit();
          return;
        }
        showError(
          response.headers.has("Retry-After")
            ? `Too many messages. Try again in ${response.headers.get("Retry-After")} seconds.`
            : result.error.message,
        );
      } catch {
        form.submit();
      } finally {
        if (button) {
          button.disabled = false;
          button.value = label;
        }
      }
    });
  });
</script>
```

- `form.submit()` mengirim formulir tanpa memicu event `submit`, sehingga fallback tidak pernah berputar kembali ke skrip.
- Tempel di **Page settings** > **Custom code** > **Before </body> tag**, atau di kode footer situs untuk semua formulir. Kode kustom butuh paket situs berbayar dan hanya berjalan di situs yang sudah dipublikasikan.
- Skrip ini hanya menyentuh formulir yang action-nya diawali `https://ikiform.com/f/`, jadi formulir yang masih ditangani Webflow tidak diubah.

## Domain yang diizinkan dan rate limit

Di **Allowed domains** formulir Ikiform, tambahkan custom domain dan alamat staging Anda, seperti `your-site.webflow.io`. Jangan pernah menambahkan `webflow.io` saja: setiap situs Webflow akan cocok, termasuk milik orang lain. Kiriman dari tempat lain disimpan sebagai spam, atau ditolak jika Anda memilih **Reject**.

Untuk formulir kontak, atur **Rate limit** ke Strict, 2 per 10 menit per pengunjung. Tidak ada orang jujur yang menulis dua kali dalam sepuluh menit. Formulir pendaftaran di hari peluncuran yang ramai lebih cocok dengan Relaxed, 20 per menit per pengunjung. Setiap formulir dimulai dengan Standard, 5 per menit.

> Kiriman yang dinilai spam mendapat jawaban sukses yang sama dengan kiriman asli, jadi bot tidak belajar apa-apa. Kiriman itu disimpan dengan status `spam`, tidak mengirim email notifikasi maupun webhook, tidak dihitung dalam pemakaian Anda, dan dihapus setelah 30 hari. Setiap Senin, workspace yang memblokir spam menerima satu email ringkasan berisi total, formulir tersibuk, dan alasan teratas.

## Pastikan berfungsi

1. Publikasikan ke domain staging `webflow.io` Anda. Custom action hanya mengirim dari situs yang sudah dipublikasikan.
2. Kirim formulir seperti biasa. Dengan pemeriksaan manusia aktif, Anda melihat halaman pemeriksaan sebentar, lalu halaman terima kasih Anda.
3. Inspect formulir yang sudah dipublikasikan dan pastikan wrapper honeypot punya `aria-hidden` dan berada di luar layar.
4. Kirim dengan honeypot terisi, `_gotcha=bot`. Kiriman tetap mendapat jawaban sukses, tetapi disimpan sebagai spam dan tidak memicu email atau webhook.
5. Buka **Submissions** di dashboard. Kiriman baru ada di sana dengan setiap field yang Anda kirim.
6. Tidak ada yang masuk? Ubah filter status di dashboard ke **Spam**. Spam mendapat jawaban sukses yang sama dengan kiriman asli.

## Hal yang sering menjebak

- **Spam tetap masuk meski pengaturan Webflow aktif.** Jika spam terus datang setelah Anda menyalakan alat Webflow, cek **Send to** formulir. Custom action melewati semuanya.
- **reCAPTCHA masih terpasang.** Dengan field yang didefinisikan di formulir Ikiform, `g-recaptcha-response` yang tersisa gagal dengan `422 validation_failed` sebagai field yang tidak dikenal. Hapus elemennya.
- **Formulir yang diduplikasi.** Menyalin formulir ikut menyalin input honeypot, tetapi tidak selalu custom attribute-nya. Cek `tabindex` dan `aria-hidden` di setiap salinan.
- **Interaction pada wrapper.** Interaction Webflow yang menganimasikan setiap Div Block di formulir bisa memindahkan honeypot ke area yang terlihat. Kecualikan class-nya.

## Pertanyaan

### Mengapa formulir Webflow saya masih menerima spam?

Jika formulir memakai custom action, reCAPTCHA, pemblokiran bot, dan filter spam Webflow tidak pernah melihat kirimannya. Perlindungan harus terjadi di tempat tujuan kiriman. Jika Webflow yang menangani formulir, coba nyalakan pemblokiran bot bersama filter spam.

### Bagaimana menambahkan honeypot ke formulir Webflow?

Tambahkan Div Block di dalam formulir, pindahkan ke luar layar dengan posisi absolute, dan beri aria-hidden true. Taruh input bernama _gotcha di dalamnya dengan tabindex -1 dan autocomplete off, dan jangan jadikan wajib.

### Bisakah saya memakai reCAPTCHA di formulir Webflow yang mengirim ke Ikiform?

Tidak. Ikiform tidak memverifikasi token reCAPTCHA. Hapus elemennya dan atur Spam check formulir Ikiform ke Ikiform, yang menjalankan Cloudflare Turnstile tanpa key dan tanpa kode di Webflow.

### Apakah saya butuh paket Webflow berbayar untuk perlindungan spam?

Tidak untuk honeypot atau pemeriksaan Ikiform, yang bekerja dengan formulir Webflow biasa. Kode kustom, yang dipakai untuk mempertahankan blok sukses Webflow di halaman, butuh paket situs berbayar.

## 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.
- [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.
- [Alternatif reCAPTCHA](https://ikiform.com/id/guides/spam-protection/recaptcha-alternatives.md): 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.
- [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.
- [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.
