2026年10月16日
2026年10月16日
WordPressの404ページをカスタマイズする入門|テンプレートの仕組みと載せるべき内容
WordPress の404ページは、クラシックテーマなら子テーマに 404.php を、ブロックテーマならサイトエディターで「404」テンプレートを用意するとカスタマイズできます。この記事では、404ページがどのファイルから表示されるかという仕組みから、載せると役に立つ内容、クラシックテーマとブロックテーマそれぞれの作り方、404 のステータスコードを保ったまま公開する確認方法までを、初めての人向けに説明します。
404ページとは何か
404 は、サーバーが「そのアドレスのページは見つからない」と返すステータスコードです。記事を削除した、URL(パーマリンク)を変えた、リンク元が URL を打ち間違えた、といった理由で表示されます。
404ページが出ること自体は異常ではありません。どのサイトにも、削除したページや誤ったリンクは発生します。大切なのは、迷い込んだ訪問者が次の行動を選べるページにしておくことです。テーマ標準の404ページは「見つかりませんでした」と検索窓だけ、ということも多く、ここを整えるだけで離脱を減らせる可能性があります。
どのファイルが表示されるのか
WordPress は「テンプレート階層」という決まりに従って、表示に使うファイルを選びます。ページが見つからないとき、使われるのは次のファイルです。
- クラシックテーマ: テーマフォルダの
404.php。無ければindex.phpが使われます。 - ブロックテーマ:
templates/404.html。サイトエディターで編集した内容は、ファイルではなくデータベースに保存され、そちらが優先されます。
使っているテーマがどちらか分からないときは、管理画面の「外観」メニューを見ます。「エディター」があればブロックテーマ、「カスタマイズ」と「ウィジェット」が中心ならクラシックテーマです。
404ページに載せると役立つ内容
訪問者が404ページで知りたいのは「なぜ見つからないのか」と「次にどこへ行けばいいか」です。次の要素を、上から順に置くと伝わりやすくなります。
- 見つからなかったことを伝える見出しと短い説明: 「URL が変わったか、削除された可能性があります」と、考えられる理由を1〜2文で。訪問者を責めるような言い方は避けます。
- サイト内検索: 探していた情報に自分でたどり着けるようにします。
- 主要なページへの導線: カテゴリー一覧、よく読まれている記事、最近の記事など。
- トップページへのリンクと、必要ならお問い合わせページへのリンク。
イラストや遊び心のある文言を入れるのも自由ですが、検索窓や導線が画面の下に押し出されないよう、スマートフォンでの見え方を確認してください。
クラシックテーマで 404.php を作る
テーマのファイルを直接編集すると、テーマの更新で上書きされて消えてしまいます。先に子テーマを用意し、その中に 404.php を作ります。親テーマに 404.php がある場合は、それをコピーして子テーマ側で編集すると、デザインの崩れを抑えられます。作業前にはバックアップを取り、できればステージング環境で試してください。
新しく作る場合の例です。子テーマのフォルダに 404.php として保存します。
<?php
/**
* 404 テンプレート(子テーマ)
*/
get_header();
?>
<main id="primary" class="site-main error-404">
<h1><?php esc_html_e( 'お探しのページが見つかりませんでした', 'my-child-theme' ); ?></h1>
<p><?php esc_html_e( 'URL が変更されたか、ページが削除された可能性があります。キーワードで検索するか、下の一覧からお探しください。', 'my-child-theme' ); ?></p>
<?php get_search_form(); ?>
<h2><?php esc_html_e( '最近の記事', 'my-child-theme' ); ?></h2>
<ul>
<?php
$recent = new WP_Query(
array(
'posts_per_page' => 5,
'post_status' => 'publish',
'ignore_sticky_posts' => true,
'no_found_rows' => true,
)
);
while ( $recent->have_posts() ) :
$recent->the_post();
?>
<li><a href="<?php echo esc_url( get_permalink() ); ?>"><?php echo esc_html( get_the_title() ); ?></a></li>
<?php
endwhile;
wp_reset_postdata();
?>
</ul>
<h2><?php esc_html_e( 'カテゴリー', 'my-child-theme' ); ?></h2>
<ul>
<?php wp_list_categories( array( 'title_li' => '' ) ); ?>
</ul>
<p><a href="<?php echo esc_url( home_url( '/' ) ); ?>"><?php esc_html_e( 'トップページへ戻る', 'my-child-theme' ); ?></a></p>
</main>
<?php
get_footer();
コードの要点を説明します。
get_header()とget_footer()で、サイト共通のヘッダーとフッターを読み込みます。これを忘れると、メニューの無いページになります。get_search_form()は、テーマが用意している検索フォームを表示する関数です。- 最近の記事は
WP_Queryで取得し、使い終わったらwp_reset_postdata()で元の状態に戻します。no_found_rowsは、ページ送りに使う総件数の計算を省いて、問い合わせを軽くする指定です。 - URL は
esc_url()、タイトルはesc_html()を通して出力します。表示する値をエスケープするのは、意図しない HTML やスクリプトが混ざるのを防ぐためです。
main 要素の id や class は、親テーマの他のテンプレートに合わせると、既存の CSS がそのまま効きます。
ブロックテーマでは 404 テンプレートを編集する
ブロックテーマでは、コードを書かずにサイトエディターで編集できます。「外観」→「エディター」→「テンプレート」の一覧から「404」を選び、見出し・段落・検索・最新の投稿などのブロックを並べて保存します(2026年10月現在)。画面の表記は WordPress のバージョンによって異なることがあります。テンプレートが一覧に無い場合は、テンプレートの追加画面から「404」を選んで作成できます。
サイトエディターで保存した内容はデータベースに入るため、テーマを更新しても消えません。一方で、ファイルとして管理したい場合や複数サイトに配る場合は、子テーマの templates/404.html にブロックのマークアップを書いて置く方法もあります。サイトエディターで一度編集したテンプレートはデータベース側が優先されるので、ファイルの変更が反映されないときは、エディター上でカスタマイズをリセットしてください。
公開後に確認すること
404ページを作ったら、存在しない URL を開いて表示を確認します。見た目だけでなく、ステータスコードが 404 のままかも確かめてください。
curl -I https://example.com/no-such-page-check/
1行目に 404 と出れば正常です。200 が返っている場合、見た目は404ページでも、検索エンジンには「中身の薄い通常のページ」と扱われることがあり、Google はこれを「ソフト 404」と呼んでいます。
同じ理由で、見つからないページをすべてトップページへ転送する設定もおすすめしません。訪問者は探していたものと違うページに連れて行かれ、検索エンジンからもソフト 404 と判断されることがあります。転送するのは、記事を移動した・URL を変えたなど、移転先がはっきりしている場合だけにします。
公開後は、Google Search Console の「ページ」レポートで、見つからなかった URL を定期的に確認すると、リンク切れや、転送を設定すべき古い URL が見つかります。
まとめ
- 404ページはテンプレート階層で決まり、クラシックテーマは
404.php、ブロックテーマは 404 テンプレートが使われる - クラシックテーマでは子テーマに
404.phpを作り、出力はエスケープする - ブロックテーマではサイトエディターの 404 テンプレートを編集する
- 載せる内容は、理由の説明・サイト内検索・主要ページへの導線・トップへのリンク
- ステータスコードが 404 のままか確認し、すべてをトップへ転送する設定は避ける