← На главную

Форма на Astro без JS удвоила конверсию utility-компании за ночь

10.06.2026 12:45 · hackernews

У utility-компании была проблема: клиенты могли оформить услуги только через старую ASP-форму или вручную, что стоило дороже. А это регулируемая монополия — падение удовлетворённости ниже 96% грозило миллионными штрафами. Две предыдущие попытки провалились. Последняя — React-приложение от подрядчиков — продержалось три дня: грузили спиннеры, глобальный state, не было доступности, а загрузка изображений пыталась пихать всё в localStorage с лимитом 5 МБ. Автор сказал боссу: «Мы не можем взять это на поддержку».

Он принял смелое решение — переписать сайт на Astro. Полностью HTML-first. JavaScript остался только в веб-компонентах для прогрессивного улучшения, но сайт работал и без него. Вдохновлялся историей Теренса Идена: женщина с PSP в очереди в лондонском жилищном управлении заходила на GOV.UK через браузер консоли — те страницы написаны на простом HTML и работали даже там.

Требования: каждая сессия — уникальный ID, данные (включая загрузки) сохраняются на бэкенде после каждого шага, форма заполняется без JavaScript, на древних браузерах, с уровнем доступности WCAG AA. JavaScript и современный CSS — только для улучшения опыта.

Архитектура классическая: каждый шаг формы — отдельная страница. Пользователь нажимает «Далее», форма отправляется, API проверяет данные и редиректит на следующий шаг. Паттерн, знакомый по Remix, но коллегам, привыкшим к SPA, пришлось объяснять. Автор справедливо замечает: незачем грузить 20 МБ JavaScript ради большой формы, когда пользователь может стоять в поле с десятилетним Android-смартфоном.

Валидацию решил без страданий с React-библиотеками. Написал собственный HTML веб-компонент validation-enhancer. Он оборачивает любую форму, перехватывает встроенную HTML-валидацию, убирает браузерные popup-подсказки и выводит ошибки в aria-describedby (сейчас советуют aria-errormessage). Очищает ошибки при вводе, проверяет на blur и submit. Работает за <1 КБ. Если компонент не загрузился — браузерная валидация, если и та не поддерживается — бэкенд.

Результат: количество завершивших форму удвоилось за ночь. Аналитика не могла понять, откуда эти пользователи — ведь их JS-трекеры отваливались вместе с JavaScript-сбоями. Ещё подход «хранить сессию на бэкенде» сработал: кто-то заполнял форму месяц, периодически возвращаясь.

Печальный финал: автор ушёл по контракту, объяснил замене, что сайт работает без JavaScript. Тот ужаснулся: «Но это намного больше работы для нас». Автор считает, что нельзя отбрасывать пользователей со старыми браузерами, плохим соединением или вспомогательными технологиями, особенно если это монопольный госсервис. Если сайт работает на PSP через 3G — он будет работать для всех и через 30 лет.

Читать оригинал →