Три способа добавить GA4 в WordPress
| Метод | Плюсы | Минусы |
|---|---|---|
| Site Kit by Google | Официальный, удобный | Тяжёлый плагин |
| Вручную (functions.php) | Легковесно | Нужны знания PHP |
| Google Tag Manager | Гибкость, все теги в одном месте | Сложнее настройка |
Метод 2: Вручную через functions.php
function add_ga4_tracking() {
$measurement_id = 'G-XXXXXXXXXX';
echo "
<script async src='https://www.googletagmanager.com/gtag/js?id={$measurement_id}'></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', '{$measurement_id}');
</script>";
}
add_action('wp_head', 'add_ga4_tracking');
if (!current_user_can('manage_options')) перед echo, чтобы не считать свои просмотры в аналитике.Настройка целей GA4
В GA4 цели называются Events. Ключевые события для сайта хостинга:
- purchase — оформление заказа
- sign_up — регистрация
- generate_lead — заявка с формы
- page_view — просмотр страницы
Разбор ошибок трекинга GA4
Код счётчика вставлен, а данные в отчётах не появляются. Разница между GA4 и старым Universal Analytics в том, что GA4 группирует всё в события, поэтому многие «ошибки» на деле — не баг, а иначе устроенная модель данных. Вот что означают типичные симптомы.
| Симптом | Причина | Что делать |
|---|---|---|
| Отчёт Real-Time пустой, хотя код вставлен | Measurement ID указан с опечаткой, либо скрипт блокируется кэш-плагином как «неиспользуемый JS» | Сверить ID в GA4 → Admin → Data Streams, исключить файл из минификации |
| Ошибка в консоли: gtag is not defined | Скрипт gtag.js не успел загрузиться до вызова gtag(), обычно из-за нарушенного порядка подключения | Не менять порядок из примера: сначала dataLayer, затем сам скрипт gtag.js |
| Число сессий вдвое больше ожидаемого | GA4 подключён одновременно через Site Kit и вручную через functions.php | Оставить только один способ подключения счётчика |
| Запрос к google-analytics.com помечен Blocked by client | Отправку блокирует блокировщик рекламы у части посетителей | Это ожидаемо для части трафика; для надёжности используйте серверный тегирование через GTM Server Container |
Когда самостоятельная настройка GA4 не подходит
- Сайты с жёсткими требованиями GDPR — нужен Consent Mode v2 и баннер согласия перед любой отправкой данных в GA4
- Интернет-магазины с отчётностью по продажам — вручную через functions.php сложно передать данные о покупках, удобнее использовать встроенную интеграцию WooCommerce или GTM
- Компании с юридическим требованием хранить данные внутри Евросоюза — нужна отдельная настройка региона обработки данных в GA4 Admin, а не просто вставка кода
- Одностраничники с десятками микроконверсий — ручная разметка каждого события в коде не масштабируется, нужен Google Tag Manager
- Сайты с несколькими доменами под одним брендом — для сквозной аналитики между доменами нужна настройка cross-domain measurement, а не просто вставка одного и того же кода на каждый домен
Отдельная проблема — доверие к цифрам. Даже если счётчик технически работает, сравнивать конверсии до и после смены дизайна сайта корректно только при одинаковом источнике трафика: платный трафик и органика конвертируются по-разному, и смешивание их в одном отчёте искажает выводы.
Настройка через Google Tag Manager
GTM удобен тем, что все теги управляются из одного интерфейса без правки кода при каждом изменении.
<!-- В head, сразу после открывающего тега body -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-XXXXXXX"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- Основной контейнер вставляется в head через functions.php,
как в примере с gtag выше -->
Если контейнер GTM не загружается из-за политики безопасности контента, разберитесь с настройкой CSP на сайте.
Как проверить, что данные идут в GA4 корректно
- В GA4 → Admin → DebugView события появляются в реальном времени при активной отладке
- В DevTools → Network запрос к домену google-analytics.com/g/collect возвращает статус 204
- Тег Assistant в браузере показывает сработавшие теги без ошибок конфигурации
- Число событий page_view примерно совпадает с числом уникальных загрузок страниц за тот же период
// Быстрая проверка в консоли браузера
console.log(window.dataLayer);
// Массив должен содержать события gtag('config', ...) и gtag('event', ...)
После проверки трекинга стоит также свериться с базовыми SEO-настройками — см. статью про Yoast SEO.