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…
Spis treści w artykule
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).
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).
- Wakacje składkowe ZUS a zawieszenie działalności gospodarczej, czyli uważaj, bo być może nie będziesz mógł skorzystać (w 2024) - 1970-01-01
- Przykładowy kalkulator wyceny usługi druku 3D, czyli nie tylko materiał się liczy - 1970-01-01
- Home Assistant 2024.10, czyli nowa karta „nagłówek” i niedziałający TTS w ramach usługi Google Cloud - 1970-01-01
Czyli wersja SSA/SSA+ALL w ogóle nie korzysta z plików/doków/pixeli śledzących. Z tego co widzę, bo jeśli serwer statystyk i serwis są na różnych maszynach, to py trzeba uruchomić na serwerze strony? I z tego co widzę, jeśteśmy w stanie to zrobić nawet na współdzielonym hosting jeśli mamy dostęp do powłoki shell
Teoretycznie możesz połączyć kod śledzący JavaScript + obrazek śledzący (piksel) + logi z serwera. Piwik (Matomo) całkiem sprawnie radzi sobie z analizą JS + piksel, tak by niepotrzebne „duble” nie fałszowały wyników. Ponoć – chyba kiedyś coś takiego czytałem – dodanie do tego analizy logów również nie powinno wpłynąć negatywnie, a być może nawet powinno dać jeszcze dokładniejszy obraz, na podstawie wszystkich 3 źródeł. Na razie za wcześnie, bo testy takiego rozwiązania zacząłem dopiero wczoraj, więc być może za parę dni będę coś więcej wiedział.
To co musisz zapewnić, do dostęp skryptu w Pythonie do logów i do URLa z Matomo (Piwik), jak to zrobisz, to już kwestia drugorzędna. Obecnie nie mam już hostingów, więc na każdym VPSie jest odpowiedni skrypt (choć też nie każdą stronę analizuje w ten sposób, a tylko niektóre) i on przesyła dane z logów. Zawsze też np. na VPSa z hostingu współdzielonego możesz pobrać logi za pomocą SSH/SCP (gdy dostepne) lub FTP.
Dobra, po teście JS + SSA/SLA mogę napisać, że niestety jest tak, jak przypuszczałem, czeli nie ma sensu, chyba, że zależy nam na tym, by móc pokazać jak najwyższe liczby w statystykach. W innym przypadku lepiej zdecydować się na wariant klasyczny, czyli JS + piksel (noscript) na jednym identyfikatorze witryny, i SSA/SLA na innym.
Przy okazji napiszę, bo może nie wszyscy wiedzą, ale o ile statystyki Goopgle Analytics można właściwie z automatu podłączyć do strony w większej liczbie, to w przypadku Matomo (Piwik) trzeba lekko zmodyfikować kod śledzenia dla drugiego i każdego następnego wywołania…
Czy na Yandex Metrica działa Ci funkcja Sesion Replay, która powinna nagrywać filmy tego co robi użytkownik na naszej stronie? Bo mi nie działa, nie wiem czemu. Używam Yandex Metrica od dwóch miesięcy, mam ok. 20 tys. wejść na stronę w ciągu miesiąca, a do tej pory nagrało mi tylko jeden 17 sekundowy filmik. Nie mogę niestety nigdzie w internecie znaleźć informacji co może powodować ten problem.
Jeśli chodzi o piksel śledzący, to aktualnie Yandex Metrica zawiera kod noscript zawierający właśnie taki piksel, dla osób, które mają wyłączony Javascript. Można zobaczyć w statystykach, ile osób ma wyłączony Javascript na naszej stronie, a także ile osób używa adblocków.
Specjalnie by to sprawdzić włączyłem właśnie YM na stronie, więc dam Ci znać jak coś się nagra…
Dobra, testy zakończone i mogę napisać, że tak, nagrywa. Pamiętaj tylko, że opcję tę trzeba aktywować w ustawieniach (+ ew. wymagane zgody związane z GDRP/RODO) i wgrać nowy kod śledzenia, bo tam po aktywacji chyba zmienia się parametr odpowiadający za aktywację nagrywania.
To w takim razie u mnie jest jakiś błąd, bo zaznaczyłem te opcje na samym początku i sprawdzałem kilka razy czy się zgadza. Zresztą w innym wypadku nie powinno mi nagrać nawet tego pojedynczego 17-sekundowego filmiku. Jedynie co mi przychodzi do głowy, to że umieściłem kod Yandex Metrica zbyt daleko w kodzie strony – strona jest na własnym systemie CMS i z racji, że nie chciało mi się wklejać tego kodu do kilkudziesięciu podstron, to wkleiłem go do elementu wspólnego czyli paska górnego menu. Jak będę miał czas, to powklejam do kilkudziesięciu podstron na samej górze w sekcji head. Jeżeli okaże się, że to nie to powoduje błąd, to nie mam pomysłu co.
Fakt, zapomniałem pisząc odpowiedź o tych 17 sekundach. Ale to też dziwne, bo jednak będąc tam gdzie jest raz się odpalił. Zobacz może w konsoli JS czy nie ma jakichś błędów… Jest to o tyle dziwne, że domyślam się, że same statystyki działają poprawnie? Może jakiś cache? Ale sprawdź też ustawienia jeszcze na wszelki wypadek, bo może akurat trafiłeś na okienko gdy dodawali nowe pola do zaznaczenia ;-)