
В списке параметров, которые проверяют у профиля перед запуском, есть Canvas, WebGL, шрифты, аудио, таймзона, разрешение экрана, язык интерфейса. Чего в этом списке почти никогда нет — так это раскладки клавиатуры. Между тем современный браузер умеет рассказать странице, какие физические клавиши есть на устройстве и какие символы на них нанесены, и делает это через отдельный интерфейс, который антидетекты закрывают в последнюю очередь или не закрывают вовсе.
Практическое следствие простое и неприятное. Ферма профилей, собранная на англоязычной сборке системы, отдаёт одну-единственную латинскую раскладку — и при этом заявляет, что состоит из российских пользователей, которые живут в московской таймзоне, читают сайт на русском языке и вбивают в поиск кириллические запросы. Человек, который ежедневно набирает по-русски, физически не может работать на устройстве, где кириллической раскладки не существует. Ниже — что именно отдаёт браузер, как этот сигнал складывается с остальными, и как привести раскладку в соответствие с легендой профиля. Тема прямо продолжает разбор рассинхрона таймзоны и языка, только на слое, до которого обычно не доходят руки.
Что браузер знает о вашей клавиатуре
Источников данных здесь несколько, и они дополняют друг друга.
Keyboard Map: карта физических клавиш
Интерфейс navigator.keyboard с методом getLayoutMap() возвращает соответствие между кодом физической клавиши и символом, который на ней напечатан в текущей раскладке. Проще говоря: страница спрашивает «что написано на клавише, которая в стандартной позиции соответствует латинской Q», и система честно отвечает. На американской раскладке ответ будет один, на французской — другой, на немецкой — третий. Это не догадка по языку интерфейса, а прямой опрос системной конфигурации.
Коды и значения клавиш в событиях ввода
Когда пользователь что-то печатает, каждое событие несёт две сущности: код физической клавиши (он привязан к позиции на устройстве и не меняется от раскладки) и значение — символ, который получился с учётом активной раскладки и модификаторов. Соответствие между ними — это и есть отпечаток раскладки, снимаемый пассивно, без всякого запроса разрешений. Достаточно, чтобы человек напечатал несколько символов в поисковой строке.
Список языков и предпочтений
Параллельно страница видит язык интерфейса браузера и полный список предпочитаемых языков. Это не раскладка, но сигнал из той же группы, и именно на стыке этих сигналов ищут противоречия.
Поведение при вводе нелатинских символов
Есть ещё косвенный слой: как именно приходят символы. Ввод через системный редактор метода ввода, характерный для восточных языков, даёт композиционные события, которых нет при прямом наборе. Кириллица набирается прямо, без композиции. Расхождение между заявленным регионом и способом ввода тоже читается.
Язык интерфейса подменяется одной строкой в настройках профиля. Раскладка клавиатуры — это конфигурация операционной системы хоста, и она честно проступает сквозь профиль, если инструмент её не перехватывает.
Как это превращается в детектор фермы
Механика здесь та же, что с любым отпечатком, и работает на двух уровнях.
Уровень первый — кластеризация. Если сорок «разных российских пользователей» отдают бит-в-бит одинаковую карту раскладки, состоящую только из латиницы, это один хост. Разнообразия нет там, где у живой аудитории оно обязано быть: у реальных людей встречаются разные комбинации установленных раскладок, разный порядок их следования, разные региональные варианты.
Уровень второй — проверка согласованности. Он опаснее, потому что срабатывает даже на одном визите, без всякой статистики. Профиль заявляет российское гео по адресу, московскую таймзону, русский язык интерфейса, вводит кириллический запрос — и при этом сообщает, что на его устройстве нет ни одной кириллической раскладки. Это внутреннее противоречие, которое не требует сравнения с другими визитами.
Отдельно отмечу третий вариант, встречающийся реже, но выглядящий не лучше: раскладка отсутствует как понятие, потому что интерфейс клавиатуры в профиле отключён или возвращает пустоту. Это тот же случай, что и с отключением любого другого API: вы не растворяетесь в толпе, а образуете собственную небольшую и потому заметную группу.
Таблица: что отдаёт живой пользователь и что — ферма
| Параметр | Живой российский пользователь | Ферма на англоязычной сборке |
|---|---|---|
| Набор раскладок | кириллическая плюс латинская | только латинская |
| Карта физических клавиш | варианты по региону и производителю | одна и та же у всех профилей |
| Соответствие кода и символа при вводе | кириллический символ на латинском коде | латиница на латинском коде всегда |
| Язык интерфейса | русский, согласован с раскладкой | русский при латинской раскладке |
| Список предпочитаемых языков | несколько, с региональными метками | одинаковый шаблон у всех |
| Доступность интерфейса клавиатуры | есть в настольных браузерах | часто отключён или пуст |
Третья строка — ключевая и самая наглядная. Когда человек с кириллической раскладкой набирает слово, браузер видит физический код клавиши в латинской нотации, а значение приходит кириллическим символом. Это несовпадение кода и значения — прямая подпись того, что раскладка переключена на русскую. У профиля, где кириллицы нет вовсе, такое несовпадение возникнуть не может: либо он вводит латиницу, либо кириллический текст появляется в поле мгновенно и целиком, минуя клавиатурные события. Второй вариант — отдельная беда, о которой подробнее речь в материале про эмуляцию мыши и скролла.
Почему антидетекты про это забывают
Причин три, и все они организационные, а не технические.
Первая — историческая. Интерфейс карты клавиатуры появился позже основных фингерпринт-векторов, и инструменты подтягивают его с задержкой, как когда-то подтягивали аудио и графику нового поколения. Разработчики закрывают то, что массово проверяют публичные тесты, а раскладка в таких тестах до сих пор редкий гость.
Вторая — инфраструктурная. Фермы разворачивают на серверах, которые ставятся в англоязычной локали по умолчанию: так проще администрировать, так меньше проблем с кодировками в логах, так привычнее. Никто не переустанавливает систему ради региональных раскладок, а профиль наследует конфигурацию хоста во всём, что инструмент не перехватил.
Третья — психологическая. Раскладка не выглядит «серьёзным» отпечатком. Она не даёт уникального хеша, по ней не построишь идентификатор устройства. Поэтому её пропускают, не понимая, что ценность параметра для антифрода определяется не его информативностью, а тем, насколько редко его маскируют. Тот же принцип разбирался в статье про антидетект-браузеры: инструмент закрывает то, что от него ждут, а не всё подряд.
Таблица: типовые рассинхроны и как их закрыть
| Рассинхрон | Чем выдаёт себя | Что делать |
|---|---|---|
| Русский интерфейс, латинская раскладка | прямое противоречие на одном визите | добавить кириллическую раскладку в систему профиля |
| Кириллический запрос без кириллических клавиш | код и значение клавиши не расходятся | вводить текст реальными событиями активной раскладки |
| Одинаковая карта клавиш у всей фермы | кластер по идентичному отпечатку | разные региональные варианты и наборы раскладок |
| Интерфейс клавиатуры отключён | аномальная группа «без раскладки» | вернуть интерфейс, подменив содержимое |
| Раскладка не совпадает с гео адреса | сверка с регионом по адресу выхода | привязать раскладку к легенде профиля |
| Мобильный профиль отдаёт карту физических клавиш | у телефона нет физической клавиатуры | для мобильных профилей интерфейс должен быть пуст |
Последняя строка — тонкий, но важный момент. На телефоне физической клавиатуры нет, и карта раскладки там либо недоступна, либо пуста. Профиль, который заявляет смартфон, но бодро перечисляет физические клавиши настольной клавиатуры, противоречит сам себе не меньше, чем русскоязычный пользователь без кириллицы. Работает это в обе стороны, и проверить нетрудно.
Как выстроить согласованную раскладку
Раскладка — часть легенды, а не настройка
Правильная логика: сначала решается, кто этот профиль — житель какого региона, на каком языке говорит, с какого устройства заходит. Из этой легенды выводятся таймзона, язык интерфейса, список предпочитаемых языков, гео адреса и раскладка. Не наоборот. Когда раскладка задаётся отдельно от всего остального, рассинхрон появляется рано или поздно.
Кириллица как обязательный минимум для русскоязычных профилей
Для профиля, который изображает российского пользователя, набор раскладок должен включать кириллическую и латинскую — это конфигурация подавляющего большинства реальных машин в стране. Отсутствие латиницы так же неправдоподобно, как отсутствие кириллицы: люди набирают адреса, пароли и латинские названия постоянно.
Разнообразие по ферме
Одинаковая карта клавиш у всех профилей — такой же кластер, как одинаковый Canvas. Реальные устройства различаются: ноутбуки разных производителей, настольные клавиатуры разных стандартов, региональные варианты. Разнообразие должно быть правдоподобным по распределению — не случайная экзотика, а то, что реально встречается в парке устройств.
Ввод реальными событиями
Текст запроса должен попадать в поле через настоящие клавиатурные события с корректным соответствием кода и символа, а не подставляться в поле целиком. Это требование пересекается с темой ритма набора, но здесь важна именно техническая сторона: событие должно нести правильный физический код клавиши для той раскладки, которую заявляет профиль.
Стабильность профиля
Раскладка привязана к устройству, а значит, не меняется между визитами. Профиль, у которого сегодня одна карта клавиш, а завтра другая, выдаёт генерацию конфигурации на лету — та же ошибка, что с плавающим отпечатком железа. Профиль ведётся целостно весь срок жизни, вместе с куками и историей, о чём подробно в материале про user-agent, куки и историю.
Изоляция от хоста
Если инструмент не перехватывает клавиатурные интерфейсы, единственный надёжный способ — менять конфигурацию на уровне самой системы профиля: отдельная виртуальная среда или контейнер с нужной локалью и набором раскладок. Это дороже, но честнее любой подмены. Подходы к разделению сред разбирались в статье про изоляцию профилей.
Чек-лист проверки за пятнадцать минут
- Откройте с профиля страницу, выводящую карту раскладки, и посмотрите, доступен ли интерфейс вообще и что он возвращает.
- Сравните карты с двух-трёх профилей: они обязаны различаться, а не совпадать посимвольно.
- Наберите с профиля русское слово в любое текстовое поле и снимите пары «код клавиши — символ». Для кириллической раскладки они должны расходиться.
- Сверьте набор раскладок с языком интерфейса и списком предпочитаемых языков.
- Сверьте раскладку с регионом выходного адреса и таймзоной профиля.
- Для мобильных профилей убедитесь, что карта физических клавиш пуста или недоступна.
- Через сутки повторите проверку на тех же профилях: конфигурация не должна измениться.
Разбор кейса: русскоязычная аудитория без русских букв
Проект в региональной коммерческой тематике работал по всем правилам: платный антидетект, раздельные профили, аккуратная сетевая часть на розничных каналах, вариативное поведение. Отпечатки проверялись регулярно и различались. Тем не менее часть сессий стабильно выглядела неполноценной в отчётах, а результат держался заметно ниже ожидаемого при сопоставимых вложениях.
Разбираться начали с того, что прогнали профили через тест, где помимо привычных параметров выводилась карта раскладки клавиатуры. Картина оказалась однозначной: у всех профилей одна и та же латинская карта без единого кириллического символа. Ферма стояла на серверах с англоязычной локалью, и никому не пришло в голову, что конфигурация системы протечёт наружу. При этом профили заявляли русский язык интерфейса, московскую таймзону и вводили кириллические поисковые запросы — то есть противоречили сами себе на каждом визите, ещё до всякой кластеризации.
Исправление оказалось прозаичным: базовые образы пересобрали с российской локалью и двумя раскладками, развели по профилям несколько региональных вариантов клавиатур, а ввод запросов перевели на настоящие клавиатурные события вместо подстановки строки. Отдельно проверили, что мобильные профили больше не отдают карту физических клавиш. Через несколько недель доля неполноценных сессий снизилась, динамика восстановилась. Вывод, который стоит запомнить: профиль наследует от хоста всё, что инструмент не перехватил явно, и локаль системы — как раз то, о чём забывают.
Частые ошибки
- Считать раскладку мелочью. Она не даёт уникального хеша, но ловит противоречие на одном визите, без всякой статистики.
- Ставить систему в англоязычной локали. Удобно администратору, но профиль наследует конфигурацию целиком.
- Отключать клавиатурный интерфейс. Пустой ответ выделяет профиль в отдельную группу вместо маскировки.
- Одинаковая карта клавиш на всей ферме. Такой же кластер, как одинаковая видеокарта у сорока «разных людей».
- Подставлять текст запроса строкой. Ввод без клавиатурных событий убирает саму возможность показать корректную раскладку — и добавляет отдельную аномалию.
Частые вопросы
Во всех ли браузерах доступна карта раскладки? Нет, поддержка неравномерная: в одних браузерных движках интерфейс есть, в других отсутствует. Но это не повод расслабляться — отсутствие интерфейса не отменяет пассивного сигнала из клавиатурных событий, а он работает везде.
Достаточно ли просто выставить русский язык интерфейса? Нет. Язык интерфейса и раскладка — разные вещи, живущие в разных слоях. Подменить строку языка легко, а карта клавиш приходит из системной конфигурации, и именно расхождение между ними выдаёт профиль.
Как это выглядит на реальных устройствах? Никак — в хорошем смысле. У настоящего телефона или ноутбука российского пользователя раскладка настоящая, разнообразие естественное, противоречий нет. Это очередной аргумент в пользу схемы с реальными устройствами на ключевом направлении.
С чего начать, если ферма уже работает? С проверки карты на трёх профилях. Если она у всех одинаковая и в ней нет кириллицы, а профили изображают российскую аудиторию, то это ваша ближайшая точка отказа, и заниматься надо ей, а не докупкой каналов.
Вывод
Раскладка клавиатуры — параметр, который выпадает из большинства чек-листов, потому что не даёт эффектного уникального хеша и потому что о нём просто не думают при разворачивании фермы. При этом он бьёт по двум направлениям сразу: даёт кластер, когда сорок профилей отдают одну и ту же карту клавиш, и ловит прямое противоречие на одном-единственном визите, когда русскоязычный пользователь с московской таймзоной сообщает, что кириллической раскладки на его устройстве не существует. Лечится это не настройкой в интерфейсе антидетекта, а на уровне системы: правильная локаль базового образа, два-три региональных варианта раскладок по парку профилей, ввод запросов настоящими клавиатурными событиями, пустая карта у мобильных профилей и стабильность конфигурации во времени. И общий принцип, который стоит держать в голове: всё, что инструмент не перехватил явно, профиль честно унаследует от машины, на которой запущен.
Больше о поведенческом продвижении и других услугах — на главной странице ProfSEO24.
Закажите накрутку ПФ в ProfSEO24
Выводим сайты в ТОП-1 Яндекса за счёт поведенческих факторов на базе ИИ — без риска фильтров. Более 300 сайтов в ТОП-1, первые сдвиги по позициям за 3 дня. Рассчитаем стоимость под вашу нишу и регион.
Заказать накрутку ПФ Написать в TelegramКомментарии
Геннадий Лукин
Проверил три профиля — карта раскладки одинаковая, кириллицы нет вообще. Серверы разворачивали в английской локали, о таком даже не думали. Параметр реально выпал из чек-листа.
Admin
Типовая история. Добавлю, что пересобирать образ ради одной локали не всегда обязательно: во многих системах набор раскладок добавляется без переустановки, важно лишь, чтобы кириллическая была активной в момент работы профиля. Но карту клавиш после этого обязательно перепроверьте — бывает, что раскладка в системе есть, а браузер её не видит из-за среды запуска.
Алиса Ремизова
Момент про расхождение кода клавиши и символа — очень наглядно. При русской раскладке код латинский, значение кириллическое. Если профиль вставляет строку целиком, такого расхождения просто неоткуда взяться.
layout_checker
Интересно, что сигнал ловит противоречие на одном визите. Не нужна статистика, не нужен кластер — достаточно сопоставить язык интерфейса и набор раскладок. Дёшево и убийственно.
Никита Бородин
А если просто отключить клавиатурный интерфейс, чтобы не палиться? Нет карты — нет противоречия.
Admin
Противоречие уберёте, аномалию создадите. В настольных браузерах, где интерфейс поддерживается, он доступен у подавляющего большинства живых посетителей. Ферма, которая вся приходит с пустым ответом, становится отдельной легко выделяемой группой. Плюс это не спасает от пассивного сигнала: клавиатурные события с кодами и символами приходят при любом наборе текста, отключить их нельзя.
Эльвира Гатина
Про мобильные профили не подумала бы никогда. Телефон, который перечисляет физические клавиши настольной клавиатуры, — это же смешно, но у нас наверняка ровно так и есть.
Эдуард Мамонтов
«Профиль наследует от хоста всё, что инструмент не перехватил явно» — по-моему, это главное предложение статьи. Из него следует, что проверять надо не то, что антидетект обещает закрыть, а то, что он не упоминает.
Жанна Тимофеева
Подскажите, насколько разнообразными должны быть раскладки по ферме? Брать экзотику для разброса или лучше не выпендриваться?
Admin
Не выпендриваться. Разнообразие должно повторять реальный парк устройств, а не максимизировать разброс. Для российской аудитории это в основном два-три распространённых варианта раскладки плюс различия по производителям ноутбуков. Редкие региональные конфигурации в большом количестве выглядят не естественнее, а страннее: у вас получится ферма, где каждый второй пользователь сидит за экзотической клавиатурой.
Артур Меликян
Вспомнил про восточные языки и композиционные события. Получается, способ ввода тоже отдельный слой сигнала, не только сама раскладка.
Admin
Да, и это важный практический нюанс для тех, кто закупает готовые образы систем. Композиционные события приходят при вводе через системный редактор метода ввода — для восточных языков это норма, для кириллицы их быть не должно, она набирается прямо. Если профиль изображает российского пользователя, а текст приходит с композицией, это отдельное противоречие поверх раскладки. Проверяется так же, как и всё остальное: наберите слово и посмотрите на последовательность событий.
Диана Соловей
Логика «сначала легенда профиля, потом из неё выводим параметры» универсальна. Мы делали наоборот — задавали настройки по отдельности, и рассинхроны вылезали постоянно.
kbd_ru
Отсутствие латиницы у российского профиля — тоже аномалия, это верно подмечено. Люди постоянно набирают адреса и пароли латиницей, одна кириллическая раскладка в системе выглядит не менее странно, чем одна латинская.
Матвей Гуляев
Вопрос практический: раскладка должна быть намертво привязана к профилю или её можно иногда менять, изображая, что человек добавил новый язык?
Admin
По умолчанию — намертво. Люди действительно иногда добавляют язык, но это редкое событие, и имитировать его нет смысла: выигрыша ноль, риск ошибиться заметный. Правило простое: параметры, которые у живого человека меняются раз в годы, у профиля не должны меняться вообще. Меняться может то, что и в жизни меняется часто, — версия браузера при обновлении, например.
Оксана Пивоварова
Ценность параметра определяется не информативностью, а тем, насколько редко его маскируют. Это ведь применимо к любому новому вектору, не только к раскладке.
Влад Черепанов
Забрал чек-лист целиком. Пункт про набор русского слова с профиля и снятие пар «код — символ» проверяется вручную за минуту, а показывает сразу, живой там ввод или подстановка строки.
Милана Ждан
С ProfSEO24 работаю с весны. Что нравится — не продают чудо и честно говорят, где предел возможного и сколько времени займёт. Один раз прямо отговорили от лишних расходов, когда проблема была в другом месте. Такое запоминается.