Добавляем Not Found (404) страницу в Next.js приложение

Инструкция по добавлению Not Found (404) страницы в Next.js приложение.

Добавляем Not Found (404) страницу в Next.js приложение
Дата публикации
26.03.25
Дата обновления
16.05.26
Время чтения
3 мин.

Важным элементом SEO-оптимизации является правильная работа с ошибками. В этой статье вы узнаете, что такое ошибка 404, и как правильно работать с ней в приложении на Next.js.

Что такое Not Found или 404 страница?

Ошибка 404, также известная как «Not Found» или «Не найдено», является стандартным HTTP-статусным кодом, который указывает на отсутствие запрашиваемого ресурса на сервере.

Файл not-found.js | not-found.ts

В Next.js, начиная с 13 версии, для работы с отображением 404 ошибки используется файл not-found.js.

Вот так может выглядеть код файла:

import Link from "next/link";

export default function NotFound() {
  return (
    <div>
      <h2>Не найдено</h2>
      <p>Запрашиваемый ресурс не доступен</p>
      <Link href="/">Вернуться на главную</Link>
    </div>
  );
}

Для отображения 404 ошибки необходимо поместить данный файл в корень директории app/,

app/not-found.tsx

страница будет отображаться для всех ненайденных URL приложения.

По умолчанию, NotFound - серверный компонент, и если необходимо получить какие-то данные перед отрисовкой, то необходимо сделать его асинхронным (async).

import Link from 'next/link'
import { headers } from 'next/headers'

export default async function NotFound() {
  const authorization = (await headers()).get('authorization');
  const res = await fetch('...', {
    headers: { authorization },
  })
  const user = await res.json();
  return (
     <div>
      <h2>Ничего не найдено, {user.name}.</h2>
      <p>Но ты можешь попробовать снова, вдруг это просто ошибка?</p>
    </div>
  )
}

Если же необходимо получить какие-то данные уже на клиенте, то можно вынести часть содержимого страницы в клиентский компонент, и запросить данные из него.

Подробную информацию можно найти в официальной документации по странице.

Функция notFound()

Так же отрисовку файла not-found.js можно вызвать принудительно с помощью функции notFound().

Примерно вот так:

import { notFound } from "next/navigation";

export default async function Post({ params }: Params) {
  const post = getPostBySlug(params.slug);

  if (!post) {
    return notFound();
  }

  ...

}

Эта функция позволяет кинуть ошибку NEXT_NOT_FOUND, а затем вызвать рендер страницы not-found.js в пределах сегмента пути и отдать 404 код ошибки HTTP.

В дополнение к этому, функция вставит на страницу мета-тег robots, при её использовании в серверном компоненте.

<meta name="robots" content="noindex" />

Функцию notFound() можно использовать в серверных компонентах (Server Components), обработчиках пути (Route Handlers) и серверных действиях (Server Actions).

Подробную информацию можно найти в официальной документации по функции.

На этом всё! 🎉

Расскажите о вашем проекте

Связаться иначе

Часто задаваемые вопросы

Это ответ сервера с кодом 404: по указанному адресу ничего нет. Пользователь видит страницу «не найдено»; в Next.js её задают not-found.tsx или вызывают notFound() из кода. Подробнее — в разделе что такое 404.

В корень app/not-found.tsx — страница для всех ненайденных URL приложения. Для отдельных разделов можно добавить not-found во вложенный сегмент. См. файл not-found.

not-found.tsx — UI при отсутствии маршрута. notFound() — вызов из кода (например, пост с несуществующим slug), когда маршрут есть, а данных нет. Оба отдают 404 и рендерят not-found. Функция notFound().

Да: при показе not-found и вызове notFound() в App Router ответу соответствует статус 404, а не 200 с текстом «не найдено» (soft 404). Это важно для SEO и аналитики.

При notFound() в серверном компоненте Next.js добавляет meta robots noindex — поисковикам не стоит индексировать «мусорные» URL. Подробнее в документации по функции.

Да: not-found по умолчанию серверный компонент — сделайте его async и читайте headers/fetch на сервере. Интерактив — во вложенном клиентском компоненте, как в примере статьи.

Нет: в sitemap указывают только рабочие страницы (как собрать sitemap), а robots.txt не заменяет исправление битых ссылок. Настройка robots и проверка файла — в статье robots.txt.

Вам может быть интересно

Добавляем robots.txt в Next.js приложение
Добавляем robots.txt в Next.js приложение

Добавляем robots.txt в Next.js приложение

5 мин.

Инструкция по добавлению robots.txt в Next.js приложение...

Пост#nextjs#seo
Добавляем sitemap.xml в Next.js приложение
Добавляем sitemap.xml в Next.js приложение

Добавляем sitemap.xml в Next.js приложение

9 мин.

Инструкция по добавлению sitemap.xml в Next.js приложение...

Пост#nextjs#seo
Next.js + Yandex Object Storage = Не работают ссылки
Next.js + Yandex Object Storage = Не работают ссылки

Next.js + Yandex Object Storage = Не работают ссылки

3 мин.

Очень часто при попытке хостить Next.js приложение использующее App Router в S3 бакете можно столкнуться с тем что страницы приложения не открываются при заходе по прямой ссылке...

Пост#nextjs#yandex
Добавляем Google Analytics в Next.js приложение
Добавляем Google Analytics в Next.js приложение

Добавляем Google Analytics в Next.js приложение

2 мин.

Инструкция по добавлению Google Analytics в Next.js приложение...

Пост#seo#nextjs
Подключение счётчика Яндекс Метрики к Next.js приложению
Подключение счётчика Яндекс Метрики к Next.js приложению

Подключение счётчика Яндекс Метрики к Next.js приложению

13 мин.

Инструкция по добавлению счётчика Яндекс Метрики к Next.js блогу...

Пост#nextjs#yandex
Добавляем JSON-LD разметку к блогу на Next.js
Добавляем JSON-LD разметку к блогу на Next.js

Добавляем JSON-LD разметку к блогу на Next.js

9 мин.

Инструкция по добавлению JSON-LD разметки к блогу на Next.js...

Пост#nextjs#seo
Валидатор robots.txt
Валидатор robots.txt

Валидатор robots.txt

Проверьте robots.txt: разбор правил, замечания по RFC 9309, список sitemap и групп user-agent — прямо в браузере.

Инструмент#seo#robots
Frontend разработка
Frontend разработка

Frontend разработка

Разрабатываем интерфейсы, которые быстро работают, удобно используются и масштабируются вместе с продуктом.

Услуга#frontend#веб-разработка
Разработка вебсайтов
Разработка вебсайтов

Разработка вебсайтов

Сайт под ваш бизнес: от структуры и дизайна до запуска и масштабирования. Быстро, продуманно и с фокусом на результат.

Услуга#веб-разработка#сайты