
Большинство чек-листов по накрутке заканчиваются на отпечатках и прокси, а дальше начинается зона, куда почти никто не заглядывает: браузер постоянно рассказывает сайту, смотрит ли человек на вкладку прямо сейчас. Скрыта страница или видна, есть ли у окна фокус, сколько секунд вкладка провела в фоне, сколько раз пользователь уходил и возвращался — всё это доступно любому счётчику без единого разрешения. И пока бот держит вкладку активной ровно столько, сколько ему сказали, живой человек за те же три минуты успевает дважды ответить в мессенджере и один раз проверить почту.
Дальше — инженерный разбор того, какие именно события видит сайт, почему «идеально сфокусированная» сессия выглядит хуже, чем сессия с уходами, как время в фоне обязано вычитаться из вовлечённости и по какой логике переключения вкладок эмулируются, чтобы не превратиться в ещё один ровный паттерн. Тема стыкуется с материалом про эмуляцию мыши и скролла: там речь о поведении внутри страницы, здесь — о поведении вокруг неё.
Что браузер сообщает сайту о состоянии вкладки
Информация о видимости страницы — штатная часть веб-платформы. Она нужна разработчикам, чтобы приостанавливать видео, анимации и запросы, когда пользователь ушёл. Тот же механизм превращается в поведенческий детектор, если собирать не состояние, а историю переходов между состояниями.
Видимость страницы
Свойство document.visibilityState принимает два практических значения: visible — вкладка на экране, hidden — вкладка ушла в фон, окно свёрнуто или экран заблокирован. Событие visibilitychange срабатывает на каждом переходе. Счётчику достаточно подписаться на него и складывать отрезки времени: сколько страница была видима, сколько скрыта, сколько раз переключалась. Ни одно из этих измерений не требует согласия пользователя и работает одинаково на десктопе и на мобильном.
Фокус окна
Видимость и фокус — разные вещи, и антифрод различает их. Вкладка может оставаться видимой, но потерять фокус: пользователь кликнул в соседнее окно, открыл панель задач, переключился в другое приложение поверх браузера. За это отвечают события blur и focus на объекте окна и свойство document.hasFocus(). Комбинация «видима, но без фокуса» абсолютно нормальна для человека на большом мониторе и почти не встречается у ботов, которые либо держат фокус постоянно, либо уходят в скрытое состояние целиком.
Косвенные признаки фона
Даже если скрипт не подписан на события, состояние вкладки утекает через поведение самого браузера. В фоне агрессивно замедляются таймеры, перестаёт вызываться requestAnimationFrame, тормозятся сетевые запросы и анимации. Скрипт, который просто меряет интервалы между тиками собственного таймера, видит фоновое состояние по характерному провалу частоты. Это значит, что подавить сигнал, отписавшись от событий, не получится: он проявляется через физику исполнения кода.
Мобильная специфика
На телефоне уход в фон происходит чаще и по другим причинам: входящий звонок, сворачивание по кнопке, блокировка экрана по таймауту, переход в список приложений. Мобильная сессия без единого ухода в фон на протяжении нескольких минут — сама по себе редкость. Поэтому профили, заявляющие мобильное устройство, обязаны вести себя по мобильному сценарию, иначе получается рассинхрон между заявленным типом устройства и поведением, о котором подробно говорилось в разборе сегмента роботности в Метрике.
Таблица: какие события видит счётчик при переключении
| Действие пользователя | Что фиксируется | Что это даёт антифроду |
|---|---|---|
| Переход на соседнюю вкладку | visibilitychange в hidden, blur окна | отрезок фонового времени, счётчик уходов |
| Клик в другое окно поверх браузера | blur без смены видимости | признак большого экрана и живой многозадачности |
| Сворачивание браузера | hidden плюс потеря фокуса | длинная пауза с последующим возвратом |
| Блокировка экрана телефона | hidden, торможение таймеров | типично мобильный сценарий |
| Возврат во вкладку | visible, focus, всплеск активности | проверка, что после возврата есть действия |
| Отсутствие любых переходов | один непрерывный видимый отрезок | подозрение на автоматизированную сессию |
Последняя строка ключевая. Антифрод ищет не «плохие» события, а отсутствие событий там, где они статистически обязаны быть. Чистая непрерывная сессия — не признак заинтересованности, а признак того, что за вкладкой не сидел человек.
Почему идеально активная вкладка выглядит хуже рваной
Интуиция подсказывает обратное: раз мы изображаем вовлечённого пользователя, пусть он смотрит на страницу не отрываясь. На практике такой сценарий даёт ровно тот профиль поведения, который проще всего выделить в отдельный кластер.
Как устроена живая сессия
Реальное чтение страницы почти никогда не бывает монолитным. Человек открывает вкладку, читает полминуты, уходит отвечать на сообщение, возвращается, докручивает, открывает ссылку в новой вкладке и уходит туда, потом возвращается обратно. Длительности фоновых отрезков распределены крайне неровно: несколько секунд, потом минута, потом снова пара секунд. Иногда вкладка остаётся в фоне на полчаса и человек возвращается к ней уже с другим намерением.
Как устроена типовая ботовая сессия
Автоматизированная сессия обычно живёт в одном окне и одной вкладке. Сценарий выполняется линейно: открыть, проскроллить, кликнуть, подождать заданное время, закрыть. Вкладка всё это время видима и сфокусирована. Если разработчик сценария вообще добавил переключения, они чаще всего одинаковой длительности и появляются в одной и той же точке сценария — например, ровно через сорок секунд после загрузки. Получается второй уровень регулярности поверх первого.
Антифрод не спрашивает, был ли пользователь внимателен. Он спрашивает, похожа ли структура его внимания на человеческую. Непрерывные три минуты в фокусе — это не высокая вовлечённость, а отсутствие жизни вокруг вкладки.
Массовость как усилитель
Одна идеально ровная сессия ничего не доказывает: такие бывают и у людей. Проблема начинается на объёме. Когда сотня визитов подряд не содержит ни одного ухода в фон, распределение перестаёт быть похожим на человеческое, и вся группа отделяется от остального трафика простым запросом к статистике. Это та же логика, по которой вскрываются любые поведенческие паттерны: ловят не отдельный визит, а форму распределения по выборке.
Как фоновое время ломает метрики вовлечённости
Вторая половина проблемы касается не детекта, а качества самого сигнала. Даже если ваши переключения выглядят правдоподобно, важно, чтобы время в фоне не засчитывалось как вовлечённость.
Время на сайте
Наивная схема считает время между открытием страницы и её закрытием. Если бот открыл вкладку, ушёл в фон на десять минут и вернулся, чтобы закрыть, наивный счётчик покажет десять минут глубокого чтения. Современные системы измерения так не делают: они суммируют только видимые отрезки, вычитая фоновые. Для накрутки это означает, что «докрутить время» простым ожиданием в фоне бессмысленно — вы увеличиваете длительность сессии, но не увеличиваете засчитанное активное время.
Отказы и глубина просмотра
Механика влияет и на трактовку отказа. Сессия, в которой страница была видима двенадцать секунд, а затем сорок минут провисела в фоне и закрылась, по формальной длительности выглядит длинной, а по активному времени — коротким отказом. Как именно отказы и глубина складываются в общую картину, разбиралось в материале про отказы и глубину просмотра; здесь важно другое: фон обнуляет попытки набить длительность пустым ожиданием.
Что должно происходить после возврата
Отдельный маркер — поведение сразу после того, как вкладка снова стала видимой. У человека возврат почти всегда сопровождается действием: скролл, движение мыши, клик, иногда повторное чтение с прокруткой назад. Профиль, который вернулся во вкладку и тут же закрыл её, не совершив ни одного действия, выглядит как сценарий, отсчитавший таймер. Записи в Вебвизоре показывают этот разрыв нагляднее любой агрегированной метрики: на плёнке видно, что после паузы страница просто исчезает.
Таблица: живая сессия против ботовой по фоновым сигналам
| Признак | Живая аудитория | Типовая ферма |
|---|---|---|
| Число уходов в фон за сессию | от нуля до нескольких, широкий разброс | ноль либо фиксированное число |
| Длительность фоновых отрезков | от секунд до десятков минут | одинаковая у всех визитов |
| Момент первого ухода | в любой точке сессии | привязан к шагу сценария |
| Состояние «видима без фокуса» | встречается регулярно | практически отсутствует |
| Действия после возврата | скролл, движение, клик | закрытие без действий |
| Доля сессий без единого ухода | часть выборки | почти вся выборка |
Как эмулировать переключения правильно
Разброс важнее наличия
Добавить переключение вкладок — половина дела, и не самая важная. Значение имеет распределение. Часть сессий должна проходить вообще без уходов, часть — с одним коротким, часть — с двумя-тремя разной длины, небольшая доля — с длинной паузой в несколько минут. Если построить гистограмму длительностей фоновых отрезков по своей ферме, она обязана иметь длинный хвост, а не превращаться в столбик на одном значении.
Привязка к содержанию, а не к таймеру
Человек уходит не по расписанию, а в паузах: дочитал абзац, долистал до конца блока, дождался загрузки. Сценарий, который уходит в фон строго на сороковой секунде, создаёт синхронность между визитами разных профилей. Привязывайте момент ухода к прогрессу чтения и добавляйте к нему случайное смещение, чтобы одинаковые страницы не давали одинаковых точек переключения.
В фоне активность должна замереть
Грубая, но распространённая ошибка — продолжать скроллить и двигать мышью в скрытой вкладке. Для реального пользователя это физически невозможно: он смотрит в другое окно. Счётчик, получающий события движения при visibilityState равном hidden, фиксирует прямое противоречие, которое не объясняется ничем, кроме автоматизации. На время фона сценарий обязан полностью останавливать генерацию событий ввода.
Возврат с действием
После возврата должна идти естественная реакция: небольшая пауза на переориентацию, движение мыши, продолжение скролла, иногда лёгкий откат вверх, потому что человек перечитывает место, где остановился. Закрытие вкладки сразу после возврата допустимо изредка, но не должно быть правилом.
Согласованность с типом устройства
Мобильные профили уходят в фон чаще и на более короткие интервалы, десктопные — реже, но с более длинными паузами и с частым состоянием «видима без фокуса». У десктопа также реалистичны переходы между несколькими открытыми вкладками одного окна. Если профиль заявляет телефон, а ведёт себя по десктопному сценарию, это очередное противоречие в связке параметров.
Разные профили — разные привычки
Полезно закреплять за профилем поведенческий темперамент и сохранять его между визитами: один пользователь почти не отвлекается, другой уходит каждые полминуты. Это делает ферму разнородной не только по отпечаткам, но и по манере, что заметно усложняет кластеризацию.
Чек-лист проверки за один вечер
- Откройте свой сценарий и найдите, есть ли в нём вообще обработка ухода вкладки в фон. Если нет — это первая точка отказа.
- Снимите по ферме статистику: сколько процентов сессий проходят без единого события смены видимости. Доля около ста процентов — аномалия.
- Постройте распределение длительностей фоновых отрезков. Один-два выделяющихся значения означают жёсткий таймер в коде.
- Проверьте, останавливается ли генерация мыши и скролла на время фона. Событие ввода при скрытой вкладке недопустимо.
- Убедитесь, что после возврата есть хотя бы одно действие до закрытия.
- Сравните поведение мобильных и десктопных профилей: сценарии ухода должны различаться по частоте и длительности.
- Проверьте, что ваша метрика активного времени считает только видимые отрезки, иначе вы меряете не то, что меряет Яндекс.
Разбор кейса: сессии по три минуты, которые не работали
Проект в услугах крутил поведенческие сигналы по внятной методике: качественные профили, резидентские адреса, аккуратный скролл, переходы по внутренним ссылкам. Целевым показателем было время на сайте, и сценарий честно выдерживал заданную длительность каждой сессии. Заметного движения не происходило месяцами, хотя формально все метрики в отчётах выглядели отлично.
При разборе выяснились сразу две вещи. Первая: ни одна сессия за всё время не содержала события смены видимости — вкладка всегда была активна от начала до конца. Вторая: значительная часть заявленного времени набиралась паузой в конце сценария, когда страница уже была прокручена до конца и никаких действий не происходило. То есть трафик одновременно был однородным по фоновым сигналам и завышал длительность способом, который современные системы измерения не засчитывают.
Переделка свелась к двум изменениям. В сценарий добавили вероятностную модель переключений с широким разбросом длительностей и полной остановкой ввода в фоне, а «добор времени» пустой паузой убрали, заменив его дополнительными осмысленными действиями: дочитыванием, переходом во второй документ, возвратом назад. Однородность по фоновым сигналам исчезла, и трафик перестал выделяться в отдельную группу. Урок простой: метрика, которую вы оптимизируете, должна считаться так же, как её считает принимающая сторона.
Частые ошибки
- Ни одного ухода в фон. Идеально сфокусированная сессия — редкость у людей и норма у ботов, поэтому на объёме она выделяет ферму.
- Фиксированная пауза в фоне. Один и тот же интервал во всех визитах создаёт вторичный ровный паттерн вместо маскировки.
- Движения мыши при скрытой вкладке. Прямое противоречие, невозможное для человека и легко фиксируемое счётчиком.
- Набивание времени фоновым ожиданием. Активное время считается по видимым отрезкам, поэтому такая накрутка не даёт прироста сигнала.
- Одинаковый сценарий для мобильных и десктопных профилей. Частота и природа уходов у этих устройств разные, и смешение создаёт рассинхрон.
Частые вопросы
Можно ли просто запретить скрипту видеть состояние вкладки? Технически подмена свойств возможна, но бесполезна: фоновое состояние проявляется через торможение таймеров и анимационных кадров, то есть через физику исполнения кода. Профиль, у которого видимость всегда заявлена активной, а таймеры при этом ведут себя как в фоне, выглядит хуже честного.
Сколько переключений добавлять в сессию? Фиксированного числа быть не должно. Разумная модель — вероятностная: заметная доля сессий без уходов, большая часть с одним-двумя, меньшая с тремя и более, плюс редкие длинные паузы. Главное, чтобы распределение имело хвост, а не пик.
Влияет ли это на возвраты в выдачу? Косвенно да. Уход во вкладку с выдачей и возврат обратно на сайт — отдельный сценарий, который читается иначе, чем уход в стороннее приложение. Детали этой механики разбирались в статье про пого-стикинг и возвраты, и путать эти два типа переключений не стоит.
Headless-режим вообще отдаёт эти события? Отдаёт, но часто некорректно: в безголовом окружении понятие фокуса вырождено, и состояние может быть постоянным независимо от действий сценария. Это ещё один аргумент в пользу запуска с полноценным графическим окружением, о чём говорилось в разборе признаков автоматизации.
Вывод
Состояние вкладки — дешёвый для сайта и дорогой для накрутчика сигнал: он собирается без разрешений, не подавляется подменой свойств, потому что проявляется через торможение таймеров, и даёт сразу два независимых результата. Во-первых, он вскрывает однородность фермы через распределение уходов в фон, их длительностей и моментов появления, а отсутствие таких событий на большой выборке само по себе становится аномалией. Во-вторых, он обесценивает попытки набить длительность пустым ожиданием, потому что активное время считается по видимым отрезкам, а не по времени жизни вкладки. Работающая схема выглядит так: вероятностная модель переключений с широким разбросом, полная остановка ввода на время фона, обязательное действие после возврата, разные сценарии для мобильных и десктопных профилей и закреплённая за профилем манера, которая сохраняется между визитами. Всё остальное — попытка изобразить внимание, которого у живых людей просто не бывает.
Больше о поведенческом продвижении и других услугах — на главной странице ProfSEO24.
Закажите накрутку ПФ в ProfSEO24
Выводим сайты в ТОП-1 Яндекса за счёт поведенческих факторов на базе ИИ — без риска фильтров. Более 300 сайтов в ТОП-1, первые сдвиги по позициям за 3 дня. Рассчитаем стоимость под вашу нишу и регион.
Заказать накрутку ПФ Написать в TelegramКомментарии
Павел Дорохин
Полез смотреть логи своего сценария — за полгода ни одного события смены видимости. Вообще ни одного. Сто процентов сессий в идеальном фокусе. Теперь понятно, почему трафик жил своей жизнью, а позиции своей.
Admin
Это самый частый расклад. Начните не с красивой модели, а с простого: добавьте вероятность ухода в фон и разброс длительности от нескольких секунд до пары минут. Даже такая грубая версия убирает стопроцентную однородность, а она и есть главный маркер. Тонкую настройку под темперамент профиля делайте вторым шагом.
Екатерина Шилова
Момент про «видима, но без фокуса» вообще не приходил в голову. У меня два монитора, я так полдня работаю — вкладка на экране, а фокус в другом окне. Действительно, бот такого состояния никогда не даёт.
front_dev_rnd
Подтверждаю про таймеры: в фоне интервалы растягиваются, и это ловится обычным замером дельты между тиками. Подменять visibilityState бессмысленно, расхождение видно сразу.
Алексей Бурмистров
А если сценарий уходит в фон, но продолжает скроллить, чтобы не терять прогресс чтения? Вроде логично — время идёт, страница листается.
Admin
Так делать нельзя, это худший из возможных вариантов. Человек, смотрящий в другое окно, физически не может прокручивать скрытую страницу. Событие ввода при скрытой вкладке — противоречие, которое не объясняется ничем, кроме автоматизации, и ловится одной проверкой состояния в обработчике. На время фона ввод останавливается полностью, прогресс чтения добирайте после возврата.
Вера Капустина
Отдельное спасибо за мысль, что время в фоне не засчитывается. У нас вся стратегия строилась на «пусть повисит подольше», и по отчётам всё было прекрасно. А по факту меряли не то.
tab_watcher
Гистограмма длительностей фоновых отрезков — отличный диагностический приём. У нас там был ровный столбик на тридцати секундах. Красиво и абсолютно нечеловечески.
Никита Самойлов
Вопрос по мобильным профилям. Насколько чаще телефон должен уходить в фон по сравнению с десктопом? Хочется понять порядок величины, чтобы не переборщить.
Admin
Точных цифр я вам не назову и никто честный не назовёт — они зависят от тематики и аудитории. Ориентируйтесь на природу события. На телефоне уход вызывают уведомления, звонки, блокировка экрана по таймауту, переключение приложений: такие паузы короче, но случаются чаще. На десктопе уходов меньше, зато они длиннее, плюс есть состояние без фокуса при видимой вкладке, которого на телефоне почти не бывает. Стройте от этой логики, а не от процента.
Ольга Ветрова
Про закрытие вкладки сразу после возврата — прямо про наш сценарий. Таймер отработал, страница закрылась. На записи это выглядит как будто человек моргнул и испарился.
Жанна Лаптева
Идея закреплять за профилем темперамент — сильная. Один отвлекается постоянно, другой почти нет, и это сохраняется между визитами. Ферма сразу перестаёт быть однородной по манере.
lead_gen_msk
Можно ли вообще отписаться от visibilitychange, чтобы счётчик ничего не собрал? Или он вешает свой обработчик раньше нашего?
Admin
Отписаться от чужого обработчика вы не можете, он ставится счётчиком в своём окружении. Но дело даже не в этом: состояние вкладки восстанавливается косвенно, без всяких событий — по замедлению таймеров, по паузам в анимационных кадрах, по разрывам в сетевой активности. Попытки заглушить сигнал дают профиль, который противоречит сам себе, а это заметнее, чем честный уход в фон.
Дарья Ильченко
Привязка момента ухода к прогрессу чтения, а не к секундам — то, что искала. У нас все профили уходили в одну и ту же секунду, и на разных страницах тоже. Синхронность была феноменальная.
Максим Гребнев
А доля сессий совсем без уходов какая должна быть? Ноль ведь тоже неправильно, люди иногда читают не отвлекаясь.
Admin
Верно, ноль — такая же аномалия, только с другой стороны. Короткие сессии часто проходят вообще без переключений, и это нормально. Правило простое: доля сессий без уходов должна падать с ростом длительности визита. Полминуты без отвлечений — обычное дело, пять минут без единого ухода — уже редкость. Если у вас эта зависимость плоская, модель нужно чинить.
Сергей Понамарёв
Отличный разбор границы между уходом в мессенджер и возвратом в выдачу. Это разные сценарии, а в сценариях их часто валят в одну кучу и получают кашу в сигналах.
seo_na_ruchnike
Работаю с ProfSEO24 второй сезон. Ценю за то, что объясняют механику, а не продают чудо: после разбора фоновых сигналов сам понял, где у меня сценарий врёт, и смог проверить это без посторонней помощи. Материалы читаю раньше, чем открываю панель.