HTML y otras plataformas
El fragmento de alloop antes de cerrar el head, en cualquier web donde puedas editar la plantilla. Webflow, Framer, Astro, Next.js o HTML a mano.
Si tu web no es WordPress, la instalación es la misma idea: el fragmento va en el <head> de
todas las páginas. Lo que cambia es dónde se pega en cada plataforma.
El fragmento
<script
defer
data-client="tu-academia"
src="https://track.alloop.ch/static/alloop.js"
></script>data-client es el identificador de tu academia, que te damos al montar tu cuenta. defer
hace que no bloquee el pintado de la página.
Dónde se pega, por plataforma
Webflow, Framer y Squarespace tienen un campo de código global. Busca Project Settings → Custom Code → Head Code (Webflow), Site Settings → General → Custom Code (Framer) o Ajustes → Avanzado → Inyección de código (Squarespace).
Úsalo en lugar de pegarlo página a página: así entra también en las páginas que crees dentro de seis meses, cuando ya no te acuerdes de esto.
Comprueba que se está sirviendo
Mira el HTML que recibe el visitante, no el editor de tu plataforma:
for u in / /cursos/ /gracias/; do
printf '%s → ' "$u"
curl -s "https://tudominio.com$u" | grep -c 'alloop.js'
done
# 1 en todas = cobertura correctaPresta atención al checkout y a la página de gracias: son las dos que más se olvidan y las dos donde ocurre la conversión.
Captura tus formularios
El fragmento mide visitas; los formularios se envían aparte. En el submit:
document.querySelector('#form-plaza').addEventListener('submit', () => {
alloop.form({
name: 'Nombre de la persona',
email: 'su@email.com',
phone: '+34600000000',
form: 'Solicitar plaza — A1', // para distinguirlos en el panel
});
});No llames al endpoint por tu cuenta
Un fetch propio parece equivalente y no lo es: pierdes la atribución de primer toque, pierdes
keepalive (la petición muere al cambiar de página) y pierdes el identificador que evita que
Meta cuente el mismo lead dos veces. Usa alloop.form().
alloop.form() comunica el lead a todos los canales que tengas conectados —Meta y Google Ads—
una sola vez por persona, con el mismo identificador en navegador y servidor. No hay que añadir
nada más para que tus campañas reciban la conversión.
Formularios de varios pasos
Si pides el email primero y las preguntas después, captura el contacto en cuanto lo tengas y registra el lead al terminar:
// Paso 1: ya tienes el email → vincula a la persona (el lead todavía no se registra)
alloop.identify(form.email.value);
// Último paso: el lead queda registrado y llega a tus anuncios
alloop.form({ name, email, phone, form: 'Guía gratuita' });Con identify() la persona queda vinculada desde el primer paso —si abandona, sabes en qué
pregunta y con qué email—, y form() es lo que Meta y Google reciben como lead. Así tus campañas
optimizan hacia quien completa, y el número de leads de tu panel coincide con el de las
plataformas.
Pide el WhatsApp solo a quien no te lo ha dado
Cada campo de más en un formulario te cuesta gente. Si pides el nombre y el email, alloop te dice en la respuesta si esa persona ya te dejó su WhatsApp alguna vez (en otro formulario, en otra visita o en otro dispositivo). Así solo se lo pides a quien te falta:
const r = await alloop.form({ name, email, form: 'Vídeo de la clase' });
const { has_phone } = (await r?.json?.()) ?? {};
if (has_phone === false) {
// enseña el campo de WhatsApp y, cuando lo rellene:
alloop.form({ name, email, phone, form: 'Vídeo de la clase' });
}El segundo envío completa al mismo lead: Meta y Google no lo cuentan dos veces, porque va con el mismo identificador de esa visita.
Se decide por el email, no por el dispositivo: si en el mismo móvil alguien escribe otro email,
es otra persona y se le pide. Y solo un true claro te ahorra el campo; si la respuesta viene sin
el dato, pídelo. Si la respuesta no llega (una red lenta), no bloquees a la persona: es mejor
quedarte sin un WhatsApp que perder a alguien que quería ver tu vídeo.
Si ese formulario dispara un WhatsApp automático (tu automatización de mensajes), también le llega a quien no tuvo que escribir su número: usamos el WhatsApp que esa persona ya te había dado.
Solo un sí o un no
La respuesta nunca incluye el número, solo si existe. Y solo la recibe quien acaba de enviar ese email desde tu web.
Pide los datos antes de reproducir un vídeo
Si quieres que la grabación de una clase o un vídeo de tu web pida nombre y email antes de verse (y el WhatsApp solo a quien no te lo ha dado), no hace falta que montes el formulario: marca el vídeo y carga la pieza.
<div class="player">
<iframe src="https://www.youtube.com/embed/ID" data-alloop-gate="clase-1"></iframe>
</div>
<script>
window.ALLOOP_VIDEO_GATE = {
form: "video-clase", // cómo lo verás en tu panel
lang: "es", // es · en · de · fr · it · ru · lt
host: "Andrea", // «…te invitamos a la siguiente clase gratuita con Andrea»
};
</script>
<script src="https://track.alloop.ch/static/alloop-video-gate.js" defer></script>El vídeo aparece tapado con un botón de play. Al pulsarlo se piden el nombre y el email, se
registra el lead con form: "video-clase" (con todo lo que hace alloop.form(): Meta, Google, tu
CRM) y, si a esa persona le falta el WhatsApp, se le pide con el selector de país. Después el vídeo
arranca solo. Quien ya lo dejó no vuelve a verlo: ni en ese dispositivo ni en otro vídeo marcado de
tu web.
- Puedes marcar varios vídeos en la misma página; con dejar los datos una vez se abren todos.
- Si no quieres pedir el WhatsApp nunca,
whatsapp: false. accent: "#E84B3A"pone tus botones de tu color, ytexts: { title: "…" }cambia cualquier frase.- Si tu servidor no contesta a tiempo, el vídeo se abre igual: la pieza nunca retiene a nadie.
El nombre del formulario importa
Si ese form está entre los que disparan tu automatización de WhatsApp, quien deje sus datos para
ver un vídeo recibirá ese WhatsApp. Usa un nombre propio para los vídeos, como video-clase.
Cada paso queda medido en tu panel: quién abrió el formulario, quién dejó el email, a quién se le pidió el WhatsApp y quién lo dio.
Guarda lo que contestan, no solo el contacto
Si tu formulario pregunta algo más —nivel, objetivo, por qué quiere aprender—, mándalo en
extra y dile al panel cómo se llama cada pregunta con labels:
alloop.form({
name, email, phone, form: 'Guía gratuita',
extra: {
nivel: form.nivel.value, // 'B1'
objetivo: form.objetivo.value, // 'Integrarme y hacer amigos'
por_que: form.por_que.value, // texto libre, tan largo como lo escriban
},
labels: {
nivel: '¿Cuál es tu nivel?',
objetivo: '¿Para qué quieres mejorar?',
por_que: 'En tus palabras, ¿por qué quieres hablar español?',
},
});Cada respuesta se guarda entera con el lead y aparece en la sección Formularios bajo su pregunta real. Hay sitio de sobra: hasta 100 preguntas por formulario y 5.000 caracteres por respuesta, así que un cuestionario de 15 pantallas o una redacción abierta caben completos sin configurar nada.
Email, teléfono y nombre no van en extra
Van en sus propios campos (email, phone, name). Si los mandas dentro de extra se
descartan de ahí a propósito: el contacto vive en la ficha de la persona, donde se puede
corregir o borrar, y nunca dentro de un evento.
¿Y alloop.gate()?
gate() es para cuando la persona deja el contacto y se va directamente a WhatsApp o al pago,
sin más pasos: vincula a la persona y registra el lead en el mismo instante. En un formulario
con pasos, usa identify() al principio y form() al final.
Conecta tu pasarela de pago
Es el paso que hace llegar las ventas y no solo las visitas: Stripe o WooCommerce.
Cómo sabes que funciona
Entra desde un enlace marcado y compra con un nombre reconocible como test-alloop. En unos
minutos la venta aparece en tu panel con importe y origen. Hasta que no la veas ahí, no está.
Si acabas de crear tu cuenta
Un proyecto nuevo tarda unos 25 minutos en empezar a ingerir, y durante esa ventana todo responde bien pero los eventos se descartan. Reintenta antes de tocar el fragmento.
Errores comunes
| Síntoma | Causa probable | Arreglo |
|---|---|---|
| Solo la portada registra visitas | El fragmento está en una página, no en la plantilla compartida | Muévelo al layout base |
| Está en el HTML pero no mide | Pegado dentro del <body> sin ejecutarse, o duplicado | Una sola vez, en el <head> |
| Las visitas llegan sin origen | Los enlaces se repartieron sin etiquetas | Marcar enlaces |
| En Next.js se pierden rebotes rápidos | Estrategia lazyOnload | Cambia a afterInteractive |
Si tu plataforma no deja editar el head global
Algunos constructores muy cerrados solo dejan tocar la portada. Dinos cuál usas: casi siempre hay una vía (una plantilla global, un contenedor de scripts) y te decimos la buena.
Siguiente paso
Conecta tu forma de cobrar en Ingresos y marca tus enlaces en Marcar enlaces.
WordPress
Pega el fragmento de alloop en el <head> de tu WordPress, conecta tu pasarela y confirma con una compra de prueba. Unos diez minutos.
Tu propio formulario sobre FluentForm
Cuando la página necesita un formulario rápido y con tu diseño, pero los avisos por email, las entradas y los adjuntos tienen que seguir llegando exactamente donde llegan hoy.