Сбор и анализ статистики посетителей — одна из ключевых задач для владельцев сайтов на WordPress. Зная, откуда приходят пользователи, какие страницы они просматривают и как долго остаются, можно оптимизировать контент и улучшать конверсию. В этой статье мы рассмотрим, как создать собственный механизм автоматической сборки статистики посетителей в WordPress без использования сторонних сервисов, а также с помощью полезных плагинов.
Почему стоит собирать статистику самостоятельно
Большинство сайтов используют Google Analytics или Яндекс.Метрику, но эти сервисы имеют ограничения по конфиденциальности и иногда замедляют загрузку страниц из-за внешних скриптов. Собственная система статистики позволяет:
- Контролировать все данные на своём сервере;
- Минимизировать влияние на скорость сайта;
- Гибко настраивать сбор необходимых данных;
- Избежать зависимости от внешних сервисов и их изменений.
Однако разработка собственной системы требует знаний PHP, работы с базой данных и понимания принципов сбора данных.
Основные данные для сбора
Чтобы получить полезную статистику, необходимо фиксировать минимум следующих параметров:
- IP адрес посетителя (с целью геолокации и подсчёта уникальных пользователей);
- URL посещённой страницы;
- Время посещения;
- User-Agent (браузер, устройство, ОС);
- Реферер (откуда пришёл пользователь);
- Сессия (чтобы понимать повторные посещения).
Эти данные помогут анализировать поведение и источники трафика.
Создание таблицы для хранения статистики в базе данных
Для хранения данных создадим новую таблицу в базе данных WordPress. Лучше всего сделать это при активации специального плагина или через файл функций темы. Вот пример функции для создания таблицы:
function wpmoney_create_stats_table() {
global $wpdb;
$table_name = $wpdb->prefix . 'wpmoney_visitor_stats';
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE IF NOT EXISTS $table_name (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
ip_address VARCHAR(45) NOT NULL,
page_url TEXT NOT NULL,
visit_time DATETIME NOT NULL,
user_agent TEXT NOT NULL,
referer TEXT DEFAULT NULL,
session_id VARCHAR(64) NOT NULL,
PRIMARY KEY (id),
KEY ip_address (ip_address),
KEY visit_time (visit_time)
) $charset_collate;";
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
dbDelta( $sql );
}
register_activation_hook( __FILE__, 'wpmoney_create_stats_table' );
Этот код создаст таблицу wp_wpmoney_visitor_stats, где будут храниться все основные данные.
Отслеживание посещений и запись данных
Чтобы собирать данные о посетителях, используем хук template_redirect, который срабатывает при загрузке любой публичной страницы.
Пример функции, которая записывает посещение в базу:
function wpmoney_record_visitor_stats() {
if (is_admin()) return; // не записывать в админке
global $wpdb;
$table_name = $wpdb->prefix . 'wpmoney_visitor_stats';
$ip = $_SERVER['REMOTE_ADDR'];
$url = esc_url_raw( home_url( add_query_arg( null, null ) ) );
$time = current_time('mysql');
$user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? sanitize_text_field($_SERVER['HTTP_USER_AGENT']) : '';
$referer = isset($_SERVER['HTTP_REFERER']) ? esc_url_raw($_SERVER['HTTP_REFERER']) : null;
if (!session_id()) {
session_start();
}
$session_id = session_id();
$wpdb->insert(
$table_name,
[
'ip_address' => $ip,
'page_url' => $url,
'visit_time' => $time,
'user_agent' => $user_agent,
'referer' => $referer,
'session_id' => $session_id
],
[ '%s', '%s', '%s', '%s', '%s', '%s' ]
);
}
add_action('template_redirect', 'wpmoney_record_visitor_stats');
Этот код записывает каждое посещение. Для оптимизации можно добавить фильтрацию, чтобы не логировать ботов и повторные заходы в течение сессии.
Отслеживание уникальных посетителей и сессий
Для определения уникальных пользователей используем сессионный идентификатор. Чтобы не создавать сессии для каждого посетителя, можно хранить cookie с уникальным ID.
Пример установки cookie и получения session_id:
function wpmoney_set_visitor_cookie() {
if (!isset($_COOKIE['wpmoney_visitor_id'])) {
$visitor_id = bin2hex(random_bytes(16));
setcookie('wpmoney_visitor_id', $visitor_id, time() + 3600 * 24 * 30, COOKIEPATH, COOKIE_DOMAIN);
$_COOKIE['wpmoney_visitor_id'] = $visitor_id;
}
}
add_action('init', 'wpmoney_set_visitor_cookie');
Замените в функции записи посещений session_id() на $_COOKIE['wpmoney_visitor_id'] для идентификации уникальных пользователей.
Использование плагинов для сбора статистики
Если не хочется копаться в коде, рассмотрите плагины с расширенной статистикой и аналитикой:
- WP Statistics — собирает подробную статистику прямо в админке без отправки данных на внешние сервисы;
- Clearfy Pro — оптимизационный плагин с функциями защиты и сбора полезной аналитики;
- WPGPT — помогает автоматизировать получение и анализ данных через ИИ, можно применять для обработки статистики;
- Expert Review — полезен для сбора отзывов и анализа поведения пользователей на сайте.
Все эти плагины доступны на WPSHOP.RU.
Вывод и анализ собранных данных
Для анализа создайте простой административный интерфейс с выборкой из таблицы статистики. Пример функции для вывода количества посещений за последние 7 дней:
function wpmoney_get_weekly_visits() {
global $wpdb;
$table_name = $wpdb->prefix . 'wpmoney_visitor_stats';
$date_from = date('Y-m-d H:i:s', strtotime('-7 days'));
$count = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(DISTINCT session_id) FROM $table_name WHERE visit_time >= %s",
$date_from
));
return intval($count);
}
Этот код подсчитывает уникальные посетители за неделю. По аналогии можно выводить популярные страницы, источники трафика и т.д.
Заключение
Создание собственной системы сбора статистики в WordPress — задача вполне выполнимая и полезная для владельцев сайтов, которые хотят контролировать данные и оптимизировать сайт без зависимости от внешних сервисов. Используя приведённые примеры кода и рекомендации, можно быстро настроить автоматическую сборку и анализ посещений, а при необходимости подключить популярные плагины для расширенной аналитики.