Подключение счётчика Яндекс Метрики к Next.js приложению
Решил заняться аналитикой своего блога.
На первых порах мне нужно всего лишь отслеживать заходы на сайт и переходы по ссылкам между страницами сайта.
Для этих целей подходят счётчики от Google и Яндекса, но я порыве патриотических чувств решил остановиться на последнем.
Добавить счётчик несложно, но так как под капотом у нас статически сгенерированное Next.js/React приложение, то я столкнулся с парой нюансов, которые надо учесть.
В этой статье, я как раз о них и расскажу.
Ссылка на итоговый результат для тех кто спешит.
Итак, нам нужно:
- создать компонент, который будет загружать счётчик и передавать ему события,
- подписаться на события перехода между страницами,
- добавить компонент в Root Layout,
- не прокидывать события при локальной отладке страниц
Создание компонента
После быстрого поиска, я нашёл уже готовый пакет react-yandex-metrika, который реализует всё необходимое для моих задач.
Устанавливаем его:
Далее нам необходимо создать компонент, назовём его YandexMetrikaContainer.
Так как счётчик должен быть Клиентским компонентом, то в файл с компонентом, перед всеми импортами, необходимо добавить директиву "use client".
Далее создаём простой функциональный компонент, использующий YMInitializer из пакета react-yandex-metrika.
Прокидываем в него номер счётчика и другие необходимые нам настройки счётчика.
Но это ещё не всё, помимо загрузки счётчика, нам нужно отправить в него событие попадания на страницу.
На этом бы можно было остановиться, но при переходе между страницами Next.js не рендерит весь Root Layout, поэтому событие будет вызвано только 1 раз.
Что бы исправить ситуацию, нам нужно подписаться на событие перехода между страницами.
Подписка на события перехода по страницам
Next.js Содержит в себе пакет Router, который позволяет подписаться на нужное нам событие.
Выглядит это следующим образом:
В итоге у нас должно получиться вот так:
Теперь настало время добавить компонент в Root Layout.
Добавление в Root Layout
Тут всё довольно просто, я решил добавить компонент после закрывающего тега .
Работа в Dev режиме
Также мне не нужно чтобы счётчик срабатывал когда я запускаю приложение в режиме отладки, поэтому неплохо бы добавить какой-то признак того что мы в режиме отладки
В итоге использование компонента будет выглядеть следующим образом:
Итоговый результат
Итоговый код компонента YandexMetrikaContainer
Итоговый код компонента Root Layout
На этом всё, спасибо за внимание! 🎉
Подписывайтесь на мой Youtube канал и на Telegram 🙂