Nous avons des produits dans plusieurs catégories différentes dans notre boutique Magento. Et avec le suivi amélioré du commerce électronique, nous souhaitons suivre les performances de la liste de produits. J'ai utilisé ceci Google dev docs .
Eg.: Le produit est dans les catégories 'ventes', 'chemises' et 'collection awesome'.
Nous nous heurtons maintenant au problème suivant: à la page de détail du produit, nous ne savons pas de quelle liste de catégories nous appartenons et Magento indique à Google la première catégorie de produits des catégories de produits dans lesquelles se trouve le produit.
Cela donne un rapport erroné: Product List Views
, Product List Clicks
et Product List CTR
ont des numéros corrects dans nos rapports.
Mais Product Adds To Basket
vaut zéro et Product Checkouts
, Unique Purchases
et Product Revenue
pointent vers (non défini) dans une autre entrée (ligne).
Je doute qu'il s'agisse d'un problème de session, car j'ai tout enregistré en moins d'une minute sur notre système de test.
Voici comment suivre les impressions de la liste de produits (toutes les données pertinentes se trouvent dans les attributs data-xxx dans li-tag):
/**
* * Set all product list impressions for Google Analytics
* @param bool loadMoreClicked
*/
var setProductImpressions = function(loadMoreClicked) {
jQuery('li[data-product-sku]').each(function(index){
_ga('ec:addImpression', {
'id': this.dataset.productSku,
'name': this.dataset.productName,
'category': this.dataset.productCategory,
'brand': this.dataset.productBrand,
'variant': this.dataset.productVariant,
'list': this.dataset.productList,
'position': index + 1
});
})
if(loadMoreClicked) {
_ga('send', 'event', {
eventCategory: 'productlist',
eventAction: 'click',
eventLabel: 'Load More Button'
});
}
}
Voici comment je dépiste les clics sur la liste de produits:
var bindProductListClickTracking = function() {
jQuery('a.detail-link-track:not(.ga-click-bound)').on('click', function (e) {
e.preventDefault();
var product;
var href = jQuery(this).attr('href');
var product = jQuery('li[data-product-detail-link="' + href + '"]')[0];
_ga('ec:addProduct', {
'id': product.dataset.productSku,
'name': product.dataset.productName,
'category':product.dataset.productCategory,
'brand': product.dataset.productBrand,
'variant': product.dataset.productVariant,
'position': jQuery(product).index() + 1
});
var list = product.dataset.productList;
_ga('ec:setAction', 'click', {list: list});
_ga('send', 'event', {
eventCategory: 'productlist',
eventAction: 'click',
eventLabel: product.dataset.productList,
hitCallback: function () {
if (!(e.ctrlKey || e.which == 2)) {
document.location = href;
}
}
});
}).addClass('ga-click-bound');
}
Et voici comment je fais le suivi des événements d'ajout au panier:
function manipulationOfCart(product, type) {
_ga('ec:addProduct', {
'id': product.id,
'name': product.name,
'category': product.category,
'brand': product.brand,
'variant': product.variant,
'price': product.price,
'quantity': product.qty
});
_ga('ec:setAction', type);
if (type == 'add') {
_ga('send', {
hitType: 'event',
eventCategory: 'Cart',
eventAction: 'click',
eventLabel: 'Add To Cart',
nonInteraction: 1
});
} else if (type == 'remove') {
_ga('send', {
hitType: 'event',
eventCategory: 'Cart',
eventAction: 'click',
eventLabel: 'Remove From Cart',
nonInteraction: 1
});
}
}
Il y a trois choses que vous devez faire.
1. Suivez votre liste de produits en cliquant sur votre page de liste de produits
/**
* Binds click event on product detail page links at product list page.
*/
var bindProductListClickTracking = function() {
jQuery('a.detail-link-track:not(.ga-click-bound)').on('click', function (e) {
e.preventDefault();
var href = jQuery(this).attr('href');
//all my product data are attributes á la data-product-sku
var product = jQuery('li[data-product-detail-link="' + href + '"]')[0];
ga('ec:addProduct', {
'id': product.dataset.productSku,
'name': product.dataset.productName,
'category':product.dataset.productCategory,
'brand': product.dataset.productBrand,
'variant': product.dataset.productVariant,
'position': jQuery(product).index() + 1
});
var list = product.dataset.productList;
/**
* IMPORTANT: save your product list name into a cookie
*/
jQuery.cookie('productlist', list, { path: '/', domain: cookieDomain});
ga('ec:setAction', 'click', {list: list});
ga('send', 'event', {
eventCategory: 'productlist',
eventAction: 'click',
eventLabel: list,
hitCallback: function () {
if (!(e.ctrlKey || e.which == 2)) {
document.location = href;
}
}
});
}).addClass('ga-click-bound');
}
Astuce: Si le chargement est lent ou qu'un bouton de chargement supplémentaire est chargé, veillez à ne pas lier deux fois cet événement à votre produit. liens de page.
2. Ajoutez actionObject pour votre liste de produits à votre action d’ajout au panier sur la page de détail de votre produit
var manipulationOfCart = function(product, type, productList) {
ga('ec:addProduct', {
'id': product.id,
'name': product.name,
'category': product.category,
'brand': product.brand,
'variant': product.variant,
'price': product.price,
'quantity': product.qty
});
ga('ec:setAction', type, {list: productList});
if (type == 'add') {
ga('send', {
hitType: 'event',
eventCategory: 'Cart',
eventAction: 'click',
eventLabel: 'Add To Cart',
nonInteraction: 1
});
} else if (type == 'remove') {
ga('send', {
hitType: 'event',
eventCategory: 'Cart',
eventAction: 'click',
eventLabel: 'Remove From Cart',
nonInteraction: 1
});
}
}
3. Supprimer le cookie une fois que vous avez ajouté un produit à votre panier ou que l'utilisateur a quitté la page de détail du produit
manipulationOfCart(productToBasket, 'add', productlist);
$.removeCookie('productlist', { path: '/', domain: cookieDomain});
ET
$(window).unload(function() {
$.removeCookie('productlist', { path: '/', domain: cookieDomain});
});
En réalité, les Google Analytics Docs ont tort - cela ne fonctionne pas comme ils le disent. Et il existe déjà un bogue signalé sous Google Analytics Bug Tracker .