Co tracker wysyła przy jednym wejściu na artykuł
Otwierasz tekst. Jeszcze nie przewinąłeś, a przeglądarka zdążyła poprosić o plik na innej domenie. To jest tracker w internecie, w skali jednego wejścia: nie “cała sieć cię profiluje”, tylko jedno żądanie HTTP, które da się rozłożyć na części.
Tracker w tym tekście znaczy skrypt albo obrazek, który strona ładuje z cudzego serwera po to, żeby ten serwer odnotował wizytę. Czasem jest to analityka. Czasem piksel reklamowy. Czasem odtwarzacz, czat albo mapa, które przy okazji mierzą. Mechanizm jest ten sam. Różni się domena i to, jak długo trzymają numer przypisany do przeglądarki.
Co przeglądarka wysyła zawsze, a co dokleja skrypt
Każde połączenie, także zwykłe pobranie czcionki, niesie parę danych z samego faktu, że przeglądarka rozmawia z serwerem. Skrypt trackera dokleja do adresu własne parametry. Warto je rozdzielić, bo w przeciwnym razie wszystko ląduje w jednym worku “śledzenie”.
| Co | Kto to dokleja | Po co im to przy jednym artykule |
|---|---|---|
| Adres IP | przeglądarka, przy połączeniu | serwer widzi, skąd przyszło żądanie |
| User-agent | przeglądarka, w nagłówku | przybliżony typ przeglądarki i systemu |
| Adres tego artykułu | skrypt, jako parametr | który tekst został otwarty |
| Strona poprzednia | przeglądarka albo skrypt | wejście z wyszukiwarki, z innej karty, bezpośrednio |
| Identyfikator | ciasteczko, jeśli już leży w przeglądarce | zlepienie tej wizyty z poprzednią |
| Nazwa zdarzenia | skrypt | zwykle “wyświetlenie strony”, nie “klik w akapit” |
| Sam plik | piksel 1×1 albo .js na obcej domenie | dowód, że karta się otworzyła |
Adres IP i user-agent nie są “wynalazkiem trackera”. Serwer je widzi, bo tak działa HTTP. Tracker zaczyna się tam, gdzie do tego dokleja adres konkretnego tekstu i numer, który ma przeżyć do następnej wizyty.
Identyfikator ma nazwę, którą widać w ciasteczkach. Przy Google Analytics często jest to _ga. Przy pikselu Meta bywa to _fbp. Jeśli ciasteczka jeszcze nie ma, pierwsza wizyta potrafi je właśnie założyć. Jeśli jest, ta wizyta dopisuje się do numeru z zeszłego tygodnia. Numer nie jest twoim nazwiskiem. Jest znacznikiem przeglądarki na tym urządzeniu, dopóki nie wyczyścisz ciasteczek albo nie skończy się ich czas życia.
Hasła, treści komentarza i tego, co masz otwarte w innym serwisie, w tym żądaniu nie ma. Tracker artykułu nie czyta skrzynki. Czyta to, że ta karta się otworzyła, skąd, i czy przeglądarka już nosi jego numer.
Jak wygląda taki adres
Poniżej jest uproszczony przykład, nie zrzut z prawdziwej strony. Domena jest zmyślona. Parametry są takie, jakie w tych żądaniach wracają najczęściej. Nazwy bywają inne (dl, dp, tid, cid), sens zostaje.
https://collect.example.invalid/g/collect
?dl=https://twoja-strona.pl/artykul-o-trackerze
&dr=https://www.google.com/
&en=page_view
&cid=1847392011.1712345678
dl to adres artykułu. Z samego tego pola wiadomo, który tekst, nie tylko która domena. dr to strona poprzednia. Puste albo brak tego pola zwykle znaczy wejście bezpośrednie: zakładka, wklejony adres, klik ze strony, która referrera nie przekazuje. en nazywa zdarzenie. Przy pierwszym kontakcie ze stroną jest to niemal zawsze wyświetlenie, nie scroll i nie klik. cid to identyfikator. Ten sam przy następnym tekście na tej samej domenie, jeśli ciasteczko zostało.
Sam piksel bywa jeszcze cichszy. Obrazek wielkości jednego piksela, bez treści, za to z tymi parametrami w adresie. Liczy się nie obrazek. Liczy się to, że serwer odnotował prośbę o niego. Skrypt .js robi to samo i przy okazji może odpalić kolejne żądanie, już po załadowaniu. Dlatego w zakładce Sieć przy jednym artykule widać czasem dwa albo trzy wpisy na tę samą obcą domenę: najpierw plik, potem collect.
Pierwsze wejście i drugie to nie jest to samo żądanie
| Pierwsze wejście | Kolejny tekst, to samo urządzenie | |
|---|---|---|
| Identyfikator | często dopiero powstaje | wraca ten sam numer |
| Adres strony | URL tego artykułu | URL już innego artykułu |
| Ciasteczko w przeglądarce | może się pojawić po tym żądaniu | już było przed otwarciem |
| Co da się zlepić | jedną wizytę | ścieżkę: tekst A, potem tekst B |
Dlatego “jedno wejście” jest dobrym przykładem, ale kiepskim końcem opowieści. Tracker zarabia na tym, że drugie wejście nosi ten sam cid. Jedno żądanie mówi “ktoś otworzył ten tekst”. Drugie mówi “to ta sama przeglądarka”. Reszta, czyli reklama dopasowana tydzień później, wynika z zlepiania, nie z jednego piksela.
Jest też różnica między ciasteczkiem a samym żądaniem. Część narzędzi trzyma identyfikator w localStorage, nie w ciasteczku. W zakładce ciasteczek wtedy pusto, a numer i tak wraca w parametrze. Kto patrzy tylko w listę cookies, widzi połowę.
Baner często jest już spóźniony
Na wielu serwisach to żądanie wychodzi w chwili otwarcia, zanim ktokolwiek kliknie “Akceptuję”. Baner opisuje wtedy zgodę na coś, co właśnie poszło. Zamknięcie banera krzyżykiem nic tu nie cofa. Żądanie już doszło.
Tekst banera bywa krótki: “analityka”, “marketing”, czasem samo “dbamy o prywatność”. W żądaniu widać więcej. Widać obcą domenę, nazwę ciasteczka i adres konkretnego artykułu. “Analityka” w banerze może znaczyć pomiar odwiedzin własnej redakcji. Może też znaczyć piksel, który ten sam identyfikator odda sieci reklamowej. Z samego słowa na przycisku tego nie rozróżnisz. Z domeny w żądaniu już tak.
To żądanie da się złapać bez grzebania w DevTools. Wtyczka ConsentScope pokazuje, co strona wstawiła do przeglądarki, zanim padło “Akceptuję”: ciasteczko, zapis w localStorage, obcy skrypt. Przy jednym wejściu dostajesz listę, a nie hasło z banera. Wtyczka tego piksela nie gasi. Ona mówi, że już poszedł, i czy polityka prywatności w ogóle o nim wspomina.
Jest też przypadek odwrotny, rzadszy w polskich serwisach informacyjnych, a częsty tam, gdzie ktoś świadomie odkłada tagi. Żądanie collect pojawia się dopiero po “Akceptuję”. Wtedy baner nie jest spóźniony. Wtedy widać różnicę: przed kliknięciem obce domeny milczą, po kliknięciu dochodzi jeden, nazwany w polityce, wpis. Taki układ da się obronić. Układ “najpierw piksel, potem pytanie” da się co najwyżej opisać.
Czego w tym jednym żądaniu zwykle nie ma
Nie ma treści artykułu. Serwer trackera dostaje adres, nie akapity. Nie ma tego, co wpiszesz w wyszukiwarkę na stronie, dopóki osobny skrypt nie wyśle zdarzenia “search”. Nie ma hasła do konta. Nie ma plików z dysku.
Bywa za to rozmiar okna, język przeglądarki i przybliżona lokalizacja wyprowadzona z IP po stronie odbiorcy. To nie jest GPS. Miasto z bazy geolokalizacji myli się regularnie: Warszawa przy łączu, które fizycznie stoi w innym województwie. Jak raport mówi “Poznań”, a siedzisz gdzie indziej, to nie tracker czyta twój adres z dowodu. To baza IP strzela w miasto.
Jak sprawdzić następny artykuł
Otwórz tekst w oknie prywatnym, żeby stare ciasteczka nie myliły obrazu. Zanim klikniesz baner, wejdź w narzędzia przeglądarki, zakładka Sieć. Zostaw żądania na domeny inne niż ta, którą właśnie czytasz. Szukaj ścieżki w stylu collect, pixel, tr, g/collect albo pliku .gif z długim adresem.
Potem porównaj z banerem i z polityką prywatności, jeśli link do niej w ogóle działa. Trzy wyniki są typowe.
- Obca domena jest w polityce i żądanie idzie dopiero po zgodzie. Spójne.
- Obca domena jest w polityce, ale żądanie poszło przed zgodą. Baner spóźniony.
- Obcej domeny w polityce nie ma, a w Sieci jest. Tego baner nawet nie próbuje nazwać.
Jedno takie żądanie wystarczy, żeby zobaczyć mechanizm. Następny artykuł na tej samej stronie powtórzy wzór: ten sam identyfikator, inny adres karty. Jak identyfikator się zmienia przy każdym tekście, mierzą wizyty, nie osobę. Jak zostaje, składają ścieżkę.
Więcej o warstwie ciasteczek i trackerów: Cookies i trackery. O odcisku przeglądarki jako osobnej warstwie: narzędzie lokalnego odcisku.