WordPress и SEO: технический чек-лист для бизнеса, который устал от плагинов
Александр Калинин
21 Август 2026
24 мин.
Сайт на WordPress тормозит на мобильных, PageSpeed Insights рисует жёлто-красную шкалу Core Web Vitals, а позиции в Яндексе и Google просели после очередного обновления. В разделе «Установленные плагины» уже не двадцать, а тридцать с лишним модулей: Yoast SEO или Rank Math для мета-тегов, WP Rocket или LiteSpeed Cache для кеширования, Smush или ShortPixel для картинок, Wordfence для безопасности, WPForms для форм, Elementor для «удобного» редактора. Каждый модуль по отдельности выглядит безобидно, но в сумме они формируют «плагинный ад» — от десятков JS-скриптов на фронтенде, раздутой базы MySQL и перегруженного wp_head. Владелец бизнеса платит за это конверсией, скоростью и стоимостью каждого привлечённого лида.
Ваш сайт на WordPress тормозит, а поисковый трафик не растёт? Не закрывайте глаза на технические ошибки — закажите технический SEO-аудит WordPress-сайта в «Калинин Студио».
Раздел 1. Почему подход «поставь ещё один плагин» убивает SEO сайта на Wordpress и скорость загрузки
WordPress — это конструктор, в котором 80% проблем рождается не в ядре CMS, а в слое активных модулей. Модульность — это и сила, и ахиллесова пята платформы. Каждый активный плагин запускает собственный init-хук, регистрирует обработчики на wp_head, wp_footer, REST API и wp_enqueue_scripts. Чем больше хуков, тем длиннее цепочка исполнения на каждом запросе.
Технические последствия перегруза выглядят так:
- TTFB (Time To First Byte) растёт из-за каскадной инициализации модулей на уровне PHP и серии запросов к таблице wp_options со значением autoload='yes'. Для бизнеса это лишние 400–900 мс до первого байта и минус 7–14% конверсии на мобильных устройствах.
- LCP и INP проседают из-за переизбытка стороннего JavaScript: рекламные пиксели, плагины чатов, аналитика, слайдеры, конструкторы форм на Elementor. PageSpeed Insights показывает рекомендации «Reduce unused JavaScript» и «Eliminate render-blocking resources».
- Дублируется контент, потому что Yoast или Rank Math корректно работают только при последовательной настройке. Конфликты между All in One SEO и Rank Math — реальная клиническая картина, с которой приходят на технический аудит.
- База данных MySQL разрастается до сотен мегабайт, потому что плагины пишут свои таблицы, логи, транзиенты и мета-данные без очистки. Самые тяжёлые — wp_options.autoload, wp_postmeta, wp_termmeta и wp_actionscheduler_actions в WooCommerce.
Сравнение подходов — в таблице ниже. Она же задаёт тон всему чек-листу и показывает, почему SEO Wordpress без плагинов — это не идеализм, а инженерная гигиена.
| SEO-задача | Стандартный путь (плагин) | Инженерный путь «Калинин Студио» | Бизнес-результат |
|---|---|---|---|
| Title, Description, Meta Robots | Yoast/Rank Math плюс боковая панель | PHP-класс через add_theme_support('title-tag') + wpseo фильтры или собственный шаблон header.php | Минус 2 JS, минус 12 SQL-запросов на страницу, +3–6 позиции в Яндексе |
| XML Sitemap | Плагин Google XML Sitemaps или модуль в Yoast | Статическая генерация через wp_sitemaps PHP 8.0+ либо кастомный скрипт | Карта отдаётся за <50 мс, не зависит от плагина |
| Schema.org JSON-LD | Модули Schema Pro или встроенный блок Yoast | Чистый JSON-LD через wp_footer или wp_head, генерация на PHP из данных записей | Сниппеты «звёзды», FAQ, цена — без стороннего JS |
| Robots.txt | Настройка в админке SEO-плагина | Файл robots.txt в корне + wp_robots фильтр для динамических правок | Контролируемая индексация, нулевой риск случайного Disallow: / |
| Кеширование | WP Rocket / LiteSpeed Cache | Nginx FastCGI Cache + Redis Object Cache + Brotli на уровне сервера | TTFB 80–200 мс вместо 700–1200 мс |
| Оптимизация wp_head | Надежда на «чистую тему» | Десятки remove_action для wp_head + отключение emoji, embeds, dns-prefetch, REST API link | Минус 30–70 КБ мусорного HTML-кода в <head> |
| Микроразметка WooCommerce | Платные модули Schema for WooCommerce | Кастомный JSON-LD + правильная работа с rel=canonical на страницах фильтров | Сниппеты с ценой, наличием, рейтингом в выдаче |
Раздел 2. Серверный уровень и оптимизация инфраструктуры Wordpress для SEO

Прежде чем лезть в functions.php, нужно убедиться, что фундамент инфраструктуры выдерживает нагрузку. Никакой плагин не компенсирует слабый сервер и неактуальную версию PHP.
Версия PHP. Минимум — PHP 8.1, идеально — PHP 8.3. WordPress 6.5+ официально поддерживает PHP 8.x и работает на 8.3 на 15–30% быстрее, чем на 7.4. Дополнительно включается OPcache с агрессивными параметрами:
opcache.enable=1 opcache.memory_consumption=256 opcache.interned_strings_buffer=16 opcache.max_accelerated_files=20000 opcache.validate_timestamps=0 opcache.revalidate_freq=0 opcache.fast_shutdown=1
Веб-сервер. Nginx + php-fpm — стандарт для коммерческих проектов. Apache с mod_php нагружает каждый запрос памятью всего интерпретатора, поэтому под нагрузкой TTFB деградирует. Переход на Nginx даёт устойчивость под 100–300 одновременных соединений с одним ядром CPU.
Сжатие. Включение Brotli на уровне Nginx важнее, чем любое «сжатие» через плагин:
brotli on; brotli_comp_level 5; brotli_types text/plain text/css application/javascript application/json application/xml image/svg+xml;
Brotli сжимает HTML, CSS и JS на 18–25% эффективнее Gzip.
Object Cache через Redis. Это ключевой слой ускорения: WordPress по умолчанию читает настройки из wp_options, и они тянутся из MySQL на каждом запросе. Redis заменяет это на хранение в оперативной памяти:
# В wp-config.php
define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', 6379);
define('WP_REDIS_CLIENT', 'phpredis');
define('WP_REDIS_PREFIX', 'mysite:');
define('WP_CACHE', true);
HTTP/2 и HTTP/3. Параллельная загрузка скриптов и картинок. Если хостер не поддерживает HTTP/3 — это повод задуматься о смене площадки.
Раздел 3. Очистка wp_head и отключение лишнего функционала через functions.php
Ядро WordPress и десятки модулей добавляют в <head> мусор, который не нужен ни поисковикам, ни пользователям, ни фронтенду: стили для emoji, скрипты для встраивания Embeds, dns-prefetch для неиспользуемых доменов, анонимный REST API link. За два–три года жизни сайта <head> разрастается до 30–70 КБ кода, который парсится на каждой загрузке.
Готовые хуки для functions.php. Перед вставкой — резервная копия файла:
// 1. Удаляем RSS-фиды, если они не нужны (для лендингов и каталогов)
remove_action('wp_head', 'feed_links', 2);
remove_action('wp_head', 'feed_links_extra', 3);
// 2. Удаляем ссылку на RSD и manifest, оставшиеся от xmlrpc
remove_action('wp_head', 'rsd_link');
remove_action('wp_head', 'wp_generator');
remove_action('wp_head', 'wlwmanifest_link');
// 3. Удаляем короткую ссылку
remove_action('wp_head', 'wp_shortlink_wp_head');
// 4. Удаляем Emoji-скрипты и стили (экономия 8 КБ JS + 4 КБ CSS)
remove_action('wp_head', 'print_emoji_detection_script', 7);
remove_action('wp_print_styles', 'print_emoji_styles');
remove_action('admin_print_scripts', 'print_emoji_detection_script');
remove_action('admin_print_styles', 'print_emoji_styles');
// 5. Удаляем oEmbed-скрипты и discover-link
remove_action('wp_head', 'wp_oembed_add_discovery_links');
remove_action('wp_head', 'wp_oembed_add_host_js');
remove_filter('oembed_dataparse', 'wp_filter_oembed_result', 10);
// 6. Отключаем wp-json link в head, если не нужны публичные REST-запросы
remove_action('wp_head', 'rest_output_link_wp_head', 10);
remove_action('wp_head', 'wp_resource_hints', 2);
remove_action('wp_head', 'adjacent_posts_rel_link_wp_head', 10);
// 7. Disable WP Block Library CSS на фронтенде (если используется классический редактор)
add_action('wp_enqueue_scripts', function() {
wp_dequeue_style('wp-block-library');
wp_dequeue_style('wp-block-library-theme');
wp_dequeue_style('wc-block-style');
}, 100);
// 8. Удаляем meta-поле generator из RSS-фидов
add_filter('the_generator', '__return_empty_string');
// 9. Отключаем комментарии полностью, если они не нужны (для каталогов и лендингов)
add_action('wp_loaded', function() {
if (is_admin()) return;
remove_action('wp_head', 'comments_rss2_head');
wp_deregister_script('comment-reply');
});
// 10. Удаляем Global Styles и SVG-дублирование из Gutenberg, если редактор не используется
remove_action('wp_enqueue_scripts', 'wp_enqueue_global_styles');
remove_action('wp_footer', 'wp_enqueue_global_styles', 1);
Эти десять хуков убирают ~40 КБ шума из <head>. Для коммерческих сайтов со сложной вёрсткой — это минус 80–150 мс к LCP на 3G-мобильных.
Раздел 4. Устранение дублей и управление индексацией
Дубли — главный враг SEO сайта на Wordpress. Яндекс склеивает их в кластеры, Google выбирает canonical и теряет сигналы. Поисковики видят десятки версий одной страницы, и краулинговый бюджет тратится на мусор.
Источники дублей, которые создают плагины:
- Архивы по датам: /2024/03/, /2024/03/15/;
- Архивы по авторам: /author/admin/;
- Архивы по тегам и категориям без уникального контента;
- Страницы вложений: /wp-content/uploads/2024/03/file/;
- Трекбеки и пинкбеки — отдельные URL;
- Пагинация /page/2/, /page/3/ — без корректного rel="canonical";
- Версии со слешем и без на конце;
- Канонические атрибуты товаров WooCommerce без сортировки и фильтров.
Robots.txt для типового бизнес-сайта — закрываем служебные зоны и дубли:
User-agent: * Disallow: /wp-admin/ Disallow: /wp-includes/ Disallow: /wp-content/plugins/ Disallow: /wp-content/cache/ Disallow: /wp-json/ Disallow: /xmlrpc.php Disallow: /readme.html Disallow: /?s= Disallow: /search/ Disallow: /author/ Disallow: /*/feed/ Disallow: /trackback/ Disallow: /embed/ Allow: /*.css Allow: /*.js Allow: /*.png Allow: /*.jpg Allow: /*.svg Sitemap: https://kalinin.pro/sitemap.xml
Канонические URL. На архивах таксономий с пагинацией canonical должен вести на первую страницу без /page/2/, либо на текущую, если это осмысленная страница с уникальным контентом. В код добавляется так:
// Канонизация архивов таксономий (категории, теги, авторы)
add_filter('wpseo_canonical', '__return_false');
add_action('wp_head', function() {
if (is_tax() || is_tag() || is_category() || is_author()) {
$paged = (int) get_query_var('paged');
if ($paged > 1) {
$base = get_term_link(get_queried_object());
echo '<link rel="canonical" href="' . esc_url($base) . '" />' . "\n";
return;
}
}
if (is_singular()) {
echo '<link rel="canonical" href="' . esc_url(get_permalink()) . '" />' . "\n";
}
}, 1);
Sitemap.xml. С версии WordPress 5.5 появился нативный wp_sitemaps. Используйте его, отключив аналоги от плагинов:
// Отключаем лишние типы записей из карты
add_filter('wp_sitemaps_post_types', function($post_types) {
unset($post_types['attachment']);
return $post_types;
});
// Отключаем таксономии авторов и архивов, если они не нужны
add_filter('wp_sitemaps_taxonomies', function($taxonomies) {
return $taxonomies; // оставляем category и post_tag
});
// Делим sitemap на куски по 500 URL — снижает TTFB карты
add_filter('wp_sitemaps_max_urls', function() { return 500; });
Wp-cron. Встроенный WP-Cron запускается при каждом запросе и подвешивает админку. Замените его системным cron через crontab -e:
*/5 * * * * curl -s -o /dev/null https://kalinin.pro/wp-cron.php?doing_wp_cron
И запретите запуск встроенного:
// в wp-config.php
define('DISABLE_WP_CRON', true);
Раздел 5. Нативная микроразметка Schema.org и мета-теги на уровне кода

Для SEO-оптимизации Wordpress критически важны структурированные данные: Article, FAQPage, Product, Organization, BreadcrumbList. Часть из них Яндекс учитывает в сниппетах, Google — в расширенных результатах. Плагины ставят JSON-LD, но добавляют 60–120 КБ JS для динамической генерации. Нативный код — легче и стабильнее.
Article + Organization для всех страниц:
add_action('wp_head', function() {
$schema = [
'@context' => 'https://schema.org',
'@graph' => []
];
// Organization
$schema['@graph'][] = [
'@type' => 'Organization',
'name' => get_bloginfo('name'),
'url' => home_url('/'),
'logo' => [
'@type' => 'ImageObject',
'url' => get_site_icon_url(512)
],
'sameAs' => array_values(array_filter([
get_option('twitter_url'),
get_option('facebook_url'),
get_option('instagram_url'),
get_option('youtube_url'),
get_option('vk_url')
]))
];
// Article — только на одиночных записях
if (is_singular('post')) {
global $post;
$schema['@graph'][] = [
'@type' => 'Article',
'headline' => get_the_title(),
'datePublished' => get_the_date('c'),
'dateModified' => get_the_modified_date('c'),
'author' => [
'@type' => 'Person',
'name' => get_the_author_meta('display_name', $post->post_author)
],
'publisher' => [
'@type' => 'Organization',
'name' => get_bloginfo('name'),
'logo' => [
'@type' => 'ImageObject',
'url' => get_site_icon_url(512)
]
],
'mainEntityOfPage' => get_permalink(),
'image' => get_the_post_thumbnail_url($post, 'full')
];
}
echo '<script type="application/ld+json">' . wp_json_encode($schema, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) . '</script>' . "\n";
});
FAQ JSON-LD — для страниц с вопросами-ответами:
add_action('wp_head', function() {
if (is_page('voprosy')) {
$faqs = [
['q' => 'Нужен ли Yoast SEO для wordpress seo?',
'a' => 'Не обязателен. Yoast добавляет 50+ JS-скриптов и SQL-запросов. Нативный код легче и безопаснее.'],
['q' => 'Сколько плагинов допустимо?',
'a' => 'Для типового бизнес-сайта — 5–8. Каждый — отдельный хук на wp_head, wp_footer, rest_api_init.'],
['q' => 'Как проверить Core Web Vitals?',
'a' => 'PageSpeed Insights, CrUX в Google Search Console, Lighthouse в DevTools, WebPageTest для стресс-тестов.']
];
$schema = [
'@context' => 'https://schema.org',
'@type' => 'FAQPage',
'mainEntity' => array_map(function($row) {
return [
'@type' => 'Question',
'name' => $row['q'],
'acceptedAnswer' => [
'@type' => 'Answer',
'text' => $row['a']
]
];
}, $faqs)
];
echo '<script type="application/ld+json">' . wp_json_encode($schema, JSON_UNESCAPED_UNICODE) . '</script>' . "\n";
}
});
Раздел 6. Core Web Vitals, Image Optimization, Heartbeat API
LCP (Largest Contentful Paint). Главный враг — неоптимизированные фоновые изображения и текст, заблокированный шрифтами. Чек-лист:
- Перевод WEBP/AVIF: изображения >30 КБ конвертируются в image/webp или image/avif. Serve через Nginx:
map $http_accept $webp_suffix { default ""; "~*webp" ".webp"; } - Подключение font-display: swap для шрифтов Google Fonts (если они используются).
- Исключение render-blocking JS: critical CSS инлайнится, остальное — defer или async.
CLS (Cumulative Layout Shift). Причины:
- Картинки без фиксированной ширины и высоты (width/height обязательно);
- Динамическая вставка блоков рекламы и виджетов;
- Шрифты, загружаемые после первого рендера;
- Поздняя загрузка iframe (YouTube-вставки).
CSS-фикс для типового случая:
img, video, iframe { display:block; max-width:100%; height:auto; }
iframe { aspect-ratio: 16 / 9; width:100%; border:0; }
INP (Interaction to Next Paint). С 2024 года заменил FID. Главный враг — длинные задачи в main thread. Укрощение:
// Heartbeat API: снижаем частоту и отключаем на фронтенде
add_action('init', function() {
wp_deregister_script('heartbeat');
}, 1);
add_filter('heartbeat_settings', function($settings) {
$settings['interval'] = 60; // секунды вместо 15 по умолчанию
$settings['autostart'] = false;
return $settings;
});
// Ограничиваем Heartbeat только в редакторе записей
add_action('wp_enqueue_scripts', function() {
if (!is_admin()) {
wp_deregister_script('heartbeat');
}
});
Изображения. Конвертация в WebP/AVIF, lazy-loading через loading="lazy" для всего, что ниже первого экрана, обязательное fetchpriority="high" для LCP-картинки.
Remove query strings. Static resources с ?ver=... тянут 304-ответы без кеширования. Убираем через:
// Удаляем версионные query strings у статических ресурсов
add_filter('style_loader_src', function($src) {
return remove_query_arg('ver', $src);
}, 10, 1);
add_filter('script_loader_src', function($src) {
return remove_query_arg('ver', $src);
}, 10, 1);
Раздел 7. WooCommerce: SEO сайта Вордпресс для интернет-магазина
WooCommerce добавляет ~30–60 SQL-запросов на страницу каталога, отдельные таблицы (wp_wc_orders, wp_wc_order_stats, wp_actionscheduler_actions), а ещё — собственные дубли:
- Фильтры ?filter_color=blue&filter_size=m без canonical дают тысячи дублей;
- Сортировки ?orderby=price_desc индексируются как новые страницы;
- Пагинация /shop/page/2/ генерирует дополнительный кластер;
- Карточки вариаций товара без canonical;
- Архивы атрибутов (/pa_razmer/, /pa_cvet/) — часто малоценные;
- Сравнения товаров (если включены плагином YITH/WooCommerce Compare);
- Страницы «Поделиться», Wishlist без noindex.
Канонизация фильтров и сортировок:
// WooCommerce: убираем сортировки из canonical и закрываем от индексации
add_action('init', function() {
if (is_admin()) return;
if (isset($_GET['orderby']) || isset($_GET['filter_']) || isset($_GET['filter_'])) {
header('X-Robots-Tag: noindex, follow', true);
}
});
// К каноникалу каталога добавляем только базовый URL без фильтров
add_filter('wpseo_canonical', '__return_false');
add_action('wp_head', function() {
if (is_shop() || is_product_taxonomy()) {
$base = (is_shop())
? wc_get_page_permalink('shop')
: get_term_link(get_queried_object());
echo '<link rel="canonical" href="' . esc_url($base) . '" />' . "\n";
if (is_paged()) {
echo '<link rel="prev" href="' . esc_url(pagenum_link(1)) . '" />' . "\n";
}
}
}, 5);
Schema.org Product для WooCommerce:
add_action('wp_footer', function() {
if (!is_product()) return;
global $product;
if (!$product instanceof WC_Product) return;
$data = [
'@context' => 'https://schema.org',
'@type' => 'Product',
'name' => $product->get_name(),
'image' => wp_get_attachment_url($product->get_image_id()),
'description' => wp_strip_all_tags($product->get_description()),
'sku' => $product->get_sku(),
'brand' => ['@type' => 'Brand', 'name' => wp_strip_all_tags(get_bloginfo('name'))],
'offers' => [
'@type' => 'Offer',
'url' => get_permalink(),
'priceCurrency' => get_woocommerce_currency(),
'price' => (string) $product->get_price(),
'availability' => $product->is_in_stock()
? 'https://schema.org/InStock'
: 'https://schema.org/OutOfStock',
'seller' => ['@type' => 'Organization', 'name' => get_bloginfo('name')]
]
];
echo '<script type="application/ld+json">' . wp_json_encode($data, JSON_UNESCAPED_UNICODE) . '</script>' . "\n";
});
Async Loading Actionscheduler. Таблица wp_actionscheduler_actions нагружает базу после каждого заказа. Запустите через WP-CLI очистку:
wp action-scheduler run --hooks=action_scheduler_run_queue --force
Ваш интернет-магазин на WooCommerce теряет заявки из-за медленных карточек товаров и фильтров-дублей? Закажите технический SEO-аудит WordPress-сайта в «Калинин Студио» — разберём архитектуру, канонику и Schema.org JSON-LD до последнего символа.
Раздел 8. Очистка базы данных и wp_options

Таблица wp_options — главный технический долг SEO-оптимизации Wordpress. Каждый плагин пишет туда свои настройки, и они подгружаются на каждом запросе (если autoload='yes'). При 100–300 плагинах за 3–5 лет таблица разрастается до 50–200 МБ, и каждый запрос к / начинает тянуть 2–6 МБ данных.
Диагностика — найдите самые тяжёлые autoload-ключи:
SELECT option_name, LENGTH(option_value) AS size_bytes FROM wp_options WHERE autoload = 'yes' ORDER BY LENGTH(option_value) DESC LIMIT 30;
Удаление устаревших транзиентов (transients — данные с истёкшим сроком):
DELETE a, b FROM wp_options a LEFT JOIN wp_options b ON b.option_name = REPLACE(a.option_name, '_transient_timeout_', '_transient_') WHERE a.option_name LIKE '_transient_timeout_%' AND a.option_value < UNIX_TIMESTAMP();
Удаление orphaned-данных от удалённых плагинов:
SELECT option_name, COUNT(*) AS hits FROM wp_options WHERE option_name REGEXP '^(old_plugin|deleted_module|_deprecated_)' GROUP BY option_name ORDER BY hits DESC LIMIT 50;
Удаление ревизий записей старше 6 месяцев (резервную копию БД сделать обязательно):
DELETE FROM wp_posts WHERE post_type = 'revision' AND post_modified < DATE_SUB(NOW(), INTERVAL 6 MONTH); DELETE FROM wp_postmeta WHERE post_id NOT IN (SELECT ID FROM wp_posts);
Auto-prune drafts и auto-saved: аналогично, через DELETE FROM wp_posts WHERE post_status IN ('draft','auto-draft') AND post_modified < DATE_SUB(NOW(), INTERVAL 12 MONTH).
Все SQL-операторы выше исполняйте только после резервной копии.
Раздел 9. Сравнительная матрица — итог
| Задача SEO Wordpress | Что делает плагин | Что делает инженер | Эффект для бизнеса |
|---|---|---|---|
| Мета-теги | Боковая панель с закодированными шаблонами | PHP-функция на 30 строк | Минус 12 SQL-запросов, минус 80 КБ JS |
| XML-карта | Регенерация на каждый запрос | wp_sitemaps PHP 8 + CDN | Карта отдаётся за 50 мс |
| Schema.org JSON-LD | Плагин + UI + сторонние библиотеки | wp_json_encode(...) напрямую | Сниппет без стороннего JS |
| Canonical | Плагин SEO | Фильтр rel_canonical + кастом | 100% правильных canonical |
| Robots.txt | В админке SEO | Файл + фильтр wp_robots | Гибкая логика для /private/, /api/ |
| Кеширование | WP Rocket / LiteSpeed Cache | Redis + Object Cache + Nginx FastCGI | TTFB 80–200 мс |
| Изображения | Smush / ShortPixel | Nginx-модуль image_filter + WebP | -40–60% веса страницы |
| БД | WP-Optimize | SQL-запросы и чистка autoload | Запросов к / на 30% меньше |
| Cron | WP-Cron | Системный cron | Минус 1–3 SQL на каждый запрос |
| Heartbeat | Плагин Heartbeat Control | wp_deregister_script('heartbeat') | Минус 1 JS-запрос каждые 15 сек |
Раздел 10. «Красные флаги» подрядчика: как понять, что ваш СЕО-специалист на Вордпресс занимается имитацией
Реальное СЕО-продвижение Wordpress должно давать измеримый результат: рост позиций, рост трафика, рост скорости по PageSpeed. Если исполнитель отчитывается «сделали Title по формуле», это — имитация.
Признаки № 1. Стек из 30+ активных плагинов. Когда подрядчик ставит Yoast SEO или Rank Math, плюс WP Rocket или LiteSpeed Cache, плюс Wordfence, плюс WPForms, плюс Smush, плюс Redirection, плюс Elementor, плюс TablePress, плюс WPML — это не оптимизация. Это экспресс-настройка «из коробки». Суммарный вес JS на фронтенде превышает 600 КБ, TTFB 800–1500 мс.
Признак № 2. Плагин, который должен был ускорить сайт, сделал его медленнее. Если WP Rocket установлен, но PageSpeed Insights всё равно жёлтый/красный на мобильных — значит, не настроены Redis и Nginx FastCGI Cache. Плагин не компенсирует отсутствие объектного кеша.
Признак № 3. Лог изменений состоит из установки плагинов и смены шаблона. Без правок functions.php, без SQL-оптимизации wp_options, без настройки wp_cron, без чистки wp_head — это не сео продвижение вордпресс, это оформление подписки на техническую поддержку плагинов.
Признак № 4. Yoast SEO и Rank Math установлены одновременно. Конфликт плагинов — это мина замедленного действия. В 99% случаев один из модулей дублирует canonical, sitemap, meta robots, что приводит к двойным тегам и двойным SQL-запросам.
Признак № 5. Никто не трогал базу данных. Если за 2 года работы сайта таблица wp_options весит 80 МБ, а wp_postmeta — 200 МБ — ваш подрядчик делал визуальные правки, а не техническое обслуживание.
Если хотя бы 3 из 5 пунктов совпали — вашему сайту нужен независимый технический аудит, а не «допиливание плагинами». Закажите технический SEO-аудит WordPress-сайта в «Калинин Студио» — покажем, где именно теряется скорость и конверсия.
Заключение
WordPress SEO — это не установка пятнадцати плагинов и не подписка на дорогой комбайн. Это инженерная работа на пяти уровнях: сервер (Nginx, PHP 8.3, Redis, Brotli), база данных (чистый wp_options, нормализованный wp_postmeta), ядро PHP (хуки на wp_head, нативные Schema.org, чистый cron), шаблон (отказ от Elementor, минимум JS, критический CSS) и индексация (canonical, robots.txt, sitemap.xml, WooCommerce-фильтры).
Каждый из этих слоёв даёт самостоятельный прирост скорости и конверсии. В комплексе они превращают медленный коммерческий сайт в быстрый, индексируемый и видимый в Яндексе и Google инструмент продаж. Техническое SEO на WordPress — это выбор в пользу инженерии, а не плагинов.
Часто задаваемые вопросы
Действительно ли SEO для Wordpress возможно без плагинов?
Да, и это даже проще, чем кажется. WordPress имеет встроенные функции add_theme_support('title-tag'), wp_sitemaps, wp_head и фильтры document_title_parts, wpseo_canonical, rel_canonical, через которые реализуется 90% того, что делают Yoast или Rank Math. Без плагинов сайт работает быстрее, требует меньше ресурсов и не подвержен конфликтам между модулями.
Сколько плагинов допустимо для нормальной СЕО-оптимизации Wordpress?
Эмпирическое правило: 5–8 плагинов на типовой бизнес-сайт. Если больше 15 — велик риск, что ядро функционала конфликтует. Один SEO-плагин на выбор (Yoast, Rank Math, SEOPress или собственный код), один плагин форм, один плагин безопасности, один плагин кеширования или Redis-объектный кеш через хостинг. Остальное — кастомный PHP.
Как проверить, не раздута ли база wp_options?
Через SQL-запрос SELECT COUNT(*) FROM wp_options WHERE autoload='yes'; и SELECT SUM(LENGTH(option_value)) FROM wp_options WHERE autoload='yes';. Если autoload-ключей больше 600–800 либо суммарный объём больше 8–12 МБ — таблица нуждается в очистке. Это критично для SEO Вордпресс и скорости ответа под нагрузкой.
Что делать, если установлены и Yoast, и Rank Math одновременно?
Немедленно деактивировать один, удалить настройки через SQL (DELETE FROM wp_options WHERE option_name LIKE 'rank_math%'; или WHERE option_name LIKE '_yoast%';), проверить canonical и meta robots на страницах сайта. Двойные SEO-плагины — одна из самых частых причин падения позиций в Яндексе после «обновления SEO-настройки» подрядчиком.
Можно ли настроить SEO для сайта на WP одной командой в functions.php, а не серией хуков?
Можно, если у сайта простая структура: 1–2 типа записей, 1–2 таксономии, нет WooCommerce. В этом случае один PHP-файл на 80–120 строк решает задачи title, description, canonical, Open Graph, Twitter Cards и базовую Schema.org. Для магазинов и порталов лучше разнести логику по классам и фильтрам — гибче и легче сопровождать.
Почему PageSpeed Insights показывает низкие баллы, если установлен WP Rocket?
WP Rocket — клиентский плагин кеширования. Он ускоряет фронтенд, но не разгружает сервер. Без Redis Object Cache, без Nginx FastCGI Cache, без оптимизации PHP 8.x — TTFB остаётся 700–1200 мс, и это верхняя граница Core Web Vitals. Полное ускорение требует серверного слоя, а не только плагина.
Комментарии
Поделитесь своим мнением