Если хочется это генерить чисто во фронтенде, то можно все сделать через GTM вместо gtag.
На каждой странице в хеадер суй скрипт с инициализацие dataLayer'а
(function(w, d, s, l, i) {
w[l] = w[l] || [];
w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' });
var f = d.getElementsByTagName(s)[0], j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : '';
j.async = true;
j.src = '//www.googletagmanager.com/gtm.js?id=' + i + dl;
f.parentNode.insertBefore(j, f);
})(window, document, 'script', 'dataLayer', 'ХХХХХ - GTM Id');
А потом, после загрузки страницы в $( document ).ready() спокойно пушишь данные о продукте и событии в dataLayer.
dataLayer.push({
'event': 'pageView',
'ecommerce': {
'pageView': {
'products': [{
'id': prepareValue(id),
'name': prepareValue(name),
'type': prepareValue(type),
'totalvalue': prepareValue(totalvalue)
}]
}
}
});