ブログの記事が見つからなかったときトップページに飛ばす方法

WordPressの記事が見つからなかったときにトップページに飛ばす方法について。404 on chrome

WordPressで記事を書いたり作ったりしていると記事が無いことがある。原因は主に二通りで、一つはリンク先のアドレスを間違えてしまったリンクミス、もう一つは過去には存在したけれど削除されてしまったケース。

これらのケースにおいてWordPressではどんな対応を取るべきなだろうか。

WordPressではデフォルトで404.phpというテーマファイルがくっついてくる。
これはHTTP Status Codeが404の場合、つまり記事が見つからなかった場合に表示されるページのテーマだ。
“おっと、失礼しました。”と表示されるのはこの404.phpが表示されるケースだ。

ブログの運営方針にもよるが、今回は記事が見つからなかった場合にトップページに飛ばすことにした。
ここで注意しなければいけないことが二点。
一つはトップページに“飛ばす”ということ。実はテンプレートヒエラルキーなんていうムズカシイ言葉があって、404.phpを削除するだけで”記事が見つからなかった場合にトップページを表示“させることができる。このやり方だと見た目はトップページなんだけれどURLが無くなった記事そのままになってしまう。これはダサい。
注意点の二つ目はHTTP Status Code。HTTPステータスコードというのはブラウザに送る機械的な意味だ。良く目にする404というのは”記事が見つかりませんでした”という意味を確実に的確に機械的にブラウザに伝えるための番号なのだ。
さて実はこのHTTPステータスコードなんだけれど、その確実性ゆえ、検索エンジンにも番号は理解される。つまり記事ID123番のページに検索エンジンのボットが来た、でも記事がないよーというとき、404を返しておけば「このページは削除されたんだね」と解釈してくれる。(厳密にはそうで無い場合もあるのだけれど)
なので極力このステータスコードを返してあげた方が良い。

というわけでfunctinons.phpあたりにこのへんをまとめて書いてみた。

add_action('wp_head', 'redirectToIndex');
function redirectToIndex() {
if (is_404()) {
header('HTTP/1.0 404 Not Found');
header('Location: '.get_bloginfo('url').'/');
}
}

これで404を送りつつLocationを指定してページをジャンプさせることができる。Locationの行を変えることでジャンプ先を任意のページにすることもできる。

 

おわりに
HTTPステータスコードはなんだかなじみが無くてなかなか利用価値がわからなかったりするんだけれど、例えばサーバの負荷を減らすためのキャッシュの制御だったりだとか、一時的なメンテナンスを通知したりだとか、そういった用途に使える。
とくにメンテナンス通知に使われる503は日時指定もできて何時何分ごろには復旧しますよー、なんてこともできたりする。
検索エンジンにメンテナンス画面がキャッシュされてしまうことも防げたり、これは防げないこともあったり。でも気を遣うに超したことはないよね。

 

というわけで404をリダイレクトでジャンプさせる、でした。

コメントを残す