WordPressで404エラーを回避したい。リダイレクトする方法
-
毎日が手探りWEBデザイナー、最近は都市伝説YouTubeを見るのにハマっていますおにぎりです。
Google search console(グーグルサーチコンソール)やBeing Webmaster Tools(ビーイングウェブマスターツール)で出ているエラー確認をしたところ、「ページが見つかりません」エラーが…
原因はテストで作成した固定ページや投稿記事をリニューアル後に削除したものを読み込んでいた…というオチでした。404エラーがあるのは良くないし、エラー表示を無くしたい〜!と思ったので以下対応をしました。
https://webcreatetips.com/coding/1352/
404エラーをトップページにリダイレクトさせる方法
function.phpは現状サーバーにあるものを必ずバックアップを取ってからアップロードしてください。
何か表示がおかしくなった時にすぐに元に戻せるので…リスク回避…リスク回避…
// トップページにリダイレクト
add_action( 'template_redirect', 'is404_redirect' );
function is404_redirect() {
if ( is_404() ) {
wp_safe_redirect( home_url( '/' ), 301 );
exit();
}
}
404エラーをトップページではなく固定ページへリダイレクトさせる方法
と言う時にはこちらが有効です。
こちらも以下をfunction.phpに記載することで希望のページへリダイレクトされます。
// 固定ページにリダイレクト
add_action( 'template_redirect', 'is404_redirect' );
function is404_redirect() {
if ( is_404() ) {
wp_safe_redirect( get_permalink( get_page_by_path( '固定ページのスラッグ' ) ), 301 );
exit();
}
}
アップ前に必ず現状サーバーに上がっているfunction.phpのバックアップを取ってくださいね😃
その日のバックアップを取るようにしています。
今日のバックアップは「20230130」フォルダに「function.php」と「index.php」が入っている、という感じでその日にどのファイルを触ったのかわかるようにしています。
すぐ忘れてしまうので😩
何か良いバックアップの取り方ってありますかね〜…
301と302の違いって?
HTTP レスポンスステータスコード
// トップページにリダイレクト
add_action( 'template_redirect', 'is404_redirect' );
function is404_redirect() {
if ( is_404() ) {
wp_safe_redirect( home_url( '/' ), 301 );
exit();
}
}
上記コード内の「wp_safe_redirect」に記載されている数値ですね。
HTTPリクエストが正常に完了したかどうかを示すもので、簡単に言うとロボットへの結果報告とのこと😲
見ようとしていたページがリダイレクトだよという結果報告のために使用するステータスコードが主に301リダイレクトと302リダイレクトということです。
301 Moved Permanently
リクエストされたリソースのURLが永遠に変更されたことを示します。レスポンスで新しいURLが与えられます。
302 Found
このレスポンスコードは、リクエストされたリソースのURIが一時的に変更されたことを示します。URIは将来、さらに変更される可能性があります。従って、クライアントは将来のリクエストでも同じURIを使用するべきです。
301リダイレクトは「旧URLは消滅してこの先は新URLで稼働していきます」と言う宣言で、
302リダイレクトは「今だけリダイレクトしているだけで、また旧URLで復活して稼働していきます」という宣言です。
今回はテストページで作成しただけでこの先一生使わないURLだったので、301で記載しました!
「URLはWeb上の住所」「URNはweb側で認識されている名前」です。URNは一般ユーザーの目に触れることはほとんどないのでここでの詳細は省きます。
簡単にいうと、「URI」とは「URL」と「URN」の総称です。ん〜ややこしい。
URI=URL、URI=URNどちらのことも指していると考えていたら良いと思います。
スペル間違いじゃないってことですね☀️
これでまた引っかかることが出てきたらノートにまとめます。
URI=Uniform Resource Identifier
URL=Uniform Resource Locator
URN=Uniform Resource Name
リダイレクトではなく404ページを作る
<?php get_header(); ?>
<main>
<section>
<header>
<h1>ページが見つかりませんよ。</h1>
</header>
<!-- .page-header -->
<div>残念ながらお探しのページは無くなりました。</div>
<!-- .page-content -->
</section>
<!-- .error-404 -->
</main>
<!-- #main -->
<?php get_footer(); ?>
404.phpで保存してindexと同じ階層にアップするだけでOKです。
書き方の正解とかは特にないと思うのでお好きにアレンジして
誘導したいリンク先や、ヘッダーフッターを読み込んでユーザーに行き先を委ねるでも良いと思います。
これに関してはまだ疑問が残っているのでまた次回続きをまとめようと思います!