Как отключить emoji и отложить загрузку скриптов в WordPress без поломки темы

Если сайт на WordPress уже пережил чистку дублей, canonical и XML-RPC, следующий заметный слой лишней нагрузки обычно сидит в мелочах: emoji-скрипты, embed, jQuery Migrate, тяжелые стили и JS, которые грузятся на всех страницах без разбора. Это не «магическая оптимизация», а нормальная техническая уборка: меньше запросов, меньше блокировок рендера, меньше шансов получить конфликт в теме или плагине.

Ниже — рабочий сценарий для типичного проекта: отключить ненужные встроенные emoji, аккуратно отложить часть скриптов и не сломать админку, формы и редактор.

Когда это вообще имеет смысл

Не трогайте всё подряд только ради зеленых метрик. Сначала посмотрите на факты:

  • в исходнике есть wp-emoji-release.min.js и он не нужен для вашей аудитории;
  • на фронтенде грузится wp-embed.min.js, хотя встраивание контента WordPress не используется;
  • в консоли есть предупреждения от старых библиотек, но тема и плагины работают без них;
  • скрипты подключаются глобально, хотя нужны только на одной странице или в одной форме;
  • после обновления темы выросло число запросов и появились лишние блокировки рендера.

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

Диагностика: что именно грузится лишним

Перед правками откройте исходный код страницы и DevTools. Ищите не только сами файлы, но и место подключения:

  • wp-emoji-release.min.js — встроенные emoji;
  • wp-embed.min.js — встроенные объекты WordPress;
  • jquery-migrate.min.js — совместимость для старого JS;
  • скрипты и стили плагинов, которые не используются на текущем типе страницы;
  • инлайн-скрипты, которые завязаны на конкретный хук и не должны быть глобальными.

Удобно сверять это в двух местах: вкладка Network в браузере и просмотр HTML-исходника. Если файл есть в Network, но не нужен на странице, это хороший кандидат на отключение. Если файл не грузится, но проблема в блокировке рендера, тогда уже смотрите атрибуты defer и async.

Пошаговое решение

1. Отключите встроенные emoji

Это безопасная правка для большинства сайтов. Она убирает лишние подключения и фильтры, которые WordPress добавляет по умолчанию.

add_action('init', function () {
    remove_action('wp_head', 'print_emoji_detection_script', 7);
    remove_action('admin_print_scripts', 'print_emoji_detection_script');
    remove_action('wp_print_styles', 'print_emoji_styles');
    remove_action('admin_print_styles', 'print_emoji_styles');
});

Если у вас есть старые браузеры или специфическая аудитория, проверьте, не завязаны ли где-то emoji на контенте. В обычных проектах это редкость.

2. Уберите wp-embed, если не используете встраивания

WordPress сам добавляет этот скрипт на фронтенде. Если вы не вставляете записи WordPress через oEmbed, его можно отключить.

add_action('wp_footer', function () {
    wp_deregister_script('wp-embed');
}, 1);

Этот вариант лучше применять аккуратно и только на фронтенде. Если тема или плагин используют embed-логику, сначала проверьте это на тестовой копии.

3. Отложите загрузку неключевых скриптов

Для скриптов, которые не нужны до взаимодействия пользователя, имеет смысл добавить defer. Важно не вешать его на всё подряд: некоторые библиотеки зависят друг от друга и ломаются при неправильном порядке.

add_filter('script_loader_tag', function ($tag, $handle, $src) {
    $defer_handles = array(
        'theme-main',
        'contact-form-7',
    );

    if (in_array($handle, $defer_handles, true)) {
        return '<script src="' . esc_url($src) . '" defer></script>';
    }

    return $tag;
}, 10, 3);

Список $defer_handles нужно собирать по факту. Посмотрите, какие handle реально регистрирует тема или плагин. Не угадывайте названия.

4. Подключайте скрипты только там, где они нужны

Если у вас свой код в теме или дочерней теме, не грузите его глобально. Это один из самых частых источников лишней нагрузки.

add_action('wp_enqueue_scripts', function () {
    if (!is_page('contacts')) {
        return;
    }

    wp_enqueue_script(
        'site-contacts',
        get_stylesheet_directory_uri() . '/assets/js/contacts.js',
        array(),
        '1.0.0',
        true
    );
});

Логика простая: если код нужен только на странице контактов, он не должен попадать в общий шаблон. Это же относится к картам, калькуляторам, галереям и виджетам обратной связи.

Что выбрать: плагин, код или точечную правку

ПодходКогда подходитПлюсыМинусы
Код в дочерней темеЕсть разработчик и понятный список лишних ассетовКонтроль, минимум лишнегоНужно тестировать после обновлений
Плагин для оптимизацииНужно быстро закрыть базовые настройки без правки темыПроще включить и проверитьМожет конфликтовать с темой и другими оптимизаторами
Точечная правка шаблонаПроблема только в одном шаблоне или блокеСамый чистый вариантТребует понимания структуры темы

Если нужен именно набор технических отключений и чистка лишнего, на практике часто удобнее использовать Clearfy Pro как базовый слой, а точечные исключения оставить в коде темы. Но даже в этом случае не отключайте всё подряд без проверки фронтенда и админки.

Проверка результата после внедрения

После правок не ограничивайтесь ощущением «страница стала легче». Проверьте три вещи:

  1. Откройте страницу в режиме инкогнито и убедитесь, что нет ошибок в консоли.
  2. Сравните исходник до и после: ушли ли emoji, wp-embed и лишние подключения.
  3. Проверьте ключевые сценарии: отправка форм, открытие меню, слайдеры, модальные окна, поиск.

Если используете Lighthouse или PageSpeed Insights, смотрите не только общий балл, а список конкретных ресурсов и предупреждений. Для WordPress важнее отсутствие поломок и сокращение лишних запросов, чем красивое число в отчете.

Хороший признак — когда после отключения emoji и ненужных скриптов сайт открывается без JS-ошибок, а в Network исчезают файлы, которые раньше грузились на каждой странице.

Частые ошибки и как их исправить

Сломали форму или меню после добавления defer

Причина обычно в том, что скрипт зависит от другого файла и должен выполняться в строгом порядке. Уберите defer с проблемного handle и проверьте, не нужен ли он только на части страниц.

Отключили wp-embed, а в контенте пропали встраивания

Значит, сайт реально использует oEmbed или кто-то вставляет WordPress-контент через встроенный механизм. Верните скрипт и ищите более точечное решение.

Убрали emoji, но изменений не видно

Проверьте кэш: серверный, плагинный и CDN. Иногда старый HTML просто продолжает отдаваться из кэша, и кажется, что код не сработал.

Начали отключать jQuery Migrate без проверки

Это частая ошибка. Если тема или плагины используют старый jQuery-код, сайт может начать сыпаться. Сначала найдите источник зависимости, потом решайте, можно ли убрать migrate.

Чек-лист перед публикацией изменений

  • Сделана резервная копия файлов и базы.
  • Проверена тестовая копия сайта или staging.
  • Список отключаемых скриптов собран по факту, а не по догадке.
  • Проверены формы, меню, слайдеры, модальные окна и поиск.
  • Очистен кэш WordPress, сервера и CDN.
  • Сравнен исходный код страницы до и после правок.

Практические советы по безопасности и производительности

Не храните такие правки в произвольном плагине для сниппетов без контроля версий. Для проекта с разработкой лучше держать их в дочерней теме или в отдельном mu-plugin, чтобы изменения не терялись при обновлении.

Если у вас несколько оптимизаторов одновременно, не включайте одинаковые функции в двух местах. Например, отключение emoji, defer и очистка embed в одном плагине и в functions.php часто приводит к трудноуловимым конфликтам.

И последнее: оптимизация скриптов должна быть обратимой. Любую правку удобно оставлять в виде небольшого блока кода, который можно быстро отключить, если после обновления темы или плагина что-то изменится.

Как убрать из индекса старые PHP-страницы и архивы в WordPress
15.09.2026
Как найти и удалить дубли изображений в WordPress
21.08.2026
Как настроить canonical и noindex для фильтров и параметров в WordPress
11.09.2026
Как удалить редиректы в WordPress: полное практическое руководство
02.10.2026
Как создать собственный REST API в WordPress с примерами кода
28.09.2026