Скрипт для ротации блоков 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
  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. Тоже ничего не нужно прописывать.
      Скрипт всё сделает сам.

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

  3. Lev_PRushhij

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

  4. Антонио

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

  5. Григорий

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

  6. dezm021

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

  7. mozg

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

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

    1. mozg

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

    2. ARKSEO (автор)

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

  8. dezm021

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

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

  9. dezm021

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

    1. ARKSEO (автор)

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

      1. dezm021

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

  10. ruslan

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

Добавить комментарий