Si tu formulario de contacto no funciona, tu negocio no existe. Suena dramático, pero para muchas empresas de servicios el formulario es el único canal de ventas entrante. Sin embargo, la mayoría de los sitios WordPress dependen de configuraciones por defecto de PHP mail() que envían los leads directamente a la carpeta de Spam. En este manual de ingeniería, iremos más allá de "Instala Contact Form 7" para construir una máquina de generación de leads profesional y segura.
Descubre más sobre desarrollo profesional de WordPress en WPPoland.
Que un formulario entregue depende de elegir bien el constructor, configurar SMTP, frenar el spam sin bloquear a usuarios reales, respetar las reglas de consentimiento y medir dónde fallan los envíos. Para una web de pequeña empresa, una plataforma corporativa o un WordPress headless, el objetivo es el mismo: que cada consulta válida llegue al flujo de trabajo correcto.
Cómo configurar SMTP en WordPress para formularios
La razón número uno por la que los formularios fallan es la entregabilidad. No el diseño, no el texto: la entrega. Los proveedores de hosting (hosting compartido, VPS, cloud) tienen una reputación IP terrible, porque cada IP la comparten miles de sitios y muchos envían spam. Si envías correo desde [email protected] vía PHP, Gmail y Outlook confían en él tanto como en una estafa del Príncipe Nigeriano.
Por qué falla PHP mail() en 2026
La función mail() de PHP envía correos sin autenticación, sin cabeceras correctas y sin gestión de reputación. Los proveedores de correo actuales filtran comprobando la autenticación del dominio, la reputación histórica de la IP que envía y el contenido del mensaje (palabras típicas de spam, calidad de los enlaces, formato). Sin una configuración SMTP correcta, los envíos del formulario acaban en spam o directamente bloqueados.
Servicios de correo transaccional para WordPress
Debes usar un proveedor SMTP externo. No es una opción, es un requisito de infraestructura en 2026.
- Postmark / SendGrid / Amazon SES: Estos son motores de entrega dedicados con reputación IP optimizada
- Plugin:
FluentSMTP(gratuito, open source), ligero y configurable - Configuración: Conectar vía API (más rápido que credenciales SMTP tradicionales)
Autenticación de correo: SPF, DKIM y DMARC
En 2026, si no tienes SPF, DKIM y DMARC configurados, tus correos no llegarán. Punto.
- SPF (Sender Policy Framework): Define qué servidores pueden enviar correos en nombre de tu dominio
- DKIM (DomainKeys Identified Mail): Firma criptográfica que verifica que el correo no fue alterado
- DMARC (Domain-based Message Authentication): Política que define qué hacer con correos que fallan SPF/DKIM
Qué proveedor SMTP usar con WordPress
Gmail / Google Workspace SMTP
Ideal para: pequeñas empresas que ya usan Google Workspace
Configuración:
- Activa la verificación en dos pasos en tu cuenta de Google
- Genera una contraseña de aplicación en myaccount.google.com/apppasswords
- Configúrala en FluentSMTP:
- Host:
smtp.gmail.com - Puerto:
587(TLS) o465(SSL) - Autenticación: Sí
- Usuario: tu dirección de correo completa
- Contraseña: tu contraseña de aplicación de 16 caracteres
- Host:
Límites: Google indica un límite diario de 2.000 mensajes por usuario de Workspace y de 500 para cuentas de prueba (límites de envío de Gmail en Google Workspace).
SendGrid
Ideal para: remitentes de gran volumen e integraciones de marketing
- Crear cuenta en SendGrid y verificar dominio
- Generar API Key con permisos de envío (“Mail Send”)
- Configurar registros DNS (SPF, DKIM, DMARC) en tu proveedor de dominio
- Instalar y configurar FluentSMTP en WordPress, por API (recomendado) o por SMTP con host
smtp.sendgrid.net, puerto587, usuarioapikeyy la API Key como contraseña - Enviar correo de prueba y verificar headers en Gmail (buscar “SPF: PASS”, “DKIM: PASS”)
Ventajas: analítica de entregabilidad y Event Webhook para seguir rebotes y aperturas.
Mailgun
Ideal para: desarrolladores y aplicaciones centradas en API
- Regístrate en mailgun.com y verifica tu dominio
- Añade los registros DNS (MX, TXT para SPF/DKIM) que te indique
- Configura FluentSMTP con host
smtp.mailgun.org, puerto587, usuario[email protected]y tu contraseña SMTP de Mailgun
Ventajas: un plan gratuito limitado a 100 correos al día (precios de Mailgun, octubre de 2026), API y registros detallados.
Postmark
Ideal para: correo transaccional
- Crea una cuenta en postmarkapp.com
- Verifica la firma de remitente (dominio o dirección)
- Genera un Server API Token
- En FluentSMTP elige “Postmark” como proveedor e introduce el token
Ventajas: 100 correos al mes en el plan gratuito para desarrolladores, 45 días de historial completo de contenido por defecto y gestión de rebotes (precios de Postmark).
Amazon SES (Simple Email Service)
Ideal para: empresas y envíos de gran volumen con control de costes
- Crea una cuenta de AWS y abre la consola de SES
- Verifica tu dominio y solicita acceso de producción (elimina los límites del sandbox)
- Crea credenciales SMTP en la consola de SES
- Configura FluentSMTP con el host de tu región (por ejemplo
email-smtp.us-east-1.amazonaws.com), puerto587o2587(TLS) y las credenciales SMTP de SES
Ventajas: 0,10 USD por cada 1.000 correos salientes con precios a la carta (precios de Amazon SES), escala a millones de envíos e integra con el ecosistema AWS.
| Proveedor | Dato verificado (octubre de 2026) | Mejor para |
|---|---|---|
| Postmark | 100 correos/mes en el plan para desarrolladores | Correo transaccional |
| Mailgun | Plan gratuito de 100 correos/día | Desarrolladores, API |
| Amazon SES | 0,10 USD por 1.000 correos a la carta | Gran volumen, bajo coste |
| Google Workspace | 2.000 mensajes/día por usuario | Equipos que ya usan Workspace |
Cómo configurar FluentSMTP
FluentSMTP es el plugin de referencia para configurar SMTP en WordPress:
- Gratuito y open source: sin versión de pago (más de 700.000 instalaciones activas en wordpress.org, octubre de 2026)
- Varios proveedores: varias conexiones SMTP con conmutación por error
- Integración por API: conexión con claves API, más rápida y segura que las credenciales SMTP
- Registro de correos: panel propio con los envíos correctos y fallidos
- Reglas de enrutamiento: cada formulario puede salir por un proveedor distinto
Instalación:
wp plugin install fluent-smtp --activateCómo depurar fallos de correo en WordPress
Cuando el formulario se envía pero el correo no llega, usa este código de diagnóstico:
// Log all email failures for debugging
add_action( 'wp_mail_failed', function( $error ) {
error_log( 'Email Failure: ' . print_r( $error, true ) );
} );
// Log successful sends (for verification)
add_action( 'wp_mail_succeeded', function( $mail_data ) {
error_log( 'Email Sent: ' . $mail_data['to'] );
} );Revisa después los registros de errores:
tail -f /var/log/apache2/error.log
tail -f /var/log/nginx/error.log
# Or use WP-CLI
wp shell
>>> error_log( 'Test email logging' );Cómo evitar el spam en formularios de WordPress
Los bots actuales recorren formularios, marcan casillas y envían spam de “Servicio de SEO” de forma masiva. El CAPTCHA tradicional añade fricción a los usuarios legítimos y aun así deja pasar ataques más elaborados.
Honeypot, Turnstile y validación en el servidor
Capa 1: Honeypot Un campo oculto que solo los bots rellenan. Simple, invisible para usuarios, y sorprendentemente efectivo contra bots básicos. La mayoría de los constructores modernos incluyen un honeypot por defecto: comprueba que está activado.
<!-- Campo honeypot oculto con CSS -->
<div style="position:absolute;left:-5000px;" aria-hidden="true">
<input type="text" name="website_url_hp" tabindex="-1" autocomplete="off">
</div>Un caso práctico lo contó elszczepano el 19 de agosto de 2026. Un blog en WordPress protegía los comentarios con Akismet y reCAPTCHA hasta que reCAPTCHA pasó a Google Cloud, que exige una cuenta con facturación configurada y limita el nivel gratuito. El autor cambió a Cloudflare Turnstile. Según las estadísticas de Cloudflare, cerca de la mitad del tráfico del sitio se clasificó como probable bot y, aun así, a las pocas semanas había varios cientos de comentarios en la carpeta de spam. La solución fue un campo oculto en el formulario de comentarios que debe estar presente en el envío y debe estar vacío, enganchado en functions.php con la acción comment_form y el filtro preprocess_comment. Según el autor, desde noviembre de 2025 ningún comentario ha acabado en la carpeta de spam.
Capa 2: Cloudflare Turnstile El captcha “amigable” de 2026. Sin puzzles. Sin imágenes de semáforos. Turnstile analiza señales del navegador para determinar si el visitante es humano, sin interrumpir la experiencia del usuario.
Lo que dice la documentación oficial:
- Tres modos de widget: gestionado (muestra una casilla solo a visitantes de mayor riesgo), no interactivo e invisible (resumen de Turnstile)
- El plan gratuito permite hasta 20 widgets y desafíos ilimitados (planes de Turnstile)
- El widget por sí solo no demuestra nada: “Debes llamar a la API Siteverify para completar tu implementación de Turnstile” (validación en el servidor, traducción propia). Cada token vale 300 segundos y solo se puede validar una vez
- Contact Form 7 incluye una etiqueta nativa
[turnstile]y Fluent Forms tiene un campo Turnstile, así que un plugin aparte es opcional
<!-- Add to form head -->
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
<!-- Add before submit button -->
<div class="cf-turnstile" data-sitekey="YOUR_SITE_KEY"></div>Capa 3: Akismet Nació para los comentarios de WordPress y también filtra envíos de formularios.
- Instala el plugin Akismet
- Consigue una clave API: el plan personal es “paga lo que puedas” y los sitios comerciales necesitan un plan Pro o Business (precios de Akismet)
- Activa el filtrado en tu constructor (en Contact Form 7, añade opciones como
akismet:authoryakismet:author_emaila las etiquetas de nombre y email; en Gravity Forms, activa la protección con Akismet en los ajustes del formulario)
Capa 4: Validación del lado del servidor La última línea de defensa. Verifica si la IP proviene de un país o ASN conocido en listas negras. Implementa rate limiting por IP, por ejemplo un máximo de 3 envíos de formulario por minuto.
// Validacion del lado del servidor - rate limiting básico
function wppoland_check_submission_rate( $ip ) {
$transient_key = 'form_rate_' . md5( $ip );
$count = get_transient( $transient_key );
if ( $count >= 3 ) {
return false; // Bloqueado
}
set_transient( $transient_key, ( $count ?: 0 ) + 1, MINUTE_IN_SECONDS );
return true;
}Capa 5: Validación de contenido Analiza el contenido del mensaje en busca de patrones de spam comunes: URLs excesivas, caracteres cirílicos en formularios en español, palabras clave de spam conocidas. Un filtro sencillo rechaza enlaces en el campo de nombre:
// Block submissions with URLs in name fields
add_filter( 'wpcf7_validate_text', function( $result, $tag ) {
$field_name = $tag->name;
$value = isset( $_POST[$field_name] ) ? $_POST[$field_name] : '';
if ( preg_match( '/http|www|\.com|\.net/i', $value ) ) {
$result->invalidate( $tag, 'URLs are not allowed in this field.' );
}
return $result;
}, 10, 2 );Capa 6: Validación por tiempo Los bots envían el formulario al instante; las personas tardan. Un script que mida el tiempo entre la carga de la página y el envío bloquea los envíos de menos de tres segundos.
Mejores plugins de formularios para WordPress
Elegir constructor afecta a todo, desde la experiencia del usuario hasta la flexibilidad del desarrollo.
1. Contact Form 7
- Precio: gratuito, sin versión premium, más de 10 millones de instalaciones activas en wordpress.org (octubre de 2026)
- Pros: extensiones infinitas, amigable para desarrolladores (HTML/shortcodes), integraciones nativas con Akismet, reCAPTCHA y Cloudflare Turnstile
- Contras: carga assets en cada página (impacto en rendimiento), UI fea por defecto, sin constructor visual, sin almacenamiento de entradas (el plugin complementario Flamingo guarda los envíos), sin lógica condicional sin complementos
- Veredicto: usar solo si eres desarrollador que ama CSS y necesitas control total
Optimización crítica para CF7:
// Cargar CF7 solo en páginas con formulario
add_action( 'wp_enqueue_scripts', function() {
if ( ! is_page( 'contacto' ) ) {
wp_dequeue_style( 'contact-form-7' );
wp_dequeue_script( 'contact-form-7' );
}
} );2. Gravity Forms
- Precio: 59 USD/año (Basic, 1 sitio), 159 USD/año (Pro, 3 sitios), 259 USD/año (Elite, sitios ilimitados), según la página de precios de Gravity Forms en octubre de 2026
- Pros: herramientas para construir formularios que cumplan WCAG 2.1 AA desde la versión 2.5, complementos nativos (Stripe, HubSpot, Zapier; Salesforce solo en Elite)
- Funciones: lógica condicional avanzada, formularios multi-paso con indicadores de progreso, gestión y exportación de entradas, campos de cálculo, subida de archivos, complemento de firma
- Contras: licencia anual, puede pesar en hosting compartido, curva de aprendizaje en funciones avanzadas
- Veredicto: el estándar para sitios empresariales serios
3. WPForms
- Precio: gratuito (WPForms Lite, más de 5 millones de instalaciones activas en wordpress.org, octubre de 2026) más licencias de pago
- Pros: constructor drag-and-drop con vista previa, más de 2.100 plantillas según su ficha en wordpress.org, formularios conversacionales, protección anti-spam integrada
- Contras: los formularios de varias páginas, la subida de archivos y la lógica condicional son funciones Pro
- Veredicto: ideal para equipos de marketing sin experiencia técnica
4. Fluent Forms
- Precio: gratuito (más de 800.000 instalaciones activas en wordpress.org, octubre de 2026) más licencias Pro
- Pros: menos de 30 KB de CSS y JS combinados para un formulario estándar, según su ficha en wordpress.org; formularios conversacionales; lógica condicional, campo de acuerdo GDPR y campo Turnstile en la versión gratuita; más de 60 integraciones en Pro
- Contras: ecosistema más pequeño que Gravity Forms; los formularios multi-paso, la subida de archivos y el borrado automático de entradas requieren Pro
- Veredicto: sitios que priorizan el rendimiento y stacks WordPress modernos
5. Formidable Forms
- Precio: gratuito (más de 300.000 instalaciones activas en wordpress.org, octubre de 2026) más planes de pago
- Pros: vistas de datos y visualización en el frontend, campos calculados, directorios y listados, webhooks de API
- Contras: curva de aprendizaje más pronunciada, interfaz menos actual que la competencia
- Veredicto: aplicaciones con muchos datos, directorios y calculadoras
6. Formularios headless con Next.js o Astro
Si ejecutas un WordPress headless, los plugins estándar no renderizarán el formulario en el frontend.
- Solución: Enviar POST al endpoint REST API de Contact Form 7
- Endpoint:
POST /wp-json/contact-form-7/v1/contact-forms/{id}/feedback - Alternativa: React Hook Form + API Route en Next.js/Astro para validación del lado del servidor
// Envio de formulario headless a CF7
const submitForm = async (formData) => {
const response = await fetch(
'https://tu-wp.com/wp-json/contact-form-7/v1/contact-forms/123/feedback',
{
method: 'POST',
body: formData,
}
);
return response.json();
};Comparativa de plugins de formularios
| Característica | CF7 | Gravity Forms | WPForms | Fluent Forms | Formidable |
|---|---|---|---|---|---|
| Precio | Gratis | 59-259 USD/año | Gratis + pago | Gratis + pago | Gratis + pago |
| Versión gratuita en wordpress.org | Sí | No | Sí (Lite) | Sí | Sí |
| Formularios multi-paso | Complemento de terceros | Sí | Pro | Pro | Pro |
| Lógica condicional | Complemento de terceros | Sí | Pro | Gratis | Pro |
Reparto de funciones según la ficha de cada plugin en wordpress.org y la página de precios de Gravity Forms, octubre de 2026.
Formularios de contacto y RGPD en WordPress
Estás recopilando datos personales. En la Unión Europea, el RGPD no es opcional: es una obligación legal con multas de hasta el 4% de la facturación global.
Un formulario de contacto no necesita automáticamente consentimiento: el consentimiento es una de las seis bases jurídicas del artículo 6 del RGPD. Responder a una consulta suele apoyarse en la letra b), el tratamiento necesario “para la aplicación a petición de este de medidas precontractuales”, o en la letra f), los intereses legítimos. El consentimiento pasa a ser la base cuando quieres algo que la consulta no necesita, como un boletín.
Qué exige el RGPD en un formulario de contacto
- Casilla de consentimiento (si la base es el consentimiento): debe estar desmarcada por defecto. El considerando 32 dice: “el silencio, las casillas ya marcadas o la inacción no deben constituir consentimiento”
- Granularidad: consentimientos separados para fines distintos (contacto frente a marketing), con un texto claro
- Prueba: el artículo 7.1 exige que el responsable sea “capaz de demostrar” el consentimiento, así que guarda la fecha y la versión del formulario
- Retirada: artículo 7.3: “Será tan fácil retirar el consentimiento como darlo”
- Retención de datos: no almacenar entradas en la base de datos indefinidamente. Por ejemplo, borrarlas a los 90 días si ya están en el CRM
- Derecho de supresión: implementar un mecanismo para eliminar los datos de un usuario a petición y responder “en el plazo de un mes a partir de la recepción de la solicitud”, prorrogable otros dos meses en casos complejos (artículo 12.3). Borra de las entradas, del CRM, de los registros de correo y de las copias de seguridad
- Contratos de encargado: el proveedor SMTP y el CRM tratan los datos por tu cuenta, así que el artículo 28 exige un contrato con cada uno (DPA). SendGrid, Mailgun, Postmark, HubSpot y Salesforce ofrecen el suyo
- Transferencias internacionales: si usas un servicio estadounidense, verificar cumplimiento con el marco EU-US Data Privacy Framework
Cómo añadir una casilla de consentimiento en CF7
// Ejemplo CF7: Campo de consentimiento GDPR
[acceptance gdpr-consent]
He leído y acepto la <a href="/es/politica-de-privacidad/">Política de Privacidad</a>
[/acceptance]Cómo configurar la retención de entradas
Gravity Forms: ajustes del formulario, pestaña Personal Data, Retention Policy: envía a la papelera o borra las entradas tras un número de días, con una opción para no guardar direcciones IP; la pestaña se integra con las herramientas de exportación y borrado de datos personales de WordPress (documentación) Fluent Forms: borrado automático de entradas (función Pro) Contact Form 7: no guarda nada por defecto; si añades Flamingo, limpia sus registros tú mismo
Cómo almacenar los datos del formulario de forma segura
Los datos del formulario deben cifrarse en reposo si se almacenan en la base de datos. Usa el plugin Flamingo con CF7 solo si necesitas almacenamiento temporal, y configura limpieza automática. Recoge solo los campos que de verdad necesitas, seudonimiza donde puedas y limita qué administradores ven las entradas.
Cómo aumentar la conversión de un formulario
Un formulario con 10 campos asusta a los usuarios. El 11% por campo que se cita en todas partes procede de una prueba de MarketingSherpa de 2013 sobre un único campo, no de una regla general. En 2026, la experiencia del formulario es tan importante como la experiencia del sitio.
Cómo estructurar un formulario multipaso
Paso 1: “¿Cuál es tu objetivo?” (baja fricción, el usuario solo elige una opción) Paso 2: “¿Cuál es tu presupuesto?” (fricción media, compromiso incremental) Paso 3: “Nombre y email” (alta fricción, pero ya están comprometidos psicológicamente)
La cifra del 300% que se repite tanto procede de una agencia que escribe sobre su propio sitio, no de un estudio independiente. Tómala como un dato aislado. El tamaño de la mejora depende de tu formulario, así que mide el tuyo.
Formularios multi-paso en Gravity Forms, WPForms y Fluent Forms
Gravity Forms:
- Añade campos “Page” para dividir el formulario en pasos
- Configura el indicador de progreso (barra o pasos)
- Activa “Save and Continue” en formularios largos
- Usa la lógica condicional para saltar pasos irrelevantes
WPForms:
- Instala el complemento “Form Pages” (Pro)
- Activa el modo de formularios conversacionales
- Elige el diseño y configura colores y marca
Fluent Forms: los formularios multi-paso son una función Pro (el campo “Form Step”):
- Añade un campo “Form Step” al formulario
- Arrastra los campos a cada paso
- Configura títulos y descripciones de los pasos
- Elige el estilo de navegación
Buenas prácticas de diseño de formularios
- Menos es más: pide solo lo estrictamente necesario. Nombre, email y mensaje
- Orden de campos: primero lo fácil (objetivo o interés), luego los detalles del proyecto, después plazos y presupuesto, y al final los datos de contacto
- Botones de acción claros: “Enviar solicitud” mejor que un “Submit” genérico
- Indicadores de progreso: en formularios multi-paso, muestra dónde está el usuario
- Validación en tiempo real: errores mostrados al instante, no después de enviar
- Valores por defecto: rellena campos ocultos desde parámetros de la URL, como
utm_source - Móvil: objetivos táctiles de al menos 44x44 px, teclado numérico en teléfonos y códigos postales, selectores de fecha en lugar de texto libre
- Respuesta de confirmación: página de agradecimiento con siguiente paso claro
- A/B Testing: prueba variaciones del formulario para optimizar continuamente
Qué es un formulario conversacional
La tendencia en 2026 es el formulario “conversacional”: una pregunta a la vez, estilo chat. Herramientas como Typeform, los modos conversacionales de WPForms y Fluent Forms o formularios personalizados con React crean una experiencia que se siente como una conversación, no como un formulario burocrático.
Conectar formularios de WordPress con un CRM
Un formulario que solo envía un email es una oportunidad perdida. En 2026, cada envío de formulario debe fluir automáticamente a tu CRM, sin copiar datos a mano.
Integración con HubSpot, Salesforce, Zoho, Mautic y Pipedrive
- HubSpot: Gravity Forms tiene un complemento oficial en todos los planes que mapea campos a propiedades, crea contactos, empresas y negocios y dispara workflows. WPForms ofrece un complemento de HubSpot con licencia de pago y Fluent Forms lo integra en Pro
- Salesforce: complemento de Gravity Forms (solo Elite) con leads, contactos u objetos personalizados; conector de Formidable Forms; WPForms necesita Zapier como intermediario
- Zoho CRM: integración de Fluent Forms Pro con creación de contactos y leads; en Gravity Forms, vía Zapier o webhook
- Mautic (open source): ideal para agencias que necesitan automatización de marketing sin costes de licencia
- Pipedrive: Gravity Forms vía Zapier, Fluent Forms vía webhook, o webhooks personalizados para crear deals automáticamente
Para desarrolladores, Gravity Forms permite enviar la entrada a la API de HubSpot con el hook gform_after_submission:
add_action( 'gform_after_submission', function( $entry, $form ) {
$api_key = 'your-hubspot-api-key';
$endpoint = 'https://api.hubapi.com/crm/v3/objects/contacts';
$data = [
'properties' => [
'email' => $entry['1'],
'firstname' => $entry['2.3'],
'lastname' => $entry['2.6'],
'company' => $entry['3'],
'message' => $entry['4'],
'source' => 'Website Contact Form'
]
];
wp_remote_post( $endpoint, [
'headers' => [
'Authorization' => 'Bearer ' . $api_key,
'Content-Type' => 'application/json'
],
'body' => json_encode( $data )
]);
}, 10, 2 );Cuando no existe integración nativa, Zapier conecta el formulario con miles de aplicaciones: el envío del formulario es el disparador, el CRM la acción, y los campos se mapean entre ambos sistemas sin código. Admite condiciones (crear el negocio solo si el presupuesto supera un umbral) y cadenas de varios pasos (formulario, CRM, aviso en Slack, calendario).
Qué automatizar después del envío del formulario
- Respuesta automática inmediata: email de confirmación al usuario en menos de 30 segundos
- Notificación al equipo: Slack, Teams o email al responsable asignado
- Creación de tarea: tarea automática en Asana/Monday/ClickUp
- Seguimiento programado: recordatorio automático si no hay respuesta en 24 horas
Cómo medir envíos de formularios con GA4
No puedes mejorar lo que no mides. Implementa tracking en cada formulario para ver en qué punto abandonan los usuarios.
Eventos de formulario en GA4 y Tag Manager
Rastrea eventos de formulario: visualización, inicio de rellenado, envío exitoso, errores de validación. Contact Form 7 emite eventos DOM propios (wpcf7mailsent, wpcf7invalid) a los que puedes engancharte.
// Tracking de envío de formulario con GA4
document.addEventListener('wpcf7mailsent', function(event) {
gtag('event', 'form_submission', {
'form_name': 'contacto_principal',
'form_location': window.location.pathname,
});
});Después, en GA4:
- Abre Administrar, luego Eventos, luego Crear evento
- Marca el evento de envío como evento clave (el nombre actual de GA4 para las conversiones)
- Asigna un valor (opcional): el valor medio de un negocio que llega por el formulario
Analítica integrada en Gravity Forms, WPForms y Fluent Forms
- Gravity Forms: la lista de formularios muestra, por formulario, visitas, entradas y tasa de conversión (entradas frente a visitas)
- WPForms: recuento y tendencia de entradas en el panel; entradas parciales con el complemento Form Abandonment (Pro)
- Fluent Forms: analítica de formularios e informe visual de datos (gratis), proveedor de geolocalización (Pro), exportación de entradas a CSV, Excel, ODS o JSON (gratis)
Para ver dónde dudan los usuarios, qué campos confunden y cómo cambia el comportamiento entre móvil y escritorio, usa un mapa de calor como Microsoft Clarity o Hotjar.
Qué métricas de formulario medir
| Métrica | Acción si va mal |
|---|---|
| Tasa de envío | Simplificar formulario |
| Tasa de abandono | Reducir campos |
| Tiempo de respuesta | Automatizar notificaciones |
| Tasa de entrega email | Verificar SMTP/DNS |
Lógica condicional en formularios de WordPress
La lógica condicional muestra u oculta campos según lo que responde el usuario, y así el formulario solo pide lo que aplica a cada caso.
Mostrar u ocultar campos según la selección
Ejemplo: si “Tipo de consulta” es “Soporte”, se muestra el desplegable “Categoría de soporte”; si no, se oculta.
- Gravity Forms: edita el campo, pestaña de lógica condicional, define reglas (mostrar u ocultar si [campo] [operador] [valor]) y combina varias condiciones con AND/OR
- Fluent Forms: ajustes del campo, lógica condicional con un constructor visual de reglas
- Contact Form 7: necesita un complemento como “Conditional Fields for Contact Form 7”
Rellenar campos de forma dinámica
Puedes rellenar campos desde parámetros de la URL, metadatos del usuario o la base de datos:
// Populate from URL: ?service=web-design
add_filter( 'gform_field_value_service', function( $value ) {
return sanitize_text_field( $_GET['service'] ?? '' );
});
// Populate from user meta (for logged-in users)
add_filter( 'gform_field_value_user_company', function( $value ) {
$user = wp_get_current_user();
return get_user_meta( $user->ID, 'company', true );
});Campos calculados, subida de archivos y creación de entradas
Para presupuestos, calculadoras y puntuaciones, Formidable Forms es el más cómodo (fórmulas como [quantity] * [unit_price] + [tax]); en Gravity Forms, activa el cálculo en un campo numérico y usa merge tags como {Field 1:3} * {Field 2:4}. Limita el tamaño y el tipo de los archivos subidos validándolos en el servidor con el filtro gform_validation. Y si los usuarios envían contenido (reseñas, anuncios, artículos invitados), el complemento Advanced Post Creation de Gravity Forms mapea campos al título, contenido y extracto de la entrada, fija el estado (borrador o pendiente de revisión) y asigna categorías.
Cómo acelerar los formularios de contacto de WordPress
Un formulario mal optimizado afecta a las Core Web Vitals. Estas son las palancas principales.
Cómo cargar el CSS y el JavaScript del formulario solo donde hace falta
No cargues los scripts del formulario en cada página. Contact Form 7 expone los filtros wpcf7_load_js y wpcf7_load_css para desactivarlos de forma global y cargarlos solo donde hay formulario:
// Disable CF7 assets globally
add_filter( 'wpcf7_load_js', '__return_false' );
add_filter( 'wpcf7_load_css', '__return_false' );
// Load only on specific pages
function load_form_assets() {
if ( is_page( [ 'contact', 'quote', 'support' ] ) ) {
if ( function_exists( 'wpcf7_enqueue_scripts' ) ) {
wpcf7_enqueue_scripts();
wpcf7_enqueue_styles();
}
}
}
add_action( 'wp_enqueue_scripts', 'load_form_assets' );Aplaza también los scripts no críticos del formulario:
function defer_form_scripts( $tag, $handle ) {
$defer_handles = [ 'contact-form-7', 'gravityforms' ];
if ( in_array( $handle, $defer_handles ) ) {
return str_replace( ' src=', ' defer src=', $tag );
}
return $tag;
}
add_filter( 'script_loader_tag', 'defer_form_scripts', 10, 2 );Cómo limitar el almacenamiento de entradas en la base de datos
Las entradas ocupan espacio en la base de datos. Si solo necesitas la notificación por email, desactiva el almacenamiento en los ajustes del formulario (Gravity Forms y Fluent Forms lo permiten) y, para el resto, aplica la política de retención descrita en la sección del RGPD.
Cómo excluir las páginas de formulario de la caché
Las páginas con formularios no deben cachearse, porque el formulario lleva tokens que caducan (el de Turnstile vale 300 segundos):
# Nginx - Exclude forms from cache
location ~* (contact|quote|form) {
set $skip_cache 1;
}Si usas Cloudflare:
- Crea una Cache Rule (las Page Rules son el mecanismo heredado) que coincida con la ruta
/contacto - Configura la elegibilidad de caché como “Bypass cache”
- Mantén Turnstile en el propio formulario, así no hace falta un desafío extra de Cloudflare en la página
Documentación oficial y lecturas recomendadas
- Documentación de Contact Form 7
- Documentación para desarrolladores de Gravity Forms
- Base de conocimiento de WPForms
- Documentación de Fluent Forms
- Documentación de Cloudflare Turnstile
- Google Postmaster Tools para vigilar la reputación del dominio
- Mail Tester para probar la entregabilidad
- MXToolbox para revisar DNS y listas negras
- Texto oficial del RGPD en EUR-Lex
Resumen y lista de comprobación de implementación
- Nunca uses PHP mail(). Configura SMTP con un servicio transaccional dedicado
- Elige el constructor según tu nivel técnico y tus requisitos
- Protege con capas: honeypot, Turnstile validado en el servidor, Akismet y validación propia
- Valida en el servidor, no solo en el cliente (JavaScript se puede saltar)
- Conecta al CRM, no solo envíes email: automatiza el flujo completo
- Cumple el RGPD: base jurídica clara, casillas sin marcar, retención limitada y contratos de encargado
- Mide todo, con GA4 y eventos de formulario para optimización continua
- Usa formularios multi-paso en solicitudes complejas y mide la mejora en tu propio formulario
- Optimiza el rendimiento con carga condicional de assets y exclusión de caché
Tu formulario es el apretón de manos digital de tu negocio. Que sea firme, profesional y confiable.
¿Necesitas ayuda con la configuración de formularios o desarrollo WordPress profesional? Consulta nuestros servicios de mantenimiento WordPress o contáctanos directamente.
En el lado de entrega mantenemos este tema bajo auditoría de seguridad WordPress.






