Как удалить пустые теги HTML в WordPress

Пустые HTML-теги, такие как <p></p>, <div></div> или <span></span>, часто появляются в контенте WordPress из-за особенностей визуального редактора, импорта данных или работы некоторых плагинов. Они увеличивают размер страницы и могут влиять на адаптивность и SEO сайта. В этой статье разберёмся, как эффективно удалить пустые теги HTML в WordPress без ущерба для содержимого и структуры страниц.

Почему появляются пустые теги HTML в WordPress

Основные причины появления пустых тегов:

  • Редактор Gutenberg и классический визуальный редактор иногда добавляют лишние параграфы и дивы при форматировании текста.
  • Импорт контента из внешних источников, где HTML был неочищен или содержит лишние обёртки.
  • Плагины и темы, которые автоматически оборачивают элементы в теги, но иногда не заполняют их содержимым.

Если пустые теги не удалять, они:

  • Увеличивают размер HTML-документа, замедляя загрузку.
  • Могут влиять на стили и расположение элементов.
  • Создают избыточность кода, что плохо сказывается на SEO.

Как удалить пустые теги HTML средствами WordPress

Самый простой вариант – фильтрация контента через хук the_content. Ниже пример функции, которая удаляет пустые теги p, div и span:

function wpwp_remove_empty_tags($content) {
    // Удаляем пустые параграфы
    $content = preg_replace('/<p>\s*( |\s)*<\/p>/i', '', $content);
    // Удаляем пустые div
    $content = preg_replace('/<div>\s*( |\s)*<\/div>/i', '', $content);
    // Удаляем пустые span
    $content = preg_replace('/<span>\s*( |\s)*<\/span>/i', '', $content);
    return $content;
}
add_filter('the_content', 'wpwp_remove_empty_tags');

Эта функция использует регулярные выражения для поиска пустых тегов с пробелами и неразрывными пробелами &nbsp;. Можно добавить и другие теги, если нужно.

Важно: такой подход работает с основным контентом записи, но не удаляет пустые теги в виджетах, меню или других частях темы.

Удаление пустых тегов на уровне вывода HTML (output buffering)

Для более универсального удаления можно использовать буферизацию вывода и фильтрацию всего HTML-кода страницы перед отправкой пользователю.

function wpwp_filter_empty_html_tags($buffer) {
    // Регулярка для удаления пустых тегов p, div, span
    $pattern = '/<(p|div|span)[^>]*>\s*( |\s)*<\/\1>/i';
    do {
        $buffer = preg_replace($pattern, '', $buffer, -1, $count);
    } while ($count > 0);
    return $buffer;
}

function wpwp_start_buffer() {
    ob_start('wpwp_filter_empty_html_tags');
}

function wpwp_end_buffer() {
    ob_end_flush();
}

add_action('template_redirect', 'wpwp_start_buffer');
add_action('shutdown', 'wpwp_end_buffer');

Этот код запускает буферизацию, применяет фильтр к всему HTML и удаляет пустые теги. Метод универсален, но требует тестирования на совместимость с плагинами и темой.

Использование плагинов для очистки HTML от пустых тегов

Если вы не хотите писать код, есть готовые решения:

  • Clearfy – многофункциональный плагин оптимизации, который включает очистку лишних тегов и улучшение HTML-разметки.
  • WPRemark – плагин для управления отзывами, в котором есть опции по очистке HTML, полезные и для других типов контента.

Для установки плагина просто перейдите в админку WordPress → Плагины → Добавить новый, найдите нужный и активируйте.

Советы по предотвращению появления пустых тегов в будущем

Чтобы минимизировать появление пустых тегов:

  • Используйте блоки Gutenberg аккуратно, избегая лишних пустых параграфов.
  • При импорте контента очищайте HTML с помощью специализированных инструментов.
  • Проверяйте работу плагинов и тем, которые могут автоматически форматировать содержимое.
  • Используйте кастомные фильтры в функциях темы для контроля вывода.

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

Пример расширенного фильтра с логированием

Для отладки можно добавить вывод количества удалённых тегов в лог:

function wpwp_remove_empty_tags_with_log($content) {
    $patterns = [
        '/<p>\s*( |\s)*<\/p>/i',
        '/<div>\s*( |\s)*<\/div>/i',
        '/<span>\s*( |\s)*<\/span>/i'
    ];
    foreach ($patterns as $pattern) {
        preg_match_all($pattern, $content, $matches);
        $count = count($matches[0]);
        if ($count > 0) {
            error_log("[wpwp_remove_empty_tags] Удалено пустых тегов: $count");
        }
        $content = preg_replace($pattern, '', $content);
    }
    return $content;
}
add_filter('the_content', 'wpwp_remove_empty_tags_with_log');

Этот код поможет понять, насколько часто пустые теги появляются на вашем сайте.

Как сделать динамические изображения в WordPress без плагинов
16.04.2026
Как удалить пустые теги HTML в WordPress
29.01.2026
WooCommerce: как настроить отправку уведомлений в Telegram о новых заказах
28.05.2026
Как отключить редактор Gutenberg в WordPress без плагинов
23.12.2025
WooCommerce: как установить ограничения на количество покупок одного товара
12.06.2026