AI18 октября 2026 г.4 мин

Локально работает, на сайте нет: карта различий

Почему лендинг работает локально, но ломается на домене: карта кода, сборки, окружения, файлов, адресов API и кеша для точной диагностики.

Обложка статьи: Локально работает, на сайте нет: карта различий

У локальной страницы и опубликованного сайта может совпадать внешний вид и различаться почти всё, что нужно форме: адрес обработчика, настройки доступа, файлы и готовый JavaScript. Диагностика начинается с первого наблюдаемого расхождения.

После работы AI-агента над лендингом просьба «просто задеплой ещё раз» выглядит быстрым решением. Я бы сначала зафиксировал конкретный сбой. Например: на домене после отправки формы приходит ошибка, а локально показывается успех. Это уже сценарий для сравнения, а не спор о том, где версия правильная.

Сравните одно действие в одинаковых условиях

Откройте оба адреса напрямую и запишите версии приложения, браузер, ширину экрана и шаги. Проверьте, что локальный успех действительно связан с доставкой тестовой заявки, а не с имитацией ответа. Используйте только согласованные тестовые данные и не отправляйте рабочие обращения ради эксперимента.

Сохраните запрос к обработчику: метод, домен, путь, статус и безопасную часть ответа. Не переносите в отчёт токены, cookies и персональные данные. Если запроса нет вообще, ищите проблему в клиентском коде. Если запрос есть, но адрес другой, дальнейшая диагностика уже начинается с настройки маршрута.

Проверять сверху вниз до первого объясняющего расхождения
СлойЧто сравнитьТипичная улика
КодИдентификатор версии и исходники выпускаНа сервер попала другая папка
СборкаВерсия среды, зависимости, build-настройкиРазработка работает, производственная сборка отличается
ОкружениеНаличие и момент чтения настроекПубличный адрес зафиксирован старой сборкой
ФайлыИмена, регистр, наличие, HTTPЛокальный файл не вошёл в выпуск
ИнтеграцияДомен, Origin, получатель, разрешенияРабочий домен не принят обработчиком
КешВерсия HTML и связанных ресурсовНовая страница ссылается на недоступный старый файл

Локальный dev не равен готовому выпуску

Соберите приложение в производственном режиме и запустите полученный результат в безопасной среде. Так можно отделить ошибку режима разработки от ошибки рабочего хостинга. Сохраните полный результат сборки в файл, а в передаче укажите статус и существенную ошибку. Удачная компиляция всё равно не подтверждает доставку заявки.

У Next.js значения NEXT_PUBLIC_ в браузерном коде могут фиксироваться при сборке. Официальная документация описывает это отдельно от runtime-настроек. Поэтому проверка правильной переменной на сервере не доказывает, что посетитель получил JavaScript с этим значением.

Проверьте и публичные файлы по реальным URL. Различия регистра в имени, неверная папка, относительный путь и отсутствующий файл дают похожие пустые места на странице. Не маскируйте их запасной картинкой до выяснения причины: иначе ошибка останется в ссылках, скачиваниях или OG-превью.

Дальше смотрите на границы систем

Если браузер отправил запрос на правильный адрес, сравните условия обработки: разрешённый домен, доступность внешнего сервиса, права, формат тела, ожидаемые заголовки. Не отключайте все ограничения разом, чтобы «проверить, заработает ли». Назовите конкретную проверку, которая отказала, и исправьте её под предусмотренный рабочий сценарий.

Для скрытого сбоя полезно проследить одну тестовую метку до конечной системы. HTTP 200 может означать успешное принятие запроса, тестовую заглушку или защитный ответ — смысл определяет контракт обработчика. Реальный результат подтверждается в системе, где команда получает заявку.

Кеш проверяйте как версию, а не заклинание

Откройте страницу в новой сессии, сравните адреса ресурсов и повторите запрос с предусмотренным обновлением кеша. Запишите, что именно изменилось. Без этого «почистил кеш» не объясняет, была ли причиной устаревшая страница, service worker или другой выпуск приложения.

Когда причина найдена, меняйте одну вещь и повторяйте исходный сценарий. Итоговый отчёт должен связывать наблюдение, объяснение, исправление и проверенный результат. Для передачи настроек используйте карту окружения, для возврата — план отката. Отдельные сбои при открытой клавиатуре проверяются по мобильному маршруту: одинаковый адрес не делает разные устройства одинаковой средой.

Ещё по теме