Рекламный блок — единственное место на кэшируемой странице, где чужой код намеренно попадает в разметку. Код места один для всех посетителей, поэтому кэшу он не противоречит. Противоречит другое: код меняется в админке, а страницы с ним лежат в кэше неделю.
Это 17-я часть цикла «WordPress на кэшируемом сайте».
Места и как они выводятся
| Место | Где |
|---|---|
| внутри статьи | после третьего абзаца |
| после статьи | под текстом, перед блоком «поделиться» |
| колонка | на широком экране — под оглавлением |
| список статей | в блоге и рубриках — после первых шести карточек |
- код места — сырой HTML из рекламной сети, как есть. Вводить его может только администратор;
- пустое место не выводится вовсе — ни рамки, ни отступа, ни подписи;
- в статьях короче трёх абзацев место внутри текста просто не вставляется;
- над каждым заполненным местом сайт сам пишет «Реклама».
function ads_slot(string $slot): string
{
$code = trim((string) get_option('theme_' . $slot, ''));
if ($code === '') {
return ''; // пустое место — ничего
}
return '<aside class="adSlot" aria-label="Реклама"><span class="adLabel">Реклама</span>' . $code . '</aside>';
}
Смена кода сбрасывает кэш
Код рекламы сидит в разметке каждой статьи и каждого списка. Поменяли код места или удалили его — без сброса старый код неделю будет показываться из кэша: старая кампания, а удалённый блок — пустое место с подписью «Реклама».
Поэтому сохранение настроек рекламы — полный сброс кэша. Опции рекламы сохраняются своим обработчиком, а не через общий список отслеживаемых, поэтому сброс вызывается прямо в нём:
foreach (array_keys(ADS_SLOTS) as $slot) {
update_option('theme_' . $slot, wp_unslash($_POST['theme_' . $slot] ?? ''));
}
update_option('theme_ads_txt', sanitize_textarea_field(wp_unslash($_POST['theme_ads_txt'] ?? '')));
cache_purge_all(); // код рекламы сидит в разметке страниц блога
Это тот самый класс правок «опция без save_post» из третьей части.
Почему код в разметке, а не скриптом после загрузки
Можно было бы подгружать рекламу отдельным запросом, как комментарии. Но здесь нечего прятать от кэша: код одинаков для всех, а показ конкретного объявления конкретному человеку рекламная сеть и так делает своим скриптом в браузере. Лишний запрос к PHP ради одинакового для всех кода — пустая трата.
Сами скрипты рекламной сети — тяжёлый сторонний код. Как он влияет на скорость и что с этим делать — в цикле «PageSpeed без мифов».
ads.txt
Файл /ads.txt перечисляет, кто имеет право продавать рекламу на сайте. Он нужен AdSense и некоторым другим сетям; РСЯ обходится без него. Содержимое редактируется рядом с кодами мест, а отдаётся сайтом по адресу /ads.txt; пусто — обычная 404.
Маркировка
- подпись «Реклама» обязательна по закону о рекламе — поэтому её ставит сайт, а не тот, кто вставляет код;
- у прямых размещений (не через рекламную сеть) в самом объявлении нужен идентификатор маркировки —
erid. Рекламная сеть маркирует свои объявления сама.
Подключаете рекламу и боитесь за скорость и кэш?
Пришлите адрес — расставлю места так, чтобы кэш оставался рабочим, а смена кода сразу была видна.
// загружаю комментарии…