ibiza
CPM · CTR …
/

Рефреш рекламы: по таймеру и только в зоне видимости

≈ 8 мин чтения · обновлено

Рефреш рекламы — повторный запрос объявления в том же рекламном месте без перезагрузки страницы или экрана. Он приносит дополнительные показы с длинных сессий, но честным считается только один вариант: таймер считает время, пока место видно пользователю, интервал не короче 30 секунд, при уходе вкладки или приложения в фон отсчет останавливается, а покупатель заранее знает, что место обновляется.

Какие бывают рефреши

В справочнике AdCOM, на который ссылается OpenRTB 2.6, есть список «Auto Refresh Triggers» — что запускает обновление:

Код Триггер Пример
0 Неизвестно Паблишер не сообщил
1 Действие пользователя Прокрутка или переход, после которых на экране появляется новый контент
2 Событие Изменился счет матча в онлайн-трансляции
3 Время Обновление через заданный интервал даже без действий пользователя

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

Есть и еще один, неофициальный тип — скрытый рефреш: объявление обновляется в свернутой вкладке, за пределами экрана или с интервалом в несколько секунд. Его не объявляют покупателю, и именно он превращает рефреш из способа монетизации в фрод-сигнал.

Рефреш по событию или по таймеру: что выбрать

По событию или действию По таймеру
Когда срабатывает Новый контент: экран, вкладка, обновление ленты, счет матча Через заданное время, независимо от контента
Видит ли пользователь Как правило, да: он только что сделал действие Не обязательно, если не проверять видимость
Как воспринимает покупатель Как новый показ в новом контексте Как повторный показ того же контекста
Где уместен Ленты, одностраничные приложения, трансляции, галереи Длинные статичные страницы, где пользователь задерживается надолго
Главный риск Слишком частые события дают «пулемет» запросов Невидимые показы и подозрение в накрутке

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

Отдельно стоит подумать об одностраничных приложениях. Для браузера там нет «перезагрузки страницы», и каждый переход между экранами — это событие. Если на каждый переход заново создавать рекламные места, получится рефреш, о котором покупатель не знает: счетчик count остается нулевым, хотя пользователь видит уже пятое объявление за визит.

Почему таймер должен считать только видимое время

Покупатель оценивает место по доле видимых показов. Стандарт MRC для медийной рекламы — не меньше 50% площади объявления на экране не меньше секунды подряд, для крупных форматов от 242 500 пикселей — 30% площади. Рефреш, который срабатывает независимо от видимости, добавляет показы, но почти все они невидимые:

  • пользователь пролистал баннер наверх и читает статью — таймер продолжает тикать, новое объявление загружается вне экрана;
  • пользователь переключился на другую вкладку — браузер замедляет таймеры, но не останавливает их полностью;
  • приложение ушло в фон, а баннерный вид не отписался от таймера.

В руководстве Google Publisher Tag прямо сказано, что обновление никогда не видимых слотов может сильно снизить показатель Active View. Для покупателя это выглядит так: место дает много показов с низкой видимостью, значит, ставку на него нужно снижать. От рефреша страдают и первые, «честные» показы на этом месте.

Минимальный интервал: что говорят правила

  • Google Publisher Tag. Руководство по управлению загрузкой рекламы советует не обновлять слоты чаще раза в 30 секунд и предупреждает, что слишком частые запросы могут ограничиваться.
  • Google Ad Manager. Руководство GPT прямо говорит, что паблишер обязан объявить, какие части инвентаря обновляются. По справке Ad Manager объявление включает тип триггера и минимальный интервал, а необъявленный или неверно объявленный рефреш считается нарушением правил. Там же оговорено, что простая активность на странице, наведение мыши или прокрутка без существенно нового контента рефрешем «по действию пользователя» не считаются, — это строже, чем пример «прокрутка» в списке AdCOM.
  • Приложения. В Google Ad Manager и AdMob пользовательский интервал автообновления баннеров не может быть короче 30 секунд; верхняя граница и рекомендованные значения зависят от продукта, их стоит смотреть в актуальной справке.

Общий вывод: 30 секунд — это пол, ниже которого не опускаются. Оптимальный интервал зависит от длины сессии и того, как быстро на месте меняется контент, и подбирается экспериментом.

Как реализовать рефреш по видимости в вебе

Два браузерных API закрывают задачу полностью:

  • IntersectionObserver сообщает, какая доля элемента находится в зоне просмотра;
  • Page Visibility API (document.visibilityState и событие visibilitychange) сообщает, видна ли вкладка вообще.

Таймер накапливает только то время, когда выполнены оба условия:

function setupViewableRefresh(slotEl, refreshAd, minVisibleMs = 30000) {
  let inView = false;
  let counting = false;          // шел ли отсчет с прошлого тика
  let visibleMs = 0;
  let last = performance.now();

  function tick() {
    const now = performance.now();
    if (counting) visibleMs += now - last;
    last = now;
    counting = inView && document.visibilityState === 'visible';
    if (visibleMs >= minVisibleMs) {
      visibleMs = 0;
      refreshAd();               // запрос новой рекламы в это место
    }
  }

  new IntersectionObserver(([entry]) => {
    tick();                                    // закрыть прошлый отрезок
    inView = entry.intersectionRatio >= 0.5;   // половина площади на экране
    counting = inView && document.visibilityState === 'visible';
  }, { threshold: [0, 0.5, 1] }).observe(slotEl);

  document.addEventListener('visibilitychange', tick);
  setInterval(tick, 1000);
}

Детали, которые часто упускают:

  • отсчет начинается заново после каждого обновления, а не продолжает старый;
  • в обертке header bidding при рефреше запускается новый аукцион, и на этот случай пригодится кеш ставок — но только если TTL ставок короче интервала;
  • стоит ограничить число обновлений за визит: на десятом рефреше место приносит мало, а риск претензий растет.

Рефреш в мобильных приложениях

Логика та же, инструменты другие:

  • Фон. Таймер останавливают в обработчиках ухода экрана в фон и возобновляют при возврате. Баннер на неактивном экране не должен запрашивать рекламу.
  • Видимость вида. Если баннер в прокручиваемом списке, его видимость проверяют по геометрии на экране. Для измерения покупатели используют Open Measurement SDK — его данные покажут, если реклама обновлялась вне экрана.
  • Полноэкранные форматы не обновляют. Interstitial и rewarded показываются один раз; вместо рефреша — новая загрузка к следующей паузе.

Если интервал задает медиационная платформа, не дублируйте его своим таймером: два независимых таймера на одном месте — частая причина «необъяснимо» частых запросов.

Как объявить рефреш покупателю: imp.refresh

В OpenRTB 2.6 у объекта Imp есть поле refresh:

"imp": [{
  "id": "1",
  "tagid": "article_sidebar_1",
  "banner": { "format": [{ "w": 300, "h": 250 }] },
  "refresh": {
    "count": 2,
    "refsettings": [{ "reftype": 3, "minint": 30 }]
  }
}]
Поле Тип Смысл
refresh.count integer Сколько раз место обновлялось с момента загрузки страницы
refresh.refsettings массив Как место обновляется: может быть несколько правил
refsettings.reftype integer, по умолчанию 0 Тип триггера из списка AdCOM: 1 — действие пользователя, 2 — событие, 3 — время
refsettings.minint integer Минимальный интервал между обновлениями в секундах; относится к любому типу триггера

Спецификация отдельно оговаривает, что minint не учитывает видимость и уход пользователя со страницы. То есть поле говорит покупателю «не чаще чем раз в 30 секунд», но не обещает, что эти 30 секунд объявление было видно. Видимость покупатель проверит сам — измерением.

Зачем объявлять: покупатель может по-разному оценивать первый и десятый показ на месте. Без count он видит их одинаковыми и ставит среднюю цену. С count первый показ можно купить дороже, а глубокие рефреши — дешевле или пропустить. Честные данные о рефреше обычно выгоднее для паблишера, чем усредненная ставка с подозрением.

Почему скрытый рефреш режет ставки

Для систем антифрода и верификации скрытый рефреш выглядит как типичная схема накрутки показов: много запросов с одного пользователя, низкая видимость, короткие интервалы, активность в фоне. Последствия идут по нарастающей:

  1. Верификатор покупателя фиксирует низкую видимость на месте — DSP снижает ставки.
  2. Показы попадают под фильтры недействительного трафика — их не оплачивают, а в отчетах появляются расхождения.
  3. Площадку исключают из закупок или блокируют на уровне SSP — теряется и честный трафик.

Подробнее о том, как покупатели отличают фрод, — в статье про ad fraud.

Как рефреш влияет на eCPM и fill rate

Рефреш почти всегда увеличивает число показов и почти всегда снижает средний eCPM: повторные показы в среднем дешевле первого, часть запросов остается без ставок. Поэтому смотреть нужно на доход на сессию или на пользователя.

Иллюстративный пример. Без рефреша место дает 10 000 показов в день по 80 ₽ eCPM — 800 ₽. С рефрешем по видимости раз в 45 секунд — 16 000 показов. Если средний eCPM упал до 65 ₽, доход 1 040 ₽: плюс 30% при падении eCPM на 19%. Если же рефреш срабатывал вне экрана и покупатели снизили ставки до 40 ₽, доход 640 ₽ — меньше, чем без рефреша. Цифры условные; важна логика: рефреш окупается, только пока не подрывает цену места.

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

Чек-лист

  • Таймер считает только время, когда место видно хотя бы наполовину и вкладка или экран активны.
  • Интервал не короче 30 секунд, подобран экспериментом.
  • Рефреш объявлен в рекламном сервере и передается покупателю в imp.refresh.
  • Число обновлений за визит ограничено.
  • Полноэкранные форматы не обновляются.
  • После включения сравнивают доход на сессию и видимость, а не только число показов.

Остальные пункты монетизации — в чек-листе лучших практик.

Частые вопросы

Как часто можно обновлять рекламу на странице?

Google в руководстве по Google Publisher Tag советует не обновлять слоты чаще раза в 30 секунд. Для объявлений в приложениях Google тоже не позволяет задать пользовательский интервал короче 30 секунд. Это нижняя граница, а не рекомендуемое значение.

Нужно ли обновлять рекламу, если вкладка свернута?

Нет. Объявление в фоновой вкладке никто не видит, а покупатель платит за показ, который не будет видимым. Таймер нужно останавливать по Page Visibility API и по выходу слота из зоны видимости.

Падает ли eCPM при включении рефреша?

Часто да: обновленные показы в среднем дешевле первого, и покупатели учитывают историю видимости места. Поэтому эффект оценивают по доходу на сессию или на пользователя, а не по eCPM.

Как сообщить покупателю, что место обновляется?

В OpenRTB 2.6 для этого есть объект imp.refresh: счетчик обновлений с момента загрузки страницы и настройки с типом триггера и минимальным интервалом в секундах.