¿Qué es un Honeypot y cómo implementarlo en WordPress para evitar spam?

Si tienes formularios en WordPress (contacto, registro, comentarios, checkout, etc.), tarde o temprano vas a recibir spam.

La solución más popular suele ser usar un CAPTCHA como Google reCAPTCHA, pero existe una alternativa mucho más elegante y amigable con el usuario: el Honeypot.

 

¿Qué es un Honeypot?

Un honeypot es una técnica anti-spam que consiste en agregar un campo trampa dentro de un formulario.

Ese campo:

  • No debe ser completado por humanos
  • Sí suele ser completado por bots automáticos

La lógica es simple:

  • Si el campo está vacío → probablemente es humano
  • Si el campo tiene contenido → probablemente es un bot

No requiere interacción.
No muestra desafíos.
No agrega fricción.

 

¿Cómo funciona técnicamente?

Un ejemplo básico sería:

<input type="text" name="fullName">
<input type="email" name="email">
<input type="text" name="websiteField" style="display:none;">

 

Luego en el backend validamos:

<?php
if ( ! empty( $_POST['websiteField'] ) ) {
    exit;
}

Si el campo oculto tiene valor, bloqueamos el envío.

Simple.

 

Implementación básica en WordPress

1. Agregar el campo Honeypot al formulario

<?php
function renderContactForm() {
    ?>
    <form method="post" action="">

        <input type="text" name="fullName" required>
        <input type="email" name="email" required>

        <div style="display:none;">
            <input type="text" name="websiteField">
        </div>

        <button type="submit">Send</button>

    </form>
    <?php
}

 

2. Validar el campo en el procesamiento

<?php
function handleContactForm() {

    if ( $_SERVER['REQUEST_METHOD'] !== 'POST' ) {
        return;
    }

    if ( ! empty( $_POST['websiteField'] ) ) {
        wp_die( 'Spam detected.' );
    }

    // Continue processing normally
}

 

Aplicarlo al formulario de comentarios de WordPress

Agregamos el campo:

<?php
function addHoneypotToCommentForm( $fields ) {

    $fields['websiteField'] = '<p style="display:none;">
        <label>Leave this field empty</label>
        <input type="text" name="websiteField" value="">
    </p>';

    return $fields;
}
add_filter( 'comment_form_default_fields', 'addHoneypotToCommentForm' );

 

Validamos antes de guardar el comentario:

<?php
function validateCommentHoneypot( $commentData ) {

    if ( ! empty( $_POST['websiteField'] ) ) {
        wp_die( 'Spam detected.' );
    }

    return $commentData;
}
add_filter( 'preprocess_comment', 'validateCommentHoneypot' );

 

Mejora avanzada: Honeypot sin hidden ni display:none

Muchos bots modernos detectan automáticamente:

  • type="hidden"
  • display:none

Por eso una mejora profesional es ocultar el campo visualmente sin eliminarlo del flujo del DOM.

 

1. Agregar el campo como si fuera real

<?php
function renderContactForm() {
    ?>
    <form method="post" action="">

        <input type="text" name="fullName" required>
        <input type="email" name="email" required>

        <div class="hpFieldWrapper">
            <label for="companyName">Company</label>
            <input type="text"
                   name="companyName"
                   id="companyName"
                   autocomplete="off">
        </div>

        <button type="submit">Send</button>

    </form>
    <?php
}

Observa que:

  • No usamos hidden
  • No usamos display:none
  • Parece un campo legítimo

 

2. Ocultarlo con CSS avanzado

.hpFieldWrapper {
    position: absolute;
    left: -9999px;
    width: 1px;
    height: 1px;
    overflow: hidden;
    opacity: 0;
}

 

Alternativa más técnica:

.hpFieldWrapper {
    position: absolute;
    width: 1px;
    height: 1px;
    margin: -1px;
    padding: 0;
    border: 0;
    overflow: hidden;
    clip: rect(0 0 0 0);
}

Con esto logramos:

  • El campo está presente en el DOM
  • No afecta el diseño
  • No es visible
  • Muchos bots lo siguen completando

 

3. Validación en WordPress

<?php
function handleContactForm() {

    if ( $_SERVER['REQUEST_METHOD'] !== 'POST' ) {
        return;
    }

    if ( ! empty( $_POST['companyName'] ) ) {
        wp_die( 'Spam detected.' );
    }

    // Continue normal processing
}

 

Honeypot vs CAPTCHA

Comparado con Google reCAPTCHA:

Ventajas del Honeypot

✅ No afecta la experiencia de usuario
✅ No reduce conversiones
✅ No carga scripts externos
✅ No envía datos a terceros
✅ Es más rápido
✅ Es más privado

Desventajas

❌ No bloquea bots extremadamente sofisticados
❌ Depende de buena implementación

 

¿Cuándo usar Honeypot?

Es ideal para:

  • Formularios de contacto
  • Comentarios
  • Registro de usuarios
  • Formularios personalizados
  • WooCommerce

En la mayoría de sitios pequeños y medianos es más que suficiente sin necesidad de CAPTCHA.

 

El Honeypot es una solución:

  • Simple
  • Elegante
  • Invisible
  • Eficiente
  • Fácil de implementar en WordPress

Y si lo mejoras ocultándolo con CSS avanzado en lugar de display:none, obtienes una implementación más robusta sin afectar la experiencia del usuario.

 

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Back to Top
0
Would love your thoughts, please comment.x
()
x