Webサイトを構築する際、存在しないページにアクセスしたときに表示される「404ページ」は、ユーザー体験や信頼性に大きく影響します。本記事では、Next.jsのSSG(Static Site Generation)とApp Routerの構成を前提に、/src/pages/404.tsx
から/src/app/error/page.tsx
へリダイレクトすることで、カスタマイズされたエラーページを表示する方法を紹介します。
Next.jsでは、SSGでエクスポートされたサイトに404ページを含めるために、pages/404.tsx
の設置が必要です。しかし、UIをApp Router側のページで統一したい場合、以下のようにリダイレクトを実装できます。
1import { useEffect } from 'react';
2import { useRouter } from 'next/router';
3
4export default function Custom404() {
5 const router = useRouter();
6
7 useEffect(() => {
8 router.replace('/error');
9 }, [router]);
10
11 return null;
12}
13
このコードでは、404.tsx
にアクセスされたとき、即座に/error
ページへリダイレクトされます。
リダイレクト先となる/app/error/page.tsx
には、404エラーを表示するための任意のUIを実装します。
1export default function ErrorPage() {
2 return (
3 <div style={{ padding: '2rem', textAlign: 'center' }}>
4 <h1>ページが見つかりません</h1>
5 <p>指定されたURLのページは存在しません。</p>
6 </div>
7 );
8}
9
pages/404.tsx
はSSG時に特別に処理されるため、必ず存在する必要があります。一方、app/
ディレクトリでは、not-found.tsx
が404処理に使われますが、これはビルド時に静的な404ページとして出力されません。そのため、SSGに対応しつつApp Routerのページを使用するためには、今回のようにリダイレクトを利用する方法が有効です。
pages/404.tsx
は必要