Перехват метода reachGoal. Читайте на Cossa.ru

26 июня 2019, 15:50
16

Перехват метода reachGoal

Как продублировать цели из Яндекс.Метрики в Google Analytics.

Перехват метода reachGoal

Что делать, если вы настроили большое количество целей в Яндекс.Метрике через Google Tag Manager (GTM), и нужно срочно перенести эти цели в качестве событий в Google Analytics (GA)? Конечно, можно перенастроить каждый тег на параллельную отправку событий в GA и в Метрику, но, если целей в Метрике очень много, это отнимет время.

Возможна обратная ситуация, когда цели настраивали не вы, а разработчики в самом коде сайта. И вам, как аналитику компании, нужно настроить отправку таких же событий в GA, а у вас под рукой только GTM. В этом случае, даже с небольшим числом целей могут возникнуть сложности. Триггеры событий в GTM нужно будет максимально подгонять, чтобы цели в Метрику и события в GA уходили по одной логике, и в разных системах аналитики не было существенных расхождений.

Маркетинг для предпринимателей


Онлайн-курс для начинающих предпринимателей и руководителей бизнеса.

После курса вы:

  • Заговорите с маркетологами на одном языке;
  • Узнаете, как сделать так, чтобы затраты на маркетинг окупались;
  • Подберете маркетинговые инструменты, которые подойдут именно вашему бизнесу.
Записывайтесь прямо сейчас!>>>

Реклама

В обоих случаях не один час понадобится провести, настраивая всё вручную. Но можно найти более практичный вариант. Есть функция, которая позволяет перехватывать отправку целей в Метрику и параллельно отправлять пуши в dataLayer. Таким образом вам не надо будет вспоминать или разбираться, как была настроена отправка целей в Яндекс.Метрику — достаточно применить нужную функцию. Рабочий вариант функции будет зависеть от того, какая версия счётчика Яндекс.Метрики у вас установлена.

Как отличить новый счётчик Метрики от старого

Для определения рабочего варианта функции нужно понять, какая версия счётчика установлена у вас на сайте.

Если ваш счётчик был установлен ранее 10.12.2018 и позднее не обновлялся, то у вас старая версия:

<script type="text/javascript" > (function(d, w, c) {
    (w[c] = w[c] || []).push(function() {
        try {
            w.yaCounterXXXXXXXX = new Ya.Metrika({
                id: XXXXXXXX,
                clickmap: true,
                trackLinks: true,
                accurateTrackBounce: true,
                webvisor: true
            });
        } catch (e) {}
    });

    var n = d.getElementsByTagName("script")[0],
        s = d.createElement("script"),
        f = function() {
            n.parentNode.insertBefore(s, n);
        };

    s.type = "text/javascript";
    s.async = true;
    s.src = "https://mc.yandex.ru/metrika/watch.js";
    if (w.opera == "[object Opera]") {
         d.addEventListener("DOMContentLoaded", f, false);
        } else {
        f();
})(document, window, "yandex_metrika_callbacks"); 
</script> 

где:
XXXXXXXX — номер вашего счётчика.

w.yaCounterXXXXXXXX в коде даёт однозначно понять, что перед вами именно старая версия счётчика.

Пример отправки цели в старом счётчике:

<script>
yaCounterXXXXXXXX.reachGoal('TARGET_NAME');
</script> 

где:
XXXXXXXX — номер вашего счётчика;
TARGET_NAME — идентификатор цели.

Новая версия счётчика появилась 10.12.2018.

Выглядит она следующим образом:

<script type="text/javascript" > (function(m, e, t, r, i, k, a) {
    m[i] = m[i] || function() {
        (m[i].a = m[i].a || []).push(arguments)
    };
    m[i].l = 1 * new Date();
    k = e.createElement(t), 
    a = e.getElementsByTagName(t)[0], 
    k.async = 1, k.src = r, 
    a.parentNode.insertBefore(k, a)
})(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");

ym(XXXXXXXX, "init", {
    clickmap: true,
    trackLinks: true,
    accurateTrackBounce: true,
    webvisor: true
});
 </script> 

где:
XXXXXXXX — номер вашего счётчика.

ym(XXXXXXXX в коде даёт однозначно понять, что перед вами именно новая версия счётчика.

Пример отправки цели в новом счётчике:

<script>
ym(XXXXXX, 'reachGoal', 'TARGET_NAME');
</script> 

где:
XXXXXXXX — номер вашего счётчика;
TARGET_NAME — идентификатор цели.

Функция для старой версии Яндекс.Метрика

Если у вас установлена старая версия счётчика Яндекс.Метрики (см. выше), то функция перехвата отправки целей будет выглядеть так:

<script>
function mainTagFunction(reachGoal) {
    yaCounterXXXXXXXX.reachGoal = function() {
        var param = arguments[0];
        reachGoal.apply(this, arguments);
        // здесь проверяем метод функции
        dataLayer.push({
            'event': 'metrika',
            'event_param': param
        });
    };
}

var yCounter = 0;

function ySearch() {
    if (window.yaCounterXXXXXXXX) mainTagFunction(yaCounterXXXXXXXX.reachGoal);
    else {
        if (yCounter < 100) {
            setTimeout(ySearch, 100);
            yCounter++;
        } else console.log('Счетчик Яндекс.Метрики не найден');
    }
}

ySearch();
</script> 

где:
XXXXXXXX — номер вашего счётчика;

Код срабатывает при каждом вызове функции yaCounterXXXXXXXX с методом reachGoal. Функция производит пуш в dataLayer, при пуше передается название события (metrika) и параметр, в параметре передаётся идентификатор цели.

Функция для новой версии Яндекс.Метрика

Если у вас установлена новая версия счётчика Яндекс.Метрики, то функция перехвата отправки целей выглядит следующим образом:

<script>
function mainTagFunction(reachGoal) {
    ym = function() {
        var param = arguments[2];
        var method = arguments[1];
        reachGoal.apply(this, arguments);
        // здесь проверяем метод функции
        if (method == 'reachGoal') dataLayer.push({
            'event': 'metrika',
            'event_param': param
        });
    };
}

var yCounter = 0;

function ySearch() {
    if (window.ym) mainTagFunction(ym);
    else {
        if (yCounter < 100) {
            setTimeout(ySearch, 100);
            yCounter++;
        } else console.log('Счетчик Яндекс.Метрики не найден');
   } 
}

ySearch();
</script> 

Она срабатывает при каждом вызове функции ym() и, если был вызван метод reachgoal, отправляет пуш в dataLayer. В dataLayer передаётся название события (metrika) и параметр, в параметре event_param передаётся идентификатор цели.

Настройка отправки событий в GA через GTM

Для того, чтобы в GTM настроить отправку событий с целями Метрики в GA, необходимо:

1. Создать триггер «Просмотр страницы — Модель DOM готова», дополнительно можно задать, на каких страницах нужно дублировать цели из Метрики в GA

Как перенести цели из Яндекс Метрики в Google Analytics

2. Создать тег «Пользовательский HTML» и вставить в него нужный код функции. На этот тег устанавливается триггер, созданный ранее.

Как перенести цели из Яндекс Метрики в Google Analytics

3. Создать триггер «Пользовательское событие» с именем события metrika.

Как перенести цели из Яндекс Метрики в Google Analytics

4. Создать переменную «Переменная уровня данных» с именем как показано в примере:

Как перенести цели из Яндекс Метрики в Google Analytics

5. Создать тег «Google Аналитика — Universal Analytics» с триггером и переменной, которые были созданы ранее.

Как перенести цели из Яндекс Метрики в Google Analytics

где:
UA-XXXXXXXX-XX — номер вашего счётчика в Google Analytics

6. Опубликовать контейнер GTM.

Как перенести цели из Яндекс Метрики в Google Analytics

При таких настройках в Google Analytics будут поступать события с категорией события — Metrika, а действиями по этим событиям будут идентификаторы целей из Яндекс.Метрики.

Как перенести цели из Яндекс Метрики в Google Analytics

Проверка настроек

Для проверки корректности настроек отправки событий в GA необходимо в консоли вашего браузера ввести следующий код:

а) Для нового счётчика Метрики

ym(XXXXXX, 'reachGoal', 'TARGET_NAME') 

где:
XXXXXXXX — номер вашего счётчика в Яндекс.Метрике.

б) Для старого счётчика Метрики

yaCounterXXXXXXXX.reachGoal('TARGET_NAME'); 

где:
XXXXXXXX — номер вашего счётчика в Яндекс.Метрике.

Консоль в каждом браузере открывается по-своему, например для Chrome консоль открывается комбинацией клавиш Ctrl + Shift + j:

Как перенести цели из Яндекс Метрики в Google Analytics

После нажатия Enter ваше событие должно уйти не только в Метрику, но и в GA.

Чтобы убедиться в этом, надо открыть отчёт «События» в разделе «В режиме реального времени»:

Как перенести цели из Яндекс Метрики в Google Analytics

Если всё было настроено корректно, то вы увидите строчку со значениями Metrika и TARGET_NAME.

Поздравляю, вы настроили передачу целей из Метрики в Google Analytics!

Мнение редакции может не совпадать с мнением автора. Ваши статьи присылайте нам на 42@cossa.ru. А наши требования к ним — вот тут.



Комментарии:

Добрый день! спасибо за интересный материал. Попыталась реализовать отправку настроенных тегов для ЯМ в GA, но столкнулась с тем, что тег с триггером "Просмотр страницы — Модель DOM готова" блокирует работу ЯМ. Как только этот тег я отключаю, ЯМ работает. Не сталкивались с таким?
- 0 +
Здравствуйте! С подобным не сталкивался. В ЯМ перестают поступать данные? Есть ли ошибки в консоли?
в ЯМ перестают поступать данные. В консоли в режиме отладке Метрики счетчик не инициализируется((
- 0 +
У вас новый или старый счетчик Метрики?
В консоли высвечивается через 10 секунд "Счетчик Яндекс.Метрики не найден"?
При проверке настроек, что отображается в консоли?
Желательно со ссылкой на скриншоты.
Счетчик новый, уведомления в консоли нет. Консоль с работающим тегом перехвата событий https://yadi.sk/i/Y0-k3oXuFnn22w и консоль с отключенным тегом перехвата событий https://yadi.sk/i/taS7qoH7Tsd54Q
- 0 +
У меня есть подозрение, что код счетчика у вас установлен неправильный.
Должно быть Window а не Wondow http://prntscr.com/oftudz
Возможно проблема в этом. И сделайте, пожалуйста, на всякий случай скрин кода внутри тега.
код счетчика https://yadi.sk/i/EL22mXr1NqjFiw , при клике на ошибку в консоли с wondow попала https://yadi.sk/i/v4s1qBgr9D9MDQ
- 0 +
можете, пожалуйста, сделать скриншот тега, который дублирует событие в GA?
- 0 +
Проверил код, да, он блокирует отправку данных в Метрику. Это связано с тем, что у нового счетчика отличается логика работы.

На новом счетчике будет работать следующий код:
<script>
(function(){
//счетчик попыток запуска
var yCounter = 0;

//функция поиска счетчика Яндекс.Метрики
function ySearch(){
if (window.ym){
window.zm = window.ym;
mainTagFunction();
}else if (yCounter < 100){
setTimeout(ySearch, 100);
yCounter++;
}else console.log('Счетчик Яндекс.Метрики не найден');
}

//основная функция
function mainTagFunction(){
window.ym = function(){
window.zm.a.push(arguments);
if (arguments[1] === 'reachGoal') dataLayer.push({
'event': 'metrika',
'event_param': arguments[2]
});
};
}

//старт функции
ySearch();
})();
</script>
Обновила код в GTM, но к сожалению все равно Метрика не инициируется https://yadi.sk/i/tCq5uN3W7pY8uw
- 0 +
Видимо функция отрабатывает раньше положенного.
Добавил таймер.

<script>
function func (){
//счетчик попыток запуска
var yCounter = 0;

//функция поиска счетчика Яндекс.Метрики
function ySearch(){
if (window.ym){
window.zm = window.ym;
mainTagFunction();
}else if (yCounter < 100){
setTimeout(ySearch, 100);
yCounter++;
}else console.log('Счетчик Яндекс.Метрики не найден');
}

//основная функция
function mainTagFunction(){
window.ym = function(){
window.zm.a.push(arguments);
if (arguments[1] === 'reachGoal') dataLayer.push({
'event': 'metrika',
'event_param': arguments[2]
});
};
}

//старт функции
ySearch();
};
setTimeout(func, 1000);
</script>
На моей стороне работает.
Теперь работает! спасибо!!
- 0 +
Отлично)) Вам спасибо за бдительность)
У меня новый счетчик, всё сделал по этому мануалу. При проверке через консоль командой ym(XXXXXX, 'reachGoal', 'TARGET_NAME') событие уходит, но при ручной проверке (цель на отправку формы) ничего не происходит. В чем может быть проблема? В консоле появляется строчка "The message port closed before a response was received", но это чисто хромовская проблема, насколько я понял. В других браузерах таких ошибок нет, но и цель не передается тоже.

В режиме отладки GTM не активизируется тег «Google Аналитика — Universal Analytics» с триггером и переменной, который и должен передавать событие
- 0 +
Виктор К #
03.03.2020 17:52
Много где видел данный мануал по дублированию целей Яндекс.Метрики в Google Analytics, но нигде нет объяснения как он взаимодействует между собой в GTM:

1. создаётся парсер Яндекс.Метрики
а. создаётся тег «Пользовательский HTML», в нём объявлены 2 зависимых параметра 'event': 'metrika', и 'event_param': arguments[2]
б. цепляется тег на тригер с DOM;

2. создаётся передатчик целей
а. создаётся тег UA, как будет называться «Категория» не важно, главное в GA так же в «Цели» назвать
б. вешается переменная, где и подцепляется 'event_param' через имя
в. цепляется тег на тригер «Пользовательское событие» с именем 'event': 'metrika'

Но вот у меня дальше запуска парсера не срабатывает - где косяк пока непонятно. AdBlock и пр. отключён.

Введите капчу



Чем живёт диджитал?
Главное — в рассылке:





Вход на cossa.ru

Уже есть аккаунт?
Выбирай любой вариант входа:
Facebook Vkontakte

Используйте свой аккаунт в социальной сети Facebook или Вконтакте, чтобы пользоваться сайтом

Не забудьте написать email на странице своего профиля для управления рассылкой