Contents
Introducción
Este tutorial explica, con todo lujo de detalles, cómo enviar eventos a Google Analytics (GA4) desde un bloque de Gutenberg (JavaScript). Cubre desde la integración básica de gtag, el registro correcto del bloque en WordPress, hasta ejemplos de código para el editor y el front-end, y recomendaciones sobre consentimiento y depuración.
Requisitos previos
- WordPress 5.0 con editor Gutenberg activo.
- Cuenta de Google Analytics 4 y Measurement ID (por ejemplo: G-XXXXXXXXXX).
- Conocimientos básicos de JavaScript (ESNext), React en bloques y PHP para registrar scripts.
- En sitios con políticas de privacidad estrictas, un gestor de consentimiento (cookie consent) para respetar GDPR/CCPA.
Conceptos clave de GA4
- gtag(event, …): forma típica de enviar eventos si cargas gtag.js con tu Measurement ID.
- dataLayer: si usas Google Tag Manager, en lugar de gtag puedes empujar al dataLayer: window.dataLayer.push(…).
- Nombre del evento y parámetros: GA4 usa un nombre de evento y parámetros adicionales (por ejemplo: event_name: cta_click, params: {button_name: subscribe, value: 1}).
- DebugView: imprescindible para verificar eventos en tiempo real en GA4.
1) Incluir Google Analytics (gtag) en WordPress
La forma más simple: encolar el script de gtag en functions.php para que esté disponible en el front-end. También puede cargarse mediante un plugin específico o mediante GTM.
// functions.php (ejemplo simple)
function mi_tema_enqueue_gtag() {
measurement_id = G-XXXXXXXXXX // sustituir por tu Measurement ID
// Encolar gtag.js
wp_enqueue_script(
gtag-js,
https://www.googletagmanager.com/gtag/js?id={measurement_id},
array(),
null,
false
)
// Insertar initializar gtag con inline script
inline =
window.dataLayer = window.dataLayer []
function gtag(){dataLayer.push(arguments)}
gtag(js, new Date())
gtag(config, {measurement_id})
wp_add_inline_script(gtag-js, inline)
}
add_action(wp_enqueue_scripts, mi_tema_enqueue_gtag)
2) Registrar el bloque y sus scripts (PHP)
Registra los assets del bloque (editor y front-end) y pasa al JS variables necesarias como el Measurement ID o banderas de consentimiento.
// functions.php (registro de bloque)
function mi_plugin_register_block() {
dir = dirname( __FILE__ )
// Registro del script del bloque (editor)
wp_register_script(
mi-bloque-editor,
plugins_url(build/editor.js, __FILE__),
array(wp-blocks,wp-element,wp-editor,wp-i18n),
filemtime( dir . /build/editor.js )
)
// Registro del script para frontend del bloque (si es necesario)
wp_register_script(
mi-bloque-frontend,
plugins_url(build/frontend.js, __FILE__),
array(),
filemtime( dir . /build/frontend.js ),
true
)
// Pasar datos a JS (p. ej. Measurement ID y flag de consentimiento)
wp_localize_script( mi-bloque-editor, MiBloqueSettings, array(
measurementId => G-XXXXXXXXXX,
consentGiven => true, // o lógica para detectar consentimiento real
))
register_block_type( mi-plugin/mi-bloque, array(
editor_script => mi-bloque-editor,
script => mi-bloque-frontend
) )
}
add_action( init, mi_plugin_register_block )
3) Enviar eventos desde el bloque (editor) — ejemplo JS
Este ejemplo muestra un bloque simple con un botón. Al hacer clic se enviará un evento a GA. Ten en cuenta que en el editor (back-end) normalmente no envías eventos a GA público en este ejemplo el envío está pensado para el front-end o si realmente quieres trackear interacciones del editor se debería usar un Measurement ID distinto y considerar privacidad.
// editor.js (ejemplo ESNext para registerBlockType)
import { registerBlockType } from @wordpress/blocks
import { Button } from @wordpress/components
import { useState } from @wordpress/element
registerBlockType(mi-plugin/mi-bloque, {
title: Bloque con evento GA,
icon: megaphone,
category: common,
edit: () => {
const [count, setCount] = useState(0)
const sendGAEvent = (action = click) => {
const measurementId = (typeof MiBloqueSettings !== undefined) ? MiBloqueSettings.measurementId : null
// Comprueba consentimiento si está disponible
const consent = (typeof MiBloqueSettings !== undefined) ? MiBloqueSettings.consentGiven : true
if (!consent) {
console.log(Consentimiento no otorgado — evento no enviado)
return
}
// Si gtag está disponible
if (typeof window.gtag === function) {
window.gtag(event, bloque_interaccion, {
event_category: bloque,
event_label: mi-boton,
value: count 1,
measurement_id: measurementId
})
console.log(Evento enviado con gtag)
return
}
// Si se usa dataLayer (GTM)
if (Array.isArray(window.dataLayer)) {
window.dataLayer.push({
event: bloque_interaccion,
category: bloque,
label: mi-boton,
value: count 1
})
console.log(Evento enviado al dataLayer)
return
}
console.log(No hay gtag ni dataLayer disponible)
}
return (
Ejemplo de bloque que envía eventos a Google Analytics.
)
},
save: () => {
return (
BLOQUE: contenido estático en el front-end — el JS del front-end gestiona el evento real.
)
}
})
4) Enviar eventos desde el front-end del bloque (JS)
Para detectar interacciones reales del usuario en el sitio público, incluye un script que se ejecute en el front-end. Aquí un ejemplo sencillo que escucha clics y envía eventos.
// frontend.js
document.addEventListener(DOMContentLoaded, function() {
const botones = document.querySelectorAll(.mi-bloque-frontend .mi-boton)
botones.forEach(btn => {
btn.addEventListener(click, function() {
const label = this.getAttribute(data-label) mi-boton
const value = parseInt(this.getAttribute(data-value) 1, 10)
// Comprueba gtag
if (typeof window.gtag === function) {
window.gtag(event, mi_boton_click, {
button_label: label,
value: value
})
return
}
// fallback a dataLayer
window.dataLayer = window.dataLayer []
window.dataLayer.push({
event: mi_boton_click,
button_label: label,
value: value
})
})
})
})
5) Manejo de consentimiento (GDPR) — ejemplo simple
Antes de enviar cualquier evento, asegúrate de que el usuario ha dado su consentimiento si la legislación lo exige. Aquí un patrón sencillo: no enviar eventos hasta que el gestor de consentimientos haya marcado permiso.
// Ejemplo: escuchar evento custom generado por tu gestor de cookies
window.addEventListener(cookieConsentGiven, function(e) {
// e.detail puede contener permisos concretos
window._ga_consent = true
})
// Uso en tu código
if (window._ga_consent) {
window.gtag(event, consented_event, { })
} else {
// aplazar evento o no enviarlo
}
6) Parámetros recomendados y buenas prácticas
GA4 es flexible, pero sigue buenas prácticas para que los datos sean útiles:
| Parámetro | Descripción | Ejemplo |
|---|---|---|
| event_name | Nombre del evento, breve y en minúsculas con guiones bajos. | mi_boton_click |
| button_label | Etiqueta para identificar el elemento. | suscribirme, comprar |
| value | Valor numérico relacionado con el evento (1, precio, etc.). | 1, 29.99 |
| page_location / page_title | Información contextual de la página donde ocurre el evento. | document.location.href, document.title |
7) Depuración y verificación
- Activa DebugView en GA4: en la interfaz de Google Analytics, ve a Admin gt DebugView y filtra tus eventos.
- Usa la extensión de Google Analytics Debugger para el navegador (console logs de gtag).
- Observa la pestaña Network para verificar requests a collect/measurement.
- Incluye console.log en tus scripts para confirmar ejecución antes de enviar al Analytics.
8) Casos comunes y errores frecuentes
- No aparece gtag ni dataLayer: asegúrate de que el script de gtag o GTM se haya cargado antes de ejecutar tu código.
- Eventos enviados pero no aparecen en GA: comprueba DebugView, las métricas pueden tardar si no es DebugView nombre de evento inválido o filtros pueden impedir visión.
- Problemas de consentimiento: muchos gestores bloquean gtag hasta que el usuario acepta integra tu lógica para no enviar información hasta que se acepte.
- Enviar eventos desde el editor: evita contaminar datos de producción considera un Measurement ID separado para eventos del editor o envía únicamente desde el front-end.
9) Ejemplos avanzados
Si quieres enviar eventos server-side (Measurement Protocol) o enriquecer eventos con datos de usuario desde WordPress (por ejemplo, ID de usuario autenticado) deberías:
- Utilizar la Measurement Protocol de GA4 mediante requests HTTP desde PHP, respetando privacidad y hashing de identificadores cuando aplique.
- Enviar eventos en el rendering del servidor si necesitas garantizar envío incluso con JS desactivado (caso extremo).
Ejemplo básico de envío server-side (concepto)
// Nota: este es un ejemplo conceptual y requiere tu API secret y Measurement ID
measurement_id = G-XXXXXXXXXX
api_secret = YOUR_API_SECRET
endpoint = https://www.google-analytics.com/mp/collect?measurement_id={measurement_id}api_secret={api_secret}
payload = array(
client_id => CLIENT_ID_OR_GENERATED_UUID,
events => array(
array(
name => registro_completado,
params => array(
method => newsletter,
value => 1
)
)
)
)
json = wp_json_encode( payload )
response = wp_remote_post( endpoint, array(
headers => array(Content-Type => application/json),
body => json
) )
Resumen y puntos clave
- Preferencia: usa gtag para GA4 o dataLayer si usas GTM. Ambos son compatibles con bloques de Gutenberg.
- Registra y encola correctamente scripts del editor y front-end desde PHP usando wp_register_script / register_block_type.
- Gestiona consentimiento antes de enviar datos de usuarios.
- Usa DebugView y la consola para verificar envíos y depurar errores.
- Evita enviar eventos de producción desde el editor salvo que sepas qué haces usa un Measurement ID separado si necesitas métricas del editor.
Recursos útiles
Documentación oficial de GA4: https://developers.google.com/analytics/devguides/collection/ga4/events
Documentación Measurement Protocol (server-side): https://developers.google.com/analytics/devguides/collection/protocol/ga4
|
|
Acepto donaciones de BAT's mediante el navegador Brave 🙂 |
