Next.js и метаданные: почему сборка может упасть в проде
Наткнулся на разбор о том, как в Next.js метаданные и изображения могут сломать сборку — не в dev, а именно в проде. И понял: это не редкость, а системная уязвимость, если не проверять всё заранее.
О чём речь и почему я считаю это важным для сайта
Речь о том, что в Next.js сборка может пройти, а в проде — нет. Потому что в dev всё работает: локальные картинки грузятся, title есть, localhost в метаданных — не мешает. А в проде — всё падает из-за одного неправильного URL или несуществующей переменной.
Когда сайт не открывается из-за ошибки сборки — это не просто «случайно». Это предсказуемый сбой, который можно найти и исправить до деплоя. И если его не закрыть — клиенты не видят страницу, соцсети показывают ломаные карточки, а SEO страдает.
Как это устроено — что тут вообще происходит
В Next.js метаданные и изображения — это не просто HTML, а часть сборки. Например, если в Open Graph указан localhost, а в production нет переменной NEXT_PUBLIC_SITE_URL — сборка пройдёт, но в метаданных будет ломаный URL.
То же с изображениями: remotePatterns нужно настроить для внешних URL. Если не прописать — картинки не загрузятся, даже если в dev всё работает. А ошибка появится только в проде, когда сборка будет полной.
Как понять, что это касается вашего сайта
Я проверяю это первым делом: ищу remotePatterns, metadataBase, переменные окружения. Если в metadataBase стоит localhost — это красный флаг.
Также смотрю, есть ли в сборке проверка на наличие переменных. Если нет — значит, в проде может быть ошибка. Или, если используется generateMetadata — проверяю, есть ли обработка ошибок при загрузке данных.
Что с этим делать
Я начинаю с резервной копии. Потом — проверяю все метаданные на наличие относительных URL без metadataBase.
Проверяю remotePatterns: если есть внешние изображения — должны быть настроены. Если нет — добавляю. Проверяю, есть ли в коде try/catch в generateMetadata — иначе страница может упасть при отсутствии данных.
Что здесь даёт поддержка
Мы закрываем эту задачу на постоянной поддержке: проверяем метаданные, изображения, переменные окружения — каждый раз перед деплоем. Это не разовая проверка, а часть процесса.
Просроченный сертификат или домен — предсказуемый и полностью предотвратимый сбой. В нашей компании мониторинг доступности и ключевых страниц каждые несколько минут, 24/7.
Если вы хотите быть уверены, что ваш сайт не упадёт из-за такого «маленького» бага — приглашаем на бесплатный аудит сайта.