Close

Co je perzistence dataLayeru

18. 6. 2024

Při kontrolách či nastavování analytiky se občas setkáš se záludností, která potrápila již nejednoho analytika.

Jde o perzistenci dataLayeru. Potkáš se s ní především u jednostránkových webů, single page aplikací a tam, kde toho chceš na jedné stránce webu změřit více či něco měřit opakovaně.

Co je perzistence datové vrstvy

Perzistence vychází z toho, že dataLayer je vlastně JavaScriptové pole, což je perzistentní datová struktura. Jinými slovy jde o trvalou datovou strukturu, která si pamatuje předchozí stavy. V kontextu webové analytiky tato perzistence (trvanlivost) trvá až do okamžiku, kdy dojde k novému načtení stránky v prohlížeči.

Příklad problému s perzistencí

Představ si pro příklad situaci, kdy máš na e-shopu na stránce kategorie tento kód měřící zobrazení všech tří produktů na stránce:

U produktů je rovnou tlačítko na přidání do košíku, které spouští kód:

Protože běžně se do měření posílá vždy celý objekt ecommerce, tak při zobrazení stránky kategorie se s událostí view_item_list odešlou do analytiky údaje o všech třech produktech.

Při přidání produktu A do košíku se ovšem s událostí add_to_cart neodešlou informace jen o přidaném produktu A, ale o všech třech. Takže i když na webu přidáš do košíku jen produkt A, do analytiky se to propíše jako přidání do košíku produktu A, B i C.

Jak to? Po vykonání prvního kódu s eventem view_item_list totiž zůstává v dataLayeru pole items se všemi třemi produkty. Když se pak po přidání do košíku vykoná dataLayer push s událostí add_to_cart, tak ten v sobě obsaženými údaji o produktu A přepíše první pozici v poli items (kde je též produkt A), ale v poli items na druhé a třetí pozici zůstávají údaje o produktu B a C i nadále. A protože do analytiky se posílá celé pole items, odešle se tak s add_to_cart informace o A i B i C.

Pokud v tomto příkladě nepřidáváš do košíku produkt A, ale produkt C, tak by došlo ke změření přidání do košíku produktů C, B a C. První pozice v poli items totiž bude přepsána informacemi o produktu C, druhá a třetí pozice ale zůstanou nedotčené.

Proč je perzistence problém

Problém ilustruje již příklad v textu výše. Kvůli perzistenci se do analytiky mohou ukládat data jinak, než zamýšlíš.

A hlavně se tento problém velmi špatně odhaluje. V naměřených datech totiž uvidíme, že byly do košíku přidány všechny tři produkty, viz příklad výše. Na tom není na první pohled nic podezřelého.

Jak perzistenci řešit

1. Neustále do dataLayeru pushovat všechny hodnoty

Tak, aby žádná nezůstala prázdná. Pokud nemá smysl ji plnit, nastav ji na undefined. V případu výše by to tak znamenalo pushovat v poli items i druhý a třetí objekt jako prázdný objekt. Což je značně nepraktické.

2. Nullování hodnot

Preventivně než si do dataLayeru pošleš nové hodnoty, tak si jeho část vymažeš (programátorsky řečeno nastavíš na null). Díky tomu budeš mít jistotu, že žádné údaje z minulosti v dataLayeru nezůstaly a nově vložené hodnoty tak budou konzistentní.

Při implementaci ecommerce měření na webech tak před všechny dataLayer pushe s ecommerce daty přidávám ještě řádek

který celý objekt ecommerce vynuluje. Mám tak jistotu, že mi tam nic nezbude z předchozích pushů.

Finální kód tak vypadá např. takto:

Závěr

Perzistence dataLayeru může být záludný problém, který ovlivňuje přesnost dat v analytice. Správným nastavením a pravidelným nullováním hodnot v dataLayeru se můžeš tomuto problému vyhnout a zajistit tak, že analytická data budou přesná a spolehlivá.