Если сайт на WordPress не использует встраивания из Twitter/X, YouTube, WordPress.com и других источников, oEmbed часто остается лишним грузом. Он добавляет запросы, подключает wp-embed.min.js, а иногда еще и создает путаницу в HTML-выводе, когда тема или плагины уже решают задачу по-своему.
Но отключать это нужно аккуратно: не все встраивания одинаково бесполезны. На части сайтов oEmbed реально используется редакторами, а на части — только тянет лишний код. Ниже разберем, как понять, нужен ли он вам, как отключить его без побочных эффектов и как проверить, что ничего не сломалось.
Когда oEmbed действительно мешает
Проблема обычно проявляется не как одна большая ошибка, а как набор мелких симптомов:
- в HTML страницы загружается
/wp-includes/js/wp-embed.min.js, хотя встраивания не используются; - в
<head>остаются ссылки наwp-json/oembed/1.0; - на фронтенде появляются лишние HTTP-запросы;
- в редакторе контент вставляется как обычная ссылка, а не как встроенный блок;
- плагин кеша или оптимизации пытается объединять/откладывать скрипт, но пользы от него все равно нет.
Если сайт — корпоративный, новостной или контентный и вы не вставляете внешние медиа через oEmbed, отключение обычно оправдано. Если же редакторы регулярно вставляют ролики и посты через URL, сначала проверьте, не завязаны ли на это рабочие процессы.
Диагностика: что именно подключается
Перед правкой кода посмотрите, есть ли на странице признаки oEmbed. Самый простой способ — открыть исходный код и найти упоминания wp-embed.min.js, oembed и embed. Еще полезно проверить сетевые запросы в DevTools.
Что искать в исходнике
<script src=".../wp-includes/js/wp-embed.min.js"><link rel="alternate" type="application/json+oembed" ...><link rel="alternate" type="text/xml+oembed" ...>
Если эти элементы есть, значит WordPress все еще генерирует oEmbed-связанные теги. Это не всегда критично, но на сайтах с жесткой оптимизацией лучше убрать лишнее.
Проверка через браузер
Откройте страницу, затем в DevTools перейдите в Network и отфильтруйте запросы по слову embed. Если скрипт грузится, а встраивания не используются, это хороший кандидат на отключение.
Как отключить oEmbed через код
Самый предсказуемый способ — добавить код в functions.php дочерней темы или в небольшой mu-plugin. Для продакшена mu-plugin даже удобнее: он не зависит от темы и не исчезнет при обновлении.
<?php
/**
* Disable oEmbed and related embeds.
*/
add_action('init', function () {
// Убираем автопреобразование URL в embed.
remove_filter('the_content', array($GLOBALS['wp_embed'], 'autoembed'), 8);
remove_filter('widget_text_content', array($GLOBALS['wp_embed'], 'autoembed'), 8);
});
add_action('wp_footer', function () {
wp_deregister_script('wp-embed');
}, 1);
remove_action('wp_head', 'wp_oembed_add_discovery_links');
remove_action('wp_head', 'wp_oembed_add_host_js');
add_filter('embed_oembed_discover', '__return_false');
add_filter('oembed_response_data', function ($data) {
return $data;
});Здесь есть важный нюанс: remove_action('wp_head', ...) убирает discovery-ссылки, а wp_deregister_script('wp-embed') отключает фронтенд-скрипт. Этого обычно достаточно, если вы не используете встроенные превью по URL.
Если хотите отключить только автопреобразование ссылок в контенте, но оставить часть oEmbed-механики, не трогайте все сразу. Сначала уберите только autoembed, затем проверьте редактор и фронтенд.
Альтернатива: отключить через плагин оптимизации
Если на сайте уже стоит плагин для чистки и оптимизации, иногда проще использовать его настройки, чем писать код. Например, в Clearfy Pro есть инструменты для отключения лишних функций WordPress, включая часть технического мусора. Это удобно, если вы хотите управлять такими вещами из админки, а не через тему.
| Подход | Когда подходит | Компромисс |
|---|---|---|
| Код в mu-plugin | Нужен точный контроль | Требует аккуратной проверки после обновлений |
| Плагин оптимизации | Нужно быстро и без правки файлов | Зависимость от интерфейса и набора функций плагина |
| Ничего не отключать | Сайт активно использует встраивания | Остаются лишние запросы и теги |
Если у вас уже есть плагин, который закрывает похожие задачи, не ставьте второй только ради одной галочки. Лишние плагины для «чистки» часто конфликтуют между собой сильнее, чем сам oEmbed.
Пошаговое решение без сюрпризов
- Проверьте, используются ли встраивания в редакторском процессе.
- Сделайте резервную копию или подготовьте staging-копию сайта.
- Добавьте код отключения в mu-plugin или
functions.phpдочерней темы. - Очистите кеш страницы, объекта и CDN, если они есть.
- Откройте несколько типов страниц: запись, страницу, архив, главную.
- Проверьте исходный код и Network в браузере.
- Убедитесь, что обычные ссылки в контенте не превращаются в пустые блоки.
Как проверить, что решение сработало
Проверка должна быть не на глаз, а по конкретным признакам.
- В исходном коде страницы больше нет
wp-embed.min.js. - В
<head>отсутствуют discovery-ссылкиoembed. - В Network нет запроса к
/wp-includes/js/wp-embed.min.js. - Ссылки на внешние сервисы в контенте не превращаются в встроенные блоки, если это было вашей целью.
Если вы отключали только фронтенд-скрипт, а редактор продолжает показывать embed-превью в админке, это нормально. Главное — чтобы на публичной части сайта не осталось лишней нагрузки.
Частые ошибки и как их исправить
Удалили слишком много и сломали встраивания
Частая ошибка — отключить все фильтры и скрипты сразу, а потом обнаружить, что редакторы больше не могут вставлять видео или посты по URL. В этом случае верните autoembed или оставьте oEmbed для админки, а на фронтенде уберите только wp-embed.
Правили родительскую тему
После обновления изменения исчезнут. Для таких правок используйте дочернюю тему или mu-plugin. Это особенно важно, если сайт живет долго и обновляется регулярно.
Не очистили кеш
После отключения oEmbed старый HTML может продолжать отдаваться из кеша. Очистите кеш плагина, сервера и CDN, иначе вы будете проверять неактуальную версию страницы.
Смешали несколько плагинов для оптимизации
Если один плагин отключает embed-скрипты, а другой пытается их снова подцепить, результат будет нестабильным. Оставьте один источник управления технической чисткой и проверьте его настройки целиком.
Практические советы по безопасности и производительности
Отключение oEmbed само по себе не делает сайт безопаснее, но убирает лишнюю поверхность и уменьшает количество подключаемых ресурсов. Это полезно на сайтах, где важны предсказуемость и минимальный фронтенд.
- не отключайте функциональность на боевом сайте без проверки на staging;
- если используете кеширование HTML, проверяйте именно очищенную версию;
- не храните подобные правки в случайных сниппетах без контроля версий;
- если нужен централизованный набор технических отключений, удобнее собрать его в одном mu-plugin.
Если вам нужно не только отключить oEmbed, но и убрать другие технические хвосты WordPress, имеет смысл смотреть в сторону инструментов для чистки ядра и SEO-мусора. В таких задачах полезен Clearfy Pro: https://wpshop.ru/plugins/clearfy.
Когда oEmbed лучше оставить включенным
Не отключайте его, если:
- редакторы часто вставляют видео, посты и карточки по URL;
- сайт использует контент из внешних источников как часть редакционной работы;
- вы не уверены, какие плагины или блоки завязаны на embed-поведение;
- у вас нет времени тестировать разные сценарии на staging.
В таких случаях лучше ограничиться точечной оптимизацией и не ломать рабочий процесс ради нескольких килобайт.