Menu

not-found.js

not-foundファイルは、ルートセグメント内でnotFound関数がスローされた際にUIをレンダリングするために使用されます。カスタムUIの提供に加えて、Next.jsはストリーミングレスポンスでは200のHTTPステータスコード、非ストリーミングレスポンスでは404を返します。

app/not-found.tsx
TypeScript
import Link from 'next/link'
 
export default function NotFound() {
  return (
    <div>
      <h2>Not Found</h2>
      <p>リクエストされたリソースが見つかりませんでした</p>
      <Link href="/">ホームに戻る</Link>
    </div>
  )
}

補足: 予期されたnotFound()エラーをキャッチすることに加えて、ルートのapp/not-found.jsファイルはアプリケーション全体の一致しないURLも処理します。つまり、アプリによって処理されないURLにアクセスしたユーザーには、app/not-found.jsファイルでエクスポートされたUIが表示されます。

Props

not-found.jsコンポーネントはpropsを受け取りません。

データフェッチ

デフォルトで、not-foundはサーバーコンポーネントです。データのフェッチと表示のためにasyncとマークできます:

app/not-found.tsx
TypeScript
import Link from 'next/link'
import { headers } from 'next/headers'
 
export default async function NotFound() {
  const headersList = await headers()
  const domain = headersList.get('host')
  const data = await getSiteData(domain)
  return (
    <div>
      <h2>Not Found: {data.name}</h2>
      <p>リクエストされたリソースが見つかりませんでした</p>
      <p>
        <Link href="/blog">すべての投稿</Link>を表示
      </p>
    </div>
  )
}

usePathnameのようなクライアントコンポーネントのフックを使用してパスに基づいたコンテンツを表示する必要がある場合は、代わりにクライアント側でデータをフェッチする必要があります。

バージョン履歴

バージョン変更点
v13.3.0ルートのapp/not-foundがグローバルの一致しないURLを処理。
v13.0.0not-foundが導入。