← Вернуться к блогу
Поделиться

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

| 24 Июл 2026 | 10 мин чтения 0 просмотров
Как в 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» → Установить → Активировать.

Плагин GTM4WP в списке плагинов WordPress
Плагин GTM4WP после установки и активации — версия 1.22.4, автор Thomas Geiger.

Шаг 2. Настройка вкладки General

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

Вкладка General настроек GTM4WP
Вкладка General в состоянии «до настройки»: Container code = On, compatibility mode = Footer of the page (не оптимально для сайта на Elementor).

Здесь три ключевых поля:

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-трекинга.

Integration → WooCommerce, верхняя часть
Верхняя часть вкладки: Track e-commerce, Products per impression, Cart content in data layer, Include full category path.
Integration → WooCommerce, средняя часть
Customer/Order data in data layer, Exclude tax/shipping from revenue, Only track orders younger than, Google Ads Business Vertical.
Integration → WooCommerce, нижняя часть
Use SKU instead of ID, Fire view_item on parent product, Do not flag orders as being tracked, Clear ecommerce object before new event.

Обязательные поля

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 VerticalRetail, если у вас обычный интернет-магазин.

Опциональные поля (не критичны для базового трекинга дохода)

  • 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

  1. Тег 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.
  2. Для каждого события (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 можно увидеть полный перечень того, что попало в новую версию:

Страница Versions в GTM со списком опубликованных версий
Версия 5 опубликована — 6 тегов, 5 триггеров, 0 переменных.
Детали версии — перечень добавленных тегов и триггеров
Развёрнутый список изменений версии: триггеры CE — view_item/add_to_cart/view_cart/begin_checkout/purchase и соответствующие теги GA4 Event.

Финальная проверка — убедиться, что опубликованные изменения реально раздаются на сайте прямо сейчас. Самый быстрый способ — загрузить публичный скрипт контейнера напрямую:

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 «Количество событий по названию события» появились новые события с ожидаемыми параметрами:

Отчёт GA4 с количеством событий
`add_to_cart` уже фиксируется в GA4 вместе со стандартными `page_view`, `session_start`, `first_visit`.
Продолжение отчёта GA4
`begin_checkout` тоже поступает — воронка ecommerce-событий подтверждена вживую.

Это и есть финальное доказательство: данные прошли всю цепочку от 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. Пропуск любого из трёх шагов — и в отчётах будет тишина вместо дохода, при этом будет казаться, что «всё вроде бы настроено».

Фото аватара
Валерій Красько Spilno Agency Все статьи автора →
← Вернуться к блогу