Aprende a estructurar un DataLayer de compra robusto en el Plan Standard de Shopify modificando directamente los archivos Liquid de tu tienda. Captura cada evento clave de tus productos sin depender de apps externas y toma el control absoluto de tus datos en Google Analytics.
Accede a la lección en vídeo de la membresía. Cada martes, jueves y sábado aprende con una clase nueva. Puedes identificarte en este enlace o suscribirte a los cursos.
Contenido de la lección
(Recordar que este contenido es la escaleta)
Los tres eventos de navegación de la tienda se implementan directamente en archivos Liquid. En todos los casos el precio se divide por 100.0 porque Shopify lo almacena en céntimos, y el item_id usa el formato shopify_”rellenacontudato”_{product_id}_{variant_id} para coincidir con el feed de Google Merchant Center.
Doc interna: Secciones 2, 3, 4, 5 y 7 (GTM tags activos)
view_item — main-product.liquid (antes del {% schema %})
window.dataLayer.push({ ecommerce: null });
window.dataLayer.push({
event: 'view_item',
ecommerce: {
currency: {{ shop.currency | json }},
value: {{ product.selected_or_first_available_variant.price | divided_by: 100.0 }},
items: [{
item_id: 'shopify_ZZ_{{ product.id }}_{{ product.selected_or_first_available_variant.id }}',
item_name: {{ product.title | json }},
price: {{ product.selected_or_first_available_variant.price | divided_by: 100.0 }},
item_brand: {{ product.vendor | json }},
item_category: {{ product.type | json }},
item_variant: {{ product.selected_or_first_available_variant.sku | json }}
}]
}
});
view_item_list — main-collection.liquid (antes del {% schema %})
Se itera sobre collection.products con un bucle for, pasando item_list_id y item_list_name tanto a nivel de ecommerce como dentro de cada item (requerido por GA4 para atribuir correctamente los clics de lista).
view_cart — doble trigger
- Página /cart → main-cart.liquid: snippet Liquid estándar con {% for item in cart.items %}
- Cart drawer (lateral) → theme.liquid: MutationObserver que detecta cuando el elemento #CartDrawer pierde la clase hdt-hidden y dispara fetch(‘/cart.js’) para obtener los datos del carrito
- Deduplicación: el MutationObserver comprueba window.location.pathname === ‘/cart’ para no disparar en la página de carrito (donde ya lo hace main-cart.liquid)
Configuración GTM para estos eventos:
| Tag GTM | Trigger | Tipo envío |
| Von GA4 view_item | Von CE – view_item | sendEcommerceData: true |
| Von GA4 view_item_list | Von CE – view_item_list | sendEcommerceData: true |
| Von GA4 view_cart | Von CE – view_cart | sendEcommerceData: true |
| Von GADS Remarketing – producto | Von CE – view_item | event: viewitem |
| Von GADS Remarketing – collection | Von CE – view_item_list | event: viewsearchresults |
| Von GADS Remarketing – carrito | Von CE – view_cart | event: addtocart |
Dejo plantilla rápida para importar los eventos y activadores https://drive.google.com/file/d/1R1-OtMn9etPB7tx4CyVqHEKCyDYp672n/view?usp=sharing
| ⚠️ Puntos críticos |
| • divided_by: 100.0 (con .0) es obligatorio para obtener decimal; sin .0 Liquid hace división entera |
| • sendEcommerceData: true en GTM lee automáticamente del objeto ecommerce del dataLayer — no hay que mapear variables manualmente |
| • El push de { ecommerce: null } antes de cada evento limpia datos de eventos anteriores |
Objetivo de la lección
Implementar correctamente los eventos view_item, view_item_list y view_cart en los archivos Liquid de Shopify y configurar GTM para enviarlos a GA4 y Remarketing.
Recursos
- Liquid filter divided_by: Liquid filters: abs
- GTM sendEcommerceData: developers.google.com/analytics/devguides/collection/ga4/ecommerce?client_type=gtm
- MutationObserver MDN: developer.mozilla.org/en-US/docs/Web/API/MutationObserver
¿Quieres comentar este post?
Regístrate gratis o inicia sesión para poder comentar
Iniciar Sesión
Registrarse
Restablecer Contraseña