Рекламный блок — единственное место на кэшируемой странице, где чужой код намеренно попадает в разметку. Код места один для всех посетителей, поэтому кэшу он не противоречит. Противоречит другое: код меняется в админке, а страницы с ним лежат в кэше неделю.

Это 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. Рекламная сеть маркирует свои объявления сама.

Подключаете рекламу и боитесь за скорость и кэш?

Пришлите адрес — расставлю места так, чтобы кэш оставался рабочим, а смена кода сразу была видна.

· полезно?
АЧ
Алексей Чикун веб-разработчик, команда TRIOHEAD

Делаю сайты и сервисы целиком: от вёрстки до сервера. Пишу о том, что проверил на своих проектах.

Комментарии

// загружаю комментарии…

Комментарии публикуются после проверки. Ссылки и HTML не принимаются.