Jak měřit e-shop na FastCentriku bez vlastních analytických cookies

Trackless je cookieless analytika pro e-shopy. V prohlížeči návštěvníka neukládá vlastní měřicí identifikátor ani vlastní analytické cookies. Protože toto napojení běží přes měřicí kód v prohlížeči, právní základ, cookie lištu a případné podmínění spuštění vždy posuzujte podle celkového nastavení webu. Oficiální doplněk pro FastCentrik neexistuje - podle aktuální administrace se měření vkládá přes Google Tag Manager: ve FastCentriku uložíte ID GTM kontejneru a do GTM vložíte Trackless kódy jako vlastní HTML značky. Data zůstávají na našem serveru v EU a prvních 30 dní máte zdarma.

Co u FastCentriku čekat
  • Trackless neukládá vlastní analytické cookies ani vlastní měřicí identifikátor, ale u tohoto napojení běží měřicí kód v prohlížeči. Právní základ, cookie lištu a případné podmínění spuštění posuďte podle celkového nastavení webu.
  • Blokování: měřicí kód běží v prohlížeči - při agresivním blokování měřicích skriptů může část návštěv chybět.
  • Co změří: návštěvy i objednávky (využije datovou vrstvu FastCentriku na děkovací stránce). Když datová vrstva obsahuje položky objednávky, Trackless oddělí tržbu za produkty od dopravy a platby.

Jak to funguje

  • Měřicí kód běží v prohlížeči, takže při agresivním blokování měřicích skriptů může část návštěv chybět. V běžném nastavení ale Trackless nebývá blokovaný; trendy a poměry zdrojů zůstávají vypovídající.
  • Přes Google Tag Manager. Ve FastCentriku uložíte jen ID GTM kontejneru; samotný Trackless kód běží v GTM jako vlastní HTML značka na všech stránkách. Konverze se připojí z datové vrstvy na děkovací stránce.
  • Data jsou jen Vaše. Měření končí na našem serveru v EU; data nepředáváme reklamním systémům.

Krok 1: Získejte měřicí token

Zaregistrujte se na trackless.cz, přihlaste se a v sekci Moje weby klikněte na Přidat web. Vyberte FastCentrik a Trackless Vám ukáže měřicí token - řetězec začínající na tlc_. V GTM použijte variantu níže, která script vytvoří dynamicky a token na něj nastaví až v prohlížeči:

<script>
(function () {
    var s = document.createElement('script');
    s.async = true;
    s.src = 'https://c.trackless.cz/t.js';
    s.setAttribute('data-token', 'VAS_MERICI_TOKEN');
    document.head.appendChild(s);
})();
</script>

V běžném HTML by stačil zápis <script async src="https://c.trackless.cz/t.js" data-token="...">. U FastCentriku ale kód vkládáte přes GTM a v testu se ukázalo, že GTM může atribut data-token z externího scriptu ve výsledném DOM zahodit. Dynamické vložení tomu předchází.

Krok 2: Připojte FastCentrik ke Google Tag Manageru

Otevřete administraci FastCentriku, přejděte do Nastavení -> Aplikace 3. stran -> Google Tag Manager a vložte své GTM ID, například GTM-XXXXXXX. Pokud GTM ještě nemáte, vytvořte si v Google Tag Manageru nový webový kontejner.

Do FastCentriku se vkládá jen ID kontejneru. Samotné Trackless kódy vkládáte až v GTM jako značky Vlastní HTML.

V GTM založte značku pro návštěvnost

  1. Otevřete svůj GTM kontejner a klikněte na Tags -> New -> Tag Configuration -> Custom HTML / Vlastní HTML.
  2. Vložte základní Trackless kód z kroku 1, nahraďte VAS_MERICI_TOKEN tokenem z Trackless a značku pojmenujte například Trackless - návštěvnost.
  3. U této značky nastavte Triggering -> All Pages. Musí běžet na všech stránkách e-shopu.
  4. Značku uložte. Kontejner zatím nemusíte publikovat; nejdřív přidejte objednávkovou značku v dalším kroku.

Tato první značka měří návštěvy. Objednávky bude posílat až druhá značka z kroku 3.

Krok 3: Přidejte objednávkovou značku

FastCentrik u nastavení Google Tag Manageru uvádí, že spolu s kontejnerem vkládá i datovou vrstvu a na potvrzení objednávky e-commerce data pro Google Analytics. Samostatný checkbox proto v některých administracích nemusí být vidět. Do druhé GTM značky vložte konverzní kód Trackless níže:

<script>
(function () {
    window.trackless = window.trackless || function () {
        (window.trackless.q = window.trackless.q || []).push(arguments);
    };
    var sent = false;
    function num(x) {
        x = String(x == null ? '' : x).replace(/[^\d,.\-]/g, '');
        if (x.indexOf(',') > -1) { x = x.replace(/\./g, '').replace(',', '.'); }
        return Number(x) || 0;
    }
    function first(obj, keys) {
        if (!obj) { return null; }
        for (var i = 0; i < keys.length; i++) {
            if (obj[keys[i]] != null && obj[keys[i]] !== '') { return obj[keys[i]]; }
        }
        return null;
    }
    function lineTotal(items) {
        if (!items || !items.length) { return null; }
        var sum = 0;
        var found = false;
        for (var i = 0; i < items.length; i++) {
            var item = items[i] || {};
            var total = first(item, ['total', 'item_total', 'line_total', 'item_revenue', 'revenue', 'value']);
            if (total != null) {
                sum += num(total);
                found = true;
                continue;
            }
            var price = first(item, ['price', 'item_price', 'unitPrice', 'unit_price']);
            if (price == null) { continue; }
            var qty = first(item, ['quantity', 'qty', 'item_quantity']);
            qty = qty == null ? 1 : num(qty);
            if (!qty) { continue; }
            sum += num(price) * qty;
            found = true;
        }
        return found ? sum : null;
    }
    function order(entry) {
        if (!entry) { return null; }
        var isFastCentrikPurchase = entry.event === 'trackPurchase' || entry.transactionId != null;
        if (isFastCentrikPurchase && entry.transactionId != null && entry.transactionId !== '') {
            return {
                id: entry.transactionId,
                value: entry.transactionTotal,
                currency: entry.transactionCurrency || 'CZK',
                products: lineTotal(entry.transactionProducts),
                shipping: first(entry, ['transactionShipping', 'transactionShippingTotal', 'shipping'])
            };
        }
        if (entry.event === 'purchase' && entry.ecommerce && entry.ecommerce.transaction_id != null) {
            return {
                id: entry.ecommerce.transaction_id,
                value: entry.ecommerce.value,
                currency: entry.ecommerce.currency || 'CZK',
                products: lineTotal(entry.ecommerce.items || entry.items),
                shipping: first(entry.ecommerce, ['shipping', 'shipping_tax_excl', 'shipping_tax_incl'])
            };
        }
        if (entry[1] === 'purchase' && entry[2] && entry[2].transaction_id != null) {
            return {
                id: entry[2].transaction_id,
                value: entry[2].value,
                currency: entry[2].currency || 'CZK',
                products: lineTotal(entry[2].items),
                shipping: first(entry[2], ['shipping', 'shipping_tax_excl', 'shipping_tax_incl'])
            };
        }
        return null;
    }
    function handle(entry) {
        try {
            if (sent) { return; }
            var o = order(entry);
            if (!o || o.id == null || o.id === '') { return; }
            sent = true;
            var props = { type: 'order', id: String(o.id), value: num(o.value), currency: String(o.currency || 'CZK'), page_type: 'order' };
            if (o.products != null) {
                props.products_tax_excl = num(o.products);
                props.products_tax_incl = num(o.products);
            }
            if (o.shipping != null && o.shipping !== '') {
                props.shipping_tax_excl = num(o.shipping);
                props.shipping_tax_incl = num(o.shipping);
            }
            window.trackless('event', props);
        } catch (e) { /* nikdy neshodit dekovaci stranku */ }
    }
    function scan() {
        var dl = window.dataLayer || [];
        for (var i = 0; i < dl.length; i++) { handle(dl[i]); }
    }
    try {
        var dl = window.dataLayer = window.dataLayer || [];
        scan();
        var origPush = dl.push;
        dl.push = function () {
            for (var i = 0; i < arguments.length; i++) { handle(arguments[i]); }
            return origPush.apply(this, arguments);
        };
        if (document.readyState !== 'loading') { scan(); }
        else { document.addEventListener('DOMContentLoaded', scan); }
        window.addEventListener('load', scan);
    } catch (e) { /* nikdy neshodit dekovaci stranku */ }
})();
</script>

Kód čte číslo a hodnotu objednávky z datové vrstvy FastCentriku (transactionId / transactionTotal, případně z novější události purchase pro Google Analytics 4). Pokud je dostupné transactionProducts nebo ecommerce.items, pošle zvlášť hodnotu produktů, aby se do produktových tržeb nepočítala doprava a platba. Pokud položky v datové vrstvě nejsou, Trackless použije celkovou hodnotu objednávky podobně jako u jednoduchých klientských integrací.

V GTM založte značku pro objednávky

  1. Klikněte znovu na Tags -> New -> Tag Configuration -> Custom HTML / Vlastní HTML, vložte konverzní kód z tohoto kroku a značku pojmenujte například Trackless - objednávka.
  2. U objednávkové značky vytvořte trigger Page View -> Some Page Views s pravidlem Page URL contains objednavka-dokoncena.
  3. Objednávkovou značku nespouštějte na All Pages. Má se spustit jen na děkovací stránce po dokončení objednávky.
  4. Značku uložte. Pokud v GTM používáte Consent Mode nebo vlastní pravidla podle cookie lišty, nastavte spuštění obou Trackless značek podle právního posouzení celého webu.

Po tomto kroku máte v GTM dvě značky: Trackless - návštěvnost na všechny stránky a Trackless - objednávka jen na děkovací stránku.

Krok 4: Ověřte, že měření běží

V GTM klikněte na Preview, otevřete e-shop přes náhled a projděte běžnou stránku i testovací objednávku. Pokud značky běží správně, publikujte kontejner přes Submit / Publish.

  • GTM Preview: základní značka Trackless je v Tags Fired na všech stránkách a konverzní značka jen na URL /objednavka-dokoncena.
  • Console: u scriptu https://c.trackless.cz/t.js musí být vyplněný data-token. Pro kontrolu použijte tento výpis:
  • Network: filtr trackless má ukázat nejen stažení t.js, ale i další požadavek na Trackless endpoint. Samotné stažení scriptu ještě neznamená odeslané měření.
  • DataLayer: na děkovací stránce zkontrolujte, že window.dataLayer obsahuje transactionId / transactionTotal a ideálně také transactionProducts, nebo událost purchase s objektem ecommerce a items.
[...document.scripts]
  .filter(s => s.src.includes('c.trackless.cz/t.js'))
  .map(s => ({
    src: s.src,
    token: s.getAttribute('data-token'),
    outerHTML: s.outerHTML
  }))

Reálné nasazení na FastCentriku jsme ověřili: po dynamickém vložení základní značky přes GTM dorazily návštěvy i objednávka. Pokud kontrolní výpis vrací u tokenu null, základní značka je v GTM vložená špatně - použijte dynamický kód z kroku 1. Pokud token sedí, ale v Network není další požadavek nebo v Trackless administraci nic nepřibývá, hledejte problém v blokování prohlížečem, ve tvaru dataLayer, v triggeru konverzní značky nebo ve špatném webu/tokenu v administraci Trackless.

Co budete měřit

  • Měřicí kód běží v prohlížeči, takže při agresivním blokování měřicích skriptů může část návštěv chybět. V běžném nastavení ale Trackless nebývá blokovaný; trendy a poměry zdrojů zůstávají vypovídající.
  • Zdroje a kanály: UTM parametry, referrery a kanály ve stylu Google Analytics 4 - včetně návštěv z AI asistentů.
  • Zařízení, prohlížeče a operační systémy.
  • Země a jazyky návštěvníků.
  • Dokončené objednávky jako konverze - včetně hodnoty, měny, čísla objednávky a produktové tržby bez dopravy a platby, pokud ji FastCentrik v datové vrstvě předá odděleně.

Limity, ať víte, do čeho jdete

  • Měřicí kód běží v prohlížeči, takže při agresivním blokování měřicích skriptů může část návštěv chybět. V běžném nastavení ale Trackless nebývá blokovaný; trendy a poměry zdrojů zůstávají vypovídající.
  • GTM varianta čte jen to, co FastCentrik vloží do datové vrstvy na děkovací stránce. Když je dostupný seznam položek, Trackless oddělí produktovou tržbu od dopravy a platby; když dostupný není, použije se celková hodnota objednávky podobně jako u MioWebu. Rozpis DPH, marže, vratky a plné položky v Trackless vyžadují serverové nebo API napojení, ne samotný GTM snippet.
  • Provozujete i e-shop na otevřené platformě (PrestaShop, WooCommerce, Joomla / VirtueMart, OpenCart, Magento 2, Shopware 6 nebo Sylius)? Tam použijte naše serverové moduly - měří přímo na serveru, nejsou závislé na spuštění měřicího kódu v prohlížeči a podle platformy umí i objednávky, položky a marže.

Časté dotazy

Potřebuju kvůli Tracklessu souhlas návštěvníků nebo cookie lištu?

Nejde odpovědět plošně. Trackless do prohlížeče neukládá vlastní měřicí identifikátor ani vlastní analytické cookies, ale u tohoto napojení běží měřicí kód v prohlížeči. Právní základ, cookie lištu a případné podmínění spuštění posuďte podle celého nastavení webu a dalších nástrojů.

Zpomalí měřicí kód můj e-shop?

Ne. Skript je malý a načítá se asynchronně (atribut async), takže nebrzdí vykreslování stránky. A když se nenačte, e-shop běží dál, jako by tam kód nebyl.

Můžu Trackless používat společně s Google Analytics 4?

Ano. Oba kódy mohou běžet vedle sebe a nijak se neovlivňují - Trackless dokonce čte tutéž datovou vrstvu, kterou FastCentrik připravuje pro Google. Počítejte s rozdílnými čísly: Trackless je méně závislý na vlastních analytických cookies než klientská analytika, takže může zachytit i část návštěv, které GA4 kvůli odmítnutým analytickým cookies započítá jen omezeně nebo modelem.

Kolik Trackless stojí?

Prvních 30 dní je zdarma. Potom platíte podle počtu objednávek Vašeho e-shopu - konkrétní částky najdete v ceníku.

Na webu píšete „bez JavaScriptu“ - a tohle je JavaScript. Jak to jde dohromady?

Naše serverové moduly a pluginy pro otevřené platformy (PrestaShop, WordPress/WooCommerce, Joomla / VirtueMart, OpenCart, Magento 2, Shopware 6 a Sylius) měří přímo na serveru e-shopu bez vlastního měřicího JavaScriptu. U této platformy je ale dostupná cesta přes měřicí kód v prohlížeči. Skript nebo pixel odešle URL stránky, referrer, jazyk a události na endpoint Trackless; neukládá vlastní cookies ani vlastní měřicí identifikátor. Identita návštěvníka se počítá na serveru z požadavku. To omezuje vlastní identifikátory v prohlížeči, ale právní posouzení a případné podmínění spuštění závisí na nasazení.

Vyzkoušejte to na svém e-shopu

Registrace zabere minutu, vložení kódu dalších pět. Prvních 30 dní neplatíte nic.

Vyzkoušet 30 dní zdarma Prohlédnout živé demo

← Zpět na hlavní stránku