Если на вашем сайте реализована функция бесконечной прокрутки ленты записей, вам потребуется внести некоторые изменения в рекламный код Яндекса, чтобы ваша реклама отображалась правильно. В этом руководстве я расскажу, как изменить код вызова рекламы РСЯ, чтобы он корректно работал с бесконечной прокруткой.

В справке Яндекса сказано, что для показа рекламы в лентах с бесконечной прокруткой можно использовать один и тот же рекламный блок, в котором изменяется название контейнера renderTo. При этом уникальный идентификатор блока blockId, полученный в конструкторе, остается неизменным. Значит, полученный для показа рекламы код необходимо доработать, чтобы он соответствовал этим условиям. Сделать это можно при помощи JavaScript за несколько шагов.

Шаг 1 – меняем идентификатор рекламного блока. При загрузке страницы рекламный код Яндекса будет искать рекламный блок по его идентификатору. Поскольку каждая новая страница контента загружается динамически, необходимо изменить идентификатор рекламного блока, чтобы он был уникальным на каждой странице. Сделать это можно при помощи следующего кода:

if (typeof pageNumber == "undefined") var pageNumber = 1;

else pageNumber++;

document.getElementById("yandex_rtb_R-A-XXXXXX-1").id = "yandex_rtb_R-A-XXXXXX-1-" + pageNumber;

Этот код проверяет, определена ли переменная pageNumber, и, если нет, присваивает ей значение 1. В противном случае он увеличивает переменную pageNumber на 1. Затем значение pageNumber добавляется к идентификатору RTB-блока, что гарантирует его уникальность для каждой страницы из ленты с бесконечной прокруткой записей.

Шаг 2 – добавляем на страницу рекламный код Яндекса. Для этого используем следующий код:

(function (w, d, n, s, t) {
  w[n] = w[n] || [];
  w[n].push(function() {
    Ya.Context.AdvManager.render({
      blockId: "R-A-XXXXXX-1",
      renderTo: "yandex_rtb_R-A-XXXXXX-1-" + 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");

Этот код инициализирует рекламный код Яндекса и сообщает ему об отображении рекламного блока с указанным blockId. В параметре renderTo устанавливается измененный идентификатор рекламного блока pageNumber, который мы сгенерировали на шаге 1. Параметр pageNumber также передается в рекламный код Яндекса, чтобы убедиться, что он знает, на какой странице отображается реклама.

Шаг 3 – добавляем модифицированный рекламный код Яндекса на свою страницу. Разместите следующий код там, где нужно, чтобы появлялась реклама:

<div id="yandex_rtb_R-A-XXXXXX-1"></div>

<script type="text/javascript">
  // Добавьте сюда код из Шага 1 и Шага 2
</script>

На всякий случай, покажу получившийся код целиком:

<div id="yandex_rtb_R-A-XXXXXX-1"></div>

<script type="text/javascript">
  if (typeof pageNumber === "undefined") {
    var pageNumber = 1;
  } else {
    pageNumber++;
  }

  var adDiv = document.getElementById("yandex_rtb_R-A-XXXXXX-1");
  adDiv.id = "yandex_rtb_R-A-XXXXXX-1-" + pageNumber;

  (function(w, d, n, s, t) {
    w[n] = w[n] || [];
    w[n].push(function() {
      Ya.Context.AdvManager.render({
        blockId: "R-A-XXXXXX-1",
        renderTo: "yandex_rtb_R-A-XXXXXX-1-" + 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>

Обязательно замените XXXXXX на соответствующие значения вашего рекламного блока!

Таким образом, с помощью внесенных изменений в код RTB-блока Яндекс рекламы, мы добились корректного отображения объявлений на страницах записей с бесконечной прокруткой.