Tajný release GTM

Co se stalo s GTM 20. května 2024?

Autor: Jan Brzobohatý

Publikováno: 24. 6. 2024 | 4 minuty čtení

Používáte Google Tag Manager? Máte v něm i nějaké JavaScriptové kódy? Pokud ano, tak byste měli zpozornět a přečíst si tento článek. Máte v GTM hodně JavaScriptové logiky? V tom případě už jste velice pravděpodobně na tento problém narazili a tento článek vám jenom poskytne detailnější vysvětlení, co se to 20. 5. 2024 ve 21:00 sakra s GTM stalo.

Celý příběh začíná už kolem 7. 5. 2024, kdy Google začal propagovat novou verzi GTM na 5 % návštěvnosti. Pokud jste měli to štěstí, že jste v GTM neměli žádný JS kód, který by byl konfliktní s jejich změnou, tak se vás release nijak nedotkl. V horším případě se vám celé měření v GTM sesypalo. A v úplně nejhorším případě, se web kompletně zablokoval, protože se JS kód uvnitř GTM zacyklil.

Tento problém se opravdu špatně analyzoval a debugoval, protože se to dělo pouze v 5 % případů. Pustit první vlnu releasu na 5 % návštěvnosti je běžná Google praxe. Čeká se, jestli se někde něco sesype a až se zpožděním se dělá release na 100 % návštěvnosti. Celý tento mechanismus ale ztroskotal na tom, že Google žádný release neoznámil a ani zpětně ho dodneška nepřiznal. Ostatně ve svých oficiálních release notes eviduje poslední release v roce 2023.

Opravdový release na 100 % návštěvnosti přišel 20. května 2024 ve 21:00. A to je moment, kdy si toho teprve většina lidí začala všímat. Protože 5% úbytku na datech si ve webové analytice ve většině případů nešlo bohužel všimnout. My osobně máme na většině klientů nasazený alerting pomocí nástroje Waaila. To nám umožnilo na některých klientech odchytit problém už v případě prvního částečného releasu a dalo nám to určitý náskok, abychom zmírnili škody, které přišli pak s plným releasem. Bohužel ani tak jsme nebyli plně připraveni, protože jsme nevěděli, že to přijde, ani kdy to přijde. Co je špatně jsme si vlastně museli objevit sami.

A teď pojďme do detailu, kde byl ten technický problém.

Problém č. 1: “this”

Používání “this” jako reference kontextu aktuálního objektu je rozbité. Pokud v GTM proměnné vracíte objekt, který s “this” referencí pracuje, tak pravděpodobně nebude fungovat. Lépe to půjde vidět na příkladu níže. Nejdříve ukážu, že jednoduchý JS kód s používáním “this” reference v konzoli browseru funguje přesně tak jak má:

Zde je tedy všechno v pořádku. Nyní zkusím stejný případ replikovat v GTM. Vytvořím proměnnou:

A následně ji použiji v tagu:

A výsledek:

“This” reference vůbec nefunguje. Kontext se při použití přes GTM proměnnou nějak ztratil. Ukážu ještě příklad, jak můžu kód upravit, aby fungoval:

Výsledek:

Moje programátorské srdíčko u toho pláče, ale funguje to.

Problém č. 2: window scope

Globální kontext “window” se ztrácí. Vypadá to, že GTM z objektů začalo dělat kopie, místo toho, aby zachovalo odkaz na instanci objektu. Lépe bude vidět na příkladu níže.

Nejdříve ukážu v konzoli, jak by to mělo fungovat.

Finální objekt správně obsahuje oba parametry. Protože jsem celou dobu pracoval s jednou instancí objektu. A nyní příklad z GTM.

Vytvořím proměnnou:

A následně ji použiju v tagu a ještě zkusím objekt obohatit

Výsledek:

To vlastně nevypadá špatně že? Jenomže pozor, globální proměnná window.check, je úplně jiná instance než s kterou pracujeme v samotném tagu. Je to kopie.

Závěr

Nemůžu s jistotou říct, že jsme objevili všechny problémy, které s tímto releasem přišly. Je to závislé na tom, jaké JS konstrukty jsme používali. Klidně je možné, že problémů existuje více. A budu rád, pokud mě někdo doplní o další zjištění.

Je mi jasné, že teď už tento článek nikomu nepomůže. Ale spíš mě mrzí, že se na internetu o tomto problému nikde oficiálně nemluví a nerad bych, aby to vyšumělo. Z různých komunikací vím, že jsme nebyly zdaleka jediní, kterých se to dotklo. Dělat release bez varování nebo alespoň bez zpětného oznámení je za mě těžký IT hřích.

Zpráva pro Google: Milý Google, jestli mě tam nahoře slyšíš 🙏, prosím dej nám příště vědět, že plánuješ publikaci nové verze a co je její obsahem. Slibuji, že pak budu chodit do Google Cloud ⛪ minimálně jednou týdně.