Как в WordPress и WooCommerce отслеживать доход, транзакции и покупки в Google Analytics 4

Введение
Владельцы магазинов на WooCommerce часто уверены, что Google Analytics 4 уже показывает им доход, количество транзакций и поведение покупателей. На практике же большинство сайтов передают в GA4 только просмотры страниц — никаких событий view_item, add_to_cart или purchase там нет. Это значит, что:
- в GA4 нет отчёта «Доход по источнику трафика»;
- Google Ads не видит реальной ценности конверсий (ROAS считать не из чего);
- решения о масштабировании рекламы принимаются вслепую.
В этой статье — пошаговый кейс, как мы диагностировали и полностью настроили ecommerce-трекинг на реальном клиентском WooCommerce-магазине: от первой проверки «а вообще хоть что-то передаётся» до подтверждённого рабочего события purchase в GA4.
Шаг 0. Как проверить, работает ли ecommerce-трекинг вообще
Прежде чем что-то устанавливать, проверьте текущее состояние. Самый быстрый способ — открыть код страницы товара (Ctrl+U / Cmd+Option+U) и поискать dataLayer.push.
Типичная ловушка: если вы ищете слово add_to_cart на странице товара WooCommerce, вы почти наверняка его найдёте — но это будет всего лишь CSS-класс кнопки:
<button class="single_add_to_cart_button ... add_to_cart_button ajax_add_to_cart" data-product_id="124">
Это не доказательство работы трекинга. Реальное событие выглядит иначе — это вызов dataLayer.push() с объектом ecommerce:
dataLayer.push({
"ecommerce": {
"currency": "USD",
"value": 358,
"items": [{
"item_id": 591,
"item_name": "Название товара",
"price": 358,
"item_category": "Products"
}]
},
"event": "view_item"
});
Если на странице товара такого блока нет — ecommerce-данные в GA4 не идут, даже если базовый gtag('config', ...) для просмотра страниц стоит и работает.
Что ещё стоит проверить на этом этапе:
— сколько раз на странице загружается googletagmanager.com/gtm.js — должно быть ровно один раз. Два вызова = задублированные данные в GA4 (классическая проблема, когда код GTM и вручную вставлен, и добавлен плагином одновременно);
— есть ли уже установленный, но неактивный, плагин-коннектор (например, Site Kit by Google) — часто стоит «на всякий случай», но не выполняет ecommerce-функцию вообще.
Шаг 1. Установка GTM4WP (Google Tag Manager for WordPress)
Для WooCommerce ecommerce-трекинга оптимальный выбор — бесплатный плагин GTM4WP (автор Thomas Geiger, slug в каталоге WordPress.org: duracelltomi-google-tag-manager). Причина выбора именно этого плагина:
- уже официально реализует GA4 E-commerce specification для WooCommerce «из коробки»;
- не требует написания никакого PHP-кода вручную;
- хорошо сочетается с уже имеющимся на сайте контейнером Google Tag Manager.
Установить можно стандартно: Плагины → Добавить новый → поиск «GTM4WP» → Установить → Активировать.

Шаг 2. Настройка вкладки General
После активации плагина заходим в Settings → Google Tag Manager, вкладка General.

Здесь три ключевых поля:
Google Tag Manager ID
Вставьте ID вашего существующего GTM-контейнера, например GTM-XXXXXXX. Используйте тот же контейнер, что уже стоит на сайте — не создавайте новый, иначе придётся вручную переносить весь остальной трекинг (рекламные пиксели, конверсии и т.д.), который там уже может быть настроен.
Container code ON/OFF — самый важный момент
Это поле решает судьбу дублирования GTM-контейнера на сайте:
| Ситуация | Что выбрать |
|---|---|
| Код GTM на сайте ещё нигде не вставлен вручную | On — пусть плагин сам вставит части <head>/<body> |
| Код GTM уже вставлен вручную (например, через Code Snippets, Insert PHP, или прямо в теме) | Off — плагин продолжит наполнять dataLayer данными, но не будет вставлять дубликат самого контейнера |
Сам плагин прямо подсказывает это в описании поля: «This should be only used in specific cases where you need to place the container code manually or using another tool» — то есть это официально задокументированный сценарий именно для случая, когда GTM уже стоит другим способом.
Почему это критично: если оставить On при уже имеющемся ручном коде — контейнер загрузится дважды на каждой странице, и GA4/Google Ads начнут считать вдвое больше событий и просмотров, чем есть на самом деле. Это одна из самых распространённых и в то же время самых незаметных ошибок в ecommerce-трекинге — цифры выглядят правдоподобно, поэтому проблему часто обнаруживают лишь спустя месяцы, сверяя доход GA4 с реальными продажами.
Container code compatibility mode
Влияет на размещение второй (<noscript>) части кода GTM. Если в предыдущем пункте выбрано Container code = Off — это поле не имеет значения (плагин ничего не вставляет). Если же выбрали On и сайт построен на Elementor — официальная документация плагина прямо советует ставить «Off (no tweak, right placement)», поскольку Elementor поддерживается нативно.
Шаг 3. Вкладка Integration → WooCommerce
Здесь включается сама логика ecommerce-трекинга.



Обязательные поля
Track e-commerce → включить. Это главный переключатель: без него WooCommerce никак не общается с dataLayer. Плагин сам подсказывает это в описании, если видит активный WooCommerce: «strongly recommended to enable this integration».
Clear ecommerce object before new event → включить. Это официальная рекомендация Google для GA4 dataLayer-реализаций: очищает предыдущий объект ecommerce перед каждым новым событием, чтобы данные с предыдущего шага воронки (например, товары из view_item) не «просачивались» в следующее событие (add_to_cart).
Поля, которые стоит оставить по умолчанию
- Products per impression (
10) — разбивает большие списки товаров на несколько событий, чтобы не терять просмотры при большом количестве товаров на странице категории. - Only track orders younger than 30 мин (experimental) — защита от повторного трекинга транзакции, если покупатель повторно откроет страницу «Спасибо за заказ».
- Do not flag orders as being tracked → оставить выключенным. Сам плагин предупреждает: включать только если действительно нужно, иначе растёт риск дублирования транзакций в аналитике.
- Google Ads Business Vertical →
Retail, если у вас обычный интернет-магазин.
Опциональные поля (не критичны для базового трекинга дохода)
- Cart content in data layer, Include full category path — полезны для персонализации сайта или детальных отчётов по категориям, но не нужны только для трекинга дохода/транзакций.
Include full category pathплагин прямо предупреждает может повлиять на скорость при большом трафике. - Customer data in data layer / Order data in data layer — это не про базовый ecommerce-трекинг дохода. Это подготовка данных для Enhanced Conversions в Google Ads (передача хешированного email покупателя для более точного мэтчинга конверсий). Очень полезно, если вы ведёте рекламу для сайта, но это отдельная задача — см. раздел ниже.
- Exclude tax from revenue / Exclude shipping from revenue — бизнес-решение: должен ли доход в GA4 включать налог/доставку (то есть соответствовать полной сумме заказа), или только «чистый» доход по товарам. Нет универсально правильного ответа — согласуйте с тем, кто сверяет финансовые показатели.
Шаг 4. Проверка dataLayer на живом сайте
После сохранения настроек — проверьте результат непосредственно в коде страниц (Ctrl+U), пройдя воображаемую воронку покупателя:
Страница товара — должно появиться:
dataLayer.push({"ecommerce":{"currency":"USD","value":358,"items":[{"item_id":591,"item_name":"...","price":358,...}]},"event":"view_item"});
Корзина с товаром (view_cart) и чекаут с товаром (begin_checkout) — аналогичная структура, но с другим event и полем quantity у товаров.
Важный нюанс: если вы проверяете корзину/чекаут без добавленного товара — никакого события не будет, и это нормально. GTM4WP намеренно не генерирует view_cart/begin_checkout для пустой корзины, чтобы не засорять аналитику фейковыми нулевыми транзакциями. Сначала реально добавьте товар в корзину, а уже потом проверяйте код страницы.
Событие purchase таким способом не проверить — оно срабатывает только после реально оформленного заказа (хук woocommerce_thankyou). Самый простой способ протестировать — оформить одно тестовое заказ на минимальную сумму или с купоном на 100% скидку.
Шаг 5. Настройка тегов в Google Tag Manager
Данные в dataLayer — это лишь половина пути. Google Analytics 4 ничего не получит, пока в самом Google Tag Manager нет тегов, которые слушают эти события и отправляют их в GA4.
Вариант А: вручную через интерфейс GTM
- Тег GA4 Configuration — тип «Google Analytics: GA4 Configuration», укажите ваш Measurement ID (
G-XXXXXXXXXX). Если на сайте уже есть прямойgtag.jsдля базовых просмотров страниц (вне GTM) — обязательно отключите галочку «Send a page view event when this configuration loads», иначе получите дубльpage_view. Триггер — All Pages. - Для каждого события (
view_item,add_to_cart,view_cart,begin_checkout,purchase) создайте: — триггер Custom Event с именем события, точно совпадающим с тем, что отправляет GTM4WP; — тег GA4 Event, ссылающийся на тег GA4 Configuration, с включённой опцией «Send Ecommerce Data» — тогда GTM автоматически прочитает весь объектdataLayer.ecommerce, вручную мапитьitems/value/currencyне нужно.
Вариант Б: импорт готового файла (быстрее)
Вместо ручного кликания всех 6 тегов и 5 триггеров, можно подготовить JSON-файл экспорта контейнера со всеми нужными элементами и импортировать его одним кликом:
Admin → Import Container → выбрать файл → выбрать рабочую область → вариант «Merge» (НЕ «Overwrite»).
⚠️ Важно выбрать именно «Merge», а не «Overwrite» — Overwrite полностью заменяет содержимое выбранной рабочей области только тем, что есть в файле, стирая всё остальное, что там уже могло быть настроено.
После импорта — обязательно проверьте результат в Preview mode GTM перед публикацией, а не публикуйте вслепую: пройдитесь по сайту (товар → корзина → чекаут) и в debug-панели проверьте, что каждый тег действительно срабатывает на своём событии.
Шаг 6. Публикация и финальная проверка
После Preview-тестирования — Submit → Publish в Google Tag Manager. В разделе Versions можно увидеть полный перечень того, что попало в новую версию:


Финальная проверка — убедиться, что опубликованные изменения реально раздаются на сайте прямо сейчас. Самый быстрый способ — загрузить публичный скрипт контейнера напрямую:
curl -s "https://www.googletagmanager.com/gtm.js?id=GTM-XXXXXXX" | grep -oE "gaawc|gaawe|view_item|add_to_cart|purchase" | sort | uniq -c
Если в ответе видите gaawc (GA4 Configuration) и gaawe (GA4 Event) рядом с названиями ваших событий — теги действительно живые и раздаются посетителям сайта, а не просто сохранены в черновике.
Последний шаг, который может проверить только владелец GA4-аккаунта, — открыть GA4 → Отчёты в реальном времени или DebugView, пройти по сайту как обычный посетитель и убедиться, что события view_item/add_to_cart/purchase действительно поступают с полями value, currency, items.
В нашем кейсе именно так и произошло — через несколько минут после публикации в стандартном отчёте GA4 «Количество событий по названию события» появились новые события с ожидаемыми параметрами:


Это и есть финальное доказательство: данные прошли всю цепочку от WooCommerce до отчётов GA4.
Бонус: если вы ведёте рекламу Google Ads для сайта
Базовый ecommerce-трекинг решает задачу «видеть доход в отчётах GA4». Но если агентство или владелец магазина ещё и ведёт рекламу в Google Ads, стоит отдельно настроить Enhanced Conversions — это существенно повышает точность атрибуции конверсий, особенно важно в условиях ограничений third-party cookies.
Коротко, что для этого нужно (отдельный этап, не смешивать с базовой настройкой):
1. Включить опцию «Order data in data layer» в GTM4WP — она добавляет в dataLayer на странице благодарности объект orderData, который уже содержит хешированный email покупателя.
2. Включить Enhanced Conversions в самом аккаунте Google Ads клиента.
3. Добавить в GTM тег Google Ads Conversion Tracking с режимом Enhanced Conversions, привязанный к полям orderData.
4. Убедиться, что этот тег срабатывает только при наличии согласия на ad_storage/ad_user_data (Consent Mode) — поскольку передаются персональные данные, даже в хешированном виде.
Типичные ошибки — короткий чек-лист
- ❌ Путать CSS-классы кнопок (
add_to_cart_button) с реальными событиямиdataLayer.push. - ❌ Оставлять ручной GTM-код включённым одновременно с автоматической вставкой от плагина → дублирование данных.
- ❌ Проверять корзину/чекаут без реально добавленного товара и делать вывод «не работает».
- ❌ Выбирать «Overwrite» вместо «Merge» при импорте контейнера в GTM.
- ❌ Публиковать изменения в GTM сразу, без проверки в Preview mode.
- ❌ Путать базовый ecommerce-трекинг с Enhanced Conversions — это разные задачи с разной целью.
Заключение
Полная цепочка «WooCommerce → dataLayer → GTM → GA4» состоит из трёх независимых слоёв, и каждый нужно проверять отдельно: генерирует ли WordPress правильные данные, правильно ли их ловит и отправляет GTM, и реально ли их получает GA4. Пропуск любого из трёх шагов — и в отчётах будет тишина вместо дохода, при этом будет казаться, что «всё вроде бы настроено».


