Как вывести один RTB‑блок Яндекса несколько раз на одной странице

19 января 2021

В Гугл Адсенс можно создать один рекламный блок и вставить его несколько раз на одной странице. В Рекламной сети Яндекса (РСЯ) RTB‑блок можно вставить на страницу только один раз, и мы попробуем это исправить.

Кворк — Заказать разработку лендинга

Ставить один и тот же блок, например, в шапку, сайдбар, футер, контент — идея не очень. Потому что там скорее всего будут разные форматы, общая статистика и сложность в понимании, где реклама работает, а где нет. В таких случаях лучше создавать уникальные рекламные блоки. Клонирование RTB‑блоков может пригодиться при их интеграции на большие страницы, различные лонгриды, ленты с бесконечной прокруткой, подгрузкой и т.д. Для этих целей у Яндекса как раз есть решение, которое можно взять за основу. Продублирую его у себя, потому что найти его в документации не так просто.

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

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

Пример кода вызова для первого блока

<div id="rtb-5-1"></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-12345-1",
                 renderTo: "rtb-5-1",
                 pageNumber: 1
             });
         });
         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="rtb-5-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-12345-1",
                 renderTo: "rtb-5-2",
                 pageNumber: 2
             });
         });
         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>

Источник: Яндекс Справка

Доработаем немного код

В нашем решении pageNumber будет генерироваться с помощью обычного счетчика на JavaScript, а затем добавляться в ID блока и задаваться в качестве параметра pageNumber при запросе рекламного блока.

<div id="yandex_rtb"></div>
<script type="text/javascript">
 
 if (typeof pageNumber == "undefined") { var pageNumber = 1; }
 else { pageNumber++; }
 document.getElementById("yandex_rtb").id = "yandex_rtb_" + pageNumber;
 
 (function(w, d, n, s, t) {
     w[n] = w[n] || [];
     w[n].push(function() {
       Ya.Context.AdvManager.render({
         blockId: "R-A-000000-1",
         renderTo: "yandex_rtb_" + pageNumber,
         async: true,
         pageNumber: pageNumber
       });
     });
     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>

Решение рабочее, проверил на нескольких сайтах.

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

Основа скрипта взята на Searchengines.

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

Иван Данилин

Делаю сайты на Вордпресс с 2008 года, занимаюсь их оптимизацией, беру на поддержку, делюсь опытом в своём блоге.

Добавить комментарий