Rubriky
Blog o webové analytice

Jak se zbavit trvale spamu v Google Analytics? Návod přes Google Tag Managere, Universal Analytics AMP MP

Trochu teorie o spamu v Google Analytics

Jak spam funguje?

Na váš web přijde spam robot, ten si zobrazí celou stránku vašeho webu a získá tím vaše ID Google Analytics
a začne vás zásobovat referral spamem, nově třeba v i spamem ve stránkách nebo klíčových slovech.

Kde je starý instalátor filtrů do Google analytics? Už není.
Proč? Protože jsem napsal tento návod a ten řeší trvale tento problém a nepotřebuje aktualizace, takže funguje pořád.

Jak se zbavit spamu? Ve zkratce.

Tyto nástroje jsou automatizované, takže nepočítají s tím, že by jste mohli mít složitější nastavení analytiky.
Toho jsem využil, pokud použijete Google Analytics vlastní dimenzi, tak útočník to neumí zopakovat.
Proto ke každého hitu odesílaného do Google Analytics přidat vlastní dimenzi.
A následovně zahodím filtrem v Google analytics všechny naměřené data, které tuto dimenzi nemají.

Pozor, pokud na webu kombinujete návštěvnost z Google analytics naměřených na webu s daty posílanými do GA 3rd party aplikacemi tedy služeb, které nemají upravenou takto dimenzi a vy je nemůžete upravit. Pak se nejspíše stane, že aplikací tohoto návodu, tyto služby odříznete. Pak je otázka jestli chcete data posílat do té stejné GA property etc etc. Řešeních je více a pak je to tedy na vás.

Není potřeba žádných aktualizací spam filtrů. Toto řešení používám více jak rok.

Podrobný návod

1) Vytvoření vlastní dimenze v Google Analytics

Pokud máte vlastní dimenzi TimeStamp, tak můžete přeskočit.
Google Analytics > Administrátor > Služba > Vlastní definice > Vlastní dimenze > + NOVÁ VLASTNÍ DIMENZE

Zde vytvoříme dimenzi s názem Timestamp ISO  a rozsahem Hit

Po vytvoření dimenze si poznačíme  (zapamatujeme si ) její číslo.

Viz obrázek:

2) Vytvoření javascriptu vracející ISO čas.

(pokud již máte přeskočte, kde nahradit i jinou proměnou kterou máte na úplně každé stránce jako sessionID a další.
Případně nahradit pevným řetězcem, ale bylo by to plýtvání.)
Zajdeme do Google Tag manageru > Vybereme konkretní účet a kontejner > Proměnné> Nová

Název nové proměnné:
JS.ga.cd01.Timestamp-ISO
Konfigurace proměnné:
Vlastní kód Javascript

Samotný kód, čas ve tvaru ISO i s offsetem.

function() {
    var now = new Date();
    var tzo = -now.getTimezoneOffset();
    var dif = tzo >= 0 ? '+' : '-';
    var pad = function(num) {
        var norm = Math.abs(Math.floor(num));
        return (norm < 10 ? '0' : '') + norm;
    };
    return now.getFullYear() 
        + '-' + pad(now.getMonth()+1)
        + '-' + pad(now.getDate())
        + 'T' + pad(now.getHours())
        + ':' + pad(now.getMinutes()) 
        + ':' + pad(now.getSeconds())
        + '.' + pad(now.getMilliseconds())
        + dif + pad(tzo / 60) 
        + ':' + pad(tzo % 60);
}

Viz obrázek:

3) Nastavení vlastní dimenze v GTM u pageview v a dalších znače Google Analytics

Otevřeme si Google Tag manager > značky> vybereme si značku Google Analytics pageview > Vlastní dimenze + Přidat vlastní dimenzi
Zde vyplníme zapamatované číslo dimenze v našem případě 1
Čislo: 1
Hodnota dimenze: {{JS.ga.cd01.Timestamp-ISO}}
Tento postup zopakujeme u všech značek Google Analytics!!!!! (pageview, event, ecommerce, social) odesílající data do Google Analytics v GTM.
Nově je ideální řešení toto vyplnit do Google Analytics proměnné a tu používat všude. > Je to méně práce 😉 ,
Pokud nějakou vynecháte nebude  se zobrazovat v datech Google Analytics !(Nezapomeňte publikovat změny v kontejneru !)

4) Nastavení nového filtru v Google Analytics

Máte v Google Analytics jen jeden výběr dat?

Pro práci z Google Analytics je best practice mít více výběrů dat:
Filtrovaný – Bez návštěv ze spamu, lidí z firmy, přidání hostname, lowercase atd.
Nefiltrovaný – Bez filtrů a úprav dat.

Jak vytvořit nefiltrovaný výběr dat?

Google Analytics > Administrátor > VÝBĚR DAT > Filtrovaný výběr dat > Nastavení výběru dat > + Kopírovat výběr dat
Doporučený název nového výběru dat: Název domény nefiltrovaný profil
Následovně odebrat všechny filtry z nefiltrovaného profilu
Google Analytics > Administrátor > VÝBĚR DAT > Nefiltrovaný výběr dat > Filtry > odebrat
A pak se vrátit na filtrovaný hlavní profil

Google Analytics > Administrátor > VÝBĚR DAT > Filtrovaný výběr dat > Filtry > + Přidat Filtr

Název: SpamFiltr final mareklecian.cz
Typ filtru : Vlastní
Vyloučit
Pole filtru: Timestamp ISO (Je totálně na konci nabídky)
Vzor filtru:  ^$

Popis funkce: Do Google Analytics filtr pustí jen data co obsahu dimenze s ISO časem.

Což spameři neumí napodobit a je hotovo 😉 .

A už nikdy nebudete muset řešit spam v Google Analytics
spamfiltr-ga-filtr

Co klasicky implementované Universal Analytics?

Ano šlo by to udělat i u klasického GA a to přidáním řádku do měřícího skriptu.
ga(‚set‘, ‚dimension1‘, ‚spamfiltr‘);
Něco jako:

 

Zde je potřeba pohlídat?
Změnit UA id na vaše (nahradit xxxxxxx-1 )
Nastavit číslo dimenze podle sebe, v našem případě dimension1.
Samozřejmě nemusíte promarnit proměnou a můžete tam dát ISO time jako v GTM.
V php to je

Pak vám stačí udělat jen kroky  1 a 4. a pozměnit kód.

Závěr

Zamyšlení, nejsem sám proti sobě?

Někdo si řekne, že tak přijdu o návštěvnost webu, když přijdu s jednorázovým řešením.
A je mi to docela jedno, tento web není o do toho abych lidi nutil si pravidelně něco aktualizovat.
Větší radost mi udělá řešení, které je jednorázové a pomůže více lidem.

Bonus: Analytické okénko

Nestačí bylo jen použít v GA filtr (not set) na nastavit jazyk a zahodit všechno měření které ho nemají vyplněné?
Bohužel jsem narazil na výjimky u kterých se objevilo not set a bylo to správně. Sám znám to umím vytvořit. Věřím že spam se bude zdokonalovat a použít rozeznání jazyku stránky a správné vyplnění jazyku podle obsahu bude v budoucnu běžné. Dokonce jsem se už na tuto techniku u pár kusů spamerů narazil.
Proč jsem použil timestamp?
Je to jedna ze 4 základních dimenzí sběr čistých dat v GA. Měla by být bez vyjímky u každého hitu. Tak proč ji rovnou neimplementovat?
Ideální stav je mít všechny, viz článek od Sima Ahava. Který je až na pár detailů používám u všech projektů.
Co když začnou spameři spamovat i dimenze?
V tom případě můžeme použít macro které bude říkat zahoť vše co neobsahuje ISO time ve správném tvaru.

 ^((\d{4})-(\d{2})-(\d{2})T(\d{2})\:(\d{2})\:(\d{2})((\.(\d{1,3}))|)[+-](\d{2})\:(\d{2}))$

Tento regulár výraz bere iso time ve tvaru bez a včetně milisekund. Samozřejmě je pak nutné neposílat do jen slovo „spamfilter“ ale validní ISO time.
2016-11-21T16:26:20+01:00
2016-11-21T16:26:20.17+01:00
2016-11-21T16:26:20.176+01:00

BONUS pro lid co myslí do budoucna… AMP

V PHP při přidání GTM do AMP stránky, přidáte ještě proměnou s ISO časem ze serveru (PHP5+).

<!-- Google Tag Manager -->
<amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-xxxxx&gtm.url=SOURCE_URL" data-credentials="include">
  <script type="application/json">
  {
    "vars": {
      "isotime": "<?php echo date('c', time()); ?>"
    }
  }
  </script>
</amp-analytics>

Vytvoříte si proměnou v AMP GTM kontejneru

amp-isotime
Takže docela lehké.

Pro lidi co používají Measurement Protocol

Stačí přidat do každého hitu &cd1=spamfiltr nebo ideálně tam poslat místo „spamfiltr“ timestamp ve tvaru ISO.

Další připomínky a komentáře ho hoďte do komentářů.

PS: Samozřejmě vše je na vlastní nebezpečí, hlavně počkat s vytvářením filtru až jsou správné data v dimenzi.

Update 2021-02-02

V Google analytics 4 není zatím žádná možnost vyloučit věci dle filtru, takže zde není obrany. Avšak Measurment protocol GA v2 (GA4), ale vyžaduje použití „Measurement Protocol API secrets„, což je tajný klíč, který se musí odesílat ze serveru, jinak jsou hity ignorovány. Takže GA4 jako takové jsou z principu odolné proti spamu.

Update 2021-02-03

Funguje to stále? Ano, funguje 😉 . Implementace vyřeší aktuální vlnu spamu… je to ten samá stejný referral spam, co byl dříve.

.

5 reakcí na „Jak se zbavit trvale spamu v Google Analytics? Návod přes Google Tag Managere, Universal Analytics AMP MP“

Na tomhle přístupu je pak vždy nejsložitější být konzistentní. Tedy vychytat všechny měřené weby/aplikace/microsite i když se měření rozrůstá. Tedy s každým novým měřením si pohlídat, abych to měl nastavené stejně, ideálně včetně noscript image tagu, ve všech hitTypes např. i při použití measurement protocolu server->server, atp.

Souhlasím že to chce více pozornosti a preciznosti(ale od toho jsou analytici 🙂 ), ale pokud používá vhodné best practice v GTM jako jsou záložní předpřipravené značky a pěkně pojmenované proměnné atd. tak to tak velký problém není. Samozřejmě že bordeláři zapláčí. Ono to i člověka mírně vede k mimifikaci nastavení měření, což je dobře. U measurement protocolu vývojáře jedenkrát dokopeš k raw datům a oni to už pak vždy nakopírují, takže zase tak velký problém to není.

Napsat komentář