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

У локальной страницы и опубликованного сайта может совпадать внешний вид и различаться почти всё, что нужно форме: адрес обработчика, настройки доступа, файлы и готовый JavaScript. Диагностика начинается с первого наблюдаемого расхождения.
После работы AI-агента над лендингом просьба «просто задеплой ещё раз» выглядит быстрым решением. Я бы сначала зафиксировал конкретный сбой. Например: на домене после отправки формы приходит ошибка, а локально показывается успех. Это уже сценарий для сравнения, а не спор о том, где версия правильная.
Сравните одно действие в одинаковых условиях
Откройте оба адреса напрямую и запишите версии приложения, браузер, ширину экрана и шаги. Проверьте, что локальный успех действительно связан с доставкой тестовой заявки, а не с имитацией ответа. Используйте только согласованные тестовые данные и не отправляйте рабочие обращения ради эксперимента.
Сохраните запрос к обработчику: метод, домен, путь, статус и безопасную часть ответа. Не переносите в отчёт токены, cookies и персональные данные. Если запроса нет вообще, ищите проблему в клиентском коде. Если запрос есть, но адрес другой, дальнейшая диагностика уже начинается с настройки маршрута.
| Слой | Что сравнить | Типичная улика |
|---|---|---|
| Код | Идентификатор версии и исходники выпуска | На сервер попала другая папка |
| Сборка | Версия среды, зависимости, build-настройки | Разработка работает, производственная сборка отличается |
| Окружение | Наличие и момент чтения настроек | Публичный адрес зафиксирован старой сборкой |
| Файлы | Имена, регистр, наличие, HTTP | Локальный файл не вошёл в выпуск |
| Интеграция | Домен, Origin, получатель, разрешения | Рабочий домен не принят обработчиком |
| Кеш | Версия HTML и связанных ресурсов | Новая страница ссылается на недоступный старый файл |
Локальный dev не равен готовому выпуску
Соберите приложение в производственном режиме и запустите полученный результат в безопасной среде. Так можно отделить ошибку режима разработки от ошибки рабочего хостинга. Сохраните полный результат сборки в файл, а в передаче укажите статус и существенную ошибку. Удачная компиляция всё равно не подтверждает доставку заявки.
У Next.js значения NEXT_PUBLIC_ в браузерном коде могут фиксироваться при сборке. Официальная документация описывает это отдельно от runtime-настроек. Поэтому проверка правильной переменной на сервере не доказывает, что посетитель получил JavaScript с этим значением.
Проверьте и публичные файлы по реальным URL. Различия регистра в имени, неверная папка, относительный путь и отсутствующий файл дают похожие пустые места на странице. Не маскируйте их запасной картинкой до выяснения причины: иначе ошибка останется в ссылках, скачиваниях или OG-превью.
Дальше смотрите на границы систем
Если браузер отправил запрос на правильный адрес, сравните условия обработки: разрешённый домен, доступность внешнего сервиса, права, формат тела, ожидаемые заголовки. Не отключайте все ограничения разом, чтобы «проверить, заработает ли». Назовите конкретную проверку, которая отказала, и исправьте её под предусмотренный рабочий сценарий.
Для скрытого сбоя полезно проследить одну тестовую метку до конечной системы. HTTP 200 может означать успешное принятие запроса, тестовую заглушку или защитный ответ — смысл определяет контракт обработчика. Реальный результат подтверждается в системе, где команда получает заявку.
Кеш проверяйте как версию, а не заклинание
Откройте страницу в новой сессии, сравните адреса ресурсов и повторите запрос с предусмотренным обновлением кеша. Запишите, что именно изменилось. Без этого «почистил кеш» не объясняет, была ли причиной устаревшая страница, service worker или другой выпуск приложения.
Когда причина найдена, меняйте одну вещь и повторяйте исходный сценарий. Итоговый отчёт должен связывать наблюдение, объяснение, исправление и проверенный результат. Для передачи настроек используйте карту окружения, для возврата — план отката. Отдельные сбои при открытой клавиатуре проверяются по мобильному маршруту: одинаковый адрес не делает разные устройства одинаковой средой.