Cómo agregar un formulario a un sitio estático sin backend
Los generadores de sitios estáticos como Astro, Hugo, Next.js, 11ty, Jekyll y Gatsby producen sitios web rápidos y seguros al renderizar previamente HTML en el momento de la compilación. La desventaja es que no hay un servidor para procesar los envíos de formularios.
Esta guía explica cómo agregar formularios completamente funcionales a cualquier sitio estático sin escribir código backend, funciones sin servidor o rutas API.
Por qué los sitios estáticos no pueden procesar formularios
A static site serves pre-built HTML files from a CDN or file host. When a visitor submits a form, the browser sends a POST request to the URL in the form’s action attribute. On a traditional server-rendered site, that URL points to a PHP script, Node.js route, or serverless function that processes the data.
En un sitio estático, no hay ningún servidor para recibir esa solicitud POST. Necesita un servicio externo para manejarlo.
El patrón del backend de formularios
Un servicio de backend de formularios proporciona un endpoint de API público que recibe envíos de formularios. El patrón es simple:
- Cree su formulario con HTML estándar
- Set the
actionattribute to the form backend URL - Incluya una clave de acceso público para identificar su formulario
- El servicio recibe el envío, ejecuta comprobaciones antispam y entrega los datos
<form action="https://api.formsfort.com/submit" method="POST"> <input type="hidden" name="access_key" value="YOUR_ACCESS_KEY" /> <label for="email">Email</label> <input type="email" id="email" name="email" required /> <label for="message">Message</label> <textarea id="message" name="message" required></textarea> <button type="submit">Send</button></form>Esto funciona en todos los generadores de sitios estáticos porque es HTML simple. Sin complementos de compilación, sin código específico del marco, sin funciones sin servidor.
Agregar formularios a generadores de sitios estáticos populares
Astro
Astro generates static HTML by default. Add a form directly in any .astro file:
------
<form action="https://api.formsfort.com/submit" method="POST"> <input type="hidden" name="access_key" value="YOUR_ACCESS_KEY" /> <label for="name">Name</label> <input type="text" id="name" name="name" required /> <label for="email">Email</label> <input type="email" id="email" name="email" required /> <label for="message">Message</label> <textarea id="message" name="message" required></textarea> <button type="submit">Send message</button></form>Exportación estática de Next.js
When using output: "export" in Next.js, your site produces plain HTML files. Add forms using standard HTML in any page component:
export default function ContactPage() { return ( <form action="https://api.formsfort.com/submit" method="POST"> <input type="hidden" name="access_key" value="YOUR_ACCESS_KEY" /> <label htmlFor="email">Email</label> <input type="email" id="email" name="email" required /> <label htmlFor="message">Message</label> <textarea id="message" name="message" required /> <button type="submit">Send</button> </form> );}Hugo
Las plantillas de Hugo admiten HTML estándar. Agregue un formulario en cualquier archivo de diseño o contenido:
<form action="https://api.formsfort.com/submit" method="POST"> <input type="hidden" name="access_key" value="YOUR_ACCESS_KEY" /> <label for="name">Name</label> <input type="text" id="name" name="name" required /> <label for="email">Email</label> <input type="email" id="email" name="email" required /> <button type="submit">Send</button></form>11ty (Eleventy)
Eleventy genera HTML estático. Agregue formularios en archivos Nunjucks, Liquid o Markdown:
<form action="https://api.formsfort.com/submit" method="POST"> <input type="hidden" name="access_key" value="YOUR_ACCESS_KEY" /> <label for="email">Email</label> <input type="email" id="email" name="email" required /> <button type="submit">Subscribe</button></form>Jekyll
Los sitios Jekyll alojados en páginas de GitHub o cualquier host estático pueden usar backends de formulario:
<form action="https://api.formsfort.com/submit" method="POST"> <input type="hidden" name="access_key" value="YOUR_ACCESS_KEY" /> <label for="name">Name</label> <input type="text" id="name" name="name" required /> <label for="email">Email</label> <input type="email" id="email" name="email" required /> <label for="message">Message</label> <textarea id="message" name="message" required></textarea> <button type="submit">Send</button></form>Proteger formularios de sitios estáticos del spam
Los formularios de sitios estáticos son visibles para los bots que rastrean el código fuente HTML. Protéjalos con múltiples capas:
Campo Honeypot
Agregue un campo oculto que los bots completan pero los humanos no ven:
<input type="text" name="botcheck" style="position: absolute; left: -9999px; opacity: 0;" tabindex="-1" autocomplete="off"/>Restricción de dominio
Configure el backend de su formulario para aceptar solo envíos de su dominio. Esto evita que otros sitios utilicen el endpoint de su formulario.
Limitación de velocidad
Los servidores de formulario imponen límites de velocidad por dirección IP, evitando que una sola fuente inunde su formulario con envíos.
CAPTCHA
Para formularios con mucho tráfico, agregue un desafío CAPTCHA. Cloudflare Turnstile es una opción respetuosa con la privacidad que no requiere rompecabezas de imágenes:
<div class="cf-turnstile" data-sitekey="YOUR_SITE_KEY"></div><script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>Dónde entregar los envíos
Los servicios de backend de formularios admiten múltiples destinos de entrega:
| Destino | Caso de uso |
|---|---|
| Correo electrónico | Formularios de contacto, solicitudes de soporte |
| Webhook | Activar automatizaciones en Zapier, Make o sistemas personalizados |
| Google Sheets | Recopila respuestas en una hoja de cálculo |
| Slack / Discord / Telegram | Notificaciones del equipo para nuevos envíos |
| Respuesta automática | Envíe un correo electrónico de confirmación al remitente |
Manejar estados de éxito y error
Redirigir después del envío
Add a hidden _redirect field to send users to a thank-you page:
<input type="hidden" name="_redirect" value="https://example.com/thanks" />Envío AJAX
Para una experiencia más fluida sin recargas de páginas, use JavaScript:
document.querySelector("form").addEventListener("submit", async (e) => { e.preventDefault(); const form = e.target; const response = await fetch(form.action, { method: "POST", body: new FormData(form), }); if (response.ok) { document.getElementById("status").textContent = "Sent successfully."; form.reset(); }});Resumen
Los sitios estáticos manejan formularios delegando el procesamiento de envío a un backend de formularios alojado. El patrón es universal en todos los generadores de sitios estáticos: escriba HTML estándar, dirija la acción a una URL de fondo de formulario e incluya una clave de acceso. Agregue protección antispam con campos de honeypot, restricciones de dominio y CAPTCHA. Configure la entrega por correo electrónico, webhooks, Google Sheets o plataformas de mensajería.
Sin código del lado del servidor, sin funciones sin servidor, no se requieren complementos de compilación.
Preguntas frecuentes
¿Cómo manejan los sitios estáticos los envíos de formularios?
Los sitios estáticos no pueden procesar envíos de formularios por sí solos porque sirven archivos HTML prediseñados. Para manejar formularios, apunta el atributo de acción del formulario a un servicio backend de formularios alojado que recibe, valida y entrega los datos de envío.
¿Qué es un servicio backend de formularios?
Un servicio backend de formularios es un endpoint de API alojado que recibe envíos de formularios HTML, ejecuta comprobaciones antispam y reenvía los datos por correo electrónico, webhook u hoja de cálculo. Los ejemplos incluyen FormsFort, Formspree y Getform.
¿Puedo usar formularios en una exportación estática de Next.js?
Sí. Las exportaciones estáticas de Next.js generan archivos HTML sin formato sin servidor. Agregue un formulario HTML estándar que apunte a un servicio de backend de formularios, tal como lo haría en cualquier sitio estático.
¿Necesito funciones sin servidor para formularios de sitios estáticos?
No. Un servicio backend de formularios alojado reemplaza la necesidad de funciones sin servidor, rutas API o cualquier código del lado del servidor. Solo necesitas marcado HTML.
¿Es seguro exponer un endpoint de formulario en HTML estático?
Sí, cuando se utiliza un backend de formularios con protección antispam incorporada. El endpoint utiliza una clave de acceso pública (no secreta) y el servicio aplica restricciones de dominio, límites de velocidad, comprobaciones de honeypot y verificación CAPTCHA.
Comience gratis
¿Listo para agregar formularios a su sitio estático?
No se requiere backend. Apunte su formulario HTML a FormsFort y comience a recibir envíos en minutos.