2026年6月25日

2026年6月25日

WordPressのテーマで404ページをオリジナルデザインにする手順

404ページを自分好みのデザインにするには、クラシックテーマなら子テーマに 404.php を作り、ブロックテーマならサイトエディターで「404」テンプレートを編集します。どちらの場合も、デザインを変えるだけでなく「HTTPステータスが404のまま返っているか」を確認することが大切です。この記事では、両方の作り方と、迷い込んだ訪問者をサイト内に戻すための構成、公開後の確認方法を解説します。

404ページに載せたい要素

見た目を作り込む前に、何を置くかを決めておきます。404ページに来た人は、リンク切れや入力ミスで目的のページにたどり着けなかった人です。デザインの目的は「お詫び」よりも「次に進む道を示す」ことにあります。

  • 短い説明文: ページが見つからないこと、URLが変わったか削除された可能性があることを簡潔に伝えます。
  • サイト内検索: 探していた内容をキーワードで探し直せるようにします。
  • 新着記事や主要カテゴリーへのリンク: 何を探すか決まっていない人の行き先になります。
  • トップページへのリンク: ヘッダーのロゴからも戻れますが、本文中にも明示しておくと迷いません。

逆に、大きな画像や重いアニメーションを置くと、表示が遅くなるうえに肝心の検索欄が画面の下に押し出されます。デザインは、ブランドの雰囲気が伝わる程度にとどめるのがおすすめです。

クラシックテーマ:子テーマに 404.php を作る

テンプレートの仕組み

クラシックテーマでは、存在しないURLにアクセスされると、WordPress はテンプレート階層に従って 404.php を探し、無ければ index.php を使います。子テーマに 404.php を置くと、親テーマのものより優先されます。親テーマを直接編集すると更新で上書きされるので、子テーマで作業してください。

親テーマにすでに 404.php があるなら、それを子テーマにコピーして編集するのが近道です。無い場合は、親テーマの index.php をコピーしてループ部分を書き換えると、ヘッダー・フッターや本文を囲む要素のクラス名がテーマの他のページとそろい、レイアウトが崩れにくくなります。

404.php の例

<?php
/**
 * 404ページ(子テーマ)
 */
get_header();
?>
<main id="primary" class="site-main error-404">
	<section class="error-404__inner">
		<h1 class="error-404__title">お探しのページが見つかりませんでした</h1>
		<p class="error-404__lead">URLが変わったか、ページが削除された可能性があります。キーワードで検索するか、下の一覧からお探しください。</p>

		<?php get_search_form(); ?>

		<h2 class="error-404__heading">新着記事</h2>
		<ul class="error-404__list">
			<?php
			$recent = new WP_Query( array(
				'posts_per_page'      => 5,
				'ignore_sticky_posts' => true,
				'no_found_rows'       => true,
			) );
			while ( $recent->have_posts() ) :
				$recent->the_post();
				?>
				<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
				<?php
			endwhile;
			wp_reset_postdata();
			?>
		</ul>

		<h2 class="error-404__heading">カテゴリー</h2>
		<ul class="error-404__list">
			<?php
			wp_list_categories( array(
				'title_li' => '',
				'orderby'  => 'count',
				'order'    => 'DESC',
				'number'   => 10,
			) );
			?>
		</ul>

		<p><a class="error-404__home" href="<?php echo esc_url( home_url( '/' ) ); ?>">トップページへ戻る</a></p>
	</section>
</main>
<?php
get_footer();

コードの要点を説明します。

  • 新着記事は WP_Query で取得しています。'no_found_rows' => true は、ページ送りを使わないときに総件数の計算を省く指定で、余計なクエリを減らせます。ループの後は wp_reset_postdata() で投稿データを元に戻します。
  • wp_list_categories() の 'title_li' => '' は、一覧の先頭に付く「カテゴリー」という見出し用の li を出さない指定です。外側の ul はテンプレート側で書いています。
  • 検索フォームは get_search_form() で出しています。テーマに searchform.php があればそのデザインが使われるので、サイト全体で見た目がそろいます。

main 要素の id やクラス名は例です。親テーマの他のテンプレートで使われている名前に合わせてください。

見た目を整える

.error-404__inner {
	max-width: 720px;
	margin: 0 auto;
	padding: 48px 16px;
	text-align: center;
}
.error-404__title {
	font-size: 28px;
	margin-bottom: 16px;
}
.error-404__list {
	display: inline-block;
	margin: 0 0 32px;
	text-align: left;
}

CSSは子テーマの style.css に追加します。404ページ専用の装飾は、上のようにクラス名を付けた要素に限定すると、他のページに影響しません。WordPress は404ページの body に error404 クラスを付けるので、body.error404 を起点に指定する方法もあります。

ブロックテーマ:「404」テンプレートを編集する

サイトエディターで編集する

Twenty Twenty-Five などのブロックテーマには、404用のテンプレートが用意されていることが多く、コードを書かずに編集できます。

  1. 「外観」→「エディター」→「テンプレート」を開き、「404」(表記は「ページ: 404」などテーマにより異なります)を選びます。
  2. 見出しや段落を書き換え、「検索」ブロック、「最新の投稿」ブロック、「カテゴリー一覧」ブロックなどを追加します。ブロック名はWordPressのバージョンによって変わることがあります(2026年10月現在)。
  3. グループブロックで全体を囲み、背景色や余白を設定すると、他のページと区別したデザインにできます。
  4. 保存します。

サイトエディターで保存した内容は、テーマのファイルではなくデータベースに保存されます。テーマを切り替えると引き継がれないため、残しておきたい場合はテンプレートのコードをコピーして控えておくか、次の方法で子テーマのファイルにしておきます。

子テーマのファイルとして持つ

テンプレートをファイルで管理したい場合は、子テーマの templates フォルダに 404.html を置きます。

<!-- wp:template-part {"slug":"header","tagName":"header"} /-->

<!-- wp:group {"tagName":"main","layout":{"type":"constrained"}} -->
<main class="wp-block-group">
	<!-- wp:heading {"level":1} -->
	<h1 class="wp-block-heading">お探しのページが見つかりませんでした</h1>
	<!-- /wp:heading -->

	<!-- wp:paragraph -->
	<p>URLが変わったか、ページが削除された可能性があります。キーワードで検索するか、新着記事からお探しください。</p>
	<!-- /wp:paragraph -->

	<!-- wp:search {"label":"サイト内検索","buttonText":"検索"} /-->

	<!-- wp:heading -->
	<h2 class="wp-block-heading">新着記事</h2>
	<!-- /wp:heading -->

	<!-- wp:latest-posts {"postsToShow":5} /-->
</main>
<!-- /wp:group -->

<!-- wp:template-part {"slug":"footer","tagName":"footer"} /-->

テンプレートパーツの slug(header・footer)は親テーマによって異なることがあるので、親テーマの parts フォルダにあるファイル名に合わせます。

ここでつまずきやすいのが、サイトエディターでの変更との優先順位です。一度サイトエディターで404テンプレートを保存していると、データベース側の内容がファイルより優先され、404.html を置いても表示が変わりません。その場合は、サイトエディターのテンプレート一覧で404テンプレートのカスタマイズをリセット(クリア)すると、ファイルの内容が使われるようになります。リセットするとサイトエディターでの変更は失われるので、必要な部分は事前にコピーしておいてください。

公開後に確認すること

ステータスコードが404のままか

見た目が整ったら、存在しないURL(例: https://example.com/no-such-page/)を開き、ブラウザの開発者ツールの「ネットワーク」タブで、そのページのステータスが 404 になっているかを確認します。コマンドが使える環境なら、curl -I で応答ヘッダーを見る方法もあります。

デザインした404ページが「200」で返っていると、検索エンジンは中身の無いページを通常のページとして扱おうとし、ソフト404として報告されることがあります。また、すべての404をトップページへリダイレクトするプラグインや設定も、同じ理由でおすすめしません。本当に移転したページだけを個別に301リダイレクトし、それ以外は404ページで案内するのが基本です。

その他の確認

  • キャッシュ: キャッシュプラグインやCDNが古い404ページを保持していることがあります。変更後はキャッシュを削除し、ログアウト状態でも確認します。
  • スマートフォン表示: 検索欄が画面の上のほうに見えているかを確かめます。
  • エラー: 404.php の編集後に画面が真っ白になった場合は、WP_DEBUG_LOG を有効にして wp-content/debug.log を確認し、バックアップしておいたファイルに戻します。

まとめ

  • クラシックテーマは子テーマに 404.php を作り、ブロックテーマはサイトエディターの「404」テンプレートか子テーマの templates/404.html を編集します。
  • 404ページには説明文・サイト内検索・新着記事やカテゴリー・トップへのリンクを置き、次の行き先を示します。
  • ブロックテーマでは、サイトエディターで保存した内容がファイルより優先される点に注意します。
  • 公開後は、ステータスコードが404のまま返っているかを確認し、すべてをトップへリダイレクトする運用は避けます。

お気軽にご相談ください

お見積りへ お問い合わせへ
▲