Блог · Как это работает
Как аналитика считает посетителей без cookie
Чтобы отличить десять просмотров одного человека от десяти разных людей, счётчику нужно как-то узнавать посетителя. Обычно для этого служит cookie. Расскажем, как обходимся без неё мы, почему по нашим данным нельзя восстановить IP-адрес и в чём такой подход уступает классическому.
Как считают обычно
Классический счётчик при первом визите придумывает посетителю случайный номер и записывает его в cookie. При каждом следующем просмотре браузер отправляет этот номер обратно, и счётчик понимает: это тот же человек, что вчера, неделю и месяц назад.
Это удобно для аналитики и неудобно для посетителя: появляется долгоживущий идентификатор, к которому со временем прирастает история его визитов. Именно из-за него на сайтах появляется cookie-баннер.
Как считаем мы
MetricsOn ничего не записывает в браузер. Вместо этого при каждом просмотре сервер вычисляет отпечаток визита:
отпечаток = SHA-256(соль_суток | сайт | IP-адрес | браузер)
- Соль суток — 32 случайных байта, которые сервер генерирует раз в сутки. Она хранится только в оперативной памяти и удаляется через 48 часов.
- Сайт — идентификатор вашего сайта в MetricsOn. Поэтому один и тот же человек на двух разных сайтах даёт два разных отпечатка, и связать его визиты между сайтами нельзя.
- IP-адрес и строка браузера (User-Agent) — то, что браузер и так сообщает любому серверу при загрузке страницы.
В базу попадает только отпечаток. Сам IP-адрес используется в момент запроса — чтобы определить город и отсеять ботов — и отбрасывается. Его нет ни в базе статистики, ни в логах сервера.
Просмотры с одинаковым отпечатком за сутки — это один посетитель и одна сессия. Так считаются уникальные посетители, отказы, время на сайте, цели и воронки.
Почему IP нельзя восстановить
SHA-256 — односторонняя функция: по результату нельзя вычислить исходные данные. Но есть тонкость. IPv4-адресов всего около четырёх миллиардов, и если бы отпечаток считался без секрета — скажем, из даты, сайта, IP и браузера, — злоумышленник с доступом к базе мог бы просто перебрать все адреса и найти совпадение. Для современного компьютера это часы.
Случайная соль закрывает эту возможность. Без неё перебирать нечего, а её нет нигде, кроме оперативной памяти сервера, и через двое суток она исчезает навсегда. После этого вчерашние отпечатки — просто случайные строки, которые нельзя связать ни с адресом, ни с человеком, ни друг с другом.
Чем приходится платить
Честно о том, что такой подход меняет в цифрах:
- Вернувшийся посетитель считается заново. Человек, который заходил вчера и зашёл сегодня, — для нас два разных посетителя. Поэтому за неделю или месяц уникальных посетителей получается больше, чем в системах с cookie, и нет отчёта «новые и вернувшиеся».
- Сутки меняются в 03:00 по Москве. Соль привязана к суткам по UTC, и визит, который начался в 02:50 и продолжился в 03:10, разделится на две сессии. Ночью трафика мало, так что на итог это почти не влияет.
- Смена сети — новая сессия. Если человек начал читать сайт по Wi-Fi, а закончил по мобильному интернету, IP-адрес меняется, а с ним и отпечаток.
- Одинаковые браузеры за одним адресом склеиваются. Два сотрудника офиса с одним внешним IP и одинаковыми версиями браузера в один день будут выглядеть как один посетитель. На практике это редкость: строка браузера включает версию и систему, и совпадает она реже, чем кажется.
- Нет истории по человеку. Нельзя посмотреть путь конкретного посетителя за месяц или связать визиты с разных устройств. Это не недоработка, а суть подхода.
Что ещё мы не собираем
- Отпечаток браузера в расширенном смысле — шрифты, canvas, звуковую карту и прочие приёмы, которыми рекламные системы узнают человека без cookie. Скрипт отправляет только адрес страницы, источник перехода, размер экрана, язык и часовой пояс.
- Визиты с Do Not Track. Если в браузере включён запрет отслеживания, скрипт ничего не отправляет.
- Локальную разработку. На localhost и на сайтах, открытых по IP-адресу, счётчик молчит — ваши собственные тесты не попадут в статистику.
Итог
Аналитика без cookie отвечает на вопросы о сайте — сколько людей пришло, откуда, что смотрели, сработала ли заявка, — но сознательно не отвечает на вопросы о конкретном человеке. Для большинства сайтов этого достаточно, а взамен не нужно ни согласие на cookie, ни хранение данных, которые потом придётся защищать.