Universal Analytics : comment suivre les transactions sur Magento ?

Voici, étape par étape, ce qu'il faut faire pour pouvoir suivre dans Google Analytics version Universal les transactions des clients sur un site créé avec Magento.

Le CMS Magento permet de créer de véritables sites de vente avec un minimum de paramétrages. Avec l'outil Universal Analytics (la nouvelle version de Google Analytics), il est nécessaire de faire des modifications pour pouvoir suivre les transactions des clients.
La première étape consiste à créer le fichier "ga.html" et à y insérer le code permettant de suivre les pages avec Google Analytics. Le fichier doit se situer à cet emplacement (s'il existe déjà, il faut le remplacer) :
{Répertoire de base de votre Magento}/app/design/frontend/{Votre thème} /template/googleanalytics/ga.phtml
Insérez-y le code suivant :

<?php if (!Mage::helper('core/cookie')->isUserNotAllowSaveCookie()): ?>
<?php $identifiantCompte = Mage::getStoreConfig(Mage_GoogleAnalytics_Helper_Data::XML_PATH_ACCOUNT) ?>
<!-- BEGIN GOOGLE ANALYTICS CODEs -->
<script type="text/javascript">
//<![CDATA[
    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
    (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
    })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
    <?php echo $this->_getPageTrackingCode($identifiantCompte) ?>
    <?php echo $this->_getOrdersTrackingCode() ?>
//]]>
</script>
<?php endif; ?>

Ce code va remplacer celui présent dans le fichier "ga.phtml" utilisé par défaut par Magento, et permettre de suivre les visiteurs sur votre site.

La deuxième étape consiste à insérer le code des fonctions "_ getPageTrackingCode()" et "_ getOrdersTrackingCode()". La manière la plus propre pour effectuer cette manipulation est de créer un module dans lequel on va ajouter le code. Il est également possible de récupérer le fichier suivant :
{Répertoire de base de votre Magento}/app/code/core/Mage/GoogleAnalytics/Block/Ga.php

Copiez ce fichier et collez-le dans le répertoire "code/local" pour obtenir la même arborescence :
{Répertoire de base de votre Magento}/app/code/local/Mage/GoogleAnalytics/Block/Ga.php

Dans les deux cas, le code à utiliser est le même. Voici celui de la méthode "_getPageTrackingCode" :

protected function _getPageTrackingCode($accountId)
{
    $pageName   = trim($this->getPageName());
    $optPageURL = '';
    if ($pageName && preg_match('/pratique/^/.*/i', $pageName)) {
        $optPageURL = ", '{$this->jsQuoteEscape($pageName)}'";
    }
    $hostName = $_SERVER['SERVER_NAME'];
    return "
        ga('create', '".$this->jsQuoteEscape($accountId)."', 'auto');
        ga('send', 'pageview' ".$optPageURL.");
    ";
}

Pour la fonction "_getOrdersTrackingCode", le code est le suivant :

protected function _getOrdersTrackingCode()
{
    $orderIds = $this->getOrderIds();
    if (empty($orderIds) || !is_array($orderIds)) {
        return;
    }
    $collection = Mage::getResourceModel('sales/order_collection')
        ->addFieldToFilter('entity_id', array('in' => $orderIds))
    ;
    $result = array("
        // Transaction code...
        ga('require', 'ecommerce', 'ecommerce.js');
    ");
    foreach ($collection as $order) {
        if ($order->getIsVirtual()) {
            $address = $order->getBillingAddress();
        } else {
            $address = $order->getShippingAddress();
        }
        $result[] = "
            ga('ecommerce:addTransaction', {
                id:          '".$order->getIncrementId()."', // Transaction ID
                affiliation: '".$this->jsQuoteEscape(Mage::app()->getStore()->getFrontendName())."', // Affiliation or store name
                revenue:     '".$order->getBaseGrandTotal()."', // Grand Total
                shipping:    '".$order->getBaseShippingAmount()."', // Shipping cost
                tax:         '".$order->getBaseTaxAmount()."', // Tax

            });
        ";
        foreach ($order->getAllVisibleItems() as $item) {
            $result[] = "
            ga('ecommerce:addItem', {
                id:       '".$order->getIncrementId()."', // Transaction ID.
                sku:      '".$this->jsQuoteEscape($item->getSku())."', // SKU/code.
                name:     '".$this->jsQuoteEscape($item->getName())."', // Product name.
                category: '', // Category or variation. there is no 'category' defined for the order item
                price:    '".$item->getBasePrice()."', // Unit price.
                quantity: '".$item->getQtyOrdered()."' // Quantity.
            });
        ";
        }
        $result[] = "ga('ecommerce:send');";
    }
    return implode("n", $result);
}

Pour terminer la configuration, ajoutez l'identifiant de suivi et activez le suivi Google Analytics dans le menu "Système > Configuration > Ventes > API Google > Google Analytics".

Tutoriels Analytics