Как ускорить WordPress: минификация и объединение CSS и JS

Как ускорить WordPress: минификация и объединение CSS и JS

Кратко: минификация — это удаление из CSS- и JS-файлов пробелов, переводов строк, комментариев и лишних символов без изменения логики кода. Объединение (конкатенация) — склейка множества мелких файлов в один, чтобы браузер делал меньше запросов к серверу. В WordPress и то и другое делается либо плагином, либо своими сниппетами через механизм wp_enqueue_scripts. Но это не «кнопка ускорить»: минификация почти всегда безопасна и даёт 10–30% экономии веса, а объединение требует осторожности — при HTTP/2 десяток мелких файлов грузится почти так же быстро, как один большой, а неверная склейка ломает скрипты и функциональность сайта. Правильный порядок: измерить, минифицировать, аккуратно объединить, снова измерить. Ниже — как это сделать по шагам: встроенные хуки WordPress, готовые сниппеты на PHP и JavaScript, настройка плагина Clearfy, сравнительная таблица решений и типичные ошибки новичка.

Почему скорость WordPress зависит от CSS и JS

Откройте любую страницу на WordPress и посмотрите исходный код: в <head> будет длинный список подключённых стилей, а перед закрывающим </body> — целый поезд скриптов. Так происходит потому, что каждая тема, каждый плагин и сам WordPress подключают свои файлы: слайдер тянет jQuery-плагин, контактная форма — свою валидацию, SEO-плагин — администраторский код. В итоге на обычном сайте набирается 20–50 CSS- и JS-файлов, и каждый браузер запрашивает у сервера отдельно.

Проблема не только в количестве. Каждый запрос — это рукопожатие с сервером: браузер отправляет заголовки, ждёт ответ, получает файл. На медленном хостинге или при большом расстоянии до посетителя такое рукопожатие стоит десятки миллисекунд, и даже маленький файл из двух килобайт может ехать дольше, чем читается. Плюс сами файлы часто написаны «для людей»: с отступами, переносами строк и подробными комментариями — удобно разработчику, но бессмысленно браузеру, которому эти символы даже не нужны.

Ситуация усугубляется тем, что часть скриптов подключается в <head> и блокирует отрисовку: пока браузер не скачает и не выполнит их, страницу он не рисует. Посетитель смотрит на белый экран. Для поисковиков это тоже минус: и Яндекс, и Google измеряют скорость и стабильность страницы, а медленные ресурсы тянут вниз метрики, от которых зависят позиции. О том, как правильно организовать очередь подключения файлов и что делают функции wp_enqueue_style и wp_enqueue_script, мы подробно разбирали в статье про подключение CSS и JS через wp_enqueue_scripts — там же показано, как подключать файлы только там, где они нужны.

Минификация и объединение решают сразу обе проблемы: уменьшают вес каждого файла и сокращают их количество. Но работают они по-разному, и применять их нужно по-разному — об этом дальше.

Что такое минификация и объединение: в чём разница

Минификация — это обработка содержимого файла: из кода удаляются комментарии, пробелы, переводы строк, а длинные имена переменных при агрессивной настройке заменяются короткими. Логика кода не меняется, но файл становится в полтора-два раза меньше. Наглядно это выглядит так:

/* До минификации */
.card {
  padding: 16px 24px;
  border-radius: 8px;
  color: #333333;
  background-color: #ffffff;
}

/* После минификации */
.card{padding:16px 24px;border-radius:8px;color:#333;background-color:#fff}

С JavaScript то же самое: комментарии исчезают, пробелы схлопываются, а современные инструменты вроде terser ещё и переименовывают внутренние переменные в однобуквенные. Важно понимать границу: минификация — безопасная операция по умолчанию, потому что код остаётся тем же самым, меняется только его запись. Исключение — слишком агрессивные оптимизаторы, которые ошибаются на необычном коде, поэтому после включения минификации сайт всегда проверяют вручную.

Объединение (конкатенация) — это другое: несколько файлов склеиваются в один. Был style.css, slider.css и form.css — стал один all.min.css. Смысл в экономии запросов: вместо трёх рукопожатий с сервером — одно. Десять лет назад это давало заметный прирост, потому что браузеры открывали к серверу мало параллельных соединений. Сегодня сайт работает по HTTP/2, где по одному соединению передаются десятки файлов одновременно, и выигрыш от склейки стал скромнее: он всё ещё есть на слабых хостингах и мобильных сетях, но перестал быть панацеей.

Более того, у объединения есть цена. Скрипты в WordPress подключаются с зависимостями и порядком, а некоторые плагины рассчитывают, что их код загрузится строго в определённый момент. При склейке этот порядок может сломаться: скрипт, который раньше грузился на всех страницах, оказывается в общем файле страницы записи, а скрипт, работающий с DOM после аякса, выполняется раньше нужного. Поэтому практическое правило звучит так: минифицируйте всегда, объединяйте осторожно и только после проверки. Если объединение что-то ломает — оставьте минификацию, она даёт основную экономию веса.

Есть и третий инструмент из той же серии — отложенная загрузка: атрибуты defer или async у тега <script>. Они не уменьшают вес, но убирают блокировку отрисовки: браузер скачивает скрипт в фоне, не останавливая показ страницы. Для большинства скриптов темы это безопаснее, чем объединение, и даёт более заметный эффект именно в метриках скорости.

Как измерить эффект: метрики и инструменты

Прежде чем что-то ускорять, зафиксируйте текущее состояние — иначе не поймёте, помогло или нет. Базовый инструмент — Google PageSpeed Insights: вводите адрес, получаете оценку на мобильных и десктопе плюс список рекомендаций, где минификация и неиспользуемый CSS с JS обычно стоят в первых строчках. Яндекс Вебмастер даёт аналогичную диагностику скорости в своём разделе, и для российского рынка его отчёт полезно смотреть отдельно, потому что вес у Яндекса при прочих равных выше.

Важнее общей оценки — конкретные метрики. FCP (First Contentful Paint) — момент, когда на экране появляется первый контент. LCP (Largest Contentful Paint) — когда отрисован самый крупный видимый блок, это главная метрика ощущаемой скорости. TBT (Total Blocking Time) — суммарное время, когда страница «висит» из-за выполнения скриптов. Минификация CSS в первую очередь улучшает FCP и LCP (меньше килобайт — быстрее первый кадр), отложенная загрузка JS — TBT. Для новичка это значит простую вещь: не гонитесь за абстрактными баллами, смотрите, как меняются эти три числа до и после.

Отдельно полезен «водопад» в панели разработчика браузера (вкладка Network в Chrome): там видно, сколько файлов грузится, в каком порядке, сколько весит каждый и какие из них блокируют рендер. Ищите в списке длинные строки с ?ver= — это файлы, подключённые через WordPress, и они главный материал для оптимизации. Второй кандидат на уборку — файлы, которые повторяются на каждой странице, хотя нужны только в одном месте.

И ещё один совет по методике: измеряйте не один раз, а три, и берите медиану. Первый прогон после чистки кэша всегда хуже, потому что сервер собирает страницу заново; случайный всплеск нагрузки на хостинге тоже искажает картину. Устойчивая разница в 100–200 мс на LCP после минификации — типичный и вполне достижимый результат для обычного сайта.

Что можно сделать без плагинов: встроенные инструменты WordPress

Прежде чем ставить оптимизатор, стоит убрать лишнее вручную — это самый дешёвый и безопасный шаг. WordPress даёт для этого штатные функции: wp_dequeue_script и wp_dequeue_style снимают файл с очереди, а remove_action убирает ненужные выводы в <head>. Классический пример — скрипт эмодзи, который WordPress подключает на всех страницах, хотя нужен единицам сайтов:

<?php
/**
 * Убираем лишние скрипты и стили — код в functions.php дочерней темы.
 */
add_action( 'wp_enqueue_scripts', 'ds_optimize_assets', 100 );

function ds_optimize_assets() {
    // Эмодзи-скрипт: на бизнес-сайтах почти всегда не нужен.
    remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
    remove_action( 'wp_print_styles', 'print_emoji_styles' );

    // Пример: снимаем скрипт плагина там, где он не используется.
    if ( ! is_singular( 'post' ) ) {
        wp_dequeue_script( 'ds-comments-widget' );
    }
}

Второй шаг — подключить собственные файлы правильно: в подвале страницы и с версией для контроля кэша. Третий аргумент true у wp_enqueue_script переносит тег <script> перед </body>, и скрипт перестаёт блокировать отрисовку:

<?php
add_action( 'wp_enqueue_scripts', 'ds_enqueue_theme_assets' );

function ds_enqueue_theme_assets() {
    $ver = wp_get_theme()->get( 'Version' );

    wp_enqueue_style( 'ds-style', get_stylesheet_uri(), array(), $ver );

    wp_enqueue_script(
        'ds-main',
        get_theme_file_uri( 'assets/js/main.js' ),
        array(),
        $ver,
        true // подключаем в подвале, чтобы не блокировать рендер
    );
}

Третий шаг — отключить jQuery Migrate. Это прослойка для совместимости со старым кодом, которую WordPress подключает по умолчанию; современные темы и плагины в ней обычно не нуждаются, а весит она прилично. Отключается точечно, без риска для ядра:

<?php
add_action( 'wp_default_scripts', 'ds_remove_jquery_migrate' );

function ds_remove_jquery_migrate( $scripts ) {
    if ( is_admin() || empty( $scripts->registered['jquery'] ) ) {
        return;
    }

    $jquery = $scripts->registered['jquery'];

    if ( ! empty( $jquery->deps ) ) {
        $jquery->deps = array_diff( $jquery->deps, array( 'jquery-migrate' ) );
    }
}

Четвёртый шаг — добавить своим скриптам атрибут defer, чтобы они грузились в фоне. Это делается фильтром на тег скрипта, и это хороший пример того, как работают хуки: вы не правите ядро и темы, а лишь подменяете результат на выходе. Подробнее механика описана в статье про хуки actions и filters в WordPress.

<?php
/**
 * Добавляем defer своим скриптам, чтобы не блокировать парсинг HTML.
 */
add_filter( 'script_loader_tag', 'ds_add_defer', 10, 3 );

function ds_add_defer( $tag, $handle, $src ) {
    $defer = array( 'ds-main', 'ds-slider' );

    if ( in_array( $handle, $defer, true ) && false === strpos( $tag, 'defer' ) ) {
        $tag = str_replace( ' src', ' defer src', $tag );
    }

    return $tag;
}

Все четыре шага дают эффект без единого плагина. Ограничение тоже понятно: они убирают ваши файлы, но не трогают минификацию чужих — стили и скрипты плагинов остаются нетронутыми. Для этого уже нужен оптимизатор, а правки такого рода удобно держать не в теме, а в дочерней — гайд по её созданию есть в материале про дочернюю тему WordPress, а базовая коллекция приёмов собрана в подборке полезных сниппетов для functions.php.

Плагины для минификации и объединения: что выбрать

Если руками разбирать десяток плагинов некогда, оптимизатор решит задачу за вечер. Суть у всех решений одна: плагин перехватывает очередь стилей и скриптов, прогоняет файлы через минификатор, складывает результат в отдельную папку и отдаёт браузеру уже сжатые версии. Различаются удобство, аккуратность исключений и цена. Сведём основные варианты в таблицу.

Решение Минификация CSS/JS Объединение файлов Отложенная загрузка Особенность
Clearfy Да Да Да (async/defer) Комплексная оптимизация плюс отключение лишнего ядра WordPress
Autoptimize Да Да Да Гибкие исключения по хэндлам, популярный бесплатный вариант
WP Rocket Да Да Да Платный, аккуратные настройки «из коробки», включает кэш
Вручную (enqueue + defer) Нет Нет Частично Полный контроль, но только для своих файлов темы

Как читать таблицу новичку. Если нужен один плагин «сделай всё» с понятным русским интерфейсом — берите Clearfy: он закрывает не только минификацию, но и десяток мелких пунктов оптимизации, которые иначе пришлось бы собирать сниппетами. Если нужна тонкая настройка под конкретные конфликтующие скрипты — Autoptimize с его списками исключений. WP Rocket хорош тем, что заодно включает полноценное кэширование, но это платное решение, и брать его ради одной минификации избыточно. Комбинация «вручную для своих файлов + плагин для плагинных» — рабочий компромисс, к которому приходят многие.

Важное правило для любого плагина: он не отменяет кэш, а дополняет его. Минифицированные файлы плагин складывает в специальную папку и раздаёт их с заголовками кэширования, но сами страницы всё равно должен кэшировать отдельный слой — серверный или плагином. Как устроены эти слои и что включать в первую очередь, рассказано в статье про кэширование WordPress для новичков.

Настройка Clearfy: минификация и объединение по шагам

Разберём настройку на примере Clearfy — это плагин с русским интерфейсом, который чаще всего стоит на сайтах, где важен и скорость, и порядок. Установка стандартная: «Плагины» → «Добавить новый» → поиск по слову Clearfy → «Установить» и «Активировать». После активации в боковом меню появится свой раздел с настройками, сгруппированными по вкладкам.

Порядок действий такой. Вкладка «Оптимизация»: включите минификацию CSS и JavaScript — галочки активируют сжатие всех файлов очереди. Рядом находится переключатель объединения файлов; включайте его вторым этапом, после того как убедитесь, что сайт работает с одной минификацией. На той же вкладке есть отложенная загрузка JS: режим defer безопаснее и подходит большинству сайтов, режим async — для независимых скриптов вроде счётчиков аналитики, порядок выполнения которых не важен.

Второй важный момент — исключения. Любой оптимизатор ломает один-два специфичных скрипта: слайдер перестаёт листать, карта не подгружается, форма не отправляется. Решение — найти хэндл проблемного файла (он виден в исходном коде страницы как атрибут id у тега <script> в виде имя-js) и добавить его в поле «Исключить из объединения/минификации». В Clearfy это делается прямо в настройках, без кода. Начинайте с малого: сначала минификация без исключений, потом проверьте главную, страницу записи, корзину (если магазин) и форму обратной связи, и только потом включайте объединение.

Третий момент — после каждого изменения сбрасывайте кэш: и кэш самого Clearfy, и кэширующего плагина, если он установлен, и кэш браузера при проверке (Ctrl+F5). Иначе вы будете смотреть на старые файлы и делать выводы о настройках, которые ещё не применились. Про то, как устроены эти слои кэша и почему без сброса изменения «не видны», мы писали в материале про настройку кэширования.

И последнее: Clearfy, как и другие оптимизаторы, работает параллельно с SEO-плагином и не конфликтует с ним — метатеги, карта сайта и микроразметка остаются в ведении Rank Math или Yoast. Если вы ещё не настроили ни один из них, начните с гайда про настройку Rank Math и Yoast, а оптимизацию скорости подключайте вторым шагом.

Своя минификация без плагина: PHP и JavaScript

Иногда плагин избыточен: файлов мало, и хочется контролировать процесс полностью. Тогда минификацию можно сделать своими руками. Начнём с честного предупреждения: самописный минификатор через регулярные выражения — это учебный пример, а не производственное решение. Реальные инструменты учитывают строки в кавычках, регулярные выражения внутри кода, зарезервированные слова и десятки граничных случаев. Но для CSS простая функция работает стабильно, и её удобно вызывать при сборке собственных файлов:

<?php
/**
 * Простейший минификатор CSS: комментарии и лишние пробелы.
 */
function ds_minify_css( $css ) {
    $css = preg_replace( '#/\*[\s\S]*?\*/#', '', $css );    // комментарии
    $css = preg_replace( '/\s+/', ' ', $css );               // лишние пробелы
    $css = preg_replace( '/\s*([{}:;,])\s*/', '$1', $css );  // вокруг знаков

    return trim( $css );
}

С JavaScript регулярки уже не справляются надёжно, и это важно показать наглядно:

// НАГЛЯДНЫЙ ПРИМЕР, а не рабочий минификатор.
// Регулярки ломают JS на строках с "//" внутри кавычек и на regex-литералах.
function naiveMinifyJs(js) {
  return js
    .replace(/\/\*[\s\S]*?\*\//g, '')    // многострочные комментарии
    .replace(/(^|[^:])\/\/.*$/gm, '$1')  // однострочные (осторожно: http://)
    .replace(/\s+/g, ' ')
    .trim();
}

// Для реальных проектов — готовые инструменты:
// esbuild app.js --minify --outfile=app.min.js
// terser app.js -c -m -o app.min.js

Правильная схема работы для своего кода такая: минифицируете файлы один раз на этапе разработки (локально, через esbuild или terser), кладёте рядом с исходниками app.js и app.min.js, а в WordPress подключаете минифицированную версию. Исходник остаётся для правок, продакшен получает сжатый файл — так работают и все профессиональные темы. А если файлы генерируются динамически и кэшируются в опциях или транзиентах, вспомните про планировщик wp-cron — периодическая пересборка минифицированных версий настраивается именно через него.

Отдельно стоит приём, который часто нужен вместе с минификацией: убрать из адресов подключённых файлов параметр версии ?ver=. Он мешает кэшированию на прокси и иногда на CDN, а убирается фильтром на теги стилей и скриптов. Такой сниппет вместе с остальными приёмами оптимизации можно взять из материала про wp_enqueue_scripts — там он разобран построчно.

И маленькая деталь напоследок: минификация — операция одноразовая, а правки кода вы делаете регулярно. Поэтому не встраивайте минификатор в сам сайт без кэширования результата: каждая страница, запускающая минификацию на лету, тратит ресурсы сервера. Минифицируйте заранее — на этапе сборки или при сохранении настроек.

8 ошибок при минификации и объединении

Оптимизация скорости — редкая область, где новичок может сломать сайт одной галочкой. Вот список ошибок, которые встречаются чаще всего.

  • Включили всё сразу. Минификация, объединение, defer и lazy-load одновременно — и при поломке непонятно, что именно сломалось. Меняйте по одной настройке за раз.
  • Забыли про кэш. После включения минификации браузер показывает старые файлы, вывод «настройка не работает» — ложный. Всегда сбрасывайте кэш плагина и жмите Ctrl+F5.
  • Объединили несовместимое. Скрипты с зависимостями и порядком выполнения при склейке конфликтуют: слайдер и валидатор формы перестают работать. Разруливается исключениями из объединения.
  • Двойная минификация. Если тема уже отдаёт минифицированные файлы (суффикс .min.js), повторное сжатие бессмысленно, а иногда ломает код. Проверьте, что уже сжато, и исключите это.
  • Минификация критического CSS. Встроенные в страницу стили и инлайн-скрипты минифицировать через плагин не нужно — это уже сделано разработчиком темы, а плагин может повредить встроенные блоки.
  • Ставят defer на всё подряд. Скрипты, которые должны выполниться до отрисовки (некоторые слайдеры, антифрод, скрипты измерений), после defer начинают работать позже и ломают поведение страницы.
  • Забыли про мобильную версию. Проверяйте результат на телефоне: именно там эффект минификации виден сильнее всего и там же проявляются ошибки выполнения.
  • Оптимизируют одно, а тормозит другое. Неиспользуемый CSS — это часто следствие тяжёлых тем и конструкторов; минификация его не удалит. Посмотрите отчёт PageSpeed целиком: возможно, сначала нужно оптимизировать изображения или настроить lazy-load, о чём мы писали в статье про оптимизацию изображений и WebP.

Общая логика во всех пунктах одна: оптимизация — это измеримая работа, а не коллекция галочек. После каждого шага проверяйте, что сайт жив, а метрики двигаются в нужную сторону. И помните про безопасность экспериментов: правки кода делайте на дочерней теме или staging-копии, а бэкап снимайте перед каждым включением новых настроек — порядок действий описан в статье про безопасность WordPress.

Как проверить результат: скрипт на JavaScript

Последний шаг — убедиться, что усилия окупились. Для этого необязательно каждый раз открывать PageSpeed: простой скрипт на Node.js посчитает, сколько CSS- и JS-файлов подключено на странице и сколько они весят суммарно. Сравните цифры до оптимизации и после — разница будет видна в числах, а не на глаз.

// check-assets.mjs — сколько CSS/JS файлов на странице и их суммарный вес.
const SITE = 'https://delai-sait.ru';
const pages = ['/', '/blog/'];

for (const path of pages) {
  const html = await (await fetch(SITE + path)).text();
  const assets = [...html.matchAll(/(?:href|src)="([^"]+\.(?:css|js))(?:\?[^"]*)?"/g)]
    .map(m => m[1]);
  const unique = [...new Set(assets)];

  let total = 0;
  for (const url of unique) {
    const abs = url.startsWith('http') ? url : SITE + url;
    try {
      const res = await fetch(abs);
      total += Number(res.headers.get('content-length') || 0);
    } catch (e) { /* пропускаем недоступные */ }
  }

  console.log(path, 'файлов:', unique.length, 'суммарно КБ:', Math.round(total / 1024));
}

Как читать результат. До оптимизации на типовом сайте WordPress набирается 20–40 файлов и 500–900 КБ суммарного веса только по CSS и JS. После минификации вес обычно падает на 10–30%, а после объединения число файлов сокращается до 3–8. Если файлов стало меньше, а вес не изменился — где-то в цепочке сидит кэш, и вы измеряете старые версии. Если наоборот — что-то из исключений подтянуло дополнительный код, стоит проверить, не задублировалась ли библиотека вроде jQuery.

Этот же скрипт удобно запускать по расписанию — например, раз в неделю по всем ключевым страницам, чтобы замечать деградацию сразу, а не когда посетители начнут жаловаться. Автоматизация таких проверок из админки или из внешних скриптов разобрана в статье про REST API WordPress, а точечная проверка служебных страниц и индексации — в материале про robots.txt и noindex.

TimeWeb

Частые вопросы о минификации и объединении CSS и JS

Насколько реально ускоряется WordPress после минификации?

Вес CSS- и JS-файлов обычно падает на 10–30%, и это заметно улучшает метрики FCP и LCP на мобильных. Но если сайт тормозит из-за медленного хостинга, тяжёлых изображений или отсутствия кэша, минификация даст лишь часть эффекта. Оптимальный порядок: кэш, картинки, потом минификация — тогда каждый следующий шаг усиливает предыдущий.

Чем минификация отличается от объединения файлов?

Минификация уменьшает вес каждого файла, удаляя пробелы, комментарии и лишние символы, — код остаётся тем же. Объединение склеивает несколько файлов в один, чтобы браузер сделал меньше запросов. Минификация безопасна почти всегда, объединение может ломать скрипты с зависимостями, поэтому включайте его отдельно и проверяйте сайт после.

Обязательно ли объединять CSS и JS при HTTP/2?

Нет. HTTP/2 загружает десятки файлов по одному соединению параллельно, и выигрыш от склейки стал небольшим. Объединение всё ещё полезно на слабых хостингах и мобильных сетях, но приоритет у минификации и отложенной загрузки. Если объединение вызывает конфликты скриптов — спокойно отключите его.

Как включить минификацию без плагина?

Минифицируйте свои файлы заранее на этапе разработки через esbuild или terser и подключайте в WordPress уже сжатые версии через wp_enqueue_script. Для минификации «на лету» можно написать PHP-функцию, но её результат нужно кэшировать, иначе сервер будет пересжимать файлы на каждом просмотре страницы.

Почему после включения объединения сломался слайдер или форма?

Скрипты подключаются с зависимостями и порядком выполнения, а объединение меняет этот порядок или добавляет код туда, где он не нужен. Найдите хэндл проблемного скрипта в исходном коде страницы (атрибут id у тега script) и добавьте его в исключения оптимизатора. Чаще всего достаточно вывести из объединения один-два файла.

Нужно ли чистить кэш после изменения настроек минификации?

Да, всегда. Оптимизатор складывает сжатые файлы в отдельную папку, а кэширующие плагины и браузер продолжают отдавать старые версии. Сбросьте кэш оптимизатора, кэш-плагина и обновите страницу через Ctrl+F5 — иначе вы проверяете настройки, которые ещё не применились.

Вывод

Минификация и объединение — это два разных инструмента с разным уровнем риска. Минификация убирает из файлов лишние символы и даёт 10–30% экономии веса практически без риска — включайте её смело. Объединение сокращает число запросов, но при HTTP/2 эффект скромнее, а конфликты скриптов реальны, поэтому включайте его отдельно, после проверки сайта с одной минификацией.

Порядок работы простой: сначала измерьте текущие метрики в PageSpeed, затем вручную уберите лишние скрипты через wp_dequeue_script, подключите свои файлы в подвале с defer, а для плагинных файлов поставьте оптимизатор — Clearfy или Autoptimize. После каждого шага сбрасывайте кэш и проверяйте, что слайдеры, формы и корзина работают, а метрики движутся в нужную сторону.

Если скорость нужна сейчас, а разбираться с enqueue, defer и исключениями некогда — это можно поручить команде, которая делает сайты на WordPress под ключ: мы проводим полный аудит скорости, настраиваем кэш, минификацию и отложенную загрузку, оптимизируем изображения и держим метрики под контролем после запуска. Посмотрите услуги разработки и продвижения, изучите портфолио выполненных проектов и почитайте блог о сайтах и продвижении. Обсудить задачу и получить смету можно через форму контактов — подскажем, что именно тормозит именно ваш сайт, и посчитаем стоимость ускорения.

Clearfy

Поделиться:
Telegram ВКонтакте