Magento Asked by Rafal on February 7, 2021
Google has released a new product – Google Optimize. Is it possible to modify the standard Universal Analytics code in Magento (enabled under Google API in 1.9.3) to implement the change?
The actual change needed is:
Paste into your existing Analytics snippet as shown below:
<script>
(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','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-xxxxxx', 'auto');
ga('require', 'GTM-xxxxxx');
ga('send', 'pageview');
</script>
so only 1 extra line is needed
I've thrown together a small module to add this in via a backend config for CE 1.9.3.x, hopefully it'll be useful to some.
appetcmodulesNamespace_Googleoptimize.xml
<?xml version="1.0"?>
<!--
/**
* Class Namespace_Googleoptimize
*
* @category Namespace
* @package Namespace_Googleoptimize
*/
-->
<config>
<modules>
<Namespace_Googleoptimize>
<active>true</active>
<codePool>local</codePool>
</Namespace_Googleoptimize>
</modules>
</config>
appcodelocalNamespaceGoogleoptimizeetcconfig.xml
<?xml version="1.0"?>
<!--
/**
* Namespace
*
* @category Namespace
* @package Namespace_Googleoptimize
*/
-->
<config>
<modules>
<Namespace_Googleoptimize>
<version>0.1.0</version>
</Namespace_Googleoptimize>
</modules>
<global>
<helpers>
<namespace_googleoptimize>
<class>Namespace_Googleoptimize_Helper</class>
</namespace_googleoptimize>
</helpers>
<blocks>
<googleanalytics>
<rewrite>
<ga>Namespace_Googleoptimize_Block_Ga</ga>
</rewrite>
</googleanalytics>
</blocks>
</global>
</config>
appcodelocalNamespaceGoogleoptimizeetcsystem.xml
<?xml version="1.0"?>
<config>
<sections>
<google translate="label" module="googleanalytics">
<label>Google API</label>
<tab>sales</tab>
<frontend_type>text</frontend_type>
<sort_order>340</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
<groups>
<googleoptimize translate="label">
<label>Google Optimize</label>
<frontend_type>text</frontend_type>
<sort_order>20</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
<fields>
<active translate="label">
<label>Enable</label>
<frontend_type>select</frontend_type>
<source_model>adminhtml/system_config_source_yesno</source_model>
<sort_order>10</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
</active>
<container translate="label">
<label>Container ID</label>
<frontend_type>text</frontend_type>
<sort_order>20</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
<comment>Enter the full container ID, ie GTM-XXXXXXX</comment>
</container>
</fields>
</googleoptimize>
</groups>
</google>
</sections>
</config>
appcodelocalNamespaceGoogleoptimizeHelperData.php
<?php
/**
* Namespace
*
* @category Namespace
* @package Namespace_Googleoptimize
*/
class Namespace_Googleoptimize_Helper_Data extends Mage_Core_Helper_Abstract
{
const XML_PATH_ACTIVE = 'google/googleoptimize/active';
const XML_PATH_CONTAINER = 'google/googleoptimize/container';
/**
* Whether Google Optimize is enabled in backend
*
* @param mixed $store
* @return bool
*/
public function isGoogleOptimizeEnabled($store = null)
{
return Mage::getStoreConfigFlag(self::XML_PATH_ACTIVE, $store);
}
/**
* Get Google Optimize Container ID
*
* @param string $store
* @return string
*/
public function getContainerId($store = null)
{
return Mage::getStoreConfig(self::XML_PATH_CONTAINER, $store);
}
}
appcodelocalNamespaceGoogleoptimizeBlockGa.php
<?php
/**
* Namespace
*
* @category Namespace
* @package Namespace_Googleoptimize
*/
class Namespace_Googleoptimize_Block_Ga extends Mage_GoogleAnalytics_Block_Ga
{
/**
* Render regular page tracking javascript code
* The custom "page name" may be set from layout or somewhere else. It must start from slash.
*
* @param string $accountId
* @return string
*/
protected function _getPageTrackingCodeUniversal($accountId)
{
if ($this->helper('namespace_googleoptimize')->isGoogleOptimizeEnabled()) {
$containerId = $this->helper('namespace_googleoptimize')->getContainerId();
return "
ga('create', '{$this->jsQuoteEscape($accountId)}', 'auto');
" . $this->_getAnonymizationCode() . "
ga('require', '{$containerId}');
ga('send', 'pageview');
";
} else {
return "
ga('create', '{$this->jsQuoteEscape($accountId)}', 'auto');
" . $this->_getAnonymizationCode() . "
ga('send', 'pageview');
";
}
}
/**
* Is Googel Optimize Enabled
*
* @return bool
*/
protected function _isEnabled()
{
return Mage::helper('namespace_googleoptimize')->isGoogleOptimizeEnabled();
}
}
It's worth noting that this might be the route required for you even if you are using Tag Manager.
Despite the fact that Tag Manager has a default tag for Google Optimize built in, their own docs say;
While it’s possible to deploy the Optimize plugin via Google Tag Manager, it will often result in significantly increased latency
https://support.google.com/360suite/optimize/answer/7359264?hl=en
And they are not kidding. I was running an extremely basic test and this resulted in a very long lag before the site was rendered, as I used the JS that prevents the FOUC.
See backend here config;
Answered by McNab on February 7, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP