...
Как создать цель «JavaScript-событие» для Яндекс метрики
Уроки

Как создать цель «JavaScript-событие» для Яндекс метрики

Главная » Уроки » Как создать цель «JavaScript-событие» для Яндекс метрики

Цели в Яндекс метрике предназначены для отслеживания тех или иных действий на сайте.

Такая цель позволяет отслеживать события на сайте (нажатие кнопки, заполнение формы и пр.), при выполнении которых не меняется URL страницы.

Информация о достижении такой цели передается в Яндекс Метрику с помощью JavaScript. Таким образом можно отслеживать практически любые произвольные события.

Подробнее о целях вы можете почитать в справочнике.

Если вы пишите код для сайта вручную, то вы, наверное, не задаётесь вопросом, как повесить «JavaScript-событие» на форму. Но многие пользуются плагинами и сторонними сервисами, типа CRM форм Bitrix 24, которые не имеют идентификатора и возможности добавить в них что либо.

Для решения этой задачи мы будем использовать Java script. Давайте создадим динамический скрипт который будет добавлять событие onclick к любому элементу сайта.

<script>
document.addEventListener("DOMContentLoaded", function () {
    var buttons = [
        { selector: ".offers", goal: "sale" },
        { selector: "#call", goal: "call" },
    ];

    buttons.forEach(function(item) {
        var elements = document.querySelectorAll(item.selector);
        elements.forEach(function(element) {
            element.setAttribute("onclick", ym(XXXXXX, 'reachGoal', '${item.goal}'); return true;);
        });
    });
});
</script>

Здесь мы прописываем идентификаторы элементов (class или id) по которым будем отслеживать клики.

{ selector: ".offers", goal: "sale" },

В данном случае при клике по элементу с классом offers сработает цель sale.

Таким образом вы можете добавлять любое количество элементов и целей, но не забудьте поставить ваш id Яндекс метрики вместо XXXXXX.

Ситуация усложняется, когда вы не знаете идентификатор формы. Например, при использовании CRM форм Bitrix24 вы добавляете на сайт скрипт от битрикса, а форма формируется динамически и не имеет никаких идентификаторов.

Как же быть если вы создали несколько форм и хотите повесить на них разные цели при отправке формы?

Это возможно если вы знаете идентификатор контейнера (div) в котором будет находиться эта форма. Например, вы поместили скрипт от формы Bitrix в контейнер.

<div id="form1"></div>

Теперь мы точно знаем, что форма будет находиться в контейнере с идентификатором form1 и можем при помощи этого добавить событие onsubmit к этой форме.

<script>
document.addEventListener("DOMContentLoaded", function () {
    var forms = [
        { selector: "#form1", goal: "popup_form_submit" },
        { selector: ".offers", goal: "sale" },
    ];

    const observer = new MutationObserver(function (mutations, obs) {
        forms.forEach(function (item) {
            // Ищем контейнеры с указанным селектором
            var containers = document.querySelectorAll(item.selector);
            containers.forEach(function (container) {
                // Ищем форму на любом уровне вложенности в контейнере
                var form = container.querySelector("form");
                if (form && !form.getAttribute("onsubmit")) {
                    form.setAttribute("onsubmit", `ym(XXXXXXXX, 'reachGoal', '${item.goal}'); return true;`);
                }
            });
        });

        // Проверяем, все ли формы обработаны
        const allFormsProcessed = forms.every(item => {
            const containers = document.querySelectorAll(item.selector);
            return Array.from(containers).every(container => {
                const form = container.querySelector("form");
                return form && form.getAttribute("onsubmit");
            });
        });
        if (allFormsProcessed) {
            obs.disconnect();
        }
    });

    // Наблюдаем за изменениями в DOM
    observer.observe(document.body, {
        childList: true,
        subtree: true
    });
});
</script>

Мы знаем о чём пишем!

Если у вас возникли вопросы по этой теме, пожалуйста, свяжитесь с нами.

Pin It on Pinterest

Поделиться

Пожалуйста, расскажите о нас друзьям.

Серафинит - АкселераторОптимизировано Серафинит - Акселератор
Включает высокую скорость сайта, чтобы быть привлекательным для людей и поисковых систем.