В Гугл Адсенс можно создать один рекламный блок и вставить его несколько раз на одной странице. В Рекламной сети Яндекса (РСЯ) 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 года, в том числе уникальные инструменты для решения сложных бизнес‑задач.
Подробнее
<?php
$n = countAI::getCount();
?>
<!-- Yandex.RTB R-A-xxx-<?=$n?> -->
<div id="yandex_rtb_R-A-xxx-<?=$n?>"/div>
<script>window.yaContextCb.push(()=>{
Ya.Context.AdvManager.render({
renderTo: 'yandex_rtb_R-A-xxx-<?=$n?>',
blockId: 'R-A-xxx-4',
pageNumber: <?=$n?>
})
})</script>
<?php
$n = countAI::getCount();
?>
<!-- Yandex.RTB R-A-xxx-<?=$n?> -->
<div id="yandex_rtb_R-A-xxx-<?=$n?>"/div>
<script>window.yaContextCb.push(()=>{
Ya.Context.AdvManager.render({
renderTo: 'yandex_rtb_R-A-xxx-<?=$n?>',
blockId: 'R-A-xxx-4',
pageNumber: <?=$n?>
})
})</script>
<!-- Yandex.RTB R-A-xxx- -->
<div id="yandex_rtb_R-A-xxx-">
window.yaContextCb.push(()=>{
Ya.Context.AdvManager.render({
renderTo: 'yandex_rtb_R-A-xxx-',
blockId: 'R-A-xxx-4',
pageNumber:
})
})
<!-- Yandex.RTB R-A-xxx- -->
<div id="yandex_rtb_R-A-xxx-">
window.yaContextCb.push(()=>{
Ya.Context.AdvManager.render({
renderTo: 'yandex_rtb_R-A-xxx-',
blockId: 'R-A-xxx-4',
pageNumber:
})
})
Пока не приходилось сталкиваться
https://yandex.ru/support/partner/web/products-rtb/partner-code.html#partner-code__neverending-scroll