Статистика посещений сайта с проверкой ботов и пауков
Плагин для Cotonti CMF, обеспечивающий детальный учёт посещений сайта с расширенной аналитикой по каждому визиту и определением поисковых роботов, краулеров и пауков.
большой скриншот по ссылке
Русский: Статистика посещений сайта с проверкой ботов и пауков
Плагин для 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 и т.п.).
- Защитить контент от парсинга нежелательными краулерами.
Как это работает:
- Белый список (
lib/Fixtures/WhitelistBots.php)
Содержит массив имён ботов, которым разрешён доступ. Проверка идёт по частичному совпадению без учёта регистра.
Администратор может легко редактировать этот файл. - Проверка и блокировка — происходят непосредственно в хуке
global(visitor_stats.global.php), который выполняется при каждом запросе.
Если обнаруженный бот отсутствует в белом списке:- Визит записывается в БД с полной детализацией и флагом
vs_blocked = 1. - Посетителю отдаётся HTTP‑ответ 403 Forbidden (HTML‑страница).
- Дальнейшее выполнение Cotonti прекращается, экономя ресурсы.
- Визит записывается в БД с полной детализацией и флагом
- Функция
isAllowedBot()(вinc/visitor_stats.functions.php)- Всегда разрешает людей (
nullили пустое имя бота). - Блокирует «подозрительные» UA, помеченные как
Suspicious UA. - Сравнивает имя бота с белым списком через
stripos().
- Всегда разрешает людей (
- Отладочный режим
В том же файле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_id | BIGINT UNSIGNED AUTO_INCREMENT | Первичный ключ |
| vs_date | INT UNSIGNED | Дата визита (UNIX timestamp) |
| vs_ip | VARCHAR(45) | IP-адрес (IPv4 или IPv6) |
| vs_user_id | INT UNSIGNED | ID пользователя Cotonti (0 для гостей) |
| vs_referer | VARCHAR(500) | Источник перехода (HTTP_REFERER) |
| vs_user_agent | VARCHAR(500) | Строка User‑Agent |
| vs_page | VARCHAR(500) | URL страницы (REQUEST_URI) |
| vs_crawler_name | VARCHAR(255) | Имя обнаруженного краулера (NULL, если не бот) |
| vs_browser | VARCHAR(255) | Браузер и версия |
| vs_os | VARCHAR(255) | Операционная система |
| vs_device_type | VARCHAR(50) | Тип устройства (Desktop/Mobile/Tablet) |
| vs_device_model | VARCHAR(255) | Модель устройства |
| vs_country | VARCHAR(10) | Код страны (из Cloudflare или ip-api) |
| vs_isp | VARCHAR(255) | Провайдер (ISP) |
| vs_is_vpn | TINYINT(1) | 1 — используется VPN/прокси, 0 — нет |
| vs_is_bot | TINYINT(1) | 1 — бот, 0 — человек |
| vs_unique | TINYINT(1) | 1 — новый посетитель, 0 — вернувшийся |
| vs_blocked | TINYINT(1) | 1 — визит заблокирован плагином, 0 — пропущен |
Индексы: PRIMARY (vs_id), KEY по vs_date, vs_ip, vs_user_id, vs_crawler_name.
Таблица ежедневной сводки cot_visitor_stats_daily
| Поле | Тип | Описание |
|---|---|---|
| vsd_id | INT UNSIGNED AUTO_INCREMENT | Первичный ключ |
| vsd_date | DATE | Дата (уникальная) |
| vsd_total_visits | INT UNSIGNED | Всего визитов за день |
| vsd_human_visits | INT UNSIGNED | Визитов людей |
| vsd_bot_visits | INT UNSIGNED | Визитов ботов |
| vsd_unique_visitors | INT UNSIGNED | Уникальных посетителей |
| vsd_updated_at | INT UNSIGNED | Время последнего обновления (timestamp) |
Уникальный ключ по vsd_date.
Таблица статистики по краулерам cot_visitor_stats_crawlers
| Поле | Тип | Описание |
|---|---|---|
| vsc_id | INT UNSIGNED AUTO_INCREMENT | Первичный ключ |
| vsc_date | DATE | Дата |
| vsc_crawler_name | VARCHAR(255) | Имя краулера |
| vsc_visits | INT UNSIGNED | Количество визитов этого краулера за день |
| vsc_updated_at | INT UNSIGNED | Время последнего обновления |
Уникальный ключ по комбинации vsc_date + vsc_crawler_name.
Почему таблицы cot_visitor_stats_daily и cot_visitor_stats_crawlers пусты?
На данный момент плагин ведёт запись только в основную таблицу cot_visitor_stats.
Агрегация дневных итогов и суммирование по краулерам в соответствующих таблицах не выполняется автоматически.
Эти таблицы были созданы «на будущее»: их структура готова, и в следующих версиях планируется реализовать механизм периодического (например, по cron) или событийного заполнения, чтобы ускорить отчёты за большие промежутки времени.
Текущая админка строит всю статистику напрямую через SQL‑запросы к cot_visitor_stats (подсчёт COUNT, группировки), поэтому сводные таблицы пока остаются незаполненными.
Установка
- Скопируйте папку
visitor_statsв каталогpluginsвашего сайта. - Перейдите в админку Cotonti → «Расширения».
- Найдите в списке плагин Visitor Statistics with Crawler Detection и нажмите «Установить».
- При установке автоматически выполнятся SQL‑запросы из
setup/visitor_stats.install.sql— будут созданы три таблицы. - После установки плагин сразу начинает фиксировать визиты (на страницы фронтальной части и админки).
Для удаления плагина используйте стандартную процедуру в админке: будет выполнен файл 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
Товар без файла для загрузки
- Категория расширения
- SEO и оптимизация, Утилиты и инструменты
- Доступность
- Бесплатно
Обсуждение страницы в Telegram
Автор контента
Оффлайн
webitproff
Последняя авторизация: 11.07.2026 19:44
Чем могу помочь?
Оказываю весь спектр услуг по CMF Cotonti. Разработка открытых и закрытых корпоративных интернет порталов, небольших социальных сетей, торговые площадки, маркетплейсы, биржи фриланса, каталоги товаров оптовых поставщиков, интернет-магазин под заказ, чтобы делать совместные покупки и групповые совместные продажи от имени нескольких продавцов.
Разработки на GitHub бесплатно
Telegram
- 23.06.2026 08:01
- 23.06.2026 16:20
- Язык:
Связанные и похожие товары
Витрина Market PRO
CMS, Скрипт и Движок - веб сайта онлайн-витрины, интернет магазина инфопродуктов и цифровых товаров. Разные цены в разных валютах на товар. Онлайн-оплата в криптовалюте за товары и услуги.
English