Галоўная / Артыкулы

Як DataLayer у GA4 выявляе, чыргаваецца ваша аналітыка чыстая.

Пасвячаецца таму, як dataLayer супрацоўвае між веб-сайтамі, GTM і GA4, чаму простыя запускі падзеяў спакшваюць адчытанне даных пра электронную торгавлю, і як правільна структураваць і дыягноставаць запускі падзеяў.

Выдавец: REACTAPP.TOP12 хв чытання2645 слоў

Крыніцы: **The DataLayer Is the Most Important Thing in Your GA4 Implementation**

Усі захопляюцца панелямі дадзейнаў GA4. Майже ніхто не захопляецца дзесятьма рядкамі JavaScript, які вярнююць, чыры правду показвае тая панель дадзейнаў.

Уявіце сцэнарый, які ўсё паўтараецца ў маркетынговых командах па всім свету, з недзелы ў недзелю.

Хтось ачынае GA4. Ён пераканальваецца з лікама заўдання add_to_cart. Цяны сягаюць 4,200. У тым часе показнік доходу ў звятыне аб э-камерцыі дывным чынам близуе да нуля. Пачынаецца плутанне. Ствараецца тэма ў Slack. У канцы канцоў хтось пішае да „спецяліста з аналітыкай“. Ўжо той чалавек падозрюе, што сталася проблема, яшчэ не ачыніўшы нават Tag Manager.

Заўданне было выконана, але ў яго не было ніяных дадзенняў.

Эта проблема ёсць найчастэйшым абяканам у налаштаванні GA4, і, як бы то саблазнаўча, яна практычна не мае нічынаго спраўа з самым GA4. Асёлівая проблема знаходзіцца на адны ўрак нижэй, у простай масіве JavaScript, якую большасць пачаткунавцаў ведае па назыву, але рэдка калі разумее ў практыцы: dataLayer.

У этай частцы акцэнт ставіцца на гэты масів. Це не загальны апіс „налаштавання GA4“, а ўсё тое, што вялікая меры вабяць, чы роўна ваш весь процес збору даных є надзеяным, чы проста формальным.

Спачатку — карта

Перш чым пісаць які-небудзь код, корыстна пазначыць рэальны маршрут, які праходзяць вашы даны:

Веб-сайт

↓

dataLayer

↓

GTM (Google Tag Manager)

↓

GA4

Корыстны аналагія — замовленне ўжынку ў перапоўненай, шумнай рэстаране:

Веб-сайт — гэта кухня — месца, дзе адбываецца справжняя дзейнасць, напрыклад, калі кліент нажымае „Дадзіць у кошачку“.

dataLayer — гэта запіска пра замовленне, якую шэф прыклеюе да карточкі — яна нічога не гатовае, а проста фіксуе, што самэў было падготавлена, для каго і з якімі змянамі.

GTM — гэта сервер — яны чытаюць запіску, вяршаюць, якія станцыі (тэгі) патрабуюць інфармацыю, і перадаюць яе далей.

GA4 — гэта бухгалтерскі ўчёт ресторана — яны фіксуюць тое, што адбылася, але толькі на адной падставе таго, што фактычна было запісана ў отрыманай запісцы.

Якщо кухня проста ўсьміхаецца і кажа "Калісь хтось замовіў ўсё!" у кімнату без письмовага замовлення, аператар не мае нічога конкрэтнага, што мог бы передаць, і в кінцевым падсчытку фіксуецца порожній галочка заместо рэальнай транзакцыі. Гэты нечыткі крик — гэта саме тое, як у практыцы выглядае простая подія без параметраў. Замовленчы квитанцый — це дадзеныя, якія прагначаюцца через dataLayer — і ўсё гэта ператварае цяперашню структуру на справжню систему, а не на гру з дагадкамі.

Што такое dataLayer на самай працоўнай

Як толькі апусціць спецыялізаваную тэрміналогію, dataLayer — гэта проста масіва JavaScript, прыўязаная да window, у якую ваш сайт прагначае простыя об’екты. Гэта ўсё механізм. Не існуе жадной вбудованай з’ўязку з Google — прынеймна пакуль скрыпт контэйнера Tag Manager не прыўяжае до яго слухача.

Ініцыялізацыя зазвычай выглядае так: window.dataLayer = window.dataLayer || [];

Этае адна лінія рабіць нешто болей тонкае, чым здаецца. Яна не проста стварае новы масіў, знішчаючы все, што ўжо там ёсць — яна пераканаліваецца, чы існуе ўжо масіў, і ініцыялізуе новы толькі тады, калі яго няма. Гэты самы працоўны падхід не раз апомінавалі давгаракія практыканты GTM: якщо прызначаць значэнне для dataLayer безпосередна за дапамою звычайнага =, а не дадаваць элементы да яго, то ты таямна наражаешся на пашкоджэння механізма, ад якога залежыць GTM, адтолькі як завантажыцца скрыпт-контейнер. Зрабіць гэту памылку раз — і яе робіць практычна кожны — і ты можаш запрацаваць цэлы вечар, намагаючыся разбірацца з контэйнерам, які „проста не працюе“, без жадных памылак, якія моглы б паказаць на прычыну.

Пасля тагу GTM выконвае свой скрыпт на стороне сервера, ён падключаецца да методу push(). З таго момента кожны об’ект, які вы падаеце, пераводзіцца ў внутрэшнюя модель дадзейнаў GTM — структуру, якая фактычна керуе його зменнымі та трыгерамі. На практыцы GTM перестае актуальна зважаць на сам масіў дадзеных і усё больш стараецца за точку входу, чераз якую праходзі всі даны, падаецьцяя.

Чаму пачаткавіку важна знакомствацца з гэтым? Таму што гэта перакашталевае тое, што на самай працэ функцыя dataLayer.push() насправды значыць. Вы не "падаеце запіс пра адбыўшыся здарэнне да Google Analytics" — вы запісвалі структураваны, з пазначкай часу факт у сэрварной памяці вашаг сайту — такі, які будзе могаць выкарыстоўваць любы іншы инструмент пазней, чы то GTM, платформа для керування дадзеннямі кляўэнтав, піксель Facebook чы які-небудзь іншы аналітычны сервіс, які вы ўжо не адналежыце. GA4 — толькі аднама з багато такіх систем.

Чаму взагалі існуе dataLayer

Правыя запитанне, якіе можна задаць: чаму проста не запускать функцыю аналізу GA4 безпосередня ў працэсе выканання нарады onclick кнопкі? Людзі робілі самэ гэта працоўнае гады, калі analytics.js і gtag.js былі стандартным падходам. У вузкам сэнсе гэта працюе. Але гэты падход ўразламны самэ таму, што становіцца значымым, калі пачынаеш расшырваць проект.

dataLayer існуе, каб раз’яўліць два элементы, якія ніколі не должны быць тычуцца адзін з другім: тае, што на самай працэ падарылася на сайте і які самэ інструмент аналізу ў тым моманцы працюе.

У сваім сутнасці dataLayer прагне зберагчы ўсю інфармацыю, яку вы хочаце перадаць з вашага сайту ў будзь-які падключаны інструмент — прычына його існавання заключаецца ў тым, што выкарыстоўванне тых сабе ж дадзенняў безпасэродзе з маркапа стораніцы є ненадзейным, адколі гэты маркап можа змяніцца з прычын, якія не маюць нічынага стосунку да відстэйкання. Іншымі словамі, ваша команда прадукту должна маты свабоду перадзеяслаць кнопку „Да кошыка“, зменіць ўжоўванне её класу чы сховаць яе ў модалным вікні, а ваша система відстэйкання не должна гэта бачыць чы перакуплявацца — таму што ёй ніколі не было чытаць саму кнопку. Яна чытала спецыяльна, ясна напісаны апіс пра тое, што выйшло.

Это ўсходнікавы контраст между выкарыстаннем сілы для адчынення інфармацыі з сторанкі та простым отрыманнем фактов безпосередна. Сіловы падход зьламваецца ў той момент, калі структура сторанкі змінюецца. Падход, калі факты даўаюцца безпосередна, вытрымае перэзработкі, тэсты типу A/B, міграцыі фреймворкаў та змену персоналу, адтуды што даговор палягае ў самай передачы інфармацыі, а не дзе-небудзь у DOM.

Тепер код, які ўсё зменяе

Ось як описваецца гэтая передача інфармацыі ў аналізе:

Пораўняйце гэта з тым, калі новачак зазвычай дзеяў: падключае тэг GTM адразу да запуску эвенту кліка, зьвяршэнне аб’екта dataLayer, пры чым трыгар практычна гаворыць: "калі хтось нажме на гэты кантакт, запусці тэг add_to_cart у GA4."

На першы погляд, оба методы здаюцца такімі, які «ствараюць запуск змагання add_to_cart». Адкрыўшы звіт у рэальны час апранты GA4, можна пабачыць ідэнтычныя рядкі з абазаванням add_to_cart у кожнам случае. Самэ гэта і робіць разліку межа ўсімі іхнімі рызыкамі: гэта залишаецца непазорным, пакуль хтось не практыкуе выкарыстоўваць цыфры, якія павінны былі супроваджваць гэта змагання.

Ось рэальны контраст, расказаны дакладна:

Чыста правда, гэтае адно табло ёсць сутністю всіго гэтага сконцанаванага матерыялу. Змагання без прыўязаных параметраў — гэта проста абазаванне без нічога, што магло б яго падтрымаць. Гэта разліка межа свідкам, який кажа «чыго-то сталася», і тым, хто кажа «чырвоны седан праяжджыў на жоŭлтай у 4:12 па вечара». Толькі другая версія мае значэнне ў судзе, і толькі другая версія дапамагае людзям у канферэнц-зале вырашыць, чы рэальна продуктавая лінейка яшчэ заслуговае на фінансаванне.

Падзея проты параметра: граніцы, якія плутаюць пачаткавікі

У модэлі GA4 кожны запуск несе самэль толькі аднае назва падзей (add_to_cart), а таксама, як толькі гэта зраблена правільна, набор параметраў падзей (product_id, product_name, price і т. д.).

Падзея паведамляе вас, якая категорыя дзейства адбылася. Параметры паведамляюць вас пра конкрэтныя деталі гэтага дзейства.

Пачаткавікі часта спрыягаюць назву падзей як даўжынную інформацыю. Гэта не так; гэта толькі загалоўка. Сама назва add_to_cart практычна нічога не паведамляе: ні пра які іменно артыкул, ні пра його цэну, ні пра кошачку чы сяброўскую валюту, ні пра тое, чы дзейство пачалося на старонцы пошуку чы ў ролікавым прадставленні супаўзялых артыкулаў. Усе гэтыя відпаведзі знаходзяцца ў параметрах, і ні адна з іх не падае автаматычна — GA4 не мае можлівасці сама выважваць, здагадвацца чы абрабатваць гэю інформацыю.

Это таксама пояснюе, чаму простая "стварэнне запуску" за дапамою відпаведных магічных інструментаў GTM, без налаштавання якіх-леба змэнных, дае результат, який выглядае завершаным, але фактычна ўстаўлены ў порожній формат. Запуск вядзецца, у звярненні паказваецца адпаведны рядок, і всё здаецца нормальным, пакуль хтось не запытае пра сярэжнюе значэнне цены айтэнаў, якія былі даданы ў кошачку, минулага месца — тады важка ўжо чамусь адпавесці.

Даныя е-камерцыі: дзе ігнораванне гэтага стае немагчымай

Звычныя запісі дзеяння, такія як перегляды сторанак, відстэйванне прасування або звычныя клікі, могу існаваць з некалькома менш деталізаванымі данымі. Дзеяння ў сфере е-камерцыі так не можуць. Усё адзыўленне па рынку е-камерцыі ў GA4, якое включае дохады, колькісць переглядоў тавароў, спявазанне колькісці тавароў у кошыку і колькісці пакупак, а таксама эфектыўнасць кожнага тавару, залежыць ад дзеянняў такіх як add_to_cart, view_item, begin_checkout і purchase, якія маюць належна структураваны массив items плюс параметры на рэвалюцыі транзакцый.

Якщо падынак пакупкі ў dataLayer не мае массива items, які мячы item_id, item_name, price і quantity для кожнага пункта, то GA4 не будзе таямна запэўніваць гэты прыём. Яго звяртанні пра е-камерцыю пакажуць нулі і порожнія ячэйкі прымусова побачныя ля колькасці транзакцый, якая явна не ў нуле. Гэта конкрэтная несувязанасць — транзакцыі зафіксаваны, аднак дохад гэтаму няма — ўваходзіць у числе найчым больш заўважваных проблем у налаштаваннях GA4, і гэта практычна завжды выкалікаецца ад однаго: непূরнага об’екта, які падаецца ў dataLayer.

Самэ гэтая прычына, чаму адурыснелыя рэалізацыі выкорыстоўваюць шэму ecommerce dataLayer, заданую Google, замест таго каб ствараць савастныя назвы поль. Гэта не проста бюрократыя; гэта спакоўны язык, які ўзаемна розумеюць ваш сайт, вбудованыя е-камерчыя зменныя GTM і атласы е-камерцыі GA4. Як толькі вы адхіліцеся ад гэтай шэмы — напрыклад, назваце поль item_price замест price або размістыце об’ект на адны ўрадзень глыбэй, чым трэба — вбудованыя зменныя проста не зможуць знайсці вашыя значэнні, нават якщо даныя тэхнічна знаходзяцца там.

Спецыяльныя зменныя: як прымусіць GTM правильна чытаць вашы запускі

Калі інфармацыя правильна чынамен падае ў dataLayer, GTM все рава патрэбны інструкцыі пра тое, дзе яе шукать. Гэта задача Зменнай слоя дадзенаў: адзінае пазначэнне, якое кажа GTM шукаты заданы ключ, напрыклад price, у тым об’екте, який ўжо быў дадан, і перадаць гэтую значэнне будзь-ям тагу, які яго запрашвае.

Калі ў dataLayer дадаёцца якая-небудзь інфармацыя, GTM не скануе сам массив, каб заполніць зменны. У замест на гэта ён чытае зі свайго внутраняга модэля дадзенаў, які запоўняецца на адповеднасць таму даданню. Зменны слоя дадзенаў апісваюць гэты внутранні модель, а не сам массив напрацо, што захоўвае правільную рэзалюцыю зменных GTM, калі іншы скрыпт пазьней пераранжуе або заменяе той массив.

Практычнаю аспекту, гэта значыць, што для кожнага поля, якое вы перадаеце — такога як product_id, product_name і price — чалавеку з правамі на доступ да контейнера GTM неабяжна стварыць адпаведную зменную Data Layer і пасля тага прысваяць яе відпаведнаму параметру ў таге з івентам GA4. Якщо прыхіліцца да гэтага крока, не будзе значэння, насколькі рэштычна была ваша перадача дадзенняў у dataLayer: GTM все равно запускае івент так, як было задана, але не перадае жадных дапаможных дакладнасцей, проста таму, што ніхто не сказаў яму, калькі поля трэба запрашваць.

Гэта вось другі момент, адразу пасля слабкай чы ўсёўнейшай перадачы дадзенняў, калі команды часта трапляюцца ў ситуацыі, калі вони трапляюцца без дадзенняў: правільна створаная перадача дадзенняў у dataLayer, але таг GTM, які ніколі не быў налаштаваны на ўсё-такі чытанне з яго.

Дэбаггінг: як насправдзе пераканацца ў всім гэтым

Ніколы не верыце без пераканалення, што ваш dataLayer выконвае тое, каля чаго вы гадаеце. Спазірваўце, як гэта відбываецца. Два інструмента робяць гэта простым:

  1. Режым адгляду GTM. Ён паказвае кожную тэг, якая была запусканая, кожны трыгер, які быў пераканалены, і, што найважнейшае, кожны запуск dataLayer па порядку, пры чым весь змест кожнага об’екта можна розгледзець. Якщо цена не паказана ў запуску, які тут адображаецца, яна ніколы не патрапіць у GA4, і жадныя змены ў налаштаваннях GTM не зможуць змяніць гэты результат.
  • Кансоль прыявальніка. Якщо запісаць dataLayer безпосередня ў DevTools, то будзе паказаны жывы масіў у той самы порядку, у яком выйшлі звантажэння. Це дазволяе точна бачыць, што ваш сайт перадаў прыявальніку, абсалютна незалежна ад GTM, што ўжо сама по сабе мае вялікую цэннасць для выявлення таго, чыі проблема выйшла ў верхней частці ланцоўка (сайт ніколі не перадаў правильных значэнняў) чы ў ніжней (GTM прапанаваў правильныя даны, але неправільна іх працаваў).
  • Хорашая прыкмета, яку трэба вырабіць: перш чым припускати, што GTM не можа "відстежыць каштовнасць", спачатку перагляньце кансоль і разгледзіце dataLayer. Якщо замовлення ніколі не было выдана, нельга звычайна караць кухню за тое, што яна не приготавала ўжынку.

    Існуе ўжо адна, менш зрозумелая прычына паталогій пад час дэбаггінгу, якую варта адзначыць: внутрэшняя модель дадзейнаў GTM зберагае толькі пасляпэўнюю значэння, якія былі адправлены для будзь-каго заданага ключа. Таму, якщары два адналежнія скрыпты на той самый сторонце адправляюць суперсучасныя значэння пад ідэнтычным ключам прытым, калі ваш таг ўжо не запускаецца, той скрыпт, які працюе пасляўней, тыхо заменяе іншы. Гэта частая прычына таго, што стежэнне працюе нормальна пад час тэставання, але не працуе ў рэальных умовах, зазвычай таму, што якісь трэція-сторонній скрыпт, які не належыць вам, адправляе свае сабеўласныя дадзеныя пасля вашых.

    Якосьць дадзейнаў: та частка, якая насправды захоцьчае бізнес

    Усё, пра што гаворылася даўжэй, існуе для адной меты: стварэння дадзейнаў, якія будуць достатна надзеянымі, каб на іхней адной можна было заснаваць рэальныя рашэнні.

    „Заўжды вярцайтесь да .push() з dataLayer.“ — Сімо Ахава, эксперт Google Tag Manager

    Это вузкая тэхнічная правіла, але яна відбіваець штось большае. Наладжэнняя аналітыкі рэдка калі зламваюцца заодно. Яны поступова разрушаюцца — адна несувярэнная клучоўка чы адна працягнутая польцо за раз — пакуль звіт, які раней быў надзеяным, проста перестае якім быць, часта без таго, каб хтось зазначыў точны момент гэтага.

    Некалькі практык разлічаюць рэалізацыю, па якой можна фактычна ствараць звіты, ад той, якая выглядае функцыональной:

    • Адносованая назывка. Якшо польцо сёньдзе называецца product_id, пасля наступнага спрінту — productId, а пазнейшыя перапісвы — item_id, у рэзультате застаюцца тры несумісныя перыяды дадзеных, якія нельга з’еднаць у аднам запытэ.
  • Абсалютна неабяцковасць павінных полей. Якщо цэна іноды прыводзіцца як строка, напрыму "65000", а іноды як число, напрыму 65000, вашы расчыткі доходу будуць некоректныя, прычаму чаго не будзе явных парадоксаў.
  • Адны власнік на адну схему захода. Чыста выявіце, калі самэй фронтэнд-команда, а калі бэкэнд-команда несе адпаведальнасць за структуру dataLayer, запішыце гэта і кераваце змянамі ў яй так, як керуеце змянамі ў даговоре API, таму што функцыянальна гэта самэе так і ёсць.
  • Перакананне паеўнай перапрацоўкі. Перад запускам абавязкова перагляньце режым прадвароту, а потым DebugView у GA4, а не за тыя ж недзелі, калі хтасьць з заўяжаных сторон запытае, чаму паказнікі з минулай недзелі не такія, як трэба.
  • Рассматрэнне якосці дадзеных як простай пункт пераканальнага каскаду адхоўляе сэрцавую частку проблемы. Гэта больш супамінаеся з системай водапрацоўкі: калі все працуе правільна, гэта не зазначаецца, а калі выйшла проблема, гэта становіцца вельмі пометным і дужа дорогім.

    Вывад

    Праўыя прычыны плутання не ў GA4 і не ў GTM, хоць заўсёды звалачуецца віна на іх. Усё спраўа ў простым пытанні: чыі веб-сайт калі-небудзь чыста фіксаваў тое, што на самай працэ падарылася?

    Выкліканне методу dataLayer.push({ event: "add_to_cart", ... }) — гэта не дробны тэхнічны детал, і гэта нельга заменіць простым перайшчым праз мастер на налаштаванне GTM і вважаннем, што робота завершана. Гэта разлік межу падпрыемствам, якое можа точна сказаць, што зрабілі яго кліянты і сколькі коштавала тая дзеянне, і падпрыемствам, якое можа толькі паздрыгнуць плячыма і сказаць, што ўсё гэта падарылася чатырнаццаць тысяч дваста разоў, не ведаючи чаго саме.

    Панелі керування знаходзяцца нижэй у ланцоўке. Саме ў dataLayer спачатку запісваецца правда, або прыбліжныя даны, якія ёю заменяюцца.

    Калі наступны раз здаецца, што звёсткі з GA4 не сходзяцца, прыпініце викорыстоўвання інтэрфейса GA4. Ачыніце консоль, увімкніце dataLayer і самі прачытайце запіс.