Мы используем файлы cookie для хранения данных. Продолжая использовать сайт, вы
даете согласие на работу с этими файлами

Инструкция по 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

Корневые причины

  1. Draft.js Emoji Picker — Yoast Premium грузит внешний скрипт emoji picker с yoast.com/emoji-picker/... при каждом открытии редактора поста/списка постов.
  2. HelpScout Beacon — виджет саппорта загружается с beacon-v2.helpscout.net, тоже заблокирован из РФ.
  3. Orphaned / Cornerstone COUNT-запросы — на страницах списков выполняются тяжёлые COUNT-запросы для orphaned и cornerstone-постов всех post types.
  4. Прочие 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_typesPHP_INT_MAX приоритет, чтобы перебить любые фильтры плагина.
  • Если на хосте НЕТ блокировки yoast.com (западный сервер) — pre_http_request фильтр не обязателен, но emoji picker + HelpScout всё равно стоит отключить (лишние внешние зависимости).

Диагностика (если проблема сохраняется)

  1. Chrome DevTools → Network: фильтр по домену yoast.com. Есть ли запросы? transferSize:0 = блокировка.
  2. WP CLI: wp eval "var_dump(has_filter('pre_http_request'));" — должен вернуть bool(true).
  3. WP CLI: wp eval "var_dump(apply_filters('wpseo_premium_load_emoji_picker', true));" — должен вернуть bool(false).
  4. Query Monitor: HTTP API Calls — нет запросов к yoast.com.
  5. WP Debug Log: define('WP_DEBUG', true); define('WP_DEBUG_LOG', true); — нет cURL timeout-ошибок на yoast.com.
+7 495 106 26 55
info@ttsconf.ru

Мы готовы отвечать на ваши сообщения
круглосуточно. Но с 22-00 до 08-00 (МСК)

мы занимаемся личными вопросами =)

Задать вопрос