Работа с кодом вызова рекламных блоков RTB

Вы можете использовать дополнительные функции и изменять некоторые настройки, работая непосредственно с кодом вызова рекламы без помощи конструктора в интерфейсе.

За вызов рекламы в коде отвечает функция Ya.Context.AdvManager.render.

Внимание. Мы не рекомендуем неопытным пользователям самостоятельно вносить изменения в код вызова рекламных блоков. Изменение любых переменных и функций, кроме описанных на данной странице, может привести к ошибкам в работе блоков Рекламной сети и, следовательно, к снижению дохода.

Переход на раздельный код вызова рекламы

С 20 июля 2021 года код вызова рекламы разделен на 2 части: единый код загрузчика рекламы и код рекламного блока. Ранее использовались разные коды загрузчика для загрузки разных типов блоков. С новыми кодами браузер не тратит время на обращение к нескольким загрузчикам, поэтому реклама показывается быстрее. Подробнее о преимуществах раздельного кода

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

Чтобы заменить код вызова рекламы на сайте:

  1. Добавьте код загрузчика рекламы в <head> каждой страницы, на которой показывается реклама:
    <script>window.yaContextCb = window.yaContextCb || []</script>
    <script src="https://yandex.ru/ads/system/context.js" async></script>
    Примечание. Код загрузчика рекламы совпадает для всех видов рекламы Яндекса. Если на странице уже есть раздельный код рекомендательного виджета или новые коды вставки ADFOX, дублировать код загрузчика рекламы не нужно.
  2. Обновите код рекламного блока по примерам ниже. Контейнер (элемент div) менять не нужно:
    Пример замены старого асинхронного кода на новый асинхронный код
    Старый асинхронный слитный код Новый асинхронный раздельный код
    <div id="yandex_rtb_R-A-588461-2"></div>
    <script type="text/javascript">
      (function(w, d, n, s, t) {
        w[n] = w[n] || [];
        w[n].push(function() {
          Ya.Context.AdvManager.render({
            blockId: "R-A-588461-2",
            renderTo: "yandex_rtb_R-A-588461-2",
            async: true
          });
        });
        t = d.getElementsByTagName("script")[0];
        s = d.createElement("script");
        s.type = "text/javascript";
        s.src = "//an.yandex.ru/system/context.js";
        s.async = true;
        t.parentNode.insertBefore(s, t);
      })(this, this.document, "yandexContextAsyncCallbacks");
    </script>
    <div id="yandex_rtb_R-A-588461-2"></div>
    <script>
      window.yaContextCb.push(()=>{
        Ya.Context.AdvManager.render({
          renderTo: 'yandex_rtb_R-A-588461-2',
          blockId: 'R-A-588461-2'
        })
      })
    </script>
    Пример замены старого синхронного кода на новый асинхронный код
    Старый синхронный слитный код Новый асинхронный раздельный код
    <div id="yandex_rtb_R-A-588461-2"></div>
    <script type="text/javascript">
      (function(w, n) {
        w[n] = w[n] || [];
        w[n].push(function() {
          Ya.Context.AdvManager.render({
            blockId: "R-A-588461-2",
            renderTo: "yandex_rtb_R-A-588461-2",
            async: false
          });
        });
        document.write('<sc'+'ript type="text/javascript"
        src="//an.yandex.ru/system/context.js"></sc'+'ript>');
      })(this, "yandexContextSyncCallbacks");
    </script>
    <div id="yandex_rtb_R-A-588461-2"></div>
    <script>
      window.yaContextCb.push(()=>{
        Ya.Context.AdvManager.render({
          renderTo: 'yandex_rtb_R-A-588461-2',
          blockId: 'R-A-588461-2'
        })
      })
    </script>

Срезы статистики для блоков RTB

В коде блока RTB вы можете дополнительно задать идентификатор среза и собирать отдельную статистику по срезам. Идентификатор среза задается в отдельной переменной:

Имя переменной Описание Тип данных
statId Идентификатор среза Число от 1 до 1 000 000 000

Задайте идентификатор среза, в коде вызова рекламы при размещении на сайте, например:

Ya.Context.AdvManager.render({
    blockId: "R-A-123456-1",
    renderTo: "yandex_rtb_R-A-123456-1",
    statId: 34567, // идентификатор среза
});

Идентификатор среза для блока R-A-123456-1 в примере — 34567. Его можно указывать и в других блоках, тогда вы сможете просмотреть для этих блоков сгруппированную статистику. Размещая блок R-A-123456-1 на других страницах, вы можете указать другой идентификатор среза, чтобы просматривать статистику отдельно для каждого места размещения.

Callback-функции в коде вызова рекламы

В код вызова рекламы можно добавить сallback-функции:
onRender

Сallback-функция onRender позволяет получить информацию о том, произошла ли отрисовка рекламы (удалось ли подобрать рекламу по запросу к RTB-системе) и какая именно реклама была показана. Функция принимает параметр data.product с одним из двух значений:

  • direct — в блоке RTB были показаны объявления Директа;

  • rtb — в блоке RTB было показано медийное рекламное объявление.

Сallback-функцию onRender нужно добавить в качестве последнего параметра функции Ya.Context.AdvManager.render.

Пример кода вызова рекламы с функцией onRender
Ya.Context.AdvManager.render({
    blockId: "R-A-123456-1",
    renderTo: "yandex_rtb_R-A-123456-1",
    onRender: (data) => { console.log(data.product); }
})
onError

Callback-функция onError вызывается, если в ходе выполнения запроса произошла ошибка. При вызове передаются параметры:

  • type — тип ошибки. Может иметь значения:
    1. error — не получилось загрузить рекламный блок;
    2. warning — рекламный блок загружен, но с ошибкой.
  • code — код ошибки.
  • text — текстовое описание ошибки.
Коды возможных ошибок и их значения
Тип ошибки Код ошибки Что означает Как исправить
error DESKTOP_FULLSCREEN Произошла попытка загрузить мобильный блок с полноэкранным отображением на десктопной версии сайта. Рекламные блоки с полноэкранным отображением можно использовать только для мобильной версии сайта.
error CONTAINER_NOT_FOUND Не удалось найти контейнер для загрузки рекламы. Контейнер не найден или при загрузке кода, или после получения данных с рекламой от сервера. Такая ошибка обычно возникает на страницах с динамическим содержимым.
error BLOCK_NOT_FOUND Вызов рекламы произошел, но RTB-блок с указанным идентификатором не найден. Проверьте код вызова рекламы, полученный в интерфейсе РСЯ. Убедитесь, что идентификатор блока указан верно.
error PAGE_NOT_FOUND Вызов рекламы произошел, но площадка с указанным идентификатором не найдена. Проверьте код вызова рекламы, полученный в интерфейсе РСЯ. Убедитесь, что идентификатор блока указан верно.
error WRONG_DOMAIN Домен, с которого произошел вызов рекламы, не указан в настройках площадки.

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

Если домен не указан, добавьте новую площадку с этим доменом и создайте RTB-блок для этой площадки. Сайты-зеркала можно добавить к уже существующей площадке.

error PAGE_DISABLED Вызов рекламы произошел, но указанная площадка не работает. Проверьте статус в площадки в интерфейсе РСЯ. Площадка может быть остановлена, заархивирована или заблокирована за нарушение Правил участия в РСЯ.
error UNKNOWN_BLOCK_TYPE Произошла попытка загрузить неизвестный тип блока. Проверьте код вызова рекламы в интерфейсе РСЯ. Идентификатор блока должен начинаться с букв R, D или Y.
error TOO_SMALL_CONTAINER В контейнер для загрузки рекламы нельзя вписать ни один из форматов указанного RTB-блока. Проверьте размеры контейнера для загрузки рекламы. Минимальный размер контейнера — 160 х 50 пикселей.
error VIDEO_ERROR Ошибка при загрузке видеорекламы. Проверьте размеры контейнера для загрузки рекламы. Минимальный размер — 320 х 180 пикселей.
warning CONTAINER_IS_HIDDEN Произошла попытка загрузить рекламу в контейнер размером 0 x 0 пикселей (например, со стилем display:none). Скрытый контейнер замедляет загрузку рекламы. Рекомендуем вставлять рекламные блоки в видимые контейнеры.
Пример кода вызова рекламы с функцией onError
Ya.Context.AdvManager.render({
    blockId: 'R-I-106712-1',
    renderTo: 'block_container',
    onError: (data) => {
        console.log('type', data.type); // Тип ошибки: error или warning
        console.log('code', data.code); // Код ошибки (см. значение выше)
        console.log('text', data.text); // Текстовое описание ошибки
                                        
        // Обработка ошибки со стороны площадки
    }
});

Показ своей рекламы в блоке RTB

Если на аукционе для вашего RTB-блока не нашлось подходящего предложения, вы можете показывать в нем свою рекламу. Для этого код вызова своей рекламы следует добавить к коду RTB-блока.
  1. Получите код RTB-блока в интерфейсе РСЯ (RTB-блоки → Получить код → Скопировать).
  2. Разместите код RTB-блока на сайте.
  3. В функцию Ya.Context.AdvManager.render добавьте код своей рекламы в качестве последнего параметра.
Пример кода со вставкой своей рекламы
Ya.Context.AdvManager.render({
    blockId: "R-A-123456-1",
    renderTo: "yandex_rtb_R-A-123456-1",
        altCallback () => {
            // код вызова своей рекламы в блоке
        }
    })
})
Если на аукционе не нашлось подходящего предложения, выполнится альтернативный код, и своя реклама будет показана на месте рекламного блока (не через iFrame). Показы своей рекламы не будут учитываться в статистике РСЯ.

Есть еще один способ настройки показа своей рекламы: вы можете указать ее код в интерфейсе РСЯ. Часть кода, необходимая для показа своей рекламы, будет сформирована и добавлена в код RTB-блока автоматически. При таком способе настройки своя реклама показывается через iFrame, и ее показы учитываются в статистике РСЯ.

Показ рекламы в лентах с бесконечной прокруткой

Для показа рекламы в лентах с бесконечной прокруткой можно использовать один и тот же рекламный блок, в котором изменяется параметр pageNumber и название контейнера renderTo. Уникальный идентификатор блока blockId, полученный в конструкторе, остается неизменным.

Пример кода вызова для первого блока
<div id="yandex_rtb_R-A-123456-1-1"></div>
<script>window.yaContextCb.push(()=>{
    Ya.Context.AdvManager.render({
        blockId: "R-A-123456-1",
        renderTo: "yandex_rtb_R-A-123456-1-1", // в конце названия ставится 1
        pageNumber: 1,  // в параметре ставится 1
    })
})</script>
Пример кода вызова для второго блока
<div id="yandex_rtb_R-A-123456-1-2"></div>
<script>window.yaContextCb.push(()=>{
    Ya.Context.AdvManager.render({
        blockId: "R-A-123456-1",
        renderTo: "yandex_rtb_R-A-123456-1-2", // в конце названия ставится 2
        pageNumber: 2,  // в параметре ставится 2
    })
})</script>

Размеры контейнера для размещения настраиваемого блока

Настраиваемый блок подстраивается под размеры контейнера и подходит для сайтов с адаптивной версткой. Для задания размеров контейнера на сайтах с адаптивной версткой используйте таблицы стилей.

  1. В коде вызова, полученном в интерфейсе, добавьте тегу div CSS-класс yandex-adaptive.

    Пример
    <div id="yandex_direct_R-A-12345-1" class="yandex-adaptive"></div>
  2. Чтобы контейнер принимал разные размеры в зависимости от разрешения экрана, используйте media-queries.

    Пример
    @media screen and (max-width: 700px) {
        .yandex-adaptive {
            width:200px;
            height:300px;
        }
    }
    
    @media screen and (min-width: 701px) {
        .yandex-adaptive {
            width:336px;
            height:280px;
        }
    }

    Таким образом, на экранах шириной до 700 пикселей реклама будет показываться в блоке 200×300, а на экранах шириной от 701 пикселя — в блоке 336×280.

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

Если вы не нашли нужную информацию, проверьте список частых вопросов или напишите нам.

Я установил код, но объявления не показываются

Вот несколько возможных причин, по которым могут возникнуть проблемы с показом объявлений:

  • рекламный код установлен только что: роботу РСЯ требуется некоторое время на индексирование страницы и привязку рекламных объявлений. Проявите терпение и объявления начнут показываться;

  • код вызова объявлений установлен неправильно: проверьте правильность установки кода JavaScript для вызова рекламных блоков. Помните, что при копировании кода ваш текстовый редактор может прерывать и переносить длинные строки — JavaScript-код с такими строками может работать некорректно. Будьте внимательны и не изменяйте код при копировании;

  • неверный код для площадки: проверьте, что установленный код вызова рекламных блоков создан именно для этой площадки, а не для одной из других ваших площадок;

  • сайт запрещен для индексирования: сайт должен быть доступен для индексирования роботом РСЯ — YandexDirect. Если индексирование сайта или его отдельных страниц запрещено (например, в файле robots.txt), то робот не сможет проиндексировать содержимое страниц и подобрать релевантные объявления для них;

  • текст закрыт тегом <noindex>: убедитесь, что на странице есть текст и что он не закрыт тегом <noindex>. К страницам без текста нельзя подобрать тематическую рекламу;

  • в браузере закешировалась старая информация: для обновления информации нажмите клавиши CTRL+F5.

Другой вопрос