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 показывал такую картину:
| Метрика | Значение |
|---|---|
| Performance | 60-70/100 |
| LCP mobile | ~4.5 секунды |
| CLS | 0.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)
| Метрика | До | После |
|---|---|---|
| Performance | 60-70 | 94/100 |
| SEO | - | 100/100 |
| Accessibility | - | 97 |
| Best practices | - | 96 |
| FCP | - | 1.9 s |
| LCP | 4.5 s | 1.9 s |
| TBT | - | 20 ms |
| CLS | 0.377 | 0.001 |
| Speed Index | - | 5.5 s |
Desktop
| Метрика | Значение |
|---|---|
| Performance | 92/100 |
| LCP | 0.7 s |
| TBT | 20 ms |
| CLS | 0.085 |
| FCP | 0.6 s |
Total Blocking Time 20 ms - это уже про чистый JS на странице, не про сеть доставки. CLS 0.001 - это «не двигается вообще».
Что Beget CDN НЕ сделал
Это важная часть статьи, потому что в маркетинговых статьях про сети доставки это обычно пропускают.
TTFB не упал. Прямой замер 1 июня (5 запросов с интервалом):
| Метрика | Mobile | Desktop |
|---|---|---|
| TTFB медиана | ~1.13 секунды | ~0.98 секунды |
| TLS handshake | 470-580 ms | - |
| Total page time | 1.7-2.5 s | 1.6-1.7 s |
| HTTP | 200 | 200 |
| Cache | X-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 или ЯО
Что бы я сделал на новом проекте
Порядок такой:
- Сначала оптимизировать код. Размеры картинок в HTML, critical CSS, fallback-шрифты с size-adjust, OPcache, WebP. Без бюджета, своими руками.
- Потом подключить Beget CDN на статику (или Yandex Cloud CDN, Selectel CDN если вы не на Beget). Снимает нагрузку с shared, разгружает PHP-процессы.
- Только потом думать про VPS. Если после двух шагов Lighthouse застрял и TTFB всё ещё мешает - тогда переезд. На моём кейсе до этого не дошло.
Lighthouse 94 mobile на shared-хостинге - это не «магия CDN». Это сумма мелких правок кода и разгрузка статики через бесплатную сеть доставки от хостера.
Полезные ссылки
- Cloudflare для российского сайта в 2026: почему я выбрал Beget CDN - тот же сюжет под другим углом, про регуляторные риски.
- CLS 0.377 → 0.002 за день - три правки critical CSS, подробный разбор.
- OPcache на shared: правила не видны - про PHP-кэш на дешёвом хостинге.
- Кейс global-cleaning-spb.ru: 194 страницы в Яндексе за 50 дней - SEO-история того же сайта.
Хочется такое же на своём проекте? Возьму на разовый аудит или сделаю полную настройку через SEO с нуля.
Вопрос-ответ