Si tu sitio publica eventos de negocio en window.dataLayer (porque montaste Google Tag Manager para Google Analytics), esos eventos ya llegan a Skomi. No hay nada que reescribir, ningún adaptador que instalar, y ningún segundo envío que añadir junto al primero.
Esta página va de lo que pasa, lo que no, y los límites que conviene saber antes de apoyarte en ello.
Nada que hacer
Instala el fragmento. Skomi engancha dataLayer y lee lo que se le envía.
Las dos formas funcionan:
// la forma de objeto
dataLayer.push({ event: 'purchase', value: 49.00, currency: 'EUR' });
// gtag, que envía sus propios argumentos en vez de un objeto
gtag('event', 'purchase', { value: 49.00, currency: 'EUR' });
Puedes quedarte con GTM. Puedes dejar Google Analytics funcionando junto a Skomi mientras los comparas; esa es la forma sensata de migrar, y nada de aquí interfiere con ella.
Por qué funciona cargue primero el script que cargue
GTM sustituye dataLayer.push por su propia envoltura cuando gtm.js termina de cargar, y los dos scripts cargan de forma asíncrona. El que aterrizara segundo sobrescribiría sin más la envoltura del otro y se tragaría sus eventos en silencio.
Skomi instala push como un accesor en su lugar, así que la asignación de GTM llega al setter y se convierte en la función a la que Skomi delega. La nuestra se queda delante se resuelva como se resuelva la carrera. No tienes que ordenar tus etiquetas.
Qué se captura
El nombre del evento: event en el objeto, o el segundo argumento de gtag.
Todas las propiedades, aplanadas a rutas con puntos, porque las propiedades de un evento se guardan como texto:
dataLayer.push({
event: 'purchase',
transaction_id: 'ORD-1234',
value: 49.00,
currency: 'EUR',
ecommerce: { items: [{ item_name: 'Pro plan', price: 49.00 }] }
});
llega como transaction_id, value, currency, ecommerce.items.0.item_name, ecommerce.items.0.price.
El valor monetario, leído de value o de ecommerce.value. Se aceptan cadenas, porque los valores del dataLayer llegan a menudo desde una plantilla como texto.
La divisa, de currency o de ecommerce.currency de la misma manera. Un evento de comercio electrónico de GA4 ya lleva { value, currency } juntos, así que un sitio montado para Google le está mandando a Skomi una compra completamente denominada sin saberlo.
El identificador de pedido. El servidor lee transaction_id de las propiedades, y una repetición del mismo identificador se descarta en vez de contarse, lo que importa más de lo que parece. Una página de confirmación se dispara en cada carga: un refresco, un botón de atrás, reabrir el correo una semana después. Sin un identificador de pedido, eso son tres ventas.
Qué no se captura
Los propios eventos de ciclo de vida de GTM. Todo lo que esté bajo el espacio de nombres gtm., y las claves que GTM usa para controlar su propio despacho: event, eventCallback, eventTimeout, eventModel, _clear. No dicen nada de tu negocio y superarían en número a los eventos reales varias veces.
Todo lo que pase de los límites. Son reales y conviene conocerlos antes de descubrirlos:
| Límite | Valor |
|---|---|
| Propiedades por evento | 25 |
| Profundidad de anidamiento | 3 niveles |
| Nombre de propiedad | 64 caracteres |
| Valor de propiedad | 255 caracteres |
| Identificador de pedido | 128 caracteres |
⚠ Un array ecommerce.items grande no va a caber. Cada elemento aporta varias propiedades, así que un pedido de diez líneas se pasa con creces de veinticinco y el resto se descarta en vez de truncarse por elemento. Si el detalle por línea te importa, su sitio son los informes de tu propia tienda; Skomi registra el pedido, su valor y su divisa, no su contenido. No hay ninguna dimensión de producto en ninguna parte del producto.
Las propias integraciones de Google. La señalización del modo Consentimiento, la exportación de audiencias, la conexión con Google Ads. Eso es entre GTM y Google y Skomi no forma parte de ello.
Dónde aparecen los eventos
Bajo sus propios nombres, junto a los que Skomi captura por su cuenta. Cada evento registra de dónde vino: datalayer para estos, api para una llamada a skomi.track() escrita a mano, auto para los enlaces salientes y las descargas que Skomi captura sin que se lo pidan, así que puedes distinguir un evento que pediste de uno que simplemente permitiste.
Convierte cualquiera de ellos en un objetivo para tener una tasa de conversión contra él.
Si prefieres llamarlo directamente
skomi.track('purchase', { plan: 'pro' }, 49.00, 'EUR', 'ORD-1234');
Nombre, propiedades, valor, divisa e identificador de pedido, los tres últimos opcionales. Úsalo para eventos que no tengan motivo para pasar por GTM. Un sitio que no tiene dataLayer no necesita uno.
Comprobar que ha funcionado
Manda un evento de prueba desde la consola en el dominio real:
dataLayer.push({ event: 'test_event', value: 1, currency: 'EUR' });
Luego busca test_event en tus eventos. Si no está, repasa qué comprobar cuando el fragmento no funciona, y ten en cuenta que localhost no recoge nada, porque no es el dominio que registraste.