Má fascinace trackerem Colpirio stále pokračuje a je zde pokračování analýzy po necelých dvou měsících od prvního dílu.
Tracker se nám dosti rozrostl o další integrace, nalezl jsem 3rd party cookies na serverech, kde bych je vůbec nečekal a také jsem objevil několik nebezpečných konstrukcí v implemnetaci trackeru, které by teoreticky mohly poškodit některé weby.
Pojďme se na druhou várku zvláštností tohoto trackeru společně podívat.
Tracker Colpiria, nad kterým dělám tuto analýzu, si můžete stáhnout zde: dmt-viv_2016_10_25.
Integrace s dalšími weby
Novinkou oproti zářijovému vydání tvoří nové integrace.
GooglePlugin
Uvnitř samotného trackeru Colpiria je nově celá řada integrací s GoogleAnalytics pro několik společností.
window._dmt.addPlugin(new DeepMind.GooglePlugin.Plugin([ new DeepMind.Sites.Nakupvakci, new DeepMind.Sites.Drmax, new DeepMind.Sites.Slevadne, new DeepMind.Sites.Answear, new DeepMind.Sites.Sconto ]))
- https://www.drmax.cz/
- http://www.slevadne.cz/
- https://www.nakupvakci.cz/
- http://answear.cz/
- https://www.sconto.cz/
Zajímavé je, že na některých webech Colpirio tracker ještě není, takže nejspíše čekají na integraci.
- DrMax – nemá k 25.10.2016
- Nákup v akci – nemá k 25.10.2016
Účel těchto scriptů je z DOM konkrétní stránky scrapovat data o produktech a nákupním košíku. V praxi to vypadá následovně:
Script scrapující sconto.cz
var DeepMind; ! function(e) { var t; ! function(t) { var n = function(e) { function t() { e.apply(this, arguments) } return __extends(t, e), t.prototype.register = function(e) { if (window.location.pathname.indexOf("produkty") > -1) try { var t = {}; t.item = document.getElementById("cartFormProductId").value.toString().toLowerCase(), t.price = parseInt(document.getElementsByClassName("retail-price")[0].getElementsByTagName("td")[1].innerHTML.replace(new RegExp([" "], "g"), "")), t.brand = "", t.category = document.getElementById("navig-path").getElementsByTagName("a")[document.getElementById("navig-path").getElementsByTagName("a").length - 1].title.toString().toLowerCase(), e.push(["trackEvent", "Ecommerce", "Product", "View", t]) } catch (n) {} else if (window.location.pathname.indexOf("kosik") > -1) { var i = [], r = [], o = [], a = 0; try { document.getElementById("basket-content-table").childNodes[1].childNodes.forEach(function(e) { if ("undefined" != typeof e.nodeName && "tr" === e.nodeName.toLowerCase() && "undefined" != typeof e.className && "" == e.className) { i.push(e.getElementsByClassName("td-add-pcs")[0].getElementsByTagName("input")[0].getAttribute("productid")); var t = e.getElementsByClassName("td-add-pcs")[0].getElementsByTagName("input")[0].value; r.push(t); var n = parseInt(e.getElementsByClassName("cart-product-price")[0].innerHTML.replace(" ", "")); o.push(n), a += t * n } }), _dmt.push(["trackEvent", "Ecommerce", "Cart", "Update", { items: i, quantity: r, prices: o, total: a }]) } catch (n) {} } }, t }(e.Plugin); t.Sconto = n }(t = e.Sites || (e.Sites = {})) }(DeepMind || (DeepMind = {}));
Data o produktech na sconto.cz
Na stránce https://www.sconto.cz/produkty/konferencni-stolek-venta.html se odesílá:
https://tr.feynmanhopeful.eu/ecommerceproductview
{ "pageview": 1477426015, "timestamp": 1477426016, "useragent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0", "referrer": "https://www.sconto.cz/", "url": "https://www.sconto.cz/produkty/konferencni-stolek-venta.html", "PWID": "08b112d50016598c", "BBID": "BBID-01-01243955516874739", "value": { "item": "4690742417410100", "price": 1149, "brand": "", "category": "konferenční stolky" } }
Na stránce https://www.sconto.cz/kosik/ se odesílá:
https://tr.feynmanhopeful.eu/ecommercecartupdate
{ "pageview": 1477426088, "timestamp": 1477426088, "useragent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0", "referrer": "https://www.sconto.cz/produkty/konferencni-stolek-venta.html", "url": "https://www.sconto.cz/kosik/", "PWID": "08b112d50016598c", "BBID": "BBID-01-01243955516874739", "value": { "items": ["4690742417410100"], "quantity": ["1"], "prices": [699], "total": 699 } }
Ostatní integrace
To samé se děje u všech ostatních scriptů, nebudu to zde dále rozebírat, kdo chce, sám si může provoz z analyzovat třeba v Charlesovi. Níže ukázka, kolik probíhá volání při načtení jedné stránky slevadne.cz na tracker Colpiria. Cca 19 requestů.
Economia
Scripty, které něco dělají s economia_uid a tracking-uid jsme tu měli již v předchozím díle, ale jak pracují, to jsem nezjistil, pouze informaci, že integrace Centrum a iBillboard je v blízké době v plánu. To bylo září 2016. Nyní je již integrace v provozu, tak co dělá?
Prvně jsme si toho všiml na webu Hypoteční banky, kde jsem nalezl 3rd party cookies centrum.cz. Vzhledem k tomu, že jsem na Hypoteční bance nastavoval snad všechny integrace analytických a remarketingových nástrojů, tak o centrum.cz nic nevím. To mi přišlo divné.
VT (to bude asi VIV TRACKING) a CPEXSAPS (to bude ta integrace, o které mluvil Matěj).
mid (tipl bych si že to je Marketing ID), ale co znamená?
Mažu cookies a zkoumám, co dělá server centrum.cz když se na něj poprvé přihlásím.
Z domény uid.centrum.cz mi přichází cookie
Což je překvapivě to, co zajímá Colpirio tracker.
var DeepMind; ! function(e) { var t; ! function(t) { var n = function(t) { function n() { t.apply(this, arguments), this.cname = "tracking-uid" } return __extends(n, t), n.prototype.register = function(e) { this.fetcher(e) }, n.prototype.fetcher = function(t) { var n = this, i = e.Utils.getCookie(this.cname); return "" !== i ? void t.push(["trackData", "economia_uid", i]) : void setTimeout(function() { return n.fetcher(t) }, 1500) }, n }(e.Plugin); t.Economia = n }(t = e.Sites || (e.Sites = {})) }(DeepMind || (DeepMind = {}));
Více scrapování dataLayeru
V prvním díle mě nejvíce zaráželo automatické scrapování objektu window.dataLayer. Nově je zde detekce objektu:
window.dataLayerEtn
dataLayerEtn je například na stránkách drmax.cz, kde jsme již v úvodu rozebírali přítomnost GooglePluginu. Přídomek Etn odkazuje na (asi) tvůrce webu, tedy společnost Etnetera.
Nezodpovědné zacházení s window scope
Úvodní loader, popsaný v prvním díle, velmi neopatrně zabírá jmenný prostor hlavního objektu window.
var d = document, g = d.createElement('script'), s = d.getElementsByTagName('script')[0]; g.type = 'text/javascript'; g.async = true; g.defer = true; g.src = 'https://cdn.feynmanhopeful.eu/dmt-viv.min.js'; s.parentNode.insertBefore(g, s);
Chybí zde jakýkoliv wrapper, tedy např self-invoking funkce, která by zabránila přetečení proměnných d,g,s do window scope.
Pokud byste například měli na svých stránkách Adobe Analytics, právě jste díky Colpirio trackeru pravděpodobně přišli o svá data, jelikož Adobe Analytics obvykle zaujímá jmenný prostor s, který vám Colpirio zlikviduje svým trapným loaderem.
Správně by měl loader vypadat například takto:
(function(){ var d = document, g = d.createElement('script'), s = d.getElementsByTagName('script')[0]; g.type = 'text/javascript'; g.async = true; g.defer = true; g.src = 'https://cdn.feynmanhopeful.eu/dmt-viv.min.js'; s.parentNode.insertBefore(g, s); })();
Všimněte si té self-invoking funkce, která slouží jako wrapper.
(function(){ ... })();
Čiší z toho čistý amaterismus!
Proč mi Colpirio stále tolik vadí?
- vykrádání dataLayeru
- neošetřené proměnné (chyby v integracích, window scope)
- nehospodárnost (desítky volání, mnohdy naprosto zbytečných)
- dvojitý loader
- netransparentnost
- zvláštní integrace
Na to, jak je Colpirio všude vychvalováno, ambicemi chce konkurovat Google, zaměstnává lidi z CERNu, Akademie věd, Seznamu a dalších, tak jejich tracker stojí za starou bačkoru.