Autor: Ondřej Svoboda
16. 01. 2023
Jak jsem zmínil v předchozím článku, každému správci webu je uložena povinnost informovat návštěvníky o ukládání nepovinných/analytických/marketingových cookies a získat návštěvníkův implicitní souhlas či nesouhlas.
Tento web žádné analytické ani marketingové cookies nepoužívá. Jediná cookie, kterou zde naleznete, je session cookie, která slouží k ochraně před CSRF útoky. Session cookie se ukládá pouze dočasně a je smazána ve chvíli, kdy opustíte tento web.
Nejčastějším nástrojem pro analýzu návštěvnosti a chování uživatelů je Google Analytics.
Google Analytics
Jedná se o nástroj, který vyvíjí Google. Jeho účelem je sledovat a ukládat pohyb návštěvníků na daném webu. Tento nástroj používá téměř každý web. Google Analytics umožňuje správci webu monitorovat počet návštěvníků a zjistit, jaké stránky jsou ty nejnavštěvovanější. Jedná se o nejpoužívanější statistické/analytické řešení v oblasti webových stránek.
Google Analytics je zdarma a ke své funkci používá cookies. Ve chvíli, kdy uživatel navštíví web, který používá tento nástroj, a pokud uživatel souhlasí s uložením cookie, je na uživatelovo zařízení uložena cookie, díky které Google sleduje uživatelovu veškerou aktivitu na dané webové stránce, pokud tedy uživatel cookie neodmítne. Anonymizované výsledky tohoto sledování pak Google prezentuje správci webu.
Na web stačí vložit tento kód, konkrétně do hlavičky, tedy prvku <head>. Proměnná vase_id představuje identifikátor, který vám přiřadí Google po přihlášení do Google Analytics.
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=vase_id"></script>
<script> window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'vase_id’);
</script>
Od chvíle, kdy vložíte tento kód do hlavičky svého webu, musíte veškeré návštěvníky informovat o sběru dat a dát jim možnost volby, zda chtějí nebo nechtějí být sledováni, jinak vám v případě nahlášení hrozí pokuta.
Právě ona nutnost souhlasu s cookies je to, co mi na moderních webech nejvíce vadí. Snad každého člověka to otravuje, jelikož formulář ohledně HDPR vidíme několikrát denně. Na tomto webu žádný souhlas s cookies není a nebude, neboť analytické cookies nemám v plánu používat. Moc nechápu, jaký smysl má používání Google Analytics na nějakém osobním blogu nebo na firemních stránkách. Formulář se souhlasem návštěvníka znechutí, ne-li přímo odradí. Co se ale týče médií nebo e-shopů, pak ano, Google Analytics je v takových případech velmi užitečným nástrojem.
Analýza návštěvnosti bez cookies
Jak ale tedy já sám analyzuji návštěvnost? Je to vůbec možné? Proč by nebylo? Mám přístup k web serveru, mám přístup k logům. Tento web používá Rails a pro samotné nasazení Phusion Passenger. Veškeré logy jsou dostupné v adresáři /log, který je umístěn v kořenovém adresáři Ruby on Rails aplikace.
Každý záznam v logu může mít několik formátů, může to být chybová hláška, informace nebo chyba... pro příklad uvedu jeden záznam, který je pro mě ten nejdůležitější. Zde je Googlebot, který si načetl můj web.
[2023-01-16T03:30:35.919265 #20649] INFO -- : [082eca29-b476-4018-bc05-ef948ea47b50] Started GET "/assets/bootstrap.min.js" for 66.249.83.66 at 2023-01-16 03:30:35 +0000
Jakmile otevře návštěvník můj web v prohlížeči, stáhnou se mu i statické soubory, jako je právě třeba CSS knihovna Bootstrap. Já pak díky tomu mohu velmi snadno oddělit plnohodnotné, skutečné návštěvníky, kteří si můj web otevřeli v prohlížeči (a tudíž se jim stáhl Bootstrap), aniž by se mi do toho pletl curl, wget nebo jakákoli další interakce, která neodpovídá načtení webu v prohlížeči.
Ale takovým "skutečným návštěvníkem" může být i Googlebot, neboť mé stránky jsou zaindexované, mám sitemapu a Googlebot občas pátrá po jakékoli změně. Mou celou stránku si načítá ještě pak několik IP rozsahů velkých společností, kromě Google to je třeba i nějaký ten Microsoft crawler, rozsah 40.74.0.0/15. Pro spočítání plnohodnotných přístupů na můj web stačí použít tento příkaz.
grep -vE "66.249|40.7." production.log | grep -i bootstrap | awk '{print $12}' | sort | uniq | wc -l
Možnost -v zobrazí veškeré řádky, které neobsahují hledaný řetězec, zkrátka reverzní shoda. Parametr -E udává, že k vyhledávání se použije regulární výraz (regex), následuje regex s IP adresami ve formátu "první_rozsah|druhý_rozsah". Znak | znamená logické OR.
Následuje název souboru s logy. Celý výsledek pak přesměrujeme do dalšího grepu, který nám najde řádky s řetězcem bootstrap. Parametr -i grepu říká, aby nerozlišloval mezi velkými a malými písmeny. Celý výstup je přesměrován do příkazu awk.
Nahoře jsem uvedl záznam v logu, který patří Googlebotu. Chci ale vypsat pouze IP adresu. Jak to udělám? Použiji příkaz awk, což je jazyk pro zpracování textových dat. Výchozím oddělovačem při užití awk je mezera, tudíž IP adresa je na dvanáctém místě.
Co když ale jedna IP adresa navšívila web několikrát v různých prohlížečích? Bootstrap by se tím pádem stahoval několikrát a náš příkaz by to nepoznal. Co dál? Z výsledků vynechat opakující se adresy, tudíž každou vypsat jen jednou. K tomu slouží příkaz uniq. Ale veškerá data, která příkaz uniq zpracovává, musí být seřazená. Tudíž nejdříve sort, potom uniq. A wc -l pro spočítání řádků.
Hotovo. Pipy jsou skvělá věc a nemusím návštěvníka otravovat s cookie souhlasem.
Tento způsob je univerzální nehledě na aplikační platformu, ale není sám o sobě dostatečný. Získávám počet IP adres počítačů, ve kterých byl tento web otevřen v prohlížeči. Pokud chci podrobnější data, například o navštívených článcích, jsem nucen logy filtrovat a filtrovat, což je časově náročné.
V případě Ruby on Rails je dostupný gem, na který jsem nedávno narazil - ActiveAnalytics - odkaz na GitHub
Tento gem poskytuje čistě server-side řešení, takže samozřejmě nemusím návštěvníky obtěžovat souhlasem. Instalace nepředstavovala žádný problém a mám vcelku komplexnější, anonymizovaná data, aniž bych se musel hrabat v logu webserveru. Zvažuji, že bych zcela vypnul logování na serveru, poněvadž díky tomuto gemu je již zbytečné.