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

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

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

Подробно как тестировать блоки описал 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 показов.

Поблагодарите автора репостом:
Предыдущие статьи:

16 комментариев к записи “Скрипт для ротации блоков Adsense или любых баннеров”

  • Максим

    А я вот такой код использую для ротации. Только он выводит банеры не по порядку, а рандомно. Но тоже может кому интересно будет.

    $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";}

    • ARKSEO

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

      Но для обычной ротации конечно проще использовать твой код.

  • Lev_PRushhij

    Спасибо, очень пригодится.

    Только возникло два вопроса:
    1- в строке $b = count($banners); //кол-во баннеров — надо что то менять? где прописать кол-во баннеров в ротации?

    2- if (!file_exists("number.txt")) { // создаю новый текстовый файл, если его нет (для хранения номера) — что надо прописывать в этом файле и где его размещать?

    • ARKSEO

      1. Ничего не нужно менять.
      2. Тоже ничего не нужно прописывать.
      Скрипт всё сделает сам.

      Уберу сейчас из кода эти мои комментарии, чтобы никого не смущать smile

  • Lev_PRushhij

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

  • Антонио

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

  • Григорий

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

  • dezm021

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

  • mozg

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

    Может есть вариант через js подгружать блоки в ротации?

  • dezm021

    спасибо за ротатор, подскажи пжл как можно реализовать на сайте 2 и более варинтов использования скрипта, к примеру сейчас под h1 использую для адсенса ротатор, а как использовать этот же скрипт но для использования ротации тизеров под статьей?

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

  • dezm021

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

    • ARKSEO

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

      • dezm021

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

  • ruslan

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

Прокомментировать

Наверх ▲