Вот и всё! Боты захватили интернет

07-08-2026Время чтения ~ 6 мин.Блог 7

В Albireo CMS есть встроенная статистика просмотров страниц сайта и она показывает, что доля ботов стремительно растёт. В цифрах — это примерно 80-90%. 😟

Вот и всё! Боты захватили интернет

Начну издали

Изначально статистика для Albireo CMS появилась несколько лет назад. Её задача очень простая — вести число просмотров страницы (хиты). Каждый посетитель — это +1. Еще раз обновил страницу — ещё +1. Примитивно, но этого достаточно. Если нужна детализация, то есть Google Analytics.

Несколько месяцев назад я заметил, что статистика стала давать какие-то большие числа. Потом на сервере случилось такое нашествие ботов, что сайт просто отключился. Я об этом писал и это привело к тому, что мне пришлось заменить php-сессии на http-куки. Потому что даже несколько байтов файла сессии способен забить диск сервера, если ботов будет несколько тысяч.

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

Первая проба

Я сразу понял, что нет никакого смысла бороться с таким трафиком ботов. Думаю, что это задача уровня сервера, а значит пусть с этим разбирается хостер. Я вижу, что сайт создаётся очень быстро, то есть Albireo CMS легко справляется с текущим потоком трафика.

Поэтому задачу я очертил попроще — отсечь ботов от подсчёта статистики.

Вначале я пробовал играть разными http-заголовками и быстро пришёл к выводу, что основной это HTTP_USER_AGENT. Я где-то нашел список для ботов («пауков» и т.п.) и написал регулярку для отсеивания. Это привело к небольшому снижению числа просмотров, но казалось, что это не так эффективно.

Текущее решение

Тогда я сделал немного проще. Взял логи сервера и скормил его ИИ, чтобы он нашел все подозрительные HTTP_USER_AGENT. Так появился первый список.

Потом ИИ предложил ещё анализировать наличие HTTP_ACCEPT_LANGUAGE, поскольку все браузеры его отправляют, но не все боты это делают.

Для отслеживания ботов, я использую такую регулярку:

bot|spider|crawl|slurp|mediapartners|ia_archiver|semrush|ahrefs|mj12bot|dotbot|bytespider|claudebot|perplexity|chatgpt|gptbot|anthropic|cohere|python|java|curl|wget|libwww|httpclient|okhttp|phantomjs|headless|scrapy|guzzle|axios|fasthttp|go-http|selenium|puppeteer|playwright|scan|scanner|checker|nikto|sqlmap|masscan|zgrab|censys|shodan|acunetix|dirbuster|rce|shell|rss|feed|externalagent
Ещё разу уточню, что это не блокировка ботов, а определение того, что текущий посетитель — бот. И он не должен участвовать в статистике.

Этот алгоритм позволил сразу же охладить цифры c 1500-3000 хитов до 300-700. То есть падение примерно в 3-5 раз.

Всё не так просто

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

Для проверки я включил внутренний лог Albireo CMS, где фиксировал уже прошедшие HTTP_USER_AGENT. Оказалось, что таки да, все они выглядят как реальные посетители.

При этом я всё равно сомневаюсь, что у меня те же 400 хитов в сутки, поскольку я вижу например, что главную один и тот же агент запрашивает 20 раз в течение нескольких секунд. Понятно, что это нетипично. Или например старая запись, которая вдруг набирает десятки просмотров за день.

Всё это боты, но в числах выразить их сложно.

Google Analytics который врёт

Хотя я использую GA очень давно, последние годы у меня стойкое ощущение, что сервис живёт в какой-то своей реальности. Я не про их жутко запутанные отчеты, а о том, что цифры часто не сходятся. Например количество кликов в поиске никак не соответствует просмотрам. Поэтому оценивать сайт через GA — это как вилами по воде — разве что плюс-минус оценить тенденцию.

Катастрофа случилась после того, как ввел на сайте поддержку закона GDPR, где требуется явное согласие посетителя на сбор аналитики. Без этого аналитика работать не будет.

На графике и по числам возникает резкий спад числа посещений (в Google Analytics) примерно в 10 раз. То есть посетители по умолчанию не хотят сбора статистики. (И я их понимаю!)

Сейчас GA собирает какие-то крохи в буквальном смысле — по его статистике у меня может быть 5-10, ну иногда 20 посетителей. Я понимаю, что мой сайт не звезда, но точно не десять реальных посетителей. Всё дело именно в том, что код GA просто не загружается, поэтому нет реальной картины. Тут играет и согласие GDPR, да и блокировщики браузеров тоже немало блокируют сбор статистики.

Разрыв между статистикой GA и внутренней статистикой Albireo CMS в 50-100 раз!

Понятно, что польза от Google Analytics близка к нулю и стоит подумать, нужна ли она вообще на сайте.

Но главная проблема в том, что у нас до сих пор нет реальных цифр статистики, которые покажут живых посетителей сайта.

Возможная перспектива

Если не рассматривать сторонние решения, а именно использование защиты от ботов на уровне сервера/хостинга, то единственным более-менее работающим вариантом будут решения, основанные на JavaScript.

JS-скрипты как правило не обрабатываются ботами, поскольку это дорого и сложно. Бот просто загружает html-код страницы и на этом всё рубит. Но реальный посетитель всё-таки производит какие-то действия, а поскольку это браузер, то может быть выполнен js-код.

В качестве примера Gemini 3.6 Flash мне написал простенькую функцию для проверки ботности:

function isBot() {
  // 1. Прямой флаг автоматизации
  if (navigator.webdriver) return true;

  // 2. Странные или отсутствующие параметры экрана
  if (window.outerWidth === 0 && window.outerHeight === 0) return true;
  if (!navigator.languages || navigator.languages.length === 0) return true;

  // 3. Отсутствие поддержки специфических фич (стек эмуляции часто засыпается на этом)
  try {
    const canvas = document.createElement('canvas');
    const gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');
    const debugInfo = gl.getExtension('WEBGL_debug_renderer_info');
    const renderer = gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL);
    if (renderer.includes('SwiftShader') || renderer.includes('LLVMpipe')) {
      return true; // Это программный (виртуальный) рендеринг, характерный для серверов/ботов
    }
  } catch (e) {}

  return false;
}

Но использование JS имеет ряд проблем, поскольку сам по себе такой код работает на стороне клиента и нет никакого способа его проверить через PHP на сервере.

Поэтому пока я продумываю алгоритм, когда статистика собирается через «прослойку» js-кода с AJAX-запросом. Например для каждой страницы внизу создаётся несложный script-код с fetch-запросом на статистику, который сработает через 3 секунды. Посетитель входит на сайт, включается таймер. Через 3 секунды формируется ajax-запрос, который и «дернет» статистику.

Боты не будут дожидаться таймаута и не смогут отправить запрос. Кроме того, в Albireo CMS автоматом формируются токены защиты, а значит, любой post-запрос уже защищён и зашифрован для каждого посетителя. Бот вряд ли станет анализировать токены, а значит сработает встроенная ajax-защита Albireo CMS.

Итого

Насколько это востребовано?

Лично я не собираюсь бороться с ботами, поскольку это как борьба с ветряными мельницами. Тенденция очевидная, плыть против ветра, себе дороже. С другой стороны иметь полноценную статистику позволит полностью отказаться от всех сторонних сервисов, а также от необходимости размещения GDPR-баннера. Внутренняя статистика анонимна и не собирает персональные данные и часто этого более чем достаточно для простого личного сайта. 😎

Похожие записи
Оставьте комментарий!
Сайт использует cookie
Для улучшения работы сайта собирается анонимная статистика через Google Analytics. Разрешить использование аналитических cookie?