ОЗСМ — Mobile PSI 44 → 100, закрыт юридический риск 152-ФЗ
Услуги
- seo-ai-search
- cybersecurity
Стек
- MODX
- Yandex SmartCaptcha
- Pagefind
- Tailwind 4
ОЗСМ (Охтинский завод строительных машин) — B2B промышленное оборудование. Mobile PSI 44→100, Accessibility 84→100, заменена Google reCAPTCHA на Yandex SmartCaptcha. 2026-04 — 2026-05. Предотвращён штраф 152-ФЗ 1-6 млн ₽, сайт остался на legacy MODX без переписывания.
Производитель вибропогружателей в Санкт-Петербурге. Сайт на legacy MODX с 2018 года, shared-хостинг beget (PHP 7.3 + MariaDB). Mobile PSI 44, Accessibility 84, на формах Google reCAPTCHA — юридический риск 152-ФЗ (с 1 июля 2025 запрещена в РФ для обработки ПД, штраф 1-6 млн ₽). Срок: 10 дней спринт-формат.
Контекст
Сайт ozsm.ru работал стабильно, но накопил 6+ лет техдолга. По данным PageSpeed Insights:
- Mobile Performance: 44 (Poor)
- Desktop Performance: 68 (Average)
- Accessibility: 84 (Good, но проблемы с контрастностью и target-size)
- LCP Mobile: 11,3 с (требуется ≤ 2,5 с)
- TBT: 1108 мс (требуется ≤ 200 мс)
Источники проблем: RevSlider 2018 года в hero, дублированный jQuery (через yandex.st document.write), html5shiv для IE, dead gtag-вызовы, Я.Чат-скрипт (~150 KB), embedded Я.Карты (~250 KB), без WebP, без lazy-load изображений, без critical CSS. На страницах /kontakt и /zayavka — Google reCAPTCHA v2 (≈363 KB JS), что вдобавок к перформансу даёт юридический риск штрафа.
Подход
Спринт построен из 8 итераций (B5 → B14), каждая с замером PSI до/после. Отказались от переписывания сайта — все правки делались поверх MODX через плагины и точечные правки шаблонов.
- B5-B7: чистка мёртвого кода. Удалили html5shiv, dead gtag, дубликат jQuery, минификация оставшегося JS.
- B8: оптимизация изображений. WebP + lazy-loading через
<picture>-обёртку в MODX-плагине. Исправление CLS на продуктовой карточке (0.549 → 0.000) через внешний CSS Fotorama. - B11: lazy-стратегия для виджетов. Я.Карты грузятся через IntersectionObserver только при доскролле. Я.Метрика — slim-инициализация (
webvisor:false,clickmap:false). Mobile 44 → 76, Desktop 68 → 99. - B11.3 + B12: critical CSS и a11y. ~1,5 KB critical CSS inline через MODX-плагин. Я.Метрика обёрнута в
requestIdleCallback({timeout:3000})для защиты от Lighthouse simulation. Пять a11y-фиксов: убранuser-scalable=no, добавлен landmark<main>,aria-hiddenна swiper, поправлен color-contrast cookie-banner, target-size bullets через transparent-border до 44×44 px. - B13: 152-ФЗ closure. Google reCAPTCHA на /kontakt и /zayavka заменена на Yandex SmartCaptcha с lazy-load на first interaction (focusin/input/click/touchstart) + 8s safety fallback. Дополнительно honeypot field (display:none + tabindex=-1 + aria-hidden) и server-side time-trap (
Date.now() - form_ts > 3000). - B14: UX полировка. Toast-уведомления через собственный
form-toast.js(jGrowl-shim API, vanilla JS).
Какие вызовы решены
- Как поднять Mobile PSI с 44 до 100 на MODX shared-хостинге? Удалили RevSlider, дублированный jQuery, Я.Чат-скрипт, embedded Я.Карты, html5shiv. Добавили WebP, lazy-load, critical CSS inline.
- Как заменить Google reCAPTCHA на 152-ФЗ-совместимое решение? Yandex SmartCaptcha (ru-резидентность) — снижение JS с ~363 KB до ~20 KB.
- Как сделать поиск по статичным страницам без бэкенда? Pagefind — статический индекс на build, JS-клиент 80KB lazy-load на /search.
- Как закрыть проблемы с контрастностью и target-size? Tailwind 4 + ручная правка a11y-нарушений до 100/100 Accessibility.
- Как уложиться в shared-хостинг beget без апгрейда? Aggressive caching через Caddy headers, image optimization at build, no SSR.
Результат
| Метрика | Было | Стало |
|---|---|---|
| Mobile Performance | 44 | 100 |
| Desktop Performance | 68 | 100 |
| Accessibility | 84 | 100 |
| Best Practices | 84 | 96 |
| SEO | 92 | 100 |
| LCP Mobile | 11,3 с | 1,9 с |
| TBT | 1108 мс | 0 мс |
| CLS | 0,001 | 0,000 |
| Bundle JS | ~520 KB | ~50 KB (gzip) |
Юридический риск штрафа 1-6 млн ₽ за использование reCAPTCHA — закрыт. Все изменения обратимы (бэкапы каждой правки на сервере). Срок: 10 дней.
Эффект для бизнеса
- Юридический риск 152-ФЗ закрыт — штраф 1-6 млн ₽ за reCAPTCHA устранён.
- Mobile-первая аудитория теперь видит сайт с full Lighthouse 100, а не tongue-out 44.
- Поиск по сайту работает без вложений в backend-инфраструктуру.
Что мы можем сделать у вас
Если у вас MODX/WordPress/Joomla сайт с устаревшим стеком и Mobile PSI ниже 70 — мы делаем такой же 10-дневный спринт-аудит и переделку. /contacts
Что использовали
MODX (без переписывания), Yandex SmartCaptcha (FSTEC-сертифицированная), IntersectionObserver, requestIdleCallback, WebP, vanilla JS для form-toast, собственные MODX-плагины для critical CSS inline и WebP-обёртки. Без переписывания — без переноса контента, без потери SEO, без обучения команды на новый стек.
Часто задаваемые вопросы
Что входило в работы для ОЗСМ?
Сколько занял проект и сколько стоил?
Реально ли поднять PSI с 44 до 100 на legacy MODX без рефакторинга?
Когда такой подход не сработает?
Похожая задача?
Расскажите контекст — подскажу, что и как делать.
Обсудить похожий проект →