Несколько блоков RTB Яндекс на сайтах с бесконечной лентой

N2
На сайте с 03.02.2019
Offline
9
721

Добрый день!

Нашел на форуме такое решение от Дмитрия Громова:

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

<script type="text/javascript">

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

else pageNumber++;

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

(function (w, d, n, s, t) {

w[n] = w[n] || [];

w[n].push(function() {

Ya.Context.AdvManager.render({

blockId: "R-A-123456-1",

renderTo: "yandex_rtb_R-A-123456-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>

Оно работает. Спасибо ему за это.

НО как реализовать несколько блоков с таким скриптом на одной странице?

Как я понял, это решение не работает если применить его к нескольким блокам на одной странице?

Помогите мне и многим владельцам сайтов, кто так же в поиске подобного.

---------- Добавлено 20.02.2020 в 16:08 ----------

видимо кэш и CDN

все работает)

Дмитрий Громов
На сайте с 15.08.2018
Offline
339
#1
Nicko_217:
Добрый день!

Нашел на форуме такое решение от Дмитрия Громова:

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

Оно работает. Спасибо ему за это.

НО как реализовать несколько блоков с таким скриптом на одной странице?
Как я понял, это решение не работает если применить его к нескольким блокам на одной странице?

Помогите мне и многим владельцам сайтов, кто так же в поиске подобного.

---------- Добавлено 20.02.2020 в 16:08 ----------

видимо кэш и CDN
все работает)

Добрый день! Если блоки устанавливаются в ленту с бесконечной выдачей, то в скрипте нужно следить за значениями параметра "pageNumber" (должен соответствовать номеру страницы) и "div id". Также ID контейнера должен быть уникальным и соответствовать параметру "renderTo" в script.

Буду рад ответить на ваши вопросы про Директ, РСЯ, ADFOX, Метрику и Бизнес.
N2
На сайте с 03.02.2019
Offline
9
#2

Дмитрий, здравствуйте!

У меня получается так, что 3 блока (один в боковом виджете справа, второй в середине статьи и третий в конце статьи).

Все три имеют свои id RTB.

В остальном скрипт одинаковый.

И при просмотре страницы с пк срабатывает всегда боковой и иногда в конце статьи.

А с мобильного только в конце статьи.

Может быть так, что все три блока мешаю друг другу в скрипте:

<script type="text/javascript">

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

else pageNumber++;

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

(function (w, d, n, s, t) {

w[n] = w[n] || [];

w[n].push(function() {

Ya.Context.AdvManager.render({

blockId: "R-A-123456-1",

renderTo: "yandex_rtb_R-A-123456-1-" + pageNumber,

async: true,

pageNumber: pageNumber

});

N2
На сайте с 03.02.2019
Offline
9
#3

вся фишка в том, что если разместить один блок - то все работает, а два или более - отображается только один

Дмитрий Громов
На сайте с 15.08.2018
Offline
339
#4
Nicko_217:
Дмитрий, здравствуйте!

У меня получается так, что 3 блока (один в боковом виджете справа, второй в середине статьи и третий в конце статьи).
Все три имеют свои id RTB.
В остальном скрипт одинаковый.

И при просмотре страницы с пк срабатывает всегда боковой и иногда в конце статьи.

А с мобильного только в конце статьи.

Может быть так, что все три блока мешаю друг другу в скрипте:
<script type="text/javascript">
if (typeof pageNumber =="undefined") var pageNumber = 1;
else pageNumber++;
document.getElementById("yandex_rtb_R-A-123456-1").id = "yandex_rtb_R-A-123456-1-" + pageNumber;
(function (w, d, n, s, t) {
w[n] = w[n] || [];
w[n].push(function() {
Ya.Context.AdvManager.render({
blockId: "R-A-123456-1",
renderTo: "yandex_rtb_R-A-123456-1-" + pageNumber,
async: true,
pageNumber: pageNumber
});
Nicko_217:
вся фишка в том, что если разместить один блок - то все работает, а два или более - отображается только один

Добрый день! Нужно заменить ID в <div id="yandex_rtb_R-A-123456-1"></div> и в renderTo: "yandex_rtb_R-A-123456-1-" + pageNumber, например, на <div id="yandex_rtb1"></div> renderTo: "yandex_rtb1" + pageNumber.

В другом блоке — на другой, например: на <div id="yandex_rtb2"></div> renderTo: "yandex_rtb2" + pageNumber.

У третьего — например, на <div id="yandex_rtb3"></div> renderTo: "yandex_rtb3" + pageNumber.

То есть, ID контейнера — так же, как и ID RTB-блока должен быть уникальным на странице и в ленте.

N2
На сайте с 03.02.2019
Offline
9
#5
Дмитрий Громов:
Добрый день! Нужно заменить ID в <div id="yandex_rtb_R-A-123456-1"></div> и в renderTo: "yandex_rtb_R-A-123456-1-" + pageNumber, например, на <div id="yandex_rtb1"></div> renderTo: "yandex_rtb1" + pageNumber.
В другом блоке — на другой, например: на <div id="yandex_rtb2"></div> renderTo: "yandex_rtb2" + pageNumber.
У третьего — например, на <div id="yandex_rtb3"></div> renderTo: "yandex_rtb3" + pageNumber.

То есть, ID контейнера — так же, как и ID RTB-блока должен быть уникальным на странице и в ленте.

Дмитрий, так все и сделано, но ID каждого блока взяты из разных RTB баннеров. То есть yandex_rtb_R-A-123456-1 / yandex_rtb_R-A-123456-2 и yandex_rtb_R-A-123456-4 (к примеру)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий