Инструкция по pre_http_request для Yoast SEO Premium
Инструкция по pre_http_request для Yoast SEO Premium
Проблема
Yoast SEO Premium отправляет HTTP-запросы к внешним ресурсам на yoast.com. На российских хостингах этот домен часто заблокирован, что приводит к зависанию страниц админки WordPress на 1–10 секунд.
Симптомы
wp-admin/edit.php,wp-admin/post.php,wp-admin/post-new.php— долгая загрузка (1–10+ с)- Chrome DevTools → Network: запросы к
yoast.comсtransferSize:0или(failed), duration > 1000 ms wp-admin/plugins.php,wp-admin/admin.php?page=wpseo_dashboard— аналогичные тормоза- Query Monitor / New Relic: медленные HTTP API-запросы, уходящие на yoast.com
Корневые причины
- Draft.js Emoji Picker — Yoast Premium грузит внешний скрипт emoji picker с
yoast.com/emoji-picker/...при каждом открытии редактора поста/списка постов. - HelpScout Beacon — виджет саппорта загружается с
beacon-v2.helpscout.net, тоже заблокирован из РФ. - Orphaned / Cornerstone COUNT-запросы — на страницах списков выполняются тяжёлые COUNT-запросы для orphaned и cornerstone-постов всех post types.
- Прочие HTTP-запросы к yoast.com — лицензионные проверки, проверка обновлений, телеметрия — все блокируются и добавляют задержку.
Решение: четыре фикса в functions.php темы
<?php
/**
* Yoast SEO Premium — отключение внешних вызовов (РФ-хостинг).
* Все фиксы — в functions.php темы. Переживают обновление плагина.
*/
// --- Фикс 1: Draft.js Emoji Picker — грузится с yoast.com, блокирован из РФ ---
add_filter( 'wpseo_premium_load_emoji_picker', '__return_false' );
// --- Фикс 2: HelpScout Beacon — внешний скрипт (beacon-v2.helpscout.net) ---
add_filter( 'wpseo_helpscout_show_beacon', '__return_false' );
// --- Фикс 3: Orphaned + Stale Cornerstone COUNT-запросы ---
add_filter( 'Yoast\WP\SEO\orphaned_post_types', '__return_empty_array', PHP_INT_MAX );
add_filter( 'wpseo_cornerstone_post_types', '__return_empty_array', PHP_INT_MAX );
// --- Фикс 4: Блокировка ВСЕХ HTTP-запросов к yoast.com ---
add_filter( 'pre_http_request', function ( $preempt, $parsed_args, $url ) {
$blocked_domains = [ 'yoast.com', 'my.yoast.com', 'my-yoast.com' ];
foreach ( $blocked_domains as $domain ) {
if ( strpos( $url, $domain ) !== false ) {
return new WP_Error( 'http_request_blocked', 'Blocked for performance: ' . esc_url_raw( $url ) );
}
}
return $preempt;
}, 10, 3 );
Фикс 5: напоминалка при обновлении плагина
После обновления Yoast плагин может переопределить свои фильтры. На странице wp-admin/plugins.php над каждой строкой плагина Yoast вставляется красная плашка-напоминание (реализована через admin_footer-plugins.php).
Плашка имеет красный фон #dc3232, белый текст, жирное начертание и содержит предупреждение о необходимости проверки фикса после обновления.
Примечания
- Все фиксы — в functions.php темы. Они переживают обновление плагина Yoast. НЕ патчить файлы плагина напрямую.
pre_http_requestвозвращаетWP_Error— Yoast получает ошибку вместо таймаута и продолжает работу (graceful degradation).- Если Yoast обновился и админка снова тормозит — проверить, что фильтры на месте:
grep pre_http_request functions.php. - Фильтр
orphaned_post_types—PHP_INT_MAXприоритет, чтобы перебить любые фильтры плагина. - Если на хосте НЕТ блокировки yoast.com (западный сервер) — pre_http_request фильтр не обязателен, но emoji picker + HelpScout всё равно стоит отключить (лишние внешние зависимости).
Диагностика (если проблема сохраняется)
- Chrome DevTools → Network: фильтр по домену
yoast.com. Есть ли запросы?transferSize:0= блокировка. - WP CLI:
wp eval "var_dump(has_filter('pre_http_request'));"— должен вернутьbool(true). - WP CLI:
wp eval "var_dump(apply_filters('wpseo_premium_load_emoji_picker', true));"— должен вернутьbool(false). - Query Monitor: HTTP API Calls — нет запросов к yoast.com.
- WP Debug Log:
define('WP_DEBUG', true); define('WP_DEBUG_LOG', true);— нет cURL timeout-ошибок на yoast.com.