Do monitorowania aktywności na stronach internetowych (ale nie tylko na stronach, bo też np. aplikacjach mobilnych) korzystam ze statystyk. Oczywiście Google Analytics, które stały się niejako rynkowym standardem, a w połączeniu z Google Tag Manager można tutaj działać istne cuda. Ale oprócz GA korzystam od niedawna ze statystyk Yandex Metrica (punkt odniesienia), oraz – to już od bardzo dawna – Matomo (do niedawna Piwik), które służą nie tylko za punkt odniesienia, ale i całkiem silne uzupełnienie GA, zwłaszcza pod względem elementów niezależnych od (blokowania) JavaScript…

Alternatywne sposoby monitorowania ruchu na stronie w Matomo (Piwik)

Problemem współczesnych statystyk jest to, że w większości opierają się one o kod JavaScript, który musi zostać uruchomiony, by odpowiedni skrypt mógł zacząć zbierać i przetwarzać dane. Pozwala to na wiele dodatkowych działań, ale jednocześnie jest bardzo wrażliwe na wszelkiej maści dodatki do przeglądarek, które mogą zablokować wykonywanie takiego skryptu, a wtedy po takich odwiedzinach nie pozostanie nawet ślad.

Nie będę tutaj zastanawiał się dlaczego niektóre osoby (lub dodatki) blokują również tego typu skryptu, ale faktem jest, że tak się dzieje, i poza estymacją/szacowaniem prawidłowego wyniku na podstawie różnych danych, zdecydowanie lepiej spróbować to rozwiązać „systemowo”.

Obrazek śledzący

Jedną z takich metodo jest tzw obrazek/piksel śledzący, z którego można korzystać np. w przypadku statystyk Matomo (Piwik). Jest to pewnego rodzaju sztuczka, która polega na tym, że np. w momencie, gdy nie może zostać uruchomiony standardowy kod analizujący zachowanie użytkownika na stronie (kod śledzący brzmi tak… hm… tendencyjnie), to wywoływany jest niby-obrazek, którego celem jest przechwycenie przynajmniej kilku najważniejszych informacji o danych odwiedzinach na stronie:

Obrazek Śledzący

Kiedy odwiedzający mają wyłączony język JavaScript lub kiedy JavaScript nie może być używany możesz użyć obrazka śledzącego aby śledzić odwiedzających. Wygeneruj link poniżej i skopuj-wklej wygenerowany HTML na stronę. Jeśli używasz tego jako fallback dla śledzenia w JavaScript-cie, możesz umieścić go wewnątrz tagów <noscript></noscript>.

Odpowiedni kod związany z obrazkiem śledzącym znajdziemy w ustawieniach, tuż poniżej standardowego kodu (JavaScript):

  • Ustawienia -> Serwisy internetowe -> Kod śledzenia: Obrazek Śledzący

Ma on postać tego typu:

<!-- Piwik Image Tracker-->
<img src="https://adres-naszego-piwika/piwik.php?idsite=1&rec=1" style="border:0" alt="" />
<!-- End Piwik -->

Choć – zwłaszcza, gdy korzystamy z niego razem z kodem JS – warto rozważyć obudowanie go tagami „noscript”:

<!-- Piwik Image Tracker-->
<noscript>
<img src="https://adres-naszego-piwika/piwik.php?idsite=1&rec=1" style="border:0" alt="" />
</noscript>
<!-- End Piwik -->

Z obrazka (piksela) śledzącego można też korzystać np. do śledzenia otwarć przesyłanych wiadomości e-mail (np. newsletter).

Więcej informacji na temat tej metody śledzenia, wraz z listą dodatkowych parametrów, z których można korzystać znajdziecie w dokumentacji (Tracking HTTP API).

Server-side Log Analytics

Kolejną metodą, która umożliwia (jeszcze) pełniejszą/dokładniejszą analizę ruchu na monitorowanej stronie, a jaką oferuje Matomo (Piwik) jest bezpośrednia analiza logów serwera. W tym przypadku właściwie nie ma możliwości, by ktokolwiek z odwiedzających naszą stronę był w stanie w jakikolwiek sposób zablokować odnotowanie przez statystyki takiej wizyty. Oczywiście tak jak w przypadku śledzenia za pomocą piksela, tak również w przypadku analizy logów serwera musimy pogodzić się z tym, że nie wszystkie informacje (zdarzenia) uda się odnotować tak sprawnie (np. zdarzenia dynamiczne, które nie powodują generowania informacji w logach).

Spotkałem się również z modułami (PHP, Nginx) zwalającymi na monitorowanie (śledzenie) zachowania użytkowników na stronie w Google Analytics, ale o tym może kiedy indziej…

Zanim zaczniemy importować logi serwera do Matomo (Piwik) musimy pobrać odpowiedni dodatek (skrypt) z serwisu GitHub:

sudo git clone https://github.com/matomo-org/piwik-log-analytics /opt/matomo-la

Co spowoduje „zainstalowanie” skryptu do katalogu:

/opt/matomo-la

Kolejnym krokiem jest ustalenie ścieżki (bezwzględnej) do logów webserwera, które chcemy przetwarzać (np. Apache2, Nginx). Załóżmy, że ścieżka do pliku wygląda tak:

/var/log/nginx/webinsider_access.log

Oprócz tego potrzebujemy jeszcze adres naszego Matomo (Piwika) w formie adresu URL, np.:

https://matomo.webinsider.pl/

Oraz w formie bezwzględnej ścieżki na serwerze, np.:

/var/www/matomo/public_html/config/config.ini.php

Klucz API, który można wygenerować w ustawieniach Matomo (Piwik):

  • Ustawienia -> Platforma -> API: Uwierzytelnianie użytkownika

I ma postać tego typu:

&token_auth=abcdef0123456789

Przy czym nas interesuje tylko element „abcdef0123456789” (to tylko przykład, w Waszym przypadku klucz API będzie wyglądał na pewno inaczej). Zamiast API można użyć nazwy użytkownika i hasła, ale moim zdaniem lepiej zdecydować się na wariant z kluczem API.

Niezbędny będzie też identyfikator serwisu w Matomo (Piwik), który znajdziemy w różnych miejscach (np. kod śledzenia, adres URL tabeli raportów), i ma postać tego typu:

idSite=8

Lub np.:

_paq.push(['setSiteId', '8']);

W naszym przypadku ID równa się 8 (choć nie ma takiej potrzeby, to można na potrzeby analizy logów stworzyć oddzielny serwis, by uniknąć niepotrzebnego zamieszania, a zarazem mieć punkt odniesienia).

Z takim kompletem informacji można już zbudować podstawowe polecenie zmieniające zapisy w logach serwera na informacje dotyczące ruchu na naszej stronie:

sudo python /opt/matomo-la/import_logs.py --url=https://matomo.webinsider.pl/ --idsite=8 --recorders=1 --config=/var/www/matomo/public_html/config/config.ini.php --token-auth=abcdef0123456789 /var/log/nginx/webinsider_access.log

Polecenie można dodatkowo rozbudować o parametry nakazujące przetwarzanie jeszcze większej ilości informacji, jak np. błędy HTTP, przekierowania, wizyty Botów, oraz odwołania do plików statycznych (np. obrazy/zdjęcia):

sudo python /opt/matomo-la/import_logs.py --url=https://matomo.webinsider.pl/ --idsite=8 --recorders=1 --enable-http-errors --enable-http-redirects --enable-static --enable-bots --config=/var/www/matomo/public_html/config/config.ini.php --token-auth=abcdef0123456789 /var/log/nginx/webinsider_access.log

Całość najlepiej zautomatyzować za pomocą skryptu i harmonogramu zadań (CRON).

Testowe statystyki

Ja na potrzeby tego artykułu (poradnika) przygotowałem środowisko testowe, w którym skonfigurowałem 3 strony:

  • Webinsider.pl – standardowy kod śledzenia + piksel
  • Webinsider.pl SSA – logi serwera (Nginx) w wersji podstawowej
  • Webinsider.pl SSA ALL – logi serwera (Nginx) rozszerzone o dodatkowe elementy

I wyniki wyglądają tak:

Jak widać – różnice są spore. Przy czym wersja JavaScript + piksel prezentuje wyniki porównywalne (drobne różnice) z tymi prezentowanymi przez Google Analytics i Yandex Metrica. Natomiast wersja z analizy logów serwera plasuje się w okolicach tego co pokazuje np. Cloudflare, choć oczywiście występują tu spore rozbieżności, co wynika m.in. z tego, że w Cloudflare trudniej wskazać zakres inny niż „ostatnie…”.

Więcej informacji na temat tej metody śledzenia, wraz z listą dodatkowych parametrów, z których można korzystać znajdziecie w dokumentacji (How to use Log Analytics tool).

(!) Zgłoś błąd na stronie
Pomogłem? To może postawisz mi wirtualną kawę?
LUTy dla D-Cinelike (DJI Mini 3 Pro, DJI Avata, OSMO Pocket) od MiniFly
Wdrożenie Omnibusa w sklepie na WooCommerce
Jak (legalnie) latać dronem w Kategorii Otwartej
Patryk