Подключите Google Tag Manager к WordPress и получайте расширенный настраиваемый dataLayer для СМИ, блогов и цифровых изданий. Подробная аналитика поведения читателей и рост монетизации.
Поля dataLayer
Первоначальная настройка
Строк ручного кода
Бесплатно
Всё для продвинутого измерения контента
Автоматически формирует полный dataLayer: иерархия рубрик, теги, автор, формат, медиа и другое.
Настраивайте разделители, CSS-селекторы, какие поля dataLayer отправлять и значения скролла/времени, которые плагин отдаёт для настройки вовлечённости в GTM.
Помечайте записи как премиум и задавайте тип контента (тренд, сезонный или evergreen) в редакторе WordPress. Раздельная аналитика для монетизации и редакционных метрик.
Скачайте готовый контейнер Google Tag Manager, связанный с событиями dataLayer view_post_ready (первый push плагина) и read_post_ready (срабатывает в GTM при выполнении условий скролла и таймера), с маппингом в GA4.
Определяет медиа, время чтения, редактор и источник трафика без ручной настройки.
Оптимизированный код, валидация данных, security nonce и совместимость с WordPress.
1 Правило вовлечённости в примере контейнера: 30 с + 90 % скролла. Плагин также отправляет
gtm4pubs_event_scroll_percent и gtm4pubs_event_delay_ms в первом push, чтобы GTM совпадал с настройками WordPress.
Плюсы для контентных сайтов
Настройте и начните измерять контент за несколько минут, без технических сложностей.
Данные для решений по поведению и вовлечённости для каждого материала.
Плагин отправляет view_post_ready с настраиваемыми процентами скролла и задержкой. Настройте read_post_ready в GTM по этим значениям или своим правилам.
Усильте монетизацию данными в реальном времени о премиум-контенте и типе материала.
Интеграция с Google Analytics 4 и BigQuery для глубокого анализа эффективности контента.
Плагин генерирует всё автоматически — писать и поддерживать код вручную не нужно.
Работает с любой темой WordPress; подстройте CSS-селекторы под вёрстку.
Группа в Telegram: помощь, обмен опытом и связь с другими издателями.
Какой редактор даёт лучшую вовлечённость
Записи, созданные в Elementor
Записи, созданные в Divi
Записи, созданные в WP Bakery
Записи в нативном блочном редакторе
gtm4pubs_editor — обнаруженный редактор (elementor, divi, wp_bakery, gutenberg, other)
Как это работает на практике
{
"event": "view_post_ready",
"gtm4pubs_categories": "technology>artificial-inteligence|marketing>analytics",
"gtm4pubs_tags": "ai,chatgpt,productivity,tools",
"gtm4pubs_author_id": 1,
"gtm4pubs_post_id": 1234,
"gtm4pubs_format": "standard",
"gtm4pubs_multimedia": "image,video,gallery",
"gtm4pubs_word_count": 2500,
"gtm4pubs_reading_time": 13,
"gtm4pubs_publication_date": "2024-01-15",
"gtm4pubs_update_date": "2024-01-20",
"gtm4pubs_sticky": 0,
"gtm4pubs_origin": "category",
"gtm4pubs_event_scroll_percent": 90,
"gtm4pubs_event_delay_ms": 30000,
"gtm4pubs_access": "premium",
"gtm4pubs_type": "evergreen",
"gtm4pubs_comments_count": 45,
"gtm4pubs_editor": "gutenberg",
"gtm4pubs_related": 1
}
Этот dataLayer создаётся автоматически на каждой записи. Поля вроде gtm4pubs_type появляются, если параметр включён в настройках плагина.
Полный доступ без скрытых платежей
Навсегда
Ответы и примеры запросов BigQuery
Примечание: нужны WordPress 5.0+ и PHP 7.4+.
Важно: контейнер слушает view_post_ready и read_post_ready в dataLayer и передаёт параметры в GA4 (часто как view_post / read_post — по импортированным тегам).
gtm4pubs_type и т. д.). Маппинг — в конфигурационном теге GA4 или в пользовательских событиях. В комплекте — рекомендуемая схема.
read_post_ready (и тег GA4, если слушает это событие). Сверьте с gtm4pubs_event_delay_ms и gtm4pubs_event_scroll_percent из первого push dataLayer или задайте свои пороги.
GTM4Publishers рассчитан на совместную работу с другими плагинами тег-менеджера, с оговорками:
Примечание: плагин использует уникальные имена (gtm4pubs_*), чтобы снизить конфликты.
Да! Плагин сочетается с GA4 и BigQuery. После экспорта GA4 в BigQuery используйте поля dataLayer (рубрики, доступ, редактор и т. д.) для аналитики.
Ниже — примеры запросов BigQuery:
gtm4pubs_type)Запросы ориентировочные; подстройте под свой ресурс и схему.
view_post / read_post соответствуют тегам GA4 в примере контейнера; в dataLayer используются view_post_ready и read_post_ready до маппинга в GTM.
Какие рубрики дают больше вовлечённости и событий чтения.
SELECT
REGEXP_EXTRACT(event_params.value.string_value, r'([^>]+)$') as main_category,
COUNT(CASE WHEN event_name = 'view_post' THEN 1 END) as views,
COUNT(CASE WHEN event_name = 'read_post' THEN 1 END) as reads,
ROUND(COUNT(CASE WHEN event_name = 'read_post' THEN 1 END) * 100.0 /
COUNT(CASE WHEN event_name = 'view_post' THEN 1 END), 2) as engagement_rate
FROM `your-project.analytics_123456789.events_*`,
UNNEST(event_params) as event_params
WHERE event_params.key = 'gtm4pubs_categories'
AND _TABLE_SUFFIX >= FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY))
GROUP BY main_category
ORDER BY engagement_rate DESC
Сравнение вовлечённости премиум и публичного контента.
SELECT
event_params.value.string_value as access_type,
COUNT(CASE WHEN event_name = 'view_post' THEN 1 END) as views,
COUNT(CASE WHEN event_name = 'read_post' THEN 1 END) as reads,
ROUND(COUNT(CASE WHEN event_name = 'read_post' THEN 1 END) * 100.0 /
COUNT(CASE WHEN event_name = 'view_post' THEN 1 END), 2) as engagement_rate
FROM `your-project.analytics_123456789.events_*`,
UNNEST(event_params) as event_params
WHERE event_params.key = 'gtm4pubs_access'
AND _TABLE_SUFFIX >= FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY))
GROUP BY access_type
ORDER BY engagement_rate DESC
Какой редактор (Elementor, Divi, WP Bakery, Gutenberg) даёт лучшую вовлечённость.
SELECT
event_params.value.string_value as editor,
COUNT(CASE WHEN event_name = 'view_post' THEN 1 END) as views,
COUNT(CASE WHEN event_name = 'read_post' THEN 1 END) as reads,
ROUND(COUNT(CASE WHEN event_name = 'read_post' THEN 1 END) * 100.0 /
COUNT(CASE WHEN event_name = 'view_post' THEN 1 END), 2) as engagement_rate
FROM `your-project.analytics_123456789.events_*`,
UNNEST(event_params) as event_params
WHERE event_params.key = 'gtm4pubs_editor'
AND _TABLE_SUFFIX >= FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY))
GROUP BY editor
ORDER BY engagement_rate DESC
Вовлечённость по типу контента через gtm4pubs_type (вместо устаревшего gtm4pubs_evergreen в новых установках).
SELECT
event_params.value.string_value as content_type,
COUNT(CASE WHEN event_name = 'view_post' THEN 1 END) as views,
COUNT(CASE WHEN event_name = 'read_post' THEN 1 END) as reads,
ROUND(COUNT(CASE WHEN event_name = 'read_post' THEN 1 END) * 100.0 /
COUNT(CASE WHEN event_name = 'view_post' THEN 1 END), 2) as engagement_rate
FROM `your-project.analytics_123456789.events_*`,
UNNEST(event_params) as event_params
WHERE event_params.key = 'gtm4pubs_type'
AND _TABLE_SUFFIX >= FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY))
GROUP BY content_type
ORDER BY engagement_rate DESC
Источники трафика с наиболее вовлечёнными пользователями.
SELECT
traffic_source,
COUNT(*) as total_sessions,
COUNT(CASE WHEN event_name = 'read_post' THEN 1 END) as read_events,
ROUND(COUNT(CASE WHEN event_name = 'read_post' THEN 1 END) / COUNT(*) * 100, 2) as engagement_rate
FROM `your-project.analytics_123456789.events_*`
WHERE event_name IN ('page_view', 'read_post')
AND _TABLE_SUFFIX >= FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY))
GROUP BY traffic_source
HAVING total_sessions > 100
ORDER BY engagement_rate DESC
Сравнение медиаконтента по вовлечённости.
SELECT
event_params.value.string_value as post_type,
COUNT(CASE WHEN event_params.value.string_value = 'true' THEN 1 END) as has_video,
COUNT(CASE WHEN event_params.value.string_value = 'true' THEN 1 END) as has_audio,
COUNT(CASE WHEN event_params.value.string_value = 'true' THEN 1 END) as has_gallery,
COUNT(*) as total_posts,
AVG(read_time) as avg_read_time,
COUNT(CASE WHEN event_name = 'read_post' THEN 1 END) as total_reads
FROM `your-project.analytics_123456789.events_*`,
UNNEST(event_params) as event_params
WHERE event_name = 'read_post'
AND event_params.key IN ('gtm4pubs_has_video', 'gtm4pubs_has_audio', 'gtm4pubs_has_gallery')
AND _TABLE_SUFFIX >= FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY))
GROUP BY post_type, has_video, has_audio, has_gallery
ORDER BY avg_read_time DESC
Теги с лучшей вовлечённостью и темы, которые «заходят».
SELECT
event_params.value.string_value as post_tags,
COUNT(*) as total_posts,
AVG(read_time) as avg_read_time,
COUNT(CASE WHEN event_name = 'read_post' THEN 1 END) as total_reads
FROM `your-project.analytics_123456789.events_*`,
UNNEST(event_params) as event_params
WHERE event_name = 'read_post'
AND event_params.key = 'gtm4pubs_tags'
AND event_params.value.string_value IS NOT NULL
AND _TABLE_SUFFIX >= FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY))
GROUP BY post_tags
ORDER BY avg_read_time DESC
LIMIT 15
Как меняется вовлечённость по типу устройства.
SELECT
device.category as device_type,
COUNT(*) as total_sessions,
AVG(read_time) as avg_read_time,
COUNT(CASE WHEN event_name = 'read_post' THEN 1 END) as read_events
FROM `your-project.analytics_123456789.events_*`
WHERE event_name IN ('page_view', 'read_post')
AND _TABLE_SUFFIX >= FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY))
GROUP BY device_type
ORDER BY avg_read_time DESC
Реальный опыт издателей
"GTM4Publishers изменил нашу аналитику. За 5 минут появился полный dataLayer с данными, которых раньше не было."
"Премиум и тип контента в dataLayer помогли оптимизировать монетизацию. Данные очень точные."
"Готовый контейнер GTM сэкономил часы. Всё заработало с первого раза."
Обучение, консалтинг или персональная помощь, чтобы выжать максимум из GTM4Publishers и аналитики?
Плагин бесплатный; поддержка помогает тратить больше времени на:
Более продвинутая аналитика
Быстрее ответы и детальная помощь
Оптимизации и скорость
Любой вклад важен, даже самый маленький!
Сотни издателей уже получают пользу от GTM4Publishers