Сео.Юнитсблог

9 параметров браузера, по которым Яндекс палит ботов

ИЛИгорь ЛавровАвтор
9 параметров браузера, по которым Яндекс палит ботов

Почему Яндекс не банит, а палит ботов по фингерпринтам

За 4 года практики в накрутке ПФ я не видел ни одного подтверждённого бана сайта. И это не случайность. Яндекс не банит за накрутку в лоб, он давит экономически через антифрод. Цель — сделать накрутку невыгодной. Один из основных инструментов для этого — фингерпринтинг браузера.

Раньше достаточно было просто подменить user-agent и IP. Сейчас это детский сад. Антифрод Яндекса смотрит на десятки параметров браузера, но не по отдельности, а на их согласованность. Если один параметр идеален, но не вяжется с другими — это уже красный флаг. Это как пытаться выдать китайскую подделку за оригинал: вроде похоже, но мелкие детали выдают.

Яндекс не ищет идеального бота. Он ищет шаблонность и несогласованность. Любое отклонение от паттерна поведения живого пользователя, которое можно зафиксировать по фингерпринтам, приводит к тому, что ваш "пользователь" не учитывается в ранжировании, а значит, накрутка становится бесполезной.

Разберём 9 основных параметров, по которым Яндекс палит ботов.

Canvas Fingerprint: не статичный и не пустой

Canvas — это, по сути, графическая подпись вашего браузера. Когда сайт запрашивает отрисовку графики на элементе canvas, браузер использует свой движок, видеокарту, шрифты и другие параметры для генерации изображения. Результат этого рендеринга уникален для каждой связки "браузер + ОС + железо".

Проблема с ботами:

  1. Статичный Canvas: Если каждый бот генерирует одну и ту же Canvas-подпись — это палево. Это как десять человек с одинаковым почерком.
  2. Пустой Canvas: Некоторые антидетект-браузеры или скрипты просто возвращают пустой Canvas. Это ещё большее палево. У живого пользователя Canvas всегда содержит какую-то информацию, даже если это просто белое поле.
  3. Несогласованный Canvas: Если вы, например, говорите, что у вас Windows 10 с Chrome, а Canvas выдаёт подпись, характерную для Linux с Firefox — это несогласованность.

Что нужно: Динамика и правдоподобие. Canvas должен меняться от профиля к профилю и быть согласован с остальными параметрами. Для этого используются сложные алгоритмы генерации шумов и смещений в отрисовке, чтобы каждый Canvas был уникален, но при этом выглядел "живым".

AudioContext: не ноль и не дефолт

AudioContext API позволяет веб-приложениям работать с аудио. И, как и Canvas, он может использоваться для генерации уникального фингерпринта. Браузер использует аудио-движок, аудиокарту, драйверы, и это всё оставляет свой "след" в обработке звука.

Проблема с ботами:

  1. AudioContext = 0: Многие накрутчики просто отключают AudioContext, чтобы избежать лишних "шумов" или упростить эмуляцию. У живого пользователя AudioContext всегда активен и имеет какой-то "отпечаток".
  2. Дефолтный AudioContext: Если все боты выдают один и тот же дефолтный AudioContext без каких-либо вариаций — это тоже признак бота.

Что нужно: AudioContext должен быть активен и генерировать уникальные, но правдоподобные отпечатки. Этого достигают путём добавления мелких, незаметных пользователю шумов, смещений или изменений в параметрах аудио-обработки.

WebGL Renderer/Vendor: согласованность с ОС и железом

WebGL (Web Graphics Library) — это API для 3D-графики в браузере. Через него можно получить информацию о видеокарте (renderer) и её производителе (vendor).

Проблема с ботами:

  1. Несоответствие ОС: Если вы эмулируете macOS, а WebGL renderer показывает, например, "Intel HD Graphics" (характерно для Windows/Linux) вместо "Apple GPU" или "AMD Radeon Pro" — это прямое несоответствие.
  2. Шаблонность: Если все ваши боты показывают один и тот же renderer/vendor, независимо от эмулируемой ОС и браузера — это паттерн. Живые пользователи имеют разнообразие видеокарт.
  3. Отсутствие WebGL: Некоторые антидетекты вообще отключают WebGL, что является аномалией для современного браузера.

Что нужно: WebGL renderer и vendor должны быть логически согласованы с эмулируемой операционной системой и браузером. Если это macOS, то и видеокарта должна быть соответствующая. Это требует обширной базы данных реальных WebGL-отпечатков.

TimeZone: связка с IP и языком

Временная зона (TimeZone) — это один из самых простых, но часто игнорируемых параметров. Браузер сообщает сайту текущую временную зону пользователя.

Проблема с ботами:

  1. Несоответствие IP: Если IP-адрес показывает, что пользователь из Москвы (UTC+3), а браузер сообщает TimeZone Нью-Йорка (UTC-5) — это явное несоответствие.
  2. Несоответствие языку: Если язык браузера ru-RU (русский), а TimeZone показывает Японию — это тоже подозрительно.
  3. Статичная TimeZone: Использование одной TimeZone для всех ботов, работающих из разных географических точек через прокси — это шаблон, который легко детектируется.

Что нужно: TimeZone должна быть согласована с IP-адресом прокси и выбранным языком браузера. Если вы используете московский прокси и ru-RU язык, то TimeZone должна быть UTC+3.

Объект navigator в JavaScript содержит много информации о браузере и устройстве пользователя. Яндекс смотрит на согласованность нескольких его полей.

  1. hardwareConcurrency (количество ядер процессора): Если вы эмулируете старый телефон с 1 ядром, а hardwareConcurrency показывает 16 — это проблема.
  2. languages (предпочитаемые языки): Массив языков должен быть логичен. Например, ['ru-RU', 'ru', 'en-US', 'en'] — это нормальный набор для русскоязычного пользователя. Если там только один en-US для московского IP — палево.
  3. platform (платформа ОС): Должна совпадать с user-agent. Если user-agent говорит "Windows", а platform — "MacIntel" — это сразу детект.
  4. deviceMemory (объём ОЗУ): Если deviceMemory показывает 0.5 GB, а вы эмулируете мощный десктоп — это несоответствие.

Проблема с ботами:

  1. Шаблонность: Все боты имеют одинаковое hardwareConcurrency, deviceMemory.
  2. Несогласованность: Параметры внутри navigator не вяжутся друг с другом или с другими фингерпринтами.

Что нужно: Все параметры navigator должны быть внутренне согласованы и соответствовать эмулируемому устройству и ОС. Это требует динамической генерации этих значений в зависимости от профиля.

Шрифты: нормальный набор пользователя

Список установленных шрифтов — ещё один мощный фингерпринт. У каждого пользователя свой набор шрифтов, зависящий от ОС, установленных программ, региональных настроек.

Проблема с ботами:

  1. Слишком мало шрифтов: Голый Chrome без операционной системы или с минимальной сборкой Linux может иметь всего 5-10 шрифтов. У живого пользователя, особенно на Windows или macOS, их сотни. Это явная аномалия.
  2. Шаблонный набор: Если все боты имеют один и тот же, пусть и большой, набор шрифтов — это опять-таки шаблон.

Что нужно: Имитировать богатый и разнообразный набор шрифтов, характерный для реальных пользователей Windows, macOS или популярных дистрибутивов Linux. Этот набор должен меняться от профиля к профилю.

Touch на десктопе: всегда отключён

API для работы с сенсорными событиями (Touch Events) позволяет сайтам определять, поддерживает ли устройство сенсорный ввод.

Проблема с ботами:

  1. Touch на десктопе: Если вы эмулируете десктопный браузер на Windows или macOS (без тачскрина), а navigator.maxTouchPoints или другие touch-параметры показывают наличие сенсорного ввода — это палево. Это как видеть на ноутбуке без сенсорного экрана, что кто-то пытается его "потрогать".

Что нужно: Для десктопных профилей touch-события должны быть полностью отключены или эмулировать отсутствие тачскрина. Для мобильных профилей — наоборот, активны и правдоподобны.

Battery API: не всегда 100%

Battery Status API позволяет сайтам получать информацию об уровне заряда батареи устройства.

Проблема с ботами:

  1. Всегда 100%: Если Battery API всегда сообщает, что батарея заряжена на 100% (level = 1), и при этом не заряжается (charging = true), это выглядит нереалистично. Живые пользователи заряжают и разряжают свои устройства.
  2. Отсутствие API: Отключение этого API также может быть подозрительным, хотя и не так критично, как другие.

Что нужно: Эмулировать реалистичный уровень заряда батареи, который меняется со временем, и статус зарядки. Это должно быть динамическим параметром для каждого профиля.

navigator.plugins возвращает список плагинов, установленных в браузере.

Проблема с ботами:

  1. navigator.plugins.length = 0: Даже современный Chrome без установленных пользователем плагинов возвращает несколько встроенных плагинов (например, PDF Viewer, Widevine Content Decryption Module). Если это значение равно 0, это выглядит как "голый" или специально урезанный браузер.

Что нужно: navigator.plugins.length должен быть больше нуля и содержать правдоподобный список встроенных плагинов для эмулируемого браузера.

Главный принцип: согласованность важнее рандомизации

Как видите, Яндекс не ищет одну "волшебную" подделку. Он ищет согласованность всех этих параметров.

Вы можете идеально подделать Canvas, но если ваш TimeZone не соответствует IP, а navigator.platform не соответствует user-agent — это всё равно бот. Антифрод Яндекса работает как пазл: если хоть один кусочек не подходит или не вяжется с общей картиной, вся сборка признаётся фейковой.

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

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


Что проверять, выбирая подрядчика по ПФ:

  1. Спрашивайте про Canvas/AudioContext: Как они генерируются? Статичны или динамичны?
  2. Уточняйте про согласованность IP/TimeZone/Language: Есть ли автоматическая синхронизация?
  3. Интересуйтесь, как эмулируется WebGL: Совпадает ли с заявленной ОС?
  4. Спрашивайте про navigator параметры: Как они согласуются между собой и с общим профилем?
  5. Просите показать реальные фингерпринты: А не только отчёты по позициям.
  6. Уточняйте, как отрабатываются обновления антифрода: Это непрерывный процесс.

Смотрите также

POW в капче Яндекса: почему накрутка ПФ стала в 4 раза дороже
Антифрод и техника·

POW в капче Яндекса: почему накрутка ПФ стала в 4 раза дороже

Один сервер раньше генерировал 80 000 кликов в сутки. Сейчас — не больше 20 000. Это разница в 4 раза за то же железо. Виноват POW (proof of work), который Яндекс встроил в капчу в 2024-2025 годах. Это не просто техниче…

Что такое JA3-фингерпринт TLS и почему обычные прокси для ПФ не работают
Антифрод и техника·

Что такое JA3-фингерпринт TLS и почему обычные прокси для ПФ не работают

Представьте, что ваш браузер хочет поговорить с сайтом, например, с Яндексом. Но не просто поговорить, а обменяться секретными данными — логинами, паролями, поисковыми запросами. Чтобы никто не подслушал, они должны сна…

Утечка Google Content Warehouse 2024: что в ней реально важно для русскоязычного SEO
Стратегия ПФ·

Утечка Google Content Warehouse 2024: что в ней реально важно для русскоязычного SEO

23 года я в SEO. Утечка Google Content Warehouse не дала мне новых инструментов. Она дала мне конкретные слова, которыми теперь могу объяснить то, что и так видел по своим клиентским проектам. Это не просто «ещё один сл…