Статистика посещений сайта с проверкой ботов и пауков

Плагин для Cotonti CMF, обеспечивающий детальный учёт посещений сайта с расширенной аналитикой по каждому визиту и определением поисковых роботов, краулеров и пауков.

Опубликовано в: Модули и Плагины для Cotonti

большой скриншот по ссылке

Русский: Статистика посещений сайта с проверкой ботов и пауков

Плагин для Cotonti CMF, обеспечивающий детальный учёт посещений сайта с расширенной аналитикой по каждому визиту и определением поисковых роботов, краулеров и пауков.
Данные сохраняются в базу данных и доступны для просмотра в административной панели.

Основные возможности

📊 Сбор и хранение детальной информации о каждом визите

Для каждого обращения к сайту (за исключением административных AJAX-запросов — настраивается опционально) в таблицу cot_visitor_stats записываются следующие данные:

  • IP-адрес посетителя с поддержкой заголовков Cloudflare (CF-Connecting-IP), X-Forwarded-For и X-Real-IP.
    Если IP не проходит валидацию, записывается 0.0.0.0.
  • User‑Agent (строка браузера/робота) — сохраняется полностью (до 500 символов).
  • Идентификатор пользователя Cotonti (если посетитель авторизован).
  • Страница сайта (REQUEST_URI), на которую зашёл посетитель.
  • Referer — источник перехода (до 500 символов).
  • Дата и время визита в формате UNIX timestamp.

🤖 Определение поисковых ботов и краулеров

Используется портированная версия библиотеки Crawler-Detect (автор Mark Beech, MIT).
Плагин не требует установки Composer — все классы библиотеки расположены внутри каталога lib/ и адаптированы для работы без пространств имён.

На основе сигнатур (более 100 ботов) определяется, является ли посетитель роботом. В случае обнаружения в базу записывается:

  • vs_crawler_name — имя бота (например, Googlebot, Bingbot, YandexBot, Chrome-Lighthouse, Google-InspectionTool и т.д.).
  • vs_is_bot — флаг 1 (бот) или 0 (человек).

Список ботов пополняется и может быть расширен администратором путём редактирования файла lib/Fixtures/Crawlers.php.

Дополнительно реализована эвристика для выявления подозрительных User‑Agent, маскирующихся под устаревшие устройства (Android 4–6, Nexus 5, Nexus 5X и подобные). Такие визиты помечаются как Suspicious UA и считаются ботами.

🌍 Геолокация и данные о сети

  • Страна — извлекается из заголовка CF-IPCountry (Cloudflare) или остаётся пустой, если заголовок отсутствует.
  • Провайдер (ISP) и признак VPN/прокси — получаются через бесплатный API ip-api.com (поле isp, proxy, hosting). Результат кешируется в сессии на 1 час, чтобы не превышать лимиты сервиса.
  • Флаг VPN/прокси (vs_is_vpn) — 1, если ip-api сообщает, что IP принадлежит хостингу или публичному прокси.

📱 Анализ устройства и программного обеспечения

Из User‑Agent извлекаются:

  • Браузер и версия (Firefox, Chrome, Safari, Edge, Opera, IE) — сохраняется в vs_browser.
  • Операционная система (Windows, macOS, Linux, Android, iOS) — vs_os.
  • Тип устройства (Desktop, Mobile, Tablet) — vs_device_type.
  • Модель устройства (например, Nexus 5, iPhone 13, SM-G973F) — vs_device_model.
    Для ПК указывается PC.

👤 Уникальные посетители

На основе сессионной переменной определяется, новый это посетитель или вернувшийся.
vs_unique = 1 для первого визита, 0 для последующих заходов в рамках одной сессии.

🛡️ Белый список ботов и блокировка нежелательных краулеров

Плагин умеет избирательно блокировать ботов, не входящих в белый список.
Это позволяет:

  • Снизить нагрузку на сервер, отсекая бесполезных или вредоносных ботов.
  • Пропускать только тех поисковых роботов и сервисы, которые реально помогают продвижению (Google, Яндекс, Bing, Facebook, PageSpeed Insights, Ahrefs и т.п.).
  • Защитить контент от парсинга нежелательными краулерами.

Как это работает:

  1. Белый список (lib/Fixtures/WhitelistBots.php)
    Содержит массив имён ботов, которым разрешён доступ. Проверка идёт по частичному совпадению без учёта регистра.
    Администратор может легко редактировать этот файл.
  2. Проверка и блокировка — происходят непосредственно в хуке global (visitor_stats.global.php), который выполняется при каждом запросе.
    Если обнаруженный бот отсутствует в белом списке:
    • Визит записывается в БД с полной детализацией и флагом vs_blocked = 1.
    • Посетителю отдаётся HTTP‑ответ 403 Forbidden (HTML‑страница).
    • Дальнейшее выполнение Cotonti прекращается, экономя ресурсы.
  3. Функция isAllowedBot()inc/visitor_stats.functions.php)
    • Всегда разрешает людей (null или пустое имя бота).
    • Блокирует «подозрительные» UA, помеченные как Suspicious UA.
    • Сравнивает имя бота с белым списком через stripos().
  4. Отладочный режим
    В том же файле visitor_stats.global.php есть флаг $debug.
    Если установить его в true, плагин будет записывать в лог debug_bot.log каждое срабатывание: время, User‑Agent, имя бота и решение (ALLOWED/BLOCKED).

🗑️ Автоматическая очистка таблиц по расписанию

Плагин поддерживает автоматическую очистку всех трёх таблиц через заданный интервал времени.
По умолчанию очистка происходит каждые 72 часа без необходимости в настройке cron.

Принцип работы:

  • В папке plugins/visitor_stats/last_cleanup/ создаётся служебный файл timestamp, хранящий время последней очистки.
  • При каждом запросе плагин проверяет, прошло ли с момента последней очистки заданное количество часов.
  • Если интервал превышен, таблицы очищаются, а временная метка обновляется.
  • Автоочистка управляется флагом $autoCleanup в visitor_stats.global.php (по умолчанию true, можно отключить).
  • Очистка не затрагивает структуру таблиц – удаляются только данные.

📈 Административная панель

В разделе «Прочее» админки Cotonti доступна страница статистики.
Она предоставляет:

  • Карточки с общими цифрами: всего визитов, людей, ботов, уникальных посетителей.
  • Фильтр по периоду (дни) — пока декоративный, в будущем будет влиять на выборку.
  • Фильтр «Показать только ботов» — при включении таблица журнала отображает только строки, где обнаружен бот/краулер.
  • Таблица журнала посещений со всеми сохранёнными полями, включая колонку «Заблокирован», которая показывает, был ли визит заблокирован плагином (на основе поля vs_blocked).
  • Пагинация (по 50 записей на страницу).
  • Кнопка ручной очистки данных — полностью удаляет все записи из трёх таблиц без удаления структуры. Доступна только администраторам.

Интерфейс построен на Bootstrap 5.3, встроенном в админку Cotonti (стили подключать не нужно).

🌐 Локализация

Поддерживаются русский и английский языки. Файлы локализации находятся в lang/.


Структура плагина и назначение файлов

plugins/visitor_stats/
├── visitor_stats.setup.php               # Конфигурация плагина
├── visitor_stats.admin.php               # Административная панель
├── visitor_stats.global.php              # Глобальный хук (запись визитов, блокировка ботов, автоочистка, отладка)
├── inc/
│   ├── visitor_stats.functions.php       # Вспомогательные функции и подключение компонентов
│   ├── CrawlerDetectService.php          # Сервис-обёртка над библиотекой CrawlerDetect
│   ├── VisitorStatsService.php           # Основная бизнес-логика (сбор и запись данных)
│   └── VisitorStatsRepository.php        # Слой работы с базой данных
├── lib/
│   ├── CrawlerDetect.php                 # Главный класс детектирования ботов (портированная версия)
│   └── Fixtures/
│       ├── AbstractProvider.php          # Абстрактный класс для списков сигнатур
│       ├── Crawlers.php                  # Сигнатуры ботов и краулеров
│       ├── Exclusions.php                # Шаблоны, исключаемые из User‑Agent перед проверкой
│       ├── Headers.php                   # Заголовки, в которых может передаваться User‑Agent
│       └── WhitelistBots.php            # Белый список разрешённых ботов
├── setup/
│   ├── visitor_stats.install.sql         # SQL-запросы для создания таблиц
│   └── visitor_stats.uninstall.sql       # SQL-запросы для удаления таблиц
├── lang/
│   ├── visitor_stats.en.lang.php         # Английская локализация
│   └── visitor_stats.ru.lang.php         # Русская локализация
├── tpl/
│   └── visitor_stats.admin.tpl           # Шаблон административной панели
├── last_cleanup/                         # Папка для временной метки автоматической очистки
│   └── timestamp                         # Файл с временем последней автоочистки (создаётся автоматически)
└── index.html                            # Заглушка

Описание ключевых компонентов

  • visitor_stats.setup.php — метаданные плагина: код, название, категория, версия, автор, лицензия, права доступа для гостей и пользователей.
  • visitor_stats.global.php — центральный хук, выполняющийся при каждом запросе. В нём реализованы:
    • вызов VisitorStatsService::recordVisit() для записи визита,
    • проверка ботов по белому списку и блокировка нежелательных,
    • автоматическая очистка таблиц по временной метке,
    • опциональный отладочный лог блокировок.
  • visitor_stats.admin.php — контроллер страницы статистики в админке. Обрабатывает фильтры, пагинацию, ручную очистку данных, формирует запросы к БД и передаёт переменные в шаблон.
  • inc/visitor_stats.functions.php — регистрирует таблицы плагина в Cot::$db, подключает сервисные классы и содержит коллекцию функций для извлечения информации о визите: getRealIp(), getBrowser(), getOS(), getDeviceType(), getDeviceModel(), getCountry(), getIspInfo(), isUniqueVisitor(), а также функцию проверки белого списка isAllowedBot(). Эти функции могут использоваться в любом месте Cotonti (в том числе в других плагинах и шаблонах).
  • inc/CrawlerDetectService.php — сервис-одиночка, предоставляющий методы isCrawler($ua) и getCrawlerName($ua). При каждом вызове создаёт экземпляр CrawlerDetect с переданным User‑Agent, что гарантирует актуальную проверку.
  • inc/VisitorStatsService.php — главный сервис, агрегирующий все данные о визите. В методе recordVisit() собираются IP, UA, геолокация, признаки бота и уникальности, после чего массив передаётся в репозиторий для вставки в БД.
  • inc/VisitorStatsRepository.php — класс для работы с базой данных. Содержит методы для вставки записей (insert), получения статистики за период (countVisits, countBotVisits, countUniqueVisitors), извлечения топов (getTopPages, getTopReferers, getTopCrawlers) и дневной разбивки (getDailyBreakdown). Эти методы пока не задействованы в админке, но готовы к использованию.
  • lib/CrawlerDetect.php и Fixtures/* — портированная библиотека детектирования ботов. Crawlers.php содержит список сигнатур (имена ботов), Exclusions.php — шаблоны, которые удаляются из User‑Agent перед проверкой (для ускорения и снижения ложных срабатываний), Headers.php — список заголовков, в которых может передаваться User‑Agent.
  • lang/ — языковые файлы. Содержат все текстовые строки, используемые в админке и фронтальной части (при необходимости).
  • tpl/visitor_stats.admin.tpl — шаблон страницы статистики с использованием классов Bootstrap 5.3. Не требует подключения внешних стилей, так как Cotonti уже включает Bootstrap.
  • setup/*.sql — SQL-запросы для создания и удаления таблиц плагина.
  • last_cleanup/ — служебная папка, создаваемая плагином для хранения временной метки автоматической очистки. Содержит файл timestamp с временем последней очистки.

Структура базы данных

Плагин работает с тремя таблицами (префикс cot_ задаётся конфигурацией Cotonti; по умолчанию cot_).

Основная таблица cot_visitor_stats

Хранит каждую зафиксированную сессию. Состав полей:

ПолеТипОписание
vs_idBIGINT UNSIGNED AUTO_INCREMENTПервичный ключ
vs_dateINT UNSIGNEDДата визита (UNIX timestamp)
vs_ipVARCHAR(45)IP-адрес (IPv4 или IPv6)
vs_user_idINT UNSIGNEDID пользователя Cotonti (0 для гостей)
vs_refererVARCHAR(500)Источник перехода (HTTP_REFERER)
vs_user_agentVARCHAR(500)Строка User‑Agent
vs_pageVARCHAR(500)URL страницы (REQUEST_URI)
vs_crawler_nameVARCHAR(255)Имя обнаруженного краулера (NULL, если не бот)
vs_browserVARCHAR(255)Браузер и версия
vs_osVARCHAR(255)Операционная система
vs_device_typeVARCHAR(50)Тип устройства (Desktop/Mobile/Tablet)
vs_device_modelVARCHAR(255)Модель устройства
vs_countryVARCHAR(10)Код страны (из Cloudflare или ip-api)
vs_ispVARCHAR(255)Провайдер (ISP)
vs_is_vpnTINYINT(1)1 — используется VPN/прокси, 0 — нет
vs_is_botTINYINT(1)1 — бот, 0 — человек
vs_uniqueTINYINT(1)1 — новый посетитель, 0 — вернувшийся
vs_blockedTINYINT(1)1 — визит заблокирован плагином, 0 — пропущен

Индексы: PRIMARY (vs_id), KEY по vs_date, vs_ip, vs_user_id, vs_crawler_name.

Таблица ежедневной сводки cot_visitor_stats_daily

ПолеТипОписание
vsd_idINT UNSIGNED AUTO_INCREMENTПервичный ключ
vsd_dateDATEДата (уникальная)
vsd_total_visitsINT UNSIGNEDВсего визитов за день
vsd_human_visitsINT UNSIGNEDВизитов людей
vsd_bot_visitsINT UNSIGNEDВизитов ботов
vsd_unique_visitorsINT UNSIGNEDУникальных посетителей
vsd_updated_atINT UNSIGNEDВремя последнего обновления (timestamp)

Уникальный ключ по vsd_date.

Таблица статистики по краулерам cot_visitor_stats_crawlers

ПолеТипОписание
vsc_idINT UNSIGNED AUTO_INCREMENTПервичный ключ
vsc_dateDATEДата
vsc_crawler_nameVARCHAR(255)Имя краулера
vsc_visitsINT UNSIGNEDКоличество визитов этого краулера за день
vsc_updated_atINT UNSIGNEDВремя последнего обновления

Уникальный ключ по комбинации vsc_date + vsc_crawler_name.

Почему таблицы cot_visitor_stats_daily и cot_visitor_stats_crawlers пусты?

На данный момент плагин ведёт запись только в основную таблицу cot_visitor_stats.
Агрегация дневных итогов и суммирование по краулерам в соответствующих таблицах не выполняется автоматически.
Эти таблицы были созданы «на будущее»: их структура готова, и в следующих версиях планируется реализовать механизм периодического (например, по cron) или событийного заполнения, чтобы ускорить отчёты за большие промежутки времени.

Текущая админка строит всю статистику напрямую через SQL‑запросы к cot_visitor_stats (подсчёт COUNT, группировки), поэтому сводные таблицы пока остаются незаполненными.


Установка

  1. Скопируйте папку visitor_stats в каталог plugins вашего сайта.
  2. Перейдите в админку Cotonti → «Расширения».
  3. Найдите в списке плагин Visitor Statistics with Crawler Detection и нажмите «Установить».
  4. При установке автоматически выполнятся SQL‑запросы из setup/visitor_stats.install.sql — будут созданы три таблицы.
  5. После установки плагин сразу начинает фиксировать визиты (на страницы фронтальной части и админки).

Для удаления плагина используйте стандартную процедуру в админке: будет выполнен файл visitor_stats.uninstall.sql, который удалит таблицы.


Использование

Просмотр статистики

В админке Cotonti в разделе «Прочее» появится пункт «Статистика посещений» (или Visitor Statistics в английской версии).
Страница содержит:

  • Четыре карточки в верхней части: общее количество визитов, визиты людей, визиты ботов, уникальные посетители.
  • Форму фильтра: можно задать период в днях (пока не влияет на выборку, оставлено для будущей реализации) и отметить чекбокс «Показать только ботов» — тогда таблица покажет только строки, где обнаружен краулер.
  • Таблицу журнала с постраничным выводом последних визитов. Колонки соответствуют всем собранным полям, включая колонку «Заблокирован», отображающую статус блокировки для каждой записи.
  • Кнопку ручной очистки (доступна только администраторам). При нажатии с подтверждением полностью удаляет все записи из трёх таблиц, но не трогает их структуру.

Информационные функции

В любом месте Cotonti (шаблоны, другие плагины) доступны функции:

  • getRealIp()
  • getUserAgent()
  • getCountry()
  • getBrowser($ua = null)
  • getOS($ua = null)
  • getDeviceType($ua = null)
  • getDeviceModel($ua = null)
  • getIspInfo()
  • isUniqueVisitor()

Они определены в visitor_stats.functions.php и могут использоваться после активации плагина.

Настройка автоочистки

  • Включение/отключение: в файле visitor_stats.global.php найдите строку
    $autoCleanup = true;
    Чтобы отключить автоматическую очистку, замените true на false.
  • Изменение интервала: по умолчанию очистка происходит каждые 72 часа.
    Для изменения интервала отредактируйте условие ($now - $lastCleanup) >= 72 * 3600 в том же файле, подставив нужное количество секунд.
  • Ручная очистка: в любое время можно воспользоваться кнопкой «Очистить все данные» в админке — она сбрасывает все таблицы и обновляет временную метку автоматической очистки.

Управление белым списком ботов

  • Добавление бота: откройте файл lib/Fixtures/WhitelistBots.php и добавьте строку с частью имени бота в массив getAllowed().
    Например, для GrokBot: 'GrokBot',.
  • Отладка: для проверки, какие боты блокируются или пропускаются, временно включите отладку ($debug = true) в visitor_stats.global.php и анализируйте лог debug_bot.log. Не забудьте отключить отладку после проверки.

Технические детали

  • Требования: Cotonti ≥ 1.0 (с поддержкой PHP 8.x), PHP 8.0+, MySQL 5.7+ (или MariaDB).
  • Библиотека Crawler‑Detect портирована из оригинального репозитория JayBizzle/Crawler-Detect (MIT).
    Изменения: убраны namespace и use, адаптированы регулярные выражения (используется разделитель # вместо /), добавлены дополнительные сигнатуры (Chrome-Lighthouse, Google-InspectionTool, meta-externalagent).
  • Внешние зависимости: отсутствуют. Composer не требуется.
  • API ip-api.com: используется для получения ISP и признака прокси. Запросы кэшируются в сессии на 1 час. Сервис бесплатный, но имеет ограничение 45 запросов в минуту с одного IP.
  • Сессии: плагин стартует сессию при необходимости для кэширования данных ip-api и для отслеживания уникальных посетителей.

Планы по развитию

  • Реализовать фоновое заполнение таблиц cot_visitor_stats_daily и cot_visitor_stats_crawlers (через cron или отложенный скрипт).
  • Добавить графики и визуализацию статистики.
  • Внедрить фильтр по дате в админке с реальным ограничением выборки.
  • Расширить количество определяемых ботов.
  • Добавить возможность экспорта данных (CSV, Excel).
  • Интеграция с Cotonti API для получения статистики через REST.

Лицензия

Плагин распространяется под лицензией BSD-3-Clause.
Библиотека Crawler-Detect — MIT.

Автор плагина: webitproff.
Репозиторий: https://github.com/webitproff/visitor-stats-crawler-cotonti



Рейтинг на основе отзывов:
Звезд получено: 0
Oтзывов всего: 0
Средняя оценка: 0
10 минут чтения
Владелец: Carbonate Sodium

Отзывы к товарам

Отзывов пока нет


Добавить в корзину

Товар без файла для загрузки

 

Категория расширения
SEO и оптимизация, Утилиты и инструменты
Доступность
Бесплатно

Обсуждение страницы в Telegram

Автор контента

webitproff

Оффлайн

webitproff

Последняя авторизация: 11.07.2026 19:44

  • Чем могу помочь?

    Оказываю весь спектр услуг по CMF Cotonti. Разработка открытых и закрытых корпоративных интернет порталов, небольших социальных сетей, торговые площадки, маркетплейсы, биржи фриланса, каталоги товаров оптовых поставщиков, интернет-магазин под заказ, чтобы делать совместные покупки и групповые совместные продажи от имени нескольких продавцов.

  • Разработки на GitHub бесплатно
    • 23.06.2026 08:01
    • 23.06.2026 16:20
    • Язык:

    Витрина Market PRO

    CMS, Скрипт и Движок - веб сайта онлайн-витрины, интернет магазина инфопродуктов и цифровых товаров. Разные цены в разных валютах на товар. Онлайн-оплата в криптовалюте за товары и услуги.