2012年06月07日 category : WordPress tags :

自作テーマで404.phpを使わずにNOT FOUNDを表示する方法

このエントリーをはてなブックマークに追加

not-found

WordPress自作テーマで404.phpを設置せずにNOT FOUND(404)画面を表示させる方法です。

Webブラウザにてサイトを閲覧しているとNOT FOUNDと表示されることがあります。HTTPステータスコード404:NOT FOUND(未検出・見つかりません)ですが、これはアクセスされたファイルが見つからない場合に表示されるエラーコードです。 

WordPress自作テーマにNOT FOUNDの処理を追加します。

検索結果からアクセスした場合や他サイトに貼ってもらっていたリンクからアクセスした際、すでにその記事が削除されたなどの理由で該当記事にアクセス出来ない場合に発生します。

提供テーマを利用している場合は問題ないと思いますが、自作テーマでWordPressを運用している場合は対策が必要です。

01 . どんな場合に404:NOT FOUNDになるのか

記事を削除したという理由の他に、サーバの移設時に一時的にリンクができなくなったや、パーマリンク(URL)が変更されたなどの管理者側の理由のほか、閲覧者がアドレスバーに直接URLを入力した際のタイプミスなどの理由が考えられます。

そのほかにも他サイトでリンクを貼ってもらった際にアドレスに誤りがある場合もあるでしょう。このようにサイト管理者だけがリンク切れに気をつけていれば防げる問題でもなさそうです。

02 . どのような対策がよいのか

ファイルが見つからなかった場合そのままTOPページへ転送しTOPページを表示しているサイトがありますが、これはサイト運営者だけが「ファイルがない場合はTOPページを表示する」というルールを知っているだけであって、何も知らない閲覧者はどこかに記事があるのかと表示されたページ内を探すことになります。

これはあまり宜しくない対策のように思います。いくら探したところでもうそのファイルは削除されて、どこにも無いのです(アドレスの打ち間違いという可能性は残りますが)。ないと判断した場合、閲覧者はそのままページから離脱してしまいます。

同じTOPページを表示するにしても、ファイルが見つからないということを閲覧者に伝えた上で、TOPページへリンクを貼るなどし類似記事を探してもらうなど動線を引くのが運営者にとっても閲覧者にとっても意義のある対策ではないでしょうか。

03 . 対策その1:404.phpが未設置の場合

WordPressではHTTPステータスコード404を受けた場合、404.phpを呼び出します。この404.php内にNOT FOUND時の処理を書いてサーバにUPすればOKです。自作テーマでこの404.phpを用意していない場合、index.phpが表示されますが白紙の状態で表示されます。

not-found-view

404.phpがサーバ上にあればindex.phpは表示されずに404.phpが表示されます。

04 . 対策その2:条件分岐で処理する

404.phpを設置するのもひとつの手段ですが、自作テーマで運営している以上管理するファイルは少ないに越したことはありません。対策その2ではPHPの条件分岐を使って404.phpを設置せずにNOT FOUNDを捕捉する手順を紹介します。私はこちらで対応しました:)

index.php内にて条件分岐と呼ばれる処理を使いその後の処理を分岐させます。記事を表示している箇所に以下の処理を追加します。


<div id="main">
<?php if (have_posts()) : ?>
   ①記事があった場合の処理:記事を表示する
<?php else : ?>
   ②記事がなかった場合の処理:NOT FOUND画面を表示する
<?php endif; ?>

<?php if (have_posts()) : ?>の部分の意味は「もし記事があったら・・・」という意味です。記事があった場合そのまま次の処理に移行しますので「①記事があった場合の処理」が実行されます。

次に<?php else : ?>の部分ですが、上のもし(if)が「成立しなかったら・・・」という意味です。この場合ですと「もし記事がなかったら」という意味になりますので記事(ファイル)がなかったら次の処理に以降し「②記事がなかった場合の処理」が実行されます。

最後の<?php endif; ?>は、もしのEND。つまりここで分岐の処理が終わりですという意味です。分岐処理を使う場合はこの3つが最小単位の基本セットとなります。


 <?php if (分岐条件) : ?>
 <?php else : ?>
 <?php endif; ?>

つまり、「②記事がなかった場合の処理」の部分にNOT FOUND時の処理を書くことによって404.phpファイルを設置することなく、NOT FOUND時の処理を表示することができます。

05 . 動作確認の手順

リンク切れの状態を作るわけですが、記事を投稿して誰かにリンクしてもらって記事を削除して…という手順を踏まなくても動作確認は可能です。記事がない状態を作ればいいのですから記事のURL形式を保って適当なURLにアクセスすればOKです。

私のサイトを例にすると「WordPressにファビコンを設置する方法。iPhone同時対応!」の記事のURLアドレスはhttp://05step.com/2012/06/05/wordpress-favicon/です。

http://05step.com/2012/06/05/wordpress-favicon/

このページの日付の部分を/2012/07/07/のように変更してアクセスするとそのような記事は存在しないのでリンク切れの状態を発生させることができます。

http://05step.com/2012/07/07/wordpress-favicon/

そもそもエラーページなので表示されない状態が望ましいのですが、「NOT FOUND(未検出)」と無機質に表示されるよりは、ちょっとはいいような気がします。

HOME >>  WordPress > 自作テーマで404.phpを使わずにNOT FOUNDを表示する方法