Если сайт на 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 как базовый слой, а точечные исключения оставить в коде темы. Но даже в этом случае не отключайте всё подряд без проверки фронтенда и админки.
Проверка результата после внедрения
После правок не ограничивайтесь ощущением «страница стала легче». Проверьте три вещи:
- Откройте страницу в режиме инкогнито и убедитесь, что нет ошибок в консоли.
- Сравните исходник до и после: ушли ли emoji, wp-embed и лишние подключения.
- Проверьте ключевые сценарии: отправка форм, открытие меню, слайдеры, модальные окна, поиск.
Если используете 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 часто приводит к трудноуловимым конфликтам.
И последнее: оптимизация скриптов должна быть обратимой. Любую правку удобно оставлять в виде небольшого блока кода, который можно быстро отключить, если после обновления темы или плагина что-то изменится.