Категории

Как я добавил в свой счётчик посещений источник перехода — и почему это полезно

2025-09-24 15:11:20 | создание сайтов
Cчётчик посещений источник перехода на свой сайт одним скриптом

Привет, айтишники и самоделкины! 😎
Сегодня расскажу, как я улучшил свой простенький PHP-счётчик уникальных посетителей, чтобы он не только считал IP-адреса, но и запоминал, откуда пришёл человек: из Яндекса, с Google, с соцсетей или вообще напрямую.

И да — это реально сделать за 10 минут, даже если вы не full-stack-джедай.

Мой старый счётчик: просто, но скучно

У меня на сайте (/book) давно висел минималистичный счётчик уникальных посетителей. Он:

Код выглядел так:


<?php
$counterFile = '/var/www/book/daily_visitors.dat';
$userAgent = $_SERVER['HTTP_USER_AGENT'] ?? '';
if (preg_match('/bot|crawl|spider|slurp|google|yandex/i', $userAgent)) {
    die();
}
$ip = $_SERVER['REMOTE_ADDR'] ?? '127.0.0.1';
$data = [];
if (file_exists($counterFile)) {
    $data = json_decode(file_get_contents($counterFile), true) ?? [];
}
if (!in_array($ip, $data)) {
    $data[] = $ip;
    file_put_contents($counterFile, json_encode($data));
}
header('Content-Type: text/plain');
echo count($data);
?>

Работает? Да.
Информативен? Не очень.
Хочется понимать, откуда вообще люди узнают о моём сайте? Очень!

Добавляем источник перехода: HTTP_REFERER

В HTTP-заголовках есть поле Referer (да, с ошибкой в слове — исторически сложилось 😅). Оно содержит URL страницы, с которой пользователь перешёл на ваш сайт.

В PHP к нему легко получить доступ:

$referer = $_SERVER['HTTP_REFERER'] ?? '';

Теперь можно не просто сохранять IP, а сохранять структуру вида:

{
  "192.168.1.100": {
    "first_visit": "2025-04-05 12:34:56",
    "referer": "https://yandex.ru/search/?text=мой+сайт"
  },
  "203.0.113.42": {
    "first_visit": "2025-04-05 13:01:22",
    "referer": ""
  }
}

Так мы получим не только количество уникальных, но и историю их прихода.

Обновлённый код счётчика

Вот как теперь выглядит мой counter.php:

 date('Y-m-d H:i:s'),
        'referer' => $referer
    ];
    file_put_contents($counterFile, json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT));
}

// Возвращаем количество уникальных
header('Content-Type: text/plain');
echo count($data);
?>

💡 JSON_UNESCAPED_UNICODE — чтобы кириллица в referer (например, из Яндекса) не превращалась в \u0442\u0435\u043a\u0441\u0442.

Что можно делать дальше?

Теперь у меня есть база данных (ну, почти) в одном файле. А значит:

Важные предупреждения

  1. Referer не всегда есть — если пользователь ввёл URL вручную, открыл закладку или использует приватный режим, он будет пустым.
  2. Можно подделать — но для личной аналитики это не критично.
  3. Не храните чувствительные данные — этот файл лучше держать вне публичной директории (как у меня: /var/www/book/daily_visitors.dat, а не в public_html).

Заключение

Иногда самые простые инструменты — самые полезные.
Мой счётчик — не Google Analytics и не Matomo, но он мой, лёгкий, без трекеров, и теперь он ещё и умный.

Если у вас тоже есть самописный счётчик — попробуйте добавить referer. Это как поставить "черный ящик" на сайт: вы не знаете, что будет, но потом будет интересно посмотреть.

А если захотите — могу скинуть скрипт для парсинга этого файла и вывода красивой статистики в консоли или веб-интерфейсе. Пишите в комменты!

Комментарии

Джон Конор 24.09.2025 15:31
ну так просто сохранил, может потом сделаю себе

Оставить комментарий

← Назад к списку статей

Важно: Блог-эксперимент

Внимание: Cтатьи здесь сгенерированны через нейросеть, не правил ошибки, да и не до этого пока. Блог только запустил. Просто чтобы вы знали и не запускали ядерный реактор по моим статьям ))
НО!
Каждый кейс я делал минимум один раз. Сервера стоят, клиенты довольны, дата-центры не горят.

Если у вас есть вопросы, или Нашли неточность? пишите в коментах — вместе поправим и сделаем статью более качественной. Я лично объясню нюансы из практики.

Посетителей сегодня: 0


© Digital Specialist | Не являемся сотрудниками Google, Яндекса и NASA
Кто я | HSH | Контакты и регион