ОЗСМ — Mobile PSI 44 → 100, закрыт юридический риск 152-ФЗ

ОЗСМ (Охтинский завод строительных машин) B2B промышленное оборудование 2026-04 — 2026-05
100/100
Mobile Performance
100/100
Accessibility
152-ФЗ
Compliance закрыт

Услуги

  • seo-ai-search
  • cybersecurity

Стек

  • MODX
  • Yandex SmartCaptcha
  • Pagefind
  • Tailwind 4

Производитель вибропогружателей в Санкт-Петербурге. Сайт на 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 через плагины и точечные правки шаблонов.

  1. B5-B7: чистка мёртвого кода. Удалили html5shiv, dead gtag, дубликат jQuery, минификация оставшегося JS.
  2. B8: оптимизация изображений. WebP + lazy-loading через <picture>-обёртку в MODX-плагине. Исправление CLS на продуктовой карточке (0.549 → 0.000) через внешний CSS Fotorama.
  3. B11: lazy-стратегия для виджетов. Я.Карты грузятся через IntersectionObserver только при доскролле. Я.Метрика — slim-инициализация (webvisor:false, clickmap:false). Mobile 44 → 76, Desktop 68 → 99.
  4. 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.
  5. 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).
  6. B14: UX полировка. Toast-уведомления через собственный form-toast.js (jGrowl-shim API, vanilla JS).

Результат

МетрикаБылоСтало
Mobile Performance44100
Desktop Performance68100
Accessibility84100
Best Practices8496
SEO92100
LCP Mobile11,3 с1,9 с
TBT1108 мс0 мс
CLS0,0010,000
Bundle JS~520 KB~50 KB (gzip)

Юридический риск штрафа 1-6 млн ₽ за использование reCAPTCHA — закрыт. Все изменения обратимы (бэкапы каждой правки на сервере). Срок: 10 дней.

Что использовали

MODX (без переписывания), Yandex SmartCaptcha (FSTEC-сертифицированная), IntersectionObserver, requestIdleCallback, WebP, vanilla JS для form-toast, собственные MODX-плагины для critical CSS inline и WebP-обёртки. Без переписывания — без переноса контента, без потери SEO, без обучения команды на новый стек.

Похожая задача?

Расскажите контекст — подскажу, что и как делать.

Обсудить похожий проект →