Скрипт для ротации блоков Adsense или любых баннеров

Скрипт для ротации блоков AdsenseКто из вас делает A/B тестирование рекламных блоков Adsense или любой другой рекламы на сайте? А может кто-то вообще не в курсе что это за A/B тестирование?

Если объяснить в нескольких словах, то: вы создаете множество рекламных блоков с разной расцветкой, или типом, или размерами и запускаете их ротацию (показ по очереди). Затем через некоторое время смотрите статистику, какие самые эффективные и прибыльные — их (его) оставляете, а остальные убираете.

Подробно как тестировать блоки описал Raskalbas в статье на своем блоге, который сейчас недоступен. Но он использовал сервис Advertone и в этом есть минус — для простейшей ротации использовать сторонний сервис неприемлемо. Зачем нам подгружать код блока через сторонний сервис и еще больше замедлять его появление.

Хотя честно признаюсь — сам пользовался данным сервисом. Спустя время мне это надоело и я за 20 минут написал скрипт для ротации блоков.

Код скрипта:

/* -----------  Ротатор блоков от ARKSEO (seodnevnik.ru) ------------- */

function rotator() {

        $banners = array ();

        // Список ваших рекламных блоков

        $banners[1] = 'КОД_БАННЕРА_1';
        $banners[2] = 'КОД_БАННЕРА_2';
        $banners[3] = 'КОД_БАННЕРА_3';
        $banners[4] = 'КОД_БАННЕРА_4';

        $b = count($banners);   
        $file_name = "number.txt"; 
        if (!file_exists($file_name)) {
                $num = 1;
                file_put_contents($file_name, $num);
                echo $banners[$num];    
        } else {
                $num = file_get_contents($file_name);
                if ($num < $b) {
                        $num++;
                        file_put_contents($file_name, $num);
                        echo $banners[$num];
                } else {
                        $num = 1;
                        file_put_contents($file_name, $num);
                        echo $banners[$num];
                }       
        } 
}

/* для запуска вставляем в шаблон в нужное место: <?php rotator(); ?>   */

/* ---end-----------//  Ротатор блоков от ARKSEO ---------------- */

Что нужно сделать:

  1. Скопировать и вставить вышеприведенный код в файл function.php (если сайт на WordPress), в самом конце перед ?>
  2. Создать много рекламных блоков для сайта с разными расцветками и шрифтами (я делал именно блоки, а не клиентские каналы) c названиями в таком виде: site_размер_размещение_тип_цвет_шрифт. Например, seo_468x60_niz_text_blue_1.
  3. Вместо КОД_БАННЕРА_1 вставить код первого блока и т.д.
  4. В шаблон сайта, где будет выводиться код Adsense, вставить <?php rotator(); ?>

Всё, ротация началась!

Если у вас гораздо больше рекламных блоков, то просто в код добавляете новые строчки:
$banners[5] = 'КОД_БАННЕРА_5';
$banners[6] = 'КОД_БАННЕРА_6';
и т.д.

Внимание! Если у вас включен плагин WP Super Cache, то нужно его выключить на время А/B тестирования, иначе блок закэшируется и ротация не будет срабатывать. Или используйте плагин WP_supercache с настройкой динамического блока.

Ротация рекламы внутри контента

Знаю, что многие выводят рекламу внутри статьи, да я и сам так делаю, потому как часто на сайтах (не на всех — это факт) самые кликабельные места внутри контента, а не в конце и в начале.

 

Поэтому уже давно на просторах интернета есть множество функций для этих целей. Как их совместить с моим ротатором? Да очень просто!

Ротация после первого тега H2, пример:

/* показ рекламы после первого тега H2 */
function ads_h2($content) {
        /* показывать в постах 5313,2285 эту рекламу */
        if( is_single(array(5313,2285)) ){ 
                $ads = 'ЗДЕСЬ_РЕКЛАМНЫЙ_БЛОК_ДЛЯ_СТАТЕЙ_5313_И_2285';
                $content = preg_replace('#<h2(.*?)</h2>#','<h2\1</h2><p style="text-align: center;">'.$ads.'</p>',$content,1);

        /* для остальных постов крутить ротатор */
        } else {
                $ads = rotator();
                $content = preg_replace('#<h2(.*?)</h2>#','<h2\1</h2><p style="text-align: center;">'.$ads.'</p>',$content,1);
        }
        return $content;
}
add_filter('the_content', 'ads_h2');
/* конец // показ рекламы после первого тега H2 */

Ротация после нескольких абзацев в статье, пример:

/* показ рекламы после нескольких абзацев */
function ad_v_content($content) {
        if( !is_single() )
        return $content;
        $paragraphAfter = 7; //Введите номер абзаца, после которого будет выводиться реклама.
        $content = explode ( "</p>", $content );
        $new_content = '';
        for ( $i = 0; $i < count ( $content ); $i ++ ) {
                if ( $i == $paragraphAfter ) {
                        $new_content .= rotator(); // ротатор
                }
                $new_content .= $content[$i] . "</p>";
        }
        return $new_content;
}
add_filter( 'the_content', 'ad_v_content' );
/* конец // показ рекламы после нескольких абзацев */

* два примера выше работают только в паре с моим ротатором (нужно добавить также в файл function.php эти функции). Но вы можете rotator(); заменить на код рекламного блока, если не хотите его использовать, или если уже закончили А\Б-тестирование.

** если вы используете эти функции, то вам, естественно, уже не нужно вставлять вручную код <?php rotator(); ?> в статью, так как они сделают это сами.

На этом всё. Удачи!

Статьи в тему:
Как увеличить доход с Adsense с помощью Google Analytics и сколько чего в теории требуется, чтобы создать доход 1000$ в месяц с Google Adsense.
На какую тему публиковать статьи для увеличения дохода с 1000 показов.

Оцените статью
Дневник Сеошника
Добавить комментарий

  1. Максим

    А я вот такой код использую для ротации. Только он выводит банеры не по порядку, а рандомно. Но тоже может кому интересно будет.
    $banner1 = «КОД_БАННЕРА_1»;

    $banner2 = «КОД_БАННЕРА_2»;

    $banner3 = «КОД_БАННЕРА_3»;

    $banner4 = «КОД_БАННЕРА_4»;
    $random = rand(1,4); //Выдает случайное число от 1 до 4
    //Смотрим какое значение в переменной $random и выводим соответствующий баннер.

    if($random == 1){echo «$banner1»;}

    if($random == 2){echo «$banner2»;}

    if($random == 3){echo «$banner3»;}

    if($random == 4){echo «$banner4»;}

    Ответить
    1. ARKSEO

      Такой код для A/B тестирования не подойдет, потому-что рандомное число выпадает не равномерно. А нам нужно чтобы было одинаковое кол-во показов всех баннеров.
      Но для обычной ротации конечно проще использовать твой код.

      Ответить
  2. Lev_PRushhij

    Спасибо, очень пригодится.
    Только возникло два вопроса:

    1- в строке $b = count($banners); //кол-во баннеров — надо что то менять? где прописать кол-во баннеров в ротации?
    2- if (!file_exists(«number.txt»)) { // создаю новый текстовый файл, если его нет (для хранения номера) — что надо прописывать в этом файле и где его размещать?

    Ответить
    1. ARKSEO

      1. Ничего не нужно менять.

      2. Тоже ничего не нужно прописывать.

      Скрипт всё сделает сам.
      Уберу сейчас из кода эти мои комментарии, чтобы никого не смущать

      Ответить
  3. Lev_PRushhij

    Спасибо, так понятнее

    Ответить
  4. Антонио

    Только задумал тестировать Адсенс и тут такой пост. Спасибо!

    Ответить
  5. Григорий

    Спасибо, очень нужный код.

    Тоже по Раскалбасу запустил сплит тест через Advertone, заметил что сильно подтормаживает подгрузка кода блока рекламы.

    Стоит после заголовка поста, и пока блок появится реально можно уже по тексту вниз уйти.

    С твоим кодом всё гораздо бодрее, ещё раз спасибо.

    Ответить
  6. dezm021

    Использовал адвертон некоторое время — не рекомендую сейчас им пользоваться, сайт как минимум раз в день ложится, соответственно и блоки рекламы не выводятся.

    Ответить
  7. mozg

    а как обойти кеширование? Сплит тест нужно на нагруженном сайте провести, и без кеша серв не выдержит, а с кешем данный код не заработает, так как закешируется только один вариант.
    Может есть вариант через js подгружать блоки в ротации?

    Ответить
    1. mozg

      проблема уже решена с помощью смены плагина кеширования на WP_supercache и настройкой динамического блока в обход кеша

      Ответить
      1. ARKSEO

        У меня вариантов с JS нету. Есть такие способы подгрузки (может кому пригодятся): раз, два, три.

        Ответить
  8. dezm021

    спасибо за ротатор, подскажи пжл как можно реализовать на сайте 2 и более варинтов использования скрипта, к примеру сейчас под h1 использую для адсенса ротатор, а как использовать этот же скрипт но для использования ротации тизеров под статьей?
    Сделал так: скопировал скрипт еще раз но переименовал ф-цию на «rotator_tizer» соответсвенно в самом single вывожу , но выводится только первый тизер, все остальные почему то не хотят выводится — просмотрел около 20 страниц.

    Ответить
  9. dezm021

    форма комментов пофигачила назв. ф-ции, проставил пробелы

    Ответить
    1. ARKSEO

      Еще дополнительно переименуй в коде название файла «number.txt», например, на «number_tizer.txt». Должно работать.

      Ответить
      1. dezm021

        спасибо, помогло

        Ответить
  10. ruslan

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

    Ответить