Перейти к содержимому

Оптимизация WordPress

Оптимизировать WordPress нужно на любом уровне — от блога на shared-хостинге до высоконагруженного проекта. Если нужен быстрый результат — начните с кэширования.

Далее — системный подход к оптимизации по всем направлениям.

На скорость WordPress влияют:

  • Хостинг — тип и конфигурация сервера
  • Конфигурация WordPress — плагины, тема, настройки
  • Версии ПО — PHP, MySQL, веб-сервер
  • Контент — количество и размер изображений, скриптов, стилей
  • Трафик — объём и характер нагрузки
  • География — расстояние от сервера до посетителей
Тип хостингаДоступные рычаги
SharedПлагины кэширования, оптимизация изображений, CDN
ManagedОграниченный выбор плагинов, встроенное кэширование
VPS / DedicatedПолный контроль: серверный кэш, PHP, MySQL, Nginx/Apache

На VPS/Dedicated к общим методам добавляются: серверный кэш, тонкая настройка ПО и Content Offloading.

  • Количество и частота процессоров
  • Объём оперативной памяти
  • Тип диска (NVMe > SSD > HDD)
  • Канал связи

Хостинг-провайдеры предлагают более высокую производительность за более высокую цену.

Расстояние между сервером и посетителем влияет на latency. CDN решает эту проблему, размещая копии статических файлов в разных регионах.

  • Легитимный трафик (всплески посещений)
  • Brute-force атаки на /wp-login.php
  • Хотлинкинг изображений с других сайтов
  • DoS/DDoS атаки

Выявление и блокировка вредного трафика — часть стратегии оптимизации.

Каждый активный плагин добавляет PHP-код, который выполняется при каждом запросе:

Окно терминала
# Измерение влияния плагинов через WP-CLI
wp plugin list --status=active

Правила:

  • Держите только необходимые плагины активными
  • Деактивируйте и удаляйте неиспользуемые
  • Отдавайте предпочтение легковесным альтернативам
  • Тестируйте влияние нового плагина на скорость (см. инструменты тестирования)

Тяжёлые темы с page builder’ами генерируют избыточный DOM и подключают лишние скрипты. Выбирайте тему, соответствующую реальным потребностям, а не «на всякий случай».

Оптимизация на этапе загрузки:

  • Сжимайте до загрузки (TinyPNG, Squoosh)
  • Используйте правильный формат: WebP для фотографий, SVG для иконок

Автоматизация:

// Автоматическое качество JPEG при загрузке
add_filter('jpeg_quality', function() {
return 82; // WordPress default is 82
});

Плагины вроде EWWW Image Optimizer или Smush автоматизируют сжатие.

Вынос статического контента на отдельный домен или CDN:

  • CDN — Cloudflare, BunnyCDN, KeyCDN
  • Отдельный домен для статикиstatic.example.com
  • S3-совместимое объектное хранилище для медиафайлов

Плагины вроде WP Offload Media автоматизируют перенос медиа-библиотеки.

# Apache: включение Gzip
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml
AddOutputFilterByType DEFLATE text/css application/javascript
AddOutputFilterByType DEFLATE application/json application/xml
</IfModule>
# Nginx: включение Gzip
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml;
gzip_min_length 256;

Все таблицы WordPress должны использовать InnoDB:

-- Проверить движок таблиц
SELECT TABLE_NAME, ENGINE
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'wordpress';
-- Конвертировать таблицу
ALTER TABLE wp_posts ENGINE = InnoDB;
-- Удаление ревизий постов
DELETE FROM wp_posts WHERE post_type = 'revision';
-- Очистка спам-комментариев
DELETE FROM wp_comments WHERE comment_approved = 'spam';
-- Удаление transient-записей
DELETE FROM wp_options WHERE option_name LIKE '_transient_%';

Опции с autoload = 'yes' загружаются при каждом запросе. Большой объём таких опций замедляет WordPress:

-- Проверить размер autoloaded-опций
SELECT SUM(LENGTH(option_value)) as total_size
FROM wp_options
WHERE autoload = 'yes';

Плагины часто добавляют свои опции в autoload без необходимости. Используйте wp option update <name> <value> --autoload=no через WP-CLI для некритичных опций.

Окно терминала
# Посмотреть размер autoloaded-опций
wp option list --autoload=yes --format=count
# Найти самые большие опции
wp db query "SELECT option_name, LENGTH(option_value) as size
FROM wp_options WHERE autoload='yes'
ORDER BY size DESC LIMIT 20"

При высоких нагрузках компоненты WordPress разносятся по серверам:

  • База данных — отдельный сервер (меняется DB_HOST в wp-config.php)
  • Статика — CDN или отдельный домен (Content Offloading)
  • Балансировщик нагрузки — распределение трафика между несколькими веб-серверами
  • HyperDB — замена WPDB для работы с реплицированными и партицированными базами данных
КомпонентМетоды
Веб-серверApache MPM Event, Nginx worker_processes, keepalive, кэш-заголовки
PHPOPcache, APC/u, свежая версия (см. PHP-оптимизация)
MySQL/MariaDBInnoDB, query cache, тюнинг буферов, slow query log
DNSВынос DNS на внешний сервис снижает нагрузку
ПочтаНе запускайте почтовый сервер на сервере WordPress — используйте внешний SMTP

Источник: WordPress Developer Handbook — Optimization