Un honeypot nei form web è un campo di input invisibile, nascosto agli utenti umani tramite CSS ma visibile ai bot automatici che effettuano il parsing dell'HTML. Poiché gli utenti reali non vedono mai (né compilano) il campo, qualunque invio con un honeypot non vuoto viene rifiutato come spam. La tecnica è stata resa popolare intorno al 2007 da blog antispam e dal plugin WordPress "Honeypot for Contact Form 7", ed è l'alternativa privacy-friendly ai CAPTCHA come Google reCAPTCHA — niente script di terze parti, niente cookie, nessun problema di accessibilità, nessun impatto sulla conversione.
Come funziona un honeypot?
Il server aggiunge un campo extra (spesso website, url, email_confirm). Viene nascosto via display: none, visibility: hidden, position: absolute; left: -9999px, <label> vuota o tabindex="-1" autocomplete="off". I bot riempiono indiscriminatamente ogni campo — anche la trappola. All'invio il server verifica:
- Campo vuoto → umano, procedi.
- Campo pieno → bot, scarta in silenzio o restituisci 200 OK senza salvare.
Honeypot vs CAPTCHA: cosa è meglio?
| Criterio | Honeypot | CAPTCHA (reCAPTCHA) |
|---|---|---|
| Frizione utente | Nessuna | Media–alta |
| Accessibilità (WCAG 2.2) | Conforme | Serve audio |
| Privacy / GDPR | Niente chiamate a terze parti | Script Google, consenso necessario |
| Performance | ~0 KB | ~200 KB JS |
| Rilevamento bot | ~95 % spam basico | ~99 % anche bot smart |
| Impatto conversion | Nessuno | 3–29 % di calo |
Per la maggior parte dei siti WordPress, honeypot + controllo temporale bloccano spam più che a sufficienza — senza il costo legale e UX di un CAPTCHA.
Come aggiungere un honeypot a un form WordPress?
Contact Form 7
Installa il plugin gratuito "Honeypot for Contact Form 7" (oltre 1 milione di installazioni attive) e aggiungi [honeypot website].
WPForms / Gravity Forms / Fluent Forms
Tutti e tre includono l'opzione honeypot integrata — un clic.
Form WordPress personalizzato
<p style="position:absolute;left:-9999px;" aria-hidden="true">
<label for="website">Lascia questo campo vuoto</label>
<input type="text" name="website" id="website" tabindex="-1" autocomplete="off">
</p>if ( ! empty( $_POST['website'] ) ) {
wp_die( 'Spam rilevato', 'Errore', array( 'response' => 200 ) );
}Best practice per gli honeypot
- Nomi plausibili come
website,url,company. - Nascondi via CSS, non
type="hidden". tabindex="-1"+autocomplete="off".aria-hidden="true"per screen reader.- Combina con controllo temporale — rifiuta invii sotto 2–3 s.
- Restituisci 200 OK al rifiuto.
Quando l'honeypot non basta?
I bot avanzati che eseguono JS e rispettano la visibilità CSS (Puppeteer / headless Chrome) saltano l'honeypot. Per obiettivi ad alto valore (login, pagamento, lead-gen premium) combina honeypot + tempo + Cloudflare Turnstile o rate limiting. L'altro significato di "honeypot" — un server volutamente vulnerabile per studiare gli attaccanti — è un concetto distinto di cybersecurity.
Cosa controlla InspectWP
InspectWP analizza ogni form sulla pagina crawlata e segnala l'assenza di protezione antispam sui form di contatto e login. Rileva anche gli script di Google reCAPTCHA nella sezione GDPR.