На небольших и средних сайтах WordPress часто остаются включенными два источника лишней нагрузки: emoji-скрипты и oEmbed. Визуально они почти незаметны, но в коде страницы добавляют дополнительные запросы, а в некоторых конфигурациях создают мусор в <head> и лишние обработчики в редакторе.
Если задача не в «выжать максимум из PageSpeed любой ценой», а в аккуратной технической чистке, лучше отключать эти вещи точечно и с проверкой. Ниже — рабочие способы для темы и плагина, а также сценарии, где отключать нельзя.
Когда это вообще имеет смысл
Отключение emoji и oEmbed полезно, если сайт:
- не использует встроенные эмодзи WordPress в старом формате;
- не полагается на автоподстановку внешних ссылок в превью;
- работает на кастомной теме или в связке с кэшем и CDN;
- имеет лишние запросы в
wp_head()и хочет сократить шум в HTML.
Если редакторы регулярно вставляют ссылки на YouTube, X, Instagram или другие сервисы и рассчитывают на автоматическое встраивание, отключать oEmbed «в лоб» не стоит. В этом случае лучше убрать только внешний автодискавери и оставить нужный сценарий через явный блок или плагин.
Диагностика: что именно грузится сейчас
Перед правкой проверьте, есть ли на сайте оба механизма. Для emoji обычно видно подключение wp-emoji-release.min.js. Для oEmbed — скрипт wp-embed.min.js и дополнительные ссылки discovery в head.
Что искать в исходном коде
Откройте страницу и посмотрите исходник. Если видите такие элементы, они как раз и относятся к теме:
wp-emoji-release.min.js;wp-embed.min.js;<link rel="alternate" type="application/json+oembed" ...>;<link rel="alternate" type="text/xml+oembed" ...>.
Если у вас включен Query Monitor или похожий инструмент, можно дополнительно посмотреть список подключенных скриптов и убедиться, что они действительно приходят из ядра WordPress, а не из темы или плагина.
Пошаговое решение через functions.php или mu-plugin
Самый предсказуемый вариант — добавить код в дочернюю тему или в mu-plugin. Для технической чистки я обычно предпочитаю mu-plugin, потому что он не зависит от смены темы.
1. Отключаем emoji
Этот код убирает стандартные действия WordPress, связанные с emoji, и отключает стили/скрипты, которые ядро добавляет на фронтенде и в админке:
<?php
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' );
remove_filter( 'the_content_feed', 'wp_staticize_emoji' );
remove_filter( 'comment_text_rss', 'wp_staticize_emoji' );
remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' );
} );Это стандартный и безопасный способ, если вы не используете старые браузеры и не рассчитываете на специфическое поведение emoji-детектора WordPress.
2. Отключаем oEmbed на фронтенде
Если автоподстановка внешних ссылок не нужна, можно убрать и скрипт, и часть связанных фильтров:
<?php
add_action( 'init', function () {
// Убираем скрипт встраивания на фронтенде.
wp_deregister_script( 'wp-embed' );
// Отключаем discovery-ссылки oEmbed.
remove_action( 'wp_head', 'wp_oembed_add_discovery_links' );
remove_action( 'wp_head', 'wp_oembed_add_host_js' );
} );
// Если нужно полностью отключить автоподстановку oEmbed из контента:
add_filter( 'embed_oembed_discover', '__return_false' );Обратите внимание: wp_deregister_script( 'wp-embed' ) убирает только подключение скрипта. Если тема или плагин рассчитывают на него для конкретных embed-блоков, проверьте это отдельно.
3. Если нужен компромисс, отключайте только discovery
Иногда лучше оставить сам механизм embed, но убрать лишние ссылки discovery из head. Это уменьшает «шум» в HTML и не ломает явные встраивания в редакторе.
<?php
add_action( 'init', function () {
remove_action( 'wp_head', 'wp_oembed_add_discovery_links' );
} );Такой вариант уместен, если редакторы вставляют embed-блоки вручную, а автоматическое подхватывание ссылок из обычного текста не нужно.
Сравнение вариантов: плагин, код, частичное отключение
| Подход | Что делает | Плюсы | Минусы |
|---|---|---|---|
Код в mu-plugin | Точечно отключает emoji и oEmbed | Контроль, не зависит от темы | Нужно следить за обновлениями и конфликтами |
| Плагин для чистки | Убирает часть лишних функций ядра | Быстро включить без кода | Может отключать больше, чем нужно |
| Частичное отключение | Убирает только discovery или только emoji | Меньше риск сломать embed-сценарии | Не убирает все лишние элементы |
Если нужен более широкий набор технической чистки, иногда удобнее использовать Clearfy Pro от WPShop: там есть инструменты для удаления дублей и лишних элементов интерфейса, но перед включением все равно стоит проверить, что именно меняется на вашем сайте. Ссылка: Clearfy Pro.
Как проверить, что решение сработало
После правки не ограничивайтесь визуальной проверкой. Нужно посмотреть и HTML, и поведение редактора.
- Откройте исходный код страницы и убедитесь, что исчезли
wp-emoji-release.min.jsи/илиwp-embed.min.js. - Проверьте, что в
<head>больше нет oEmbed discovery-ссылок, если вы их отключали. - Откройте запись с обычной внешней ссылкой и убедитесь, что она не превращается в embed там, где это не нужно.
- Если используете блоковый редактор, проверьте вставку embed-блока вручную.
- Сравните список запросов в DevTools до и после изменения.
Для быстрой технической проверки удобно смотреть именно исходник страницы, а не только Lighthouse. Иногда скрипт убран, но фильтр в head остался, и это видно только в HTML.
Частые ошибки и как их исправить
Сломали встраивание видео или постов
Причина обычно в том, что отключили не только автодискавери, но и сам wp-embed, а редакторы рассчитывали на автоматическое встраивание. Решение простое: вернуть wp-embed и убрать только discovery-ссылки, либо перейти на явные embed-блоки.
Код добавили в тему, а потом сменили шаблон
Если правка лежит в functions.php активной темы, при смене темы она исчезнет. Для системных отключений лучше использовать mu-plugin или отдельный мини-плагин.
Отключили emoji, но в админке остались лишние подключения
Частая причина — код удаляет только фронтенд-скрипт, а админские хуки остаются. В рабочем варианте нужно снимать и admin_print_scripts, и admin_print_styles, как в примере выше.
Поставили плагин оптимизации и получили дублирующие изменения
Некоторые плагины уже умеют отключать emoji, embeds и похожие элементы ядра. Если включить отдельный код поверх плагина, можно получить конфликт или двойную обработку. Сначала проверьте, что именно делает плагин, и не дублируйте одну и ту же оптимизацию в двух местах.
Практические советы по безопасности и производительности
Любая чистка ядра должна быть обратимой. Перед изменениями сохраните текущий вариант кода в репозитории или хотя бы в отдельном файле, чтобы быстро откатить правку. На продакшене не редактируйте functions.php напрямую без бэкапа: ошибка в PHP уронит сайт целиком.
Если у вас есть кэш страницы и CDN, после отключения emoji/oEmbed очистите:
- page cache;
- object cache, если он используется;
- кэш CDN;
- кэш браузера при проверке в DevTools.
И еще момент: если сайт работает в редакторе с большим количеством внешних вставок, не пытайтесь «оптимизировать» это отключением всего подряд. Лучше сначала понять, какие embed-сценарии реально используются редакцией, и только потом убирать лишнее.
Когда лучше не отключать
Не трогайте oEmbed, если сайт активно публикует материалы с автоподстановкой внешних медиа и редакторы не готовы менять процесс. Не отключайте emoji только ради микроскопической экономии, если у вас есть интеграции или старые шаблоны, которые завязаны на стандартное поведение ядра. В таких случаях выигрыш от чистки не стоит риска сломать контентный поток.
Если нужен более широкий аудит технических дублей и лишних функций, имеет смысл смотреть не только на emoji и embeds, но и на другие элементы, которые добавляют шум в HTML и админку. Здесь важнее не «выключить все», а оставить только то, что реально используется сайтом.