Cómo setear Google Tag Manager en un sitio DeFi (sin romper privacidad)
Los equipos DeFi shippean analytics al final. Para el momento que alguien se da cuenta que tienen cero visibilidad en dónde los usuarios drop off en el flujo wallet-connect, el protocolo ha estado vivo por 6 meses. Aquí está el setup GTM que captura los 6 eventos que realmente importan, se mantiene privacy-safe, y no leakea direcciones de wallet a redes de ads.
Por qué GTM específicamente para DeFi
Podrías hardcodear llamadas de analytics en tu frontend. Muchos equipos DeFi lo hacen. El problema: cambiar lo que trackeas requiere un deploy de frontend. Con GTM, la data layer pasa a través de un event bus y los tags son configurados server-side en el contenedor GTM. Los equipos de marketing y analytics pueden ajustar tracking sin deploys de engineering.
Para DeFi específicamente, el valor más grande es tracking wallet-event. Wallet connect, transacción firmada, transacción confirmada, transacción fallida. Estos eventos firean desde el SDK del wallet, no de la página. Rutearlos a través de GTM significa que puedes fan out a múltiples destinos de analytics (GA4, Mixpanel, warehouse custom) sin 4 llamadas separadas de SDK.
El catch: DeFi tiene requerimientos serios de privacidad que el e-commerce mainstream no tiene. Las direcciones de wallet son pseudo-PII. Los hashes de transacción pueden ser correlacionados contra data on-chain. El comportamiento default de GTM a menudo leakea ambos. Seteado correctamente o nada.
Los 6 eventos que cada protocolo DeFi debería trackear
Trackea estos seis eventos. Todo lo demás es ruido.
1. wallet_connect_attempted. User clicked the Connect Wallet button. Fires before the wallet dialog opens. This event captures intent.
2. wallet_connect_succeeded. User completed the wallet connection. Wallet provider name is fine to capture (MetaMask, Phantom, etc). Wallet address is NOT.
3. wallet_connect_failed. User cancelled or the wallet rejected. Capture the rejection reason if exposed by the wallet SDK.
4. transaction_submitted. User signed and submitted a transaction. Capture the transaction type (swap, stake, mint, etc) and the protocol contract involved (not the user's wallet).
5. transaction_confirmed. Transaction confirmed on-chain. Don't poll for this — listen to the wallet SDK's confirmation event.
6. transaction_failed. Transaction reverted on-chain. Capture the revert reason if available. This is the most diagnostic event for fixing UX problems.
Ese es el plan completo de tracking. Resiste el urge de añadir page_view, click, scroll. GA4 captura esos por default. Añadir más eventos custom diluye la señal de los 6 eventos que realmente importan para decisiones de producto.
Setup de evento wallet connect
Pushea al data layer desde tu handler wallet-connect:
// On user clicks Connect Wallet
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
event: 'wallet_connect_attempted',
wallet_provider: 'metamask', // detected from wallet SDK
});
// On wallet connection success
window.dataLayer.push({
event: 'wallet_connect_succeeded',
wallet_provider: 'metamask',
chain_id: 1, // human-readable chain, not wallet address
// DO NOT push wallet_address here
});En GTM, crea tres triggers (uno por evento) y tres tags (uno por destino). Cada tag firea cuando su trigger ve el evento dataLayer matching.
Para GA4, el nombre del evento mapea 1:1. Para Mixpanel, envía el mismo nombre de evento más el wallet_provider y chain_id como propiedades. Evita enviar el mismo evento 4 veces a 4 destinos desde la página directamente, fan out a través de GTM en su lugar.
Tracking de evento de transacción
Los eventos de transacción firean después de que el usuario firma. El push del data layer necesita capturar contexto protocol-side, no user-side.
// On transaction submission (after wallet signs)
window.dataLayer.push({
event: 'transaction_submitted',
transaction_type: 'swap', // swap, stake, claim, mint, etc.
protocol_contract: '0xA0b8...', // your contract
amount_usd_bucket: '100-1000', // bucket, not exact amount
chain_id: 1,
// NEVER push: from_address, transaction_hash, exact USD amount
});El patrón amount_usd_bucket es crítico. Los valores exactos de transacción son pseudo-PII cuando se combinan con timestamp, pueden identificar usuarios. Bucketea el valor: under-100, 100-1000, 1000-10000, over-10000. Esta es resolución suficiente para decisiones de producto y remueve la preocupación de privacidad.
Mismo enfoque para transaction_confirmed y transaction_failed. Trackea que sucedió, qué tipo, qué bucket, y en qué cadena. Sáltate el resto.
Reglas de privacidad: nunca envíes esto a GTM
Seis cosas que nunca pushear al data layer o enviar a través de GTM. Si estás enviando cualquiera de estos, tu analytics DeFi es una liability de privacidad.
1. Wallet addresses. Pseudo-PII. Correlatable to real identities through on-chain analysis services.
2. Transaction hashes. Public on-chain but combining them with user-agent and timestamp in your analytics database creates a re-identification vector.
3. Exact transaction USD values. Bucket instead.
4. ENS names. Some users use their real names as ENS. Treat as PII.
5. User-set referral codes. Often contain identifiable usernames.
6. Email addresses from optional newsletter signups. Send those directly to your email tool, not through GTM where ad-network tags can scrape them.
Integración Consent Mode
Google Consent Mode v2 es requerido para sitios sirviendo usuarios EU. GTM tiene soporte nativo. Configuras cada tag con requerimientos de consent, y el tag espera firing hasta que el usuario otorgue el tipo de consent requerido.
Para los 6 eventos DeFi: consent analytics_storage para el destino GA4, consent ad_storage si estás enviando a plataformas de advertising (la mayoría de los protocolos DeFi no), y personalization_storage para cualquier tagging de user-segmentation.
El banner de consent se integra con GTM pusheando estado de consent al data layer cuando el usuario hace una elección. Usa un CMP que soporte Consent Mode v2 nativamente (Cookiebot, OneTrust, Iubenda). No rolees tu propio banner, hacer Consent Mode correcto a mano es más difícil que escoger un vendor.
GTM server-side es el siguiente upgrade para sitios DeFi privacy-serious. Mueve la ejecución de tag a un contenedor Google Cloud que tú controlas, lo cual significa que la data cruda va a tu servidor primero y tú decides qué forwardear. Vale el tiempo de setup si estás manejando usuarios EU a escala o tienes una función CISO real.
Preguntas comunes
Do I need GTM if I have GA4 hardcoded?
No estrictamente. GTM añade flexibilidad para equipos non-engineering para ajustar tracking. Si tu equipo es pequeño y el tracking raramente cambia, GA4 hardcoded más el wallet event bus está bien.
Can wallet addresses be sent to GA4 if I hash them?
El hashing ayuda pero no lo resuelve completamente. Hashing suficiente (salt propio, server-side) está OK. SHA-256 client-side de una dirección de wallet es todavía efectivamente pseudo-PII porque el espacio de input es enumerable.
What if my DeFi site has 0 EU users?
El compliance todavía importa. Algunos estados US (California, Virginia, Colorado) tienen leyes de privacidad que reflejan las reglas de consent de analytics del GDPR. Consent Mode es buena práctica en todos lados ahora.
Should I use server-side GTM?
Vale la pena si tienes más de 100K usuarios mensuales o cualquier tráfico regulado EU/UK. Debajo de eso, GTM client-side con Consent Mode es suficiente.
How do I verify GTM isn't leaking wallet addresses?
El tab de network de las dev tools del browser. Filtra por requests googletagmanager.com o google-analytics.com. Inspecciona el payload de cada request. Si ves cualquier cosa que parezca una dirección de wallet o hash de transacción, algo está malconfigurado.
Audita tu sitio crypto en 60 segundos
Scan profundo de 8 módulos. Visibilidad IA, schema, SEO técnico, backlinks. Un dominio gratis para siempre.
