[PHP]ステータスコード301を使用した恒久的リダイレクトの実装とその重要性

こんにちは!

ウェブサイトを運営していると、こんなシーンに出くわすことってありませんか?

「URLを変更したいけど、アクセスが減ったらイヤだな…」
「ドメインを引っ越したいけど、SEO的に大丈夫かな…?」

そんなときに出番なのが、ステータスコード301による「恒久的リダイレクト」です。

今日は、PHPを使ってこのリダイレクトをどう実装するのか、そしてなぜそれがそんなに大事なのかを、わかりやすくご紹介したいと思います!

そんな私ももともとこのブログをサブドメインで運営していました。メインのドメインは、プラットフォーム的に使って、そこにブログもぶら下がっているみたいなイメージで。ただそんなことしている暇がないということに気づき、メインドメインでブログ運営をやり直し始めました


301リダイレクトってなに?

まずはざっくり定義から。

「301リダイレクト」とは、「このページはもう引っ越したので、今後は新しい住所にアクセスしてね」と伝えるためのしくみです。

HTTPのステータスコードでいうと「301 Moved Permanently」ってやつで、ざっくりいうと「恒久的にお引越ししました」という意味です。


PHPでの301リダイレクト実装方法

では早速、PHPでの実装方法を見てみましょう!

<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: https://blog.tomato-note.com/");
exit();
?>

はい、たったこれだけです。シンプルですね。

でも、油断は禁物。ポイントを押さえておかないと「あれ?リダイレクトされない…」なんてことにもなりかねません。

解説付きで見てみましょう

  • header("HTTP/1.1 301 Moved Permanently");
     → 「このページは永遠に引っ越しましたよ」とブラウザと検索エンジンに伝えます。
  • header("Location: https://blog.tomato-note.com/");
     → 新しいおうちの住所を教えます。ここは実際のリダイレクト先URLに変更してくださいね
  • exit();
     → おしゃべりをやめて(=スクリプトの実行を終了)、無駄な処理を止めてくれます。

注意点も要チェック!

  • ヘッダーを送る前に、echoやHTMLタグなど、何も出力してはいけません。すでに出力が始まっていると、header()は動かないんです。
  • URLの末尾に「/」をつけるかどうかでも挙動が変わることがあるので、リダイレクト先はしっかり確認しておきましょう。

301リダイレクトのメリット

「ただの引っ越しでしょ?」とあなどるなかれ。301リダイレクト、実はSEOの面でも超重要です。

🔍 検索エンジンに優しい

Google先生はとても賢いので、301リダイレクトを使うと「このページは移転したのね」と理解してくれます。そして、旧URLが持っていた評価や検索順位を、新しいURLに引き継いでくれるんです。ありがたや〜。

🔗 バックリンクの力も無駄にしない

せっかく誰かが貼ってくれたリンク(バックリンク)が、URL変更で無効になったら悲しいですよね。でも301リダイレクトを使えば、そのリンクの効果も新URLに引き継がれます

👀 ユーザーにも親切

古いURLにアクセスしたときに、いきなり「404 Not Found」が出たら、ちょっと冷たく感じちゃいますよね。でも301リダイレクトがあれば、自動的に新しいページに案内されるので、ユーザーも安心です。


こんなときに使おう!301リダイレクト活用シーン

  • URL構造を変更したとき
     → /about/about-us に変えたなど。
  • ドメインを移行したとき
     → example.comnew-example.com にした場合。
  • 複数ページを統合したとき
     → いくつかの古い記事を1つのページにまとめたときなど。
  • HTTPからHTTPSへの移行
     → セキュリティ強化のためにHTTPSを導入したときも、301で安全に誘導できます。

ありがちな失敗とその対策

❌ 一時的なリダイレクトを使ってしまう

「とりあえず302でいいか」と思ってると、検索エンジンは「この移動は一時的なんだな」と判断しちゃいます。本当に恒久的なら、301を選ぶのが正解です。

❌ リダイレクトループに注意

たとえば A → B にリダイレクトしたと思ったら、B → A にもリダイレクトを設定していた…なんてことになると、無限ループが発生します。これは検索エンジンにもユーザーにもかなり不親切なので、しっかりチェックを。


旧サイト全体をリダイレクトする場合

「ブログの全ページをそのまま新しいドメインに移したい!」
そんなときは、リクエストURIを拾って、そっくりそのままリダイレクトしちゃいましょう。

<?php
// 現在のリクエストパスを取得
$requestUri = $_SERVER['REQUEST_URI'];

// 同じパスで新ドメインにリダイレクト
$newUrl = 'https://new-domain.com' . $requestUri;

header("HTTP/1.1 301 Moved Permanently");
header("Location: " . $newUrl);
exit();
?>

これなら、例えば旧サイトの /blog/post1 にアクセスしても、自動で新サイトの /blog/post1 に飛ばしてくれます。

めっちゃ便利!


というわけで…

301リダイレクトは、ただの「URLの転送」以上に重要な意味を持っています。

  • SEO的にも良い
  • ユーザー体験も守れる
  • サイトの信頼性もアップ

と、メリットだらけなんです。

PHPでの実装は数行でできちゃうけど、設定ミスには要注意。何事も「簡単そうなことほど落とし穴がある」ってやつですね。

ウェブサイトのリニューアルや構成変更をする際は、今回紹介したポイントを参考に、301リダイレクトをうまく活用してみてください!

それではまた〜!