Beget CDN на shared: что реально даёт

Кейс global-cleaning-spb.ru: Lighthouse mobile 60 → 94, LCP 4.5s → 1.9s, CLS 0.377 → 0.001. Что реально сделал Beget CDN, а что - оптимизация кода.

Когда смотришь на сайт на shared-хостинге с Lighthouse 60-70 и LCP 4 секунды, первый соблазн - сказать «надо на VPS». Это дорого, требует системного администрирования и редко окупается на B2B-сайте с 10 тысячами посетителей в месяц.

На проекте global-cleaning-spb.ru пошёл другим путём: подключил Beget CDN на статику и параллельно оптимизировал код. Lighthouse mobile вырос до 94/100, LCP до 1.9 секунды, CLS до 0.001. Без переезда. Расскажу что именно сделал, и где CDN помог, а где нет.

Если коротко

  • Lighthouse mobile: 60-70 → 94/100 (Performance), 100/100 (SEO)
  • LCP mobile: 4.5 s → 1.9 s
  • CLS: 0.377 → 0.001
  • TBT: 20 ms
  • TTFB: остался ~1 секунду (CDN не отдаёт HTML)
  • Beget CDN раздаёт CSS, JS, шрифты, картинки. HTML остался на shared.
  • Cloudflare не подходит из-за блокировок в РФ - почему именно.

Что было «до»

Сайт работал на shared-хостинге Beget без CDN. Стек: PHP, без CMS, кастомный код. Lighthouse mobile показывал такую картину:

МетрикаЗначение
Performance60-70/100
LCP mobile~4.5 секунды
CLS0.377
TTFB shared без CDN~944 ms (потолок)

CLS 0.377 - это красная зона, ранжирование режется и в Google, и в Яндексе с 2021 года. LCP 4.5 секунды - это когда мобильный пользователь на 4G видит «белый экран» почти всё время загрузки. Lighthouse 60 - это когда Google не считает сайт «качественным с точки зрения опыта».

Что я сделал

Два параллельных направления: оптимизация кода и CDN на статику.

Часть 1. Оптимизация кода

Это то, что Beget CDN не сделает за вас. Сеть доставки не починит CLS, не уберёт неиспользуемый JS, не разорвёт зависимости в critical-rendering path. Сначала код, потом инфраструктура.

CLS 0.377 → 0.002 за один день. Подробный разбор в отдельной статье, коротко:

  • Логотип получил явные width и height в HTML
  • .header-nav вынес в critical CSS
  • Inter Fallback с size-adjust: 107% и ascent-override: 90% на базе Arial - устранил «прыжок» при загрузке шрифта

После этих трёх правок CLS упал в 200 раз - с 0.377 до 0.002, потом до 0.001. Без CDN, без VPS, без переписывания фронта.

Self-host шрифтов. Inter Variable, font-display: swap. Шрифт лежит на собственном хостинге, не на сторонних серверах. Убрал внешнюю зависимость, которая могла блокировать рендер.

WebP для всех картинок. 192 ссылки в 92 PHP-файлах, конвертация за день. 24 PNG ужались на 71-97%, 108 JPG - на 23-85%. Размеры в HTML, loading="lazy" для всего ниже первого экрана, fetchpriority="high" для hero-картинки.

OPcache на shared. PHP пересобирал страницы каждый запрос. Подключил OPcache - PHP стал отдавать кэшированный байт-код. Подробности в отдельной статье про OPcache на shared.

Часть 2. Beget CDN на статику

В панели Beget включается одной галочкой. После активации сайт получает CDN-домен вида ikeyegdufakeg.begetcdn.cloud, и весь статический контент - CSS, JS, шрифты, картинки - идёт через edge-серверы в РФ.

Я добавил CDN-домен в Content-Security-Policy сайта - чтобы браузеры разрешили подгрузку оттуда:

script-src 'self' 'unsafe-inline' 'unsafe-eval' https://ikeyegdufakeg.begetcdn.cloud
style-src 'self' 'unsafe-inline' https://ikeyegdufakeg.begetcdn.cloud
font-src 'self' https://ikeyegdufakeg.begetcdn.cloud
img-src 'self' data: https://ikeyegdufakeg.begetcdn.cloud

Это всё. Никаких миграций DNS, никакого вынесения проекта на сторонние серверы. Хостер у меня тот же, домен на нём же, регуляторных рисков нет.

Что получил «после»

PageSpeed Insights от 1 июня 2026 года, Lighthouse 13.3.0:

Mobile (эмуляция Moto G Power, 4G slow)

МетрикаДоПосле
Performance60-7094/100
SEO-100/100
Accessibility-97
Best practices-96
FCP-1.9 s
LCP4.5 s1.9 s
TBT-20 ms
CLS0.3770.001
Speed Index-5.5 s

Desktop

МетрикаЗначение
Performance92/100
LCP0.7 s
TBT20 ms
CLS0.085
FCP0.6 s

Total Blocking Time 20 ms - это уже про чистый JS на странице, не про сеть доставки. CLS 0.001 - это «не двигается вообще».

Что Beget CDN НЕ сделал

Это важная часть статьи, потому что в маркетинговых статьях про сети доставки это обычно пропускают.

TTFB не упал. Прямой замер 1 июня (5 запросов с интервалом):

МетрикаMobileDesktop
TTFB медиана~1.13 секунды~0.98 секунды
TLS handshake470-580 ms-
Total page time1.7-2.5 s1.6-1.7 s
HTTP200200
CacheX-Cache: HIT (Nginx)-

TTFB на shared Beget упирается в три вещи: TLS handshake, PHP cold start и пропускная способность shared-сервера. Edge ни с одной не помогает, потому что HTML отдаёт исходный сервер.

Если вы видите статьи в духе «подключили CDN - TTFB упал в 5 раз», там обычно сравнивают nginx + CDN с Apache без opcache. На сравнимом железе сеть доставки не уменьшает TTFB динамической страницы - она ускоряет всё после первого байта.

Cache-Control не наследуется из .htaccess. Если в .htaccess стоит mod_expires с годовым кешем для статики, на edge это не приедет. По умолчанию кеш на max-age=300 (5 минут). Для versioned URL (с хешем в имени файла) этого мало - надо настраивать через панель Beget или жить с дефолтом.

География только Россия и СНГ. Если 30% аудитории в EU или US, им edge-серверы в РФ не помогут. У global-cleaning-spb.ru аудитория полностью в РФ - это работает. Для международного проекта решение не подходит.

Кому это подходит, кому - нет

Подходит:

  • Локальный B2B-сайт в РФ
  • Shared-хостинг, не хочется переезжать на VPS
  • Lighthouse сейчас 60-80, надо подняться до 90+
  • Аудитория целиком в РФ или СНГ
  • Бюджет ограничен (бесплатно для платных тарифов Beget)

Не подходит:

  • Глобальная аудитория с долей РФ < 50%
  • Нужен TTFB < 200 ms (только VPS + reverse proxy)
  • DDoS-защита уровня L7 (Beget не WAF)
  • Serverless edge-compute (Workers, R2) - нужен Cloudflare или ЯО

Что бы я сделал на новом проекте

Порядок такой:

  1. Сначала оптимизировать код. Размеры картинок в HTML, critical CSS, fallback-шрифты с size-adjust, OPcache, WebP. Без бюджета, своими руками.
  2. Потом подключить Beget CDN на статику (или Yandex Cloud CDN, Selectel CDN если вы не на Beget). Снимает нагрузку с shared, разгружает PHP-процессы.
  3. Только потом думать про VPS. Если после двух шагов Lighthouse застрял и TTFB всё ещё мешает - тогда переезд. На моём кейсе до этого не дошло.

Lighthouse 94 mobile на shared-хостинге - это не «магия CDN». Это сумма мелких правок кода и разгрузка статики через бесплатную сеть доставки от хостера.

Полезные ссылки

Хочется такое же на своём проекте? Возьму на разовый аудит или сделаю полную настройку через SEO с нуля.

Вопрос-ответ

Частые вопросы

Beget CDN бесплатный или нет?
Бесплатный, если у вас платный хостинг Beget. Включается одной галочкой в панели, отдаёт статику с edge-серверов в РФ. По трафику - до определённого лимита бесплатно, дальше посуточная тарификация в рублях. На моём проекте с B2B-аудиторией бесплатного объёма хватает с запасом, лимит не упирался.
Beget CDN ускоряет TTFB или нет?
Нет. TTFB - это первый байт HTML, его рендерит исходный сервер. На shared Beget TTFB упирается в потолок ~1 секунду из-за TLS handshake 470-580 ms и PHP cold start. Сеть доставки раздаёт CSS, JS, шрифты, картинки - всё после HTML. Если у вас цель - TTFB < 200 ms, идите на VPS с reverse proxy.
Зачем CDN, если он не ускоряет TTFB?
Ускоряет всё кроме первого байта - и это даёт большой вклад в Lighthouse. На global-cleaning-spb.ru статика (CSS, JS, шрифты, иконки) идёт с Beget CDN, что сокращает LCP и Speed Index. Параллельно разгружает shared - PHP-процессы не отдают статику, а только HTML. Результат на 1 июня 2026: Lighthouse mobile 94 на 4G slow, LCP 1.9s.
А Cloudflare CDN не лучше?
В РФ 2024-2026 - нет. Cloudflare блокируют через DPI на провайдерах, часть пользователей видит сайт медленно или с фейлами SSL. Разобрал подробно в [отдельной статье](/blog/cloudflare-v-rf-pochemu-otkazalsya/). Для глобальной аудитории Cloudflare всё ещё имеет смысл. Для локального B2B-РФ - Beget CDN, Yandex Cloud CDN или Selectel CDN.
Что точно нужно сделать кроме подключения CDN?
Сначала оптимизировать код. CDN не починит CLS 0.377, не уменьшит Total Blocking Time, не вытянет неиспользуемый CSS. На global-cleaning-spb.ru было: размеры логотипа явно в HTML (width/height), header-nav в critical CSS, Inter Fallback с size-adjust:107% / ascent-override:90%. CLS упал в 200 раз именно от трёх правок critical CSS - до подключения CDN, не после.
Какие минусы у Beget CDN?
Три. Первый: только Россия и СНГ - если 30% аудитории за рубежом, edge-серверы не помогают. Второй: Cache-Control из .htaccess не наследуется - надо настраивать через панель Beget или жить с дефолтным max-age=300. Третий: статика идёт через CNAME-домен (например begetcdn.cloud), часть антифрод-систем рекламных сетей это не понимает - проверяйте на пилотных кампаниях.
А если у меня не Beget?
Yandex Cloud CDN или Selectel CDN - те же edge-серверы по РФ, цена от 0.7 ₽ за 1 ГБ исходящего. Подключение сложнее (CNAME на отдельный домен, ручная настройка origin), но не привязано к хостеру. Для большинства B2B-проектов разница в Lighthouse будет минимальная.

Оцените статью

Дальше

← Все записи