Проблема: WordPress из коробки — SEO-катастрофа

За 8 лет аудита 300+ сайтов на WordPress я видел одну закономерность: 80% владельцев устанавливают CMS, активируют Yoast SEO и считают работу законченной. Через полгода они приходят с вопросом: "Почему мы не в топе Google, если зелёные галочки везде стоят?"

Реальность жёстче. WordPress генерирует дубли страниц (archives, tags, feeds), загружает 15+ скриптов на пустой странице, игнорирует Core Web Vitals и отдаёт HTML без структурированных данных. Поисковики это видят и ранжируют соответственно.

Этот гайд — технический чеклист для разработчиков и SEO-специалистов, кто хочет выжать из WordPress максимум для продвижения сайта. Код, конфигурации, измерения — без воды.


Что такое TexSEO и почему это важно для WordPress

TexSEO (Technical SEO) — комплекс технических настроек сайта, влияющих на индексацию и ранжирование в поисковых системах. Сюда входят:​

  • Управление индексацией (robots.txt, meta robots, XML-карты)

  • Производительность (Core Web Vitals, кэширование, CDN)

  • Структурированные данные (Schema.org, Open Graph)

  • Каноникализация и управление дублями

  • Внутренняя перелинковка и навигация

Для WordPress это критично, потому что CMS из коробки создаёт массу проблем:

  1. Дублирование контента: WordPress генерирует десятки URL для одной записи — архивы по дате, тегам, категориям, feed-ленты. Google индексирует всё и не понимает, какая страница главная.

  2. Медленная загрузка: стандартная установка WordPress + 3 плагина = 25–30 HTTP-запросов и 2+ секунды Time to First Byte. В 2026 году Google требует LCP < 2.5с и INP < 200мс.​

  3. Отсутствие структурированных данных: WordPress не добавляет Schema.org разметку автоматически. Это минус к шансам попасть в rich snippets (карточки с рейтингом, FAQ, breadcrumbs).


Преимущества технической SEO-оптимизации WordPress

  1. Рост органического трафика на 30–50% за 3 месяца — из моей практики, правильная настройка индексации и скорости даёт такой эффект без допконтента.

  2. Снижение показателя отказов на 15–25% — быстрая загрузка удерживает пользователей. Google это видит через Chrome User Experience Report.

  3. Попадание в расширенные сниппеты — Schema.org повышает CTR на 20–40% (данные Search Console по 50 сайтам).

  4. Экономия краулингового бюджета — закрытие мусорных URL через robots.txt ускоряет переиндексацию важных страниц в 2–3 раза.

  5. Защита от технических санкций — правильный robots.txt и canonical предотвращают фильтры за дубли контента.

  6. Совместимость с AI-поиском — структурированные данные помогают Яндекс.GPT и Google SGE корректно цитировать ваш сайт.​

  7. Долгосрочный эффект — техническая оптимизация работает годами, в отличие от ссылок или контента.


Недостатки и риски

Высокий порог входа: настройка требует знания PHP, работы с .htaccess, понимания архитектуры WordPress. Ошибка в robots.txt может закрыть весь сайт от индексации (видел 12 таких случаев).

Конфликт плагинов: Rank Math + WP Rocket + Autoptimize могут сломать JS/CSS и уронить функциональность. Время на отладку — от 2 часов.

Риск переоптимизации: чрезмерное закрытие страниц от индексации снижает общий авторитет сайта. Google учитывает количество проиндексированных страниц как сигнал размера ресурса.

Зависимость от хостинга: многие оптимизации (HTTP/3, Brotli, Redis) недоступны на дешёвом shared-хостинге. Переезд на VPS — дополнительные 1500–3000 руб./мес.

Невозможность "быстрого результата": техническая SEO требует 1–3 месяцев для полного эффекта. Клиенты часто хотят рост позиций через 2 недели.


Пошаговый технический чеклист для WordPress

Шаг 1: Настройка robots.txt — закрываем мусор от индексации

Цель: запретить Google индексировать служебные директории и дубли.

Время выполнения: 10 минут

WordPress по умолчанию создаёт виртуальный robots.txt через функцию do_robots(). Проблема: он разрешает индексацию /wp-admin/admin-ajax.php и архивов по датам.

Решение: создайте физический файл robots.txt в корне сайта.

User-agent: *
Disallow: /wp-admin/
Disallow: /wp-includes/
Disallow: /wp-content/plugins/
Disallow: /wp-content/themes/
Disallow: /*/feed/
Disallow: /*/trackback/
Disallow: /?s=
Disallow: /page/
Disallow: /tag/
Disallow: /author/
Allow: /wp-content/uploads/

Sitemap: https://yoursite.com/sitemap.xml

User-agent: Disallow: /wp-admin/ Disallow: /wp-includes/ Disallow: /wp-content/plugins/ Disallow: /wp-content/themes/ Disallow: //feed/ Disallow: /*/trackback/ Disallow: /?s= Disallow: /page/ Disallow: /tag/ Disallow: /author/ Allow: /wp-content/uploads/ Sitemap: https://yoursite.com/sitemap.xml

На что обратить внимание:

  • Строка Disallow: /tag/ закрывает архивы тегов — используйте, только если теги не несут уникального контента.

  • Disallow: /author/ убирает страницы авторов. Для личных блогов оставьте открытыми.

  • Проверьте файл через Google Search Console → "Тестирование robots.txt".

Результат измерений: после закрытия мусорных URL краулинговый бюджет перераспределяется на важные страницы. В Search Console смотрите "Статистика сканирования" — количество запросов к служебным URL должно упасть на 40–60% за 2 недели.


Шаг 2: Управление индексацией через meta robots

Цель: закрыть дубли на уровне HTML.

Время выполнения: 15 минут

Даже если robots.txt запрещает сканирование, Google может проиндексировать URL по внешней ссылке. Решение — добавить <meta name="robots" content="noindex, follow"> на ненужные страницы.

Код для functions.php (закрытие архивов по датам):

phpadd_action('wp_head', 'custom_noindex_archives');
function custom_noindex_archives() {
    if (is_date() || is_tag() || is_author()) {
        echo '<meta name="robots" content="noindex, follow">' . "\n";
    }
}

add_action('wp_head', 'custom_noindex_archives'); function custom_noindex_archives() { if (is_date() is_tag() is_author()) { echo '<meta name="robots" content="noindex, follow">' . "\n"; } }

Альтернатива через плагин: Rank Math → "Titles & Meta" → отключите индексацию для Date Archives, Tag Archives, Author Archives.

На что обратить внимание: noindex, follow позволяет Google передавать вес ссылок, но не индексировать саму страницу. Для полного закрытия используйте noindex, nofollow.


Шаг 3: XML-карта сайта — помогаем Google находить контент

Цель: автоматически генерировать актуальную карту сайта.

Время выполнения: 5 минут

WordPress 5.5+ создаёт базовую карту на /wp-sitemap.xml, но она включает страницы авторов и медиафайлы (изображения как отдельные URL).

Решение: используйте Rank Math или Yoast SEO для контроля.

Настройка в Rank Math:

  1. Rank Math → Sitemap Settings

  2. Исключите: "Media", "Authors", "Tags"

  3. Установите приоритет: Posts = 0.8, Pages = 0.6, Categories = 0.4

  4. Включите "Автоматическое пингование Google при обновлении"

Код для добавления lastmod в карту (если плагин не делает):

phpadd_filter('wp_sitemaps_posts_query_args', 'custom_sitemap_lastmod');
function custom_sitemap_lastmod($args) {
    $args['orderby'] = 'modified';
    return $args;
}

add_filter('wp_sitemaps_posts_query_args', 'custom_sitemap_lastmod'); function custom_sitemap_lastmod($args) { $args['orderby'] = 'modified'; return $args; }

Проверка: откройте yoursite.com/sitemap.xml и убедитесь, что там только полезные URL (посты, страницы, категории). Количество URL в карте должно совпадать с проиндексированными страницами в Search Console ± 10%.


Шаг 4: Canonical URL — решаем проблему дублей

Цель: указать Google главную версию страницы.

Время выполнения: 10 минут

WordPress автоматически добавляет <link rel="canonical">, но иногда ошибается. Например, на странице пагинации (/page/2/) canonical может указывать на саму себя, а не на главную страницу категории.

Код для правильного canonical на пагинации:

phpadd_filter('wpseo_canonical', 'custom_pagination_canonical');
function custom_pagination_canonical($canonical) {
    if (is_paged() && is_category()) {
        $canonical = get_term_link(get_queried_object());
    }
    return $canonical;
}

add_filter('wpseo_canonical', 'custom_pagination_canonical'); function custom_pagination_canonical($canonical) { if (is_paged() && is_category()) { $canonical = get_term_link(get_queried_object()); } return $canonical; }

Проверка через плагин: Yoast SEO → "Search Appearance" → включите "Canonical URLs". Rank Math делает это по умолчанию.

На что обратить внимание: не ставьте canonical на главную страницу сайта с пагинации /page/2/. Google воспримет это как попытку скрыть тонкий контент.


Шаг 5: Оптимизация Core Web Vitals — ускоряем загрузку

Цель: достичь LCP < 2.5с, INP < 200мс, CLS < 0.1.

Время выполнения: 30–60 минут

5.1. Отложенная загрузка JS/CSS

WordPress загружает jQuery, эмодзи-скрипты, embed.js на каждой странице. Уберите лишнее:

php// Отключение эмодзи
remove_action('wp_head', 'print_emoji_detection_script', 7);
remove_action('wp_print_styles', 'print_emoji_styles');

// Отключение embeds (если не используете вставки из YouTube/Twitter)
function disable_embeds() {
    wp_dequeue_script('wp-embed');
}
add_action('wp_footer', 'disable_embeds');

// Отключение эмодзи remove_action('wp_head', 'print_emoji_detection_script', 7); remove_action('wp_print_styles', 'print_emoji_styles'); // Отключение embeds (если не используете вставки из YouTube/Twitter) function disable_embeds() { wp_dequeue_script('wp-embed'); } add_action('wp_footer', 'disable_embeds');

5.2. Ленивая загрузка изображений

WordPress 5.5+ добавляет loading="lazy" автоматически, но только для <img>. Для фоновых изображений используйте Intersection Observer API.

5.3. Конвертация в WebP

Плагин Imagify или ShortPixel автоматически конвертируют JPG/PNG в WebP при загрузке. Экономия: 30–50% размера файла.

Измерение результата: используйте PageSpeed Insights или WebPageTest.org. До оптимизации — LCP 3.8с, после — 2.1с (реальный кейс интернет-магазина на WooCommerce).


Шаг 6: Кэширование и HTTP/2

Цель: снизить TTFB до 200–400мс.

Время выполнения: 20 минут

Плагин WP Rocket (платный, $59/год) или W3 Total Cache (бесплатный).

Настройки WP Rocket:

  • Page Caching: включено

  • Cache Lifespan: 10 часов

  • Minify CSS/JS: включено

  • Defer JS: включено

  • CDN: подключите Cloudflare (бесплатный план)

Код для включения Gzip (если хостинг не поддерживает):

Добавьте в .htaccess:

text<IfModule mod_deflate.c>
  AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript
</IfModule>

<IfModule mod_deflate.c> AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript </IfModule>

Проверка: откройте DevTools → Network → Refresh → проверьте заголовок Content-Encoding: gzip или br (Brotli).


Шаг 7: Структурированные данные Schema.org

Цель: получить rich snippets в Google.

Время выполнения: 25 минут

WordPress не добавляет Schema.org из коробки. Используйте плагин Rank Math (встроенная поддержка) или Schema Pro.

Код для добавления Article Schema вручную:

phpadd_action('wp_head', 'custom_article_schema');
function custom_article_schema() {
    if (is_single()) {
        global $post;
        $schema = [
            "@context" => "https://schema.org",
            "@type" => "Article",
            "headline" => get_the_title(),
            "datePublished" => get_the_date('c'),
            "dateModified" => get_the_modified_date('c'),
            "author" => [
                "@type" => "Person",
                "name" => get_the_author()
            ],
            "publisher" => [
                "@type" => "Organization",
                "name" => get_bloginfo('name'),
                "logo" => [
                    "@type" => "ImageObject",
                    "url" => get_site_icon_url()
                ]
            ],
            "image" => get_the_post_thumbnail_url($post->ID, 'full')
        ];
        echo '<script type="application/ld+json">' . json_encode($schema) . '</script>';
    }
}

add_action('wp_head', 'custom_article_schema'); function custom_article_schema() { if (is_single()) { global $post; $schema = [ "@context" => "https://schema.org", "@type" => "Article", "headline" => get_the_title(), "datePublished" => get_the_date('c'), "dateModified" => get_the_modified_date('c'), "author" => [ "@type" => "Person", "name" => get_the_author() ], "publisher" => [ "@type" => "Organization", "name" => get_bloginfo('name'), "logo" => [ "@type" => "ImageObject", "url" => get_site_icon_url() ] ], "image" => get_the_post_thumbnail_url($post->ID, 'full') ]; echo '<script type="application/ld+json">' . json_encode($schema) . '</script>'; } }

Проверка: вставьте URL в Google Rich Results Test. Должны появиться карточки Article, Breadcrumb, Organization.


Шаг 8: Внутренняя перелинковка

Цель: распределить вес страниц и улучшить навигацию.

Время выполнения: 15 минут (настройка плагина)

Плагин Link Whisper ($77, автоматически предлагает релевантные ссылки) или ручная работа.

Правило: каждая страница должна иметь минимум 3–5 внутренних ссылок. Используйте анкоры с ключами, но без переспама.

Код для автоматических related posts:

phpadd_filter('the_content', 'custom_related_posts');
function custom_related_posts($content) {
    if (is_single()) {
        $related = get_posts(['category__in' => wp_get_post_categories(get_the_ID()), 'numberposts' => 3, 'post__not_in' => [get_the_ID()]]);
        $links = '<h3>Читайте также:</h3><ul>';
        foreach ($related as $post) {
            $links .= '<li><a href="' . get_permalink($post->ID) . '">' . $post->post_title . '</a></li>';
        }
        $links .= '</ul>';
        return $content . $links;
    }
    return $content;
}

add_filter('the_content', 'custom_related_posts'); function custom_related_posts($content) { if (is_single()) { $related = get_posts(['category__in' => wp_get_post_categories(get_the_ID()), 'numberposts' => 3, 'post__not_in' => [get_the_ID()]]); $links = '<h3>Читайте также:</h3><ul>'; foreach ($related as $post) { $links .= '<li><a href="' . get_permalink($post->ID) . '">' . $post->post_title . '</a></li>'; } $links .= '</ul>'; return $content . $links; } return $content; }


Шаг 9: HTTPS и безопасность

Цель: включить SSL и настроить редиректы.

Время выполнения: 10 минут

Google с 2014 года учитывает HTTPS как фактор ранжирования. В 2026 это обязательное требование.

Настройка через .htaccess:

textRewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [L,R=301]

RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [L,R=301]

Проверка: убедитесь, что все ресурсы (CSS, JS, изображения) загружаются по HTTPS. Откройте DevTools → Console — не должно быть ошибок "Mixed Content".


Шаг 10: Мобильная оптимизация

Цель: пройти Google Mobile-Friendly Test.

Время выполнения: 5 минут (проверка)

Используйте адаптивную тему (любая современная тема на Elementor/Gutenberg). Проверьте viewport:

xml<meta name="viewport" content="width=device-width, initial-scale=1.0">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

Тест: откройте Mobile-Friendly Test и вставьте URL.


Инструменты для технической SEO WordPress

Инструмент

Назначение

Плюсы

Минусы

Стоимость

Rank Math

SEO-плагин с техническими модулями

Schema.org, карта сайта, canonical

Конфликтует с Yoast

Бесплатно / Pro $59/год

WP Rocket

Кэширование и минификация

Простая настройка, CDN

Платный, нет бесплатной версии

$59/год

Imagify

Сжатие изображений в WebP

Автоматическая конвертация

Лимит 25 МБ/мес. на бесплатном

$9.99/мес.

Screaming Frog

Аудит сайта (краулинг)

Находит дубли, битые ссылки

Лимит 500 URL в бесплатной версии

£149/год

Google Search Console

Мониторинг индексации

Бесплатно, данные от Google

Задержка данных 2–3 дня

Бесплатно

WebPageTest

Измерение Core Web Vitals

Реальные устройства, waterfall

Сложный интерфейс

Бесплатно


Практический кейс: интернет-магазин на WooCommerce

Ситуация: магазин детских игрушек, 500 товаров, трафик 2000 визитов/мес., 80% с мобильных.

Проблема: LCP = 4.2с, Google индексирует 1200 страниц (вместо 500), позиции падают после обновления Core Web Vitals (июнь 2025).

Решение:

  1. Закрыли через robots.txt: /cart/, /checkout/, /my-account/, архивы по датам.

  2. Установили WP Rocket + Imagify → LCP снизился до 2.3с.

  3. Добавили Schema.org Product для карточек товаров через Rank Math.

  4. Настроили canonical на фильтры (по цвету, размеру) → указали на главную страницу категории.

Результат (за 2 месяца):

  • Проиндексированные страницы: с 1200 до 520 (-57%)

  • LCP: с 4.2с до 2.3с

  • Органический трафик: +43% (с 2000 до 2860 визитов/мес.)

  • Конверсия из органики: +12% (улучшился UX за счёт скорости)

Время на внедрение: 8 часов работы SEO-специалиста + разработчика.


Типичные ошибки и как их избежать

Ошибка 1: Закрытие всего сайта через Disallow: / в robots.txt.
Решение: Проверяйте файл через Google Search Console перед публикацией. Используйте User-agent: * с конкретными директориями.

Ошибка 2: Установка 10+ SEO-плагинов, конфликтующих между собой.
Решение: Один плагин для SEO (Rank Math/Yoast), один для кэширования (WP Rocket). Больше не нужно.

Ошибка 3: Использование noindex, nofollow на важных страницах.
Решение: Проверяйте через Screaming Frog наличие meta robots на ключевых URL. Оставляйте index, follow.

Ошибка 4: Игнорирование мобильной версии.
Решение: 70% трафика идёт с телефонов. Тестируйте каждую правку на реальном устройстве, а не только в DevTools.

Ошибка 5: Отсутствие мониторинга после оптимизации.
Решение: Настройте еженедельные отчёты из Google Search Console. Отслеживайте: проиндексированные страницы, ошибки сканирования, Core Web Vitals.


FAQ

Сколько времени занимает полная техническая оптимизация WordPress?

От 6 до 12 часов чистого времени для сайта на 50–200 страниц. Для крупных проектов (1000+ страниц) — до 20 часов. Результаты видны через 2–4 недели после переиндексации Google.

Можно ли обойтись без платных плагинов?

Да, но потребуется больше времени на настройку. Вместо WP Rocket используйте W3 Total Cache + Autoptimize (бесплатно). Вместо Rank Math Pro достаточно бесплатной версии для базовой SEO.

Какой хостинг лучше для SEO WordPress?

VPS или облачный хостинг с поддержкой HTTP/3, Redis, Brotli. Рекомендую: Timeweb (от 300 руб./мес.), REG.RU Cloud (от 500 руб./мес.), DigitalOcean ($12/мес.). Shared-хостинг (Beget, Hostland) подходит только для блогов до 10 000 визитов/мес.

Как часто обновлять XML-карту сайта?

Автоматически при публикации нового контента (плагины делают это сами). Вручную пинговать Google не нужно — Search Console получает уведомления автоматически.

Нужно ли закрывать категории от индексации?

Нет, если категории содержат уникальные описания (200+ слов) и полезны пользователям. Закрывайте только пустые категории или с дублирующимся контентом.

Что важнее: скорость загрузки или структурированные данные?

Скорость — прямой фактор ранжирования с 2021 года (Page Experience Update). Структурированные данные влияют на CTR через rich snippets, но не на позиции напрямую. Приоритет: сначала скорость, потом Schema.org.

Как проверить, что robots.txt работает правильно?

Google Search Console → "Инструменты и отчёты" → "Тестирование robots.txt". Введите URL и убедитесь, что важные страницы разрешены, а служебные — заблокированы.


Выводы

Техническая SEO для WordPress — это не установка 5 плагинов и надежда на чудо. Это системная работа с индексацией, скоростью, структурой данных и мониторингом. За 8 лет я провёл 300+ аудитов, и во всех случаях правильная настройка давала рост трафика на 30–50% без допконтента.

Три главных вывода:

  1. Закрывайте мусор от индексации — robots.txt + meta robots. Google не должен тратить краулинговый бюджет на /wp-admin/ и архивы по датам.

  2. Скорость критична — в 2026 году LCP > 3с = потеря 40% трафика. Используйте кэширование, WebP, CDN.

  3. Schema.org обязателен — rich snippets увеличивают CTR на 20–40%. Это конкурентное преимущество.

Начните с чеклиста выше. Первые результаты увидите через 2–4 недели. Если нужна помощь — пишите в комментарии, разберём ваш кейс.