Google Analytics стоит на большинстве сайтов рунета по инерции: «все ставят — значит, надо». При этом счётчик тянет данные посетителей на сервера Google, требует cookie-баннер по закону и в любой момент может быть заблокирован или отключён не по вашей воле. Для сайта, где и так вся инфраструктура — своя, аналитика на чужих серверах выглядит белой вороной. Разберём, как поставить приватный счётчик на собственном сервере за 15 минут — именно так устроена аналитика на этом сайте.

Чем плох Google Analytics для небольшого сайта

  • Данные уходят из-под контроля. Информация о посетителях — IP, устройство, путь по сайту — обрабатывается на серверах Google, а не на ваших. Для сайтов, ориентированных на российскую аудиторию, это отдельный юридический риск: 152-ФЗ требует хранить персональные данные граждан РФ на серверах внутри страны, и трактовка того, подпадает ли под это веб-аналитика, менялась не раз. Однозначного ответа нет — но самый надёжный способ снять вопрос целиком — держать данные у себя.
  • Cookie-баннер обязателен. Google Analytics ставит cookie для идентификации посетителя, а значит — всплывающее окно с согласием, которое раздражает пользователей и снижает конверсию.
  • Google Analytics — это часть рекламной экосистемы Google. Даже без прямой рекламы на сайте, данные так или иначе используются для профилирования пользователей в других продуктах Google.
  • Избыточность. 95% владельцев небольших сайтов используют GA для одной задачи — посмотреть, сколько человек зашло и откуда. Для этого не нужна система с сотней метрик, воронками и интеграцией с Google Ads.

Как устроена приватная аналитика

Инструменты вроде GoatCounter, Plausible или Umami решают ту же задачу иначе:

  • Без cookie. Посетитель идентифицируется не по уникальному ID, а по хэшу от связки IP + User-Agent + соли, которая меняется раз в сутки. Технически невозможно отследить одного и того же человека второй день подряд — и поэтому не нужен баннер согласия.
  • Только агрегаты. Хранятся не индивидуальные визиты, а посчитанные цифры: просмотры страниц, источники перехода, устройства, страны. Профиля конкретного посетителя просто не существует.
  • Один JS-файл на пару килобайт. Никаких сторонних доменов, трекеров и синхронизации с рекламными сетями — счётчик не замедляет загрузку страницы.
  • Открытый исходный код. Можно поставить на свой сервер и полностью контролировать, где живут данные.

GoatCounter — самый простой вариант из трёх: один бинарник без зависимостей, встроенная база SQLite, минимальные требования к серверу. Дальше — пошаговая установка.

Установка на сервер

1. Требования

Подойдёт любой VPS от 512 МБ RAM — GoatCounter не требует ни базы данных отдельно, ни рантайма вроде Node.js или PHP.

2. Скачивание бинарника

cd /opt
sudo mkdir goatcounter && cd goatcounter

TAG=$(curl -s https://api.github.com/repos/arp242/goatcounter/releases/latest | grep -oP '"tag_name":\s*"\K[^"]+')
curl -LO "https://github.com/arp242/goatcounter/releases/download/${TAG}/goatcounter-${TAG}-linux-amd64.gz"
gunzip "goatcounter-${TAG}-linux-amd64.gz"
sudo mv "goatcounter-${TAG}-linux-amd64" goatcounter
sudo chmod +x goatcounter

3. Создание пользователя и базы

sudo useradd -r -s /usr/sbin/nologin goatcounter
sudo chown -R goatcounter:goatcounter /opt/goatcounter

sudo -u goatcounter /opt/goatcounter/goatcounter db create site \
  -vhost stats.вашдомен.ру \
  -user.email you@вашдомен.ру \
  -db sqlite3+/opt/goatcounter/db/goatcounter.sqlite3

Команда попросит задать пароль администратора и выведет ссылку на панель.

4. Systemd-сервис

Создайте /etc/systemd/system/goatcounter.service:

[Unit]
Description=GoatCounter
After=network.target

[Service]
Type=simple
User=goatcounter
Group=goatcounter
WorkingDirectory=/opt/goatcounter
ExecStart=/opt/goatcounter/goatcounter serve \
  -db sqlite3+/opt/goatcounter/db/goatcounter.sqlite3 \
  -listen localhost:8081 \
  -tls none
Restart=on-failure

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now goatcounter

-tls none — TLS отдаём на откуп Nginx, GoatCounter слушает только локально.

5. Reverse proxy и HTTPS

server {
    listen 80;
    server_name stats.вашдомен.ру;

    location / {
        proxy_pass http://127.0.0.1:8081;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
sudo certbot --nginx -d stats.вашдомен.ру

Подключение счётчика к сайту

В панели GoatCounter (https://stats.вашдомен.ру) создайте сайт и скопируйте код — обычно это одна строка перед закрывающим </body>:

<script data-goatcounter="https://stats.вашдомен.ру/count"
        async src="https://stats.вашдомен.ру/count.js"></script>

Никакого gtag.js, менеджера тегов и настройки согласий — счётчик готов сразу после публикации.

Что вы увидите в статистике

  • Просмотры страниц и уникальные посетители по дням/неделям/месяцам
  • Источники перехода (реферер, поисковик, соцсеть)
  • Страны, браузеры, размеры экрана
  • Кампании — если добавить ?utm_campaign= к ссылке, GoatCounter сам сгруппирует переходы

Этого достаточно, чтобы понимать, откуда приходит трафик и какие страницы читают, — то есть закрывает ровно ту задачу, ради которой владельцы небольших сайтов вообще ставят аналитику.

Чего в GoatCounter нет — и когда это важно

Честно: если вам нужны воронки продаж, A/B-тесты, интеграция с рекламным кабинетом или детальный путь конкретного пользователя по сайту — это не сюда. GoatCounter сознательно не хранит данные, по которым можно построить такой профиль, — в этом и приватность, и ограничение одновременно. Для интернет-магазина с активной контекстной рекламой связка Google Analytics + Google Ads по-прежнему может быть оправдана. Для сайта-визитки, блога или лендинга, где вопрос стоит «сколько человек зашло и откуда» — приватного счётчика хватает с запасом.

Типичные ошибки

  • Забыли открыть порт для Let’s Encrypt. Certbot по HTTP-01 проверке стучится на 80-й порт — убедитесь, что фаервол его пропускает хотя бы на время выпуска сертификата.
  • GoatCounter слушает 0.0.0.0 вместо localhost. Тогда счётчик доступен напрямую по IP:порту в обход Nginx и HTTPS. Всегда указывайте -listen localhost:8081.
  • Нет ротации и бэкапа базы SQLite. Файл goatcounter.sqlite3 — это вся ваша статистика за всё время. Добавьте его в общий бэкап сервера (см. статью про Borg Backup).
  • Панель администратора без ограничения доступа. Дополнительно закройте /opt/goatcounter через Basic Auth или ограничение по IP в Nginx, если не хотите полагаться только на пароль в самом GoatCounter.

Сколько это стоит

Сам GoatCounter бесплатен и не требует лицензий. Затраты — это поддомен (обычно бесплатно в рамках существующего домена) и, если у вас ещё нет своего сервера, минимальный VPS — от 300 ₽/мес хватит с большим запасом даже для сайта с десятками тысяч визитов. Для сравнения: платные privacy-friendly сервисы вроде Plausible Cloud или Fathom берут от 9–14 $/мес за облачный хостинг той же по смыслу статистики.

Итог

Приватная аналитика на своём сервере закрывает базовую задачу — понимать, кто и откуда приходит на сайт, — без cookie-баннера, слежки и рисков, связанных с хранением данных посетителей за рубежом. Установка занимает четверть часа, а дальше сервис не требует внимания месяцами.

Похожие материалы

Если нужно перенести аналитику на свой сервер или настроить сайт с нуля так, чтобы данные посетителей никуда не утекали — напишите, разверну и подключу под ключ.