Náš miniseriál o fiktivním internetovém obchodě a měření jeho statistik pomocí cookies pokračuje: dnes si ukážeme, jak touto technologií můžeme jednoduše zjistit, které z odkazů rozmístěných na vyhledávačích, výměnných bannerových systémech, spřátelených stránkách apod. nám vydělaly nejvíce peněz, a které jsou naopak (aspoň z hlediska obratu) bezcenné.

V angličtině se pro podobné odkazy používá termín „referrals“ a jejich princip je poměrně prostý – namísto jednoduchého odkazu uvedeme na příslušném portálu odkaz ve tvaru http://www.nas_server.cz/dealers.asp?id=123456, který vede na stránku se serverovým skriptem, jenž už si například pomocí objektu „Session“ pohlídá, zda a co si u nás zákazník, který přišel od serveru s číslem 123456 objednal.

Toto řešení má své výhody, přinejmenším v tom, že je řešením standardním, mnohdy nám ale postačí jednodušší technika – zejména v následujících případech:

  • pokud nemáme možnost využívat serverové skripty: ne každé internetové stránky mají vlastní na míru programovaný internetový obchod a přesto mohou prodávat zboží prostřednictvím jednoduchého formuláře – avšak i když takto prodáváme pouhé dva druhy vařeček, určitě nás bude zajímat, zda nám více „sype“ odkaz na Seznamu nebo třeba na serveru VseProKuchyni.CZ
  • Pokud si nemůžeme dovolit příliš zatížit server: každé volání ASP či PHP zatěžuje server určitě víc, než prosté HTML s JavaScriptem, běžícím navíc na straně klienta – a pokud prodáváme vařečky na nějakém „zadarmo“ serveru, který už sám o sobě nevyniká rychlostí, můžeme takto rychlosti svých stránek trochu pomoci, či aspoň neuškodit
  • Nechceme-li zdržovat návštěvníky před otevřením titulní stránky: mnoho webmasterů považuje za netaktické hned první stránku generovat pomocí skriptu – jednak zatěžujeme server (viz předchozí bod) tak trochu zbytečně i kvůli návštěvníkům, kteří přišli omylem a hned naši stránku opouštějí, za druhé se stránka generovaná skriptem natahuje déle – je tedy trochu hazardérské laškovat s trpělivostí návštěvníka dříve, než se mu zobrazí aspoň nadpis, jak ho rádi vidíme (a kolik stojí jedna vařečka)

Tolik trocha nezbytné reklamy na začátek (naopak, že JavaScript nepodchytí každého návštěvníka, snad ani není potřeba čtenářům Interval.cz zdůrazňovat), nyní k samotnému řešení:

Princip je vcelku jednoduchý – prostý odkaz na stránku www.nas_server.cz nahradíme přímým voláním titulní stránky (pozor na záměnu index.htm a default.htm), doplněným o záložku, přičemž jméno záložky je právě ID daného portálu. Celý odkaz tedy vypadá například takto: www.nas_server.cz/default.htm#123456.

Nutnou podmínkou samozřejmě je, že na titulní stránce žádnou záložku s tímto jménem definovánu nemáme. Prohlížeč (aspoň dva nejznámější prohlížeče) se zachová tak, jak se nám to přesně hodí: skočí na titulní stránku, a jelikož příslušnou záložku nenajde, zůstane na horním okraji stránky, jako by žádná záložka v odkazu definována nebyla.

Nyní je snadné zjistit pomocí JavaScriptu celou adresu naší stránky, tak jak je uvedena v odkazu, tedy včetně záložky, poté číslo záložky (ID dealera) z řetězce „odpreparovat“ a umístit je do cookie, kde bude čekat na svou chvíli:

idref = 1
if((index = location.href.indexOf("#"))!=-1) {
    var pomstr = location.href.slice(index+1)
    if( pomstr.length > 0 ) {
        idref = Math.ceil(pomstr)
    }
}
if (MyCookie.Read(‚Referral‘) == null ) {
    MyCookie.Write(‚Referral‘, idref, 14 )
}

Ve chvíli, kdy potřebujeme ID dealera dostat na stranu serveru (typicky při odesílání objednávky), využijeme skrytého pole formuláře, které pojmenujeme například „dealer“:

<input type="hidden" name="dealer" value="0">

Dále je naplníme je z cookie hodnotou, již jsme získali na titulní stránce (následující skript musí být uveden až za definicí formuláře; předpokládáme, že formulář se jmenuje „objednavka“):

if ((idref=MyCookie.Read(‚Referral‘)) != null ) {
    document.forms["objednavka"].dealer.value = idref
}

Pro zápis/čtení z cookie využíváme jako vždy pomocného objektu MyCookie:

var MyCookie = {
    Write:function(name,value,days) {
        var D = new Date();
        D.setTime(D.getTime()+86400000*days)
        document.cookie = escape(name)+"="+escape(value)+
            ((days == null)?"":(";expires="+D.toGMTString()))
        return (this.Read(name) == value);
    },
    Read:function(name) {
        var EN=escape(name)
        var F=‘ ‚+document.cookie+‘;‘, S=F.indexOf(‚ ‚+EN);
        return S==-1 ? null : unescape(     F.substring(EN=S+EN.length+2,F.indexOf(‚;‘,EN))    );
    }
}

Poznámky

Skript je navržen tak, aby návštěvníkům, kteří přišli mimo „ozáložkované“ odkazy, přiřadil implicitní číslo dealera 1. Naopak návštěvníkům, u nichž nebylo možno zjistit, kudy přišli (vypnutý JavaScript, potažmo cookies), je přiřazeno číslo 0.

Proč místo jakéhosi ID dealera nepoužijeme, když už máme k dispozici JavaScript, přímo konstrukci document.referrer? Důvody jsou opět dva: za prvé informace obsažená v document.referrer nemusí být zrovna čitelná a dokonce se může lišit, a to podstatně, i u odkazů z jednoho a téhož portálu v závislosti na tom, zda nás návštěvník našel pomocí např. fulltextového vyhledávání či přímo přes katalogové zatřídění, druhým důvodem je nepoužitelnost document.referrer u výměnných bannerových systémů – a teď mám na mysli konkrétně Mr.Lin(x): document.referrer nám totiž vrátí adresu, kde se banner výměnné sítě zobrazil, nikoliv to, že se zobrazil právě touto sítí – a co je nám platná statistika deseti prodaných vařeček ze stránek nasenovakuchyne.cz, když už si po roce nevzpomeneme, zda-li jsme na těchto stránkách náhodou nevykorespondovali svůj stálý odkaz, nebo že se tam octl na jen dvě minuty prostřednictvím bannerové kampaně…

Použití cookies má jednu podstatnou výhodu – zadáním délky uložení cookie na disku klienta můžeme přímo modifikovat hodnotu tzv „return days“ (zde nastaveno na 14) – tedy přiřadit správně konkrétní prodej konkrétnímu dealerovi i v případě, že přes jeho stránky zákazník jednou klikl, nic si napoprvé nekoupil, nicméně seznámil se s naší nabídkou, po týdnu si však vše rozmyslel a vrátil se, tentokrát už přímo napsáním naší adresy, na naše stránky, kde si objednal vagón šprudláků – prodej je v tomto případě stále připsán dealerovi, přes jehož stránky nás dotyčný zákazník našel.

K nevýhodám posaného řešení patří v prvé řadě ta skutečnost, že návštěvníci s vypnutým JavaScriptem nebo cookies nezjistitelně „utečou“ danému dealerovi – jinými slovy, v případě skutečných dealerů a vyplácených provizí vlastně své prodejce trochu šidíme: technika je tedy vhodná spíše pro naši statistiku než složitější provizní systémy. Druhá nevýhoda je víceméně puristická: používání záložky, která nikam nevede, není programátorsky čisté řešení a jako takové se nemusí každému zamlouvat.

Přeji vám příjemný den.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět