Webリダイレクトの完全ガイド|301と302の違いから実装方法まで徹底解説

Web
スポンサーリンク
  1. リダイレクトって何?なぜ必要なの?
    1. 身近な例で理解しよう
    2. リダイレクトが必要になる場面
  2. リダイレクトの主な種類
    1. 301リダイレクト(恒久的な移転)
    2. 302リダイレクト(一時的な移転)
    3. 307リダイレクト(一時的な移転・厳密版)
    4. 308リダイレクト(恒久的な移転・厳密版)
    5. メタリフレッシュ(HTML)
    6. JavaScriptリダイレクト
  3. 301と302の使い分け【最重要】
    1. 判断基準のフローチャート
    2. 具体例で理解しよう
    3. よくある間違い
  4. リダイレクトの実装方法【サーバー別】
    1. Apacheサーバー(.htaccess)
    2. Nginxサーバー
    3. PHP(プログラムでの実装)
    4. JavaScript(クライアントサイド)
    5. HTMLのメタリフレッシュ
  5. リダイレクトチェーンとその問題
    1. リダイレクトチェーンとは
    2. 何が問題なのか
    3. 解決方法
  6. リダイレクトの確認方法
    1. ブラウザの開発者ツールで確認
    2. オンラインツールで確認
    3. コマンドラインで確認(curl)
  7. SEOに配慮したリダイレクト設定
    1. 301リダイレクトのSEO効果
    2. リダイレクトマップの作成
    3. 関連性のあるページへリダイレクト
    4. Google Search Consoleで監視
    5. サイトマップの更新
  8. よくあるトラブルと解決方法
    1. 問題1:リダイレクトループが発生
    2. 問題2:リダイレクトが動作しない
    3. 問題3:HTTPSリダイレクトで無限ループ
    4. 問題4:一部のページだけリダイレクトされない
    5. 問題5:モバイルでだけリダイレクトされない
  9. リダイレクトのベストプラクティス
    1. 基本原則
    2. サイト移転時のチェックリスト
    3. パフォーマンスへの配慮
  10. まとめ:正しいリダイレクトでSEOとUXを両立しよう

リダイレクトって何?なぜ必要なの?

Webサイトを運営していると、「リダイレクト」という言葉を耳にすることがありますよね。

リダイレクト(redirect)とは、ユーザーがアクセスしたURLから、別のURLへ自動的に転送する仕組みのことです。

身近な例で理解しよう

分かりやすい例を挙げてみましょう。

引っ越しの転送サービスに似ている

郵便物の転送届を出すと、旧住所に届いた手紙が新住所に自動的に転送されますよね。
リダイレクトも、これと同じような仕組みなんです。

ユーザーが訪問:https://old-site.com
  ↓
自動転送
  ↓
実際に表示:https://new-site.com

ユーザーは旧サイトのURLをクリックしても、自動的に新サイトに連れて行かれます。

リダイレクトが必要になる場面

実際にどんな時に使われるのでしょうか?

ドメイン変更

  • 会社名変更でドメインが変わった
  • ブランドリニューアルで新しいドメインにした
  • 例:old-company.comnew-company.com

サイト構造の変更

  • ページのURLを整理した
  • カテゴリ構造を見直した
  • 例:/blog/2024/01/article.html/articles/article-name/

HTTPSへの移行

  • セキュリティ強化のためHTTPS化
  • 例:http://example.comhttps://example.com

重複コンテンツの統合

  • 似た内容のページを1つにまとめた
  • 例:/about-us//company//about/ に統合

モバイル対応

  • スマホ専用サイトへ誘導
  • 例:PCからアクセス → PC版表示、スマホからアクセス → モバイル版へリダイレクト

一時的なメンテナンス

  • サイト工事中に別のページを表示
  • 例:通常ページ → メンテナンスページ

リダイレクトを正しく設定しないと、404エラー(ページが見つかりません)が出て、ユーザーが離脱してしまいます。


リダイレクトの主な種類

リダイレクトにはいくつかの種類があり、それぞれ目的が異なります。

301リダイレクト(恒久的な移転)

特徴:

  • 「このページは永久に別の場所に移動しました」という意味
  • SEO評価が新しいURLに引き継がれる
  • ブラウザやGoogleがこの情報を記憶する

使うべき場面:

  • ドメインを変更した時
  • ページURLを恒久的に変更した時
  • 重複コンテンツを統合した時
  • HTTPからHTTPSへの移行

HTTPステータスコード:

301 Moved Permanently

SEOへの影響:

  • 旧URLの評価(リンクジュース)が新URLに引き継がれる
  • Googleは90~99%の評価を引き継ぐとされている
  • インデックスは新URLに更新される

302リダイレクト(一時的な移転)

特徴:

  • 「このページは一時的に別の場所にあります」という意味
  • SEO評価は基本的に旧URLに残る
  • 元のURLに戻る予定がある場合に使う

使うべき場面:

  • 一時的なキャンペーンページへの誘導
  • A/Bテスト中の転送
  • 短期間のメンテナンス
  • 季節限定のページ切り替え

HTTPステータスコード:

302 Found

SEOへの影響:

  • 評価は旧URLに残る
  • 新URLは一時的なものとして扱われる
  • 長期間302を使い続けると、Googleが301として扱う場合がある

307リダイレクト(一時的な移転・厳密版)

特徴:

  • 302の改良版
  • HTTPメソッド(GET/POSTなど)が保持される
  • より厳密な一時リダイレクト

HTTPステータスコード:

307 Temporary Redirect

使うべき場面:

  • POSTリクエストを別のURLに転送する必要がある時
  • HTTPメソッドを変更してはいけない場合

308リダイレクト(恒久的な移転・厳密版)

特徴:

  • 301の改良版
  • HTTPメソッドが保持される
  • 新しい標準

HTTPステータスコード:

308 Permanent Redirect

使うべき場面:

  • 301と同じだが、よりモダンな実装

メタリフレッシュ(HTML)

特徴:

  • HTMLのmetaタグで実装
  • 数秒後に転送する設定が可能
  • サーバー設定が変更できない時の代替手段

使うべき場面:

  • サーバー設定にアクセスできない時
  • 「5秒後に転送します」など、ユーザーに通知したい時

注意点:

  • SEO効果は限定的
  • 301や302が使えるなら、そちらを優先すべき

JavaScriptリダイレクト

特徴:

  • JavaScriptで実装
  • ブラウザでJavaScriptが有効な場合のみ動作

使うべき場面:

  • クライアント側の条件で転送先を変える時
  • サーバー設定を変更できない時の代替手段

注意点:

  • Googleは読み取れるが、推奨されない
  • JavaScriptがオフだと動作しない
  • 301や302が使えるなら、そちらを優先

301と302の使い分け【最重要】

初心者の方が最も迷うのが、この2つの使い分けです。

判断基準のフローチャート

質問1:元のURLに戻る予定はありますか?

YES:302を使う
NO:次の質問へ

質問2:SEO評価を新しいURLに引き継ぎたいですか?

YES:301を使う
NO:302を使う

具体例で理解しよう

301を使うべきケース:

✅ ドメイン変更
   old-shop.com → new-shop.com

✅ URL構造の変更
   /product.php?id=123 → /products/product-name/

✅ HTTPSへの移行
   http://example.com → https://example.com

✅ 重複ページの統合
   /about-us/ と /company/ → /about/

302を使うべきケース:

✅ 一時的なキャンペーン
   /top/ → /summer-sale/(夏の間だけ)

✅ メンテナンス中
   /service/ → /maintenance/(工事中のみ)

✅ 地域別の振り分け
   /top/ → /jp/(日本からのアクセス時)

✅ A/Bテスト
   /landing/ → /landing-v2/(テスト期間中)

よくある間違い

間違い1:恒久的な移転なのに302を使う

❌ ダメな例:
   ドメインを変更したのに302リダイレクト

⚠️ 結果:
   - SEO評価が引き継がれない
   - 検索結果に旧URLが残り続ける
   - トラフィックが減少する可能性

間違い2:一時的なのに301を使う

❌ ダメな例:
   夏のキャンペーンページへ301リダイレクト

⚠️ 結果:
   - Googleが新URLをインデックス
   - 元のページに戻してもSEO評価が分散
   - ブラウザがキャッシュして戻せない

重要なポイント:
迷ったら、「元に戻す予定があるか」で判断しましょう。
戻す予定がなければ301、戻す可能性があれば302です。


リダイレクトの実装方法【サーバー別】

それでは、実際にリダイレクトを設定してみましょう。
サーバーの種類によって方法が異なります。

Apacheサーバー(.htaccess)

最も一般的な実装方法です。

基本的な301リダイレクト:

# 単一ページのリダイレクト
Redirect 301 /old-page.html https://example.com/new-page.html

# または、RewriteEngineを使った方法
RewriteEngine On
RewriteRule ^old-page\.html$ https://example.com/new-page.html [R=301,L]

HTTPからHTTPSへのリダイレクト:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

すべてのHTTPアクセスを自動的にHTTPSに転送します。

wwwあり・なしの統一:

# wwwなしに統一
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]

# wwwありに統一
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

ドメイン全体のリダイレクト:

# 旧ドメインから新ドメインへ
RewriteEngine On
RewriteCond %{HTTP_HOST} ^old-domain\.com [NC,OR]
RewriteCond %{HTTP_HOST} ^www\.old-domain\.com [NC]
RewriteRule ^(.*)$ https://new-domain.com/$1 [R=301,L]

特定のディレクトリ配下すべて:

# /blog/ 以下をすべて新サイトへ
RedirectMatch 301 ^/blog/(.*)$ https://new-blog.com/$1

Nginxサーバー

Nginxでの設定方法です。

基本的な301リダイレクト:

# 単一ページのリダイレクト
location = /old-page.html {
    return 301 https://example.com/new-page.html;
}

HTTPからHTTPSへのリダイレクト:

server {
    listen 80;
    server_name example.com;
    return 301 https://$server_name$request_uri;
}

wwwあり・なしの統一:

# wwwなしに統一
server {
    listen 80;
    server_name www.example.com;
    return 301 https://example.com$request_uri;
}

# wwwありに統一
server {
    listen 80;
    server_name example.com;
    return 301 https://www.example.com$request_uri;
}

ドメイン全体のリダイレクト:

server {
    listen 80;
    server_name old-domain.com www.old-domain.com;
    return 301 https://new-domain.com$request_uri;
}

正規表現を使ったリダイレクト:

# /blog/2024/01/article.html → /articles/article/
location ~ ^/blog/[0-9]{4}/[0-9]{2}/(.+)\.html$ {
    return 301 /articles/$1/;
}

PHP(プログラムでの実装)

PHPファイル内でのリダイレクト実装です。

基本的な301リダイレクト:

<?php
// 301リダイレクト
header("HTTP/1.1 301 Moved Permanently");
header("Location: https://example.com/new-page.html");
exit();
?>

302リダイレクト:

<?php
// 302リダイレクト(デフォルト)
header("Location: https://example.com/temporary-page.html");
exit();
?>

条件付きリダイレクト:

<?php
// ログインしていない場合はログインページへ
if (!isset($_SESSION['user_id'])) {
    header("Location: /login.php");
    exit();
}

// スマホの場合はモバイル版へ
if (preg_match('/iPhone|Android/', $_SERVER['HTTP_USER_AGENT'])) {
    header("Location: /mobile/");
    exit();
}
?>

注意点:

  • header()の前に出力があるとエラーになる
  • 必ずexit()またはdie()で処理を終了する

JavaScript(クライアントサイド)

JavaScriptでのリダイレクト実装です。

即座にリダイレクト:

// 現在のページを置き換える
window.location.replace("https://example.com/new-page.html");

// または
window.location.href = "https://example.com/new-page.html";

数秒後にリダイレクト:

// 3秒後にリダイレクト
setTimeout(function() {
    window.location.href = "https://example.com/new-page.html";
}, 3000);

条件付きリダイレクト:

// 画面幅が768px以下ならモバイル版へ
if (window.innerWidth < 768) {
    window.location.href = "/mobile/";
}

// 特定のURLパラメータがあれば転送
const urlParams = new URLSearchParams(window.location.search);
if (urlParams.has('redirect')) {
    window.location.href = urlParams.get('redirect');
}

注意点:

  • SEO効果は限定的
  • JavaScriptが無効だと動作しない
  • サーバー側のリダイレクトが使えるなら、そちらを優先すべき

HTMLのメタリフレッシュ

HTML内での実装方法です。

即座にリダイレクト:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta http-equiv="refresh" content="0; url=https://example.com/new-page.html">
    <title>ページが移動しました</title>
</head>
<body>
    <p>ページが移動しました。自動的に転送されない場合は<a href="https://example.com/new-page.html">こちら</a>をクリックしてください。</p>
</body>
</html>

5秒後にリダイレクト:

<meta http-equiv="refresh" content="5; url=https://example.com/new-page.html">

content="5"の数字が秒数です。

注意点:

  • 301や302と比べてSEO効果が低い
  • アクセシビリティの問題がある(スクリーンリーダーでの対応が困難)
  • 最終手段として使う

リダイレクトチェーンとその問題

複数のリダイレクトが連鎖することをリダイレクトチェーンと呼びます。

リダイレクトチェーンとは

例:3段階のリダイレクト

① http://old-site.com
 ↓ 301リダイレクト
② https://old-site.com
 ↓ 301リダイレクト
③ https://new-site.com
 ↓ 301リダイレクト
④ https://new-site.com/top/(最終的な表示ページ)

ユーザーは①にアクセスしたのに、④にたどり着くまで3回もリダイレクトされます。

何が問題なのか

ページ表示速度の低下

  • 1回のリダイレクトで約0.1~0.5秒の遅延
  • チェーンが長いほど遅くなる
  • ユーザー体験が悪化

SEO評価の損失

  • リダイレクトを重ねるほど評価が減衰
  • Googleは最大5回までしか追わない
  • クロール予算の無駄遣い

ブラウザのタイムアウト

  • リダイレクトが多すぎるとエラーになる
  • 「リダイレクトが多すぎます」というメッセージ

解決方法

直接最終ページにリダイレクトする:

# 悪い例:チェーンになっている

Home | old site
→ https://old-site.com → https://new-site.com # 良い例:直接最終ページへ RewriteEngine On RewriteCond %{HTTP_HOST} ^old-site\.com [NC] RewriteRule ^(.*)$ https://new-site.com/$1 [R=301,L]

既存のリダイレクトを定期的に見直す:

  1. リダイレクトチェックツールで確認
  2. 不要な中間リダイレクトを削除
  3. 直接最終URLにリダイレクトするよう修正

重要なポイント:
リダイレクトは最大でも2段階までに抑えましょう。


リダイレクトの確認方法

設定したリダイレクトが正しく動作しているか確認する方法です。

ブラウザの開発者ツールで確認

最も手軽な方法です。

手順:

  1. Google Chromeで確認したいURLを開く
  2. F12キーを押して開発者ツールを開く
  3. 「Network」タブをクリック
  4. ページをリロード(Ctrl + R
  5. 最初のリクエストを見る

確認するポイント:

  • Status Code:301か302か確認
  • Location:リダイレクト先のURLを確認
  • Redirect:リダイレクトの回数を確認

正常な301リダイレクトの表示例:

Status: 301 Moved Permanently
Location: https://example.com/new-page.html

オンラインツールで確認

便利なWebツールがいくつかあります。

Redirect Checker(redirectcheck.com)

  • URLを入力するだけで確認できる
  • リダイレクトチェーンも可視化
  • 無料で使える

HTTP Status Code Checker

  • ステータスコードを確認
  • サーバーレスポンスの詳細が見られる

Google Search Console

  • Googleがどう認識しているか確認できる
  • インデックス状況もチェック可能

コマンドラインで確認(curl)

LinuxやMacのターミナルで確認する方法です。

基本的な確認:

curl -I https://example.com/old-page.html

実行結果の例:

HTTP/2 301
location: https://example.com/new-page.html
date: Mon, 04 Nov 2024 10:30:00 GMT

リダイレクトを追跡:

curl -L -I https://example.com/old-page.html

-Lオプションでリダイレクト先まで追跡します。

詳細な情報を表示:

curl -v https://example.com/old-page.html

リクエストとレスポンスの詳細が表示されます。


SEOに配慮したリダイレクト設定

リダイレクトはSEOに大きく影響します。正しく設定しましょう。

301リダイレクトのSEO効果

引き継がれるもの:

  • ページランク(評価)
  • 被リンク(バックリンク)
  • インデックス状況
  • トラフィック

注意点:

  • 完全に100%引き継がれるわけではない(Googleは90~99%と言われている)
  • 引き継ぎには時間がかかる(数週間~数ヶ月)
  • 極端に無関係なページへのリダイレクトは評価されない

リダイレクトマップの作成

サイトリニューアル時は、しっかりとマッピングしましょう。

スプレッドシートで管理:

旧URL新URLリダイレクト種類備考
/old-page.html/new-page/301恒久的な移転
/products/item123.html/shop/item-name/301URL構造変更
/blog/2024/article.html/articles/article-name/301カテゴリ変更

すべての旧URLに対して、適切な転送先を設定します。

関連性のあるページへリダイレクト

良い例:

✅ /old-product-page/ → /new-product-page/
   (同じ商品の新しいページ)

✅ /category-old/ → /category-new/
   (同じカテゴリの新しいURL)

悪い例:

❌ /specific-product/ → /top/
   (個別商品ページからトップページ)

❌ /blog-article/ → /contact/
   (関係のないページ)

関連性のないリダイレクトは、ソフト404として扱われ、SEO効果がありません。

Google Search Consoleで監視

リダイレクト設定後は、必ず確認しましょう。

確認する項目:

  1. カバレッジレポート:エラーが出ていないか
  2. URL検査ツール:正しくインデックスされているか
  3. リンク:被リンクが引き継がれているか

異常があれば:

  • リダイレクト設定を見直す
  • チェーンになっていないか確認
  • 404エラーになっていないかチェック

サイトマップの更新

リダイレクト後は、サイトマップも更新が必要です。

やるべきこと:

  1. 旧URLをサイトマップから削除
  2. 新URLをサイトマップに追加
  3. Google Search Consoleに再送信
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <!-- 旧URLは削除 -->
  <!-- 新URLを追加 -->
  <url>
    <loc>https://example.com/new-page/</loc>
    <lastmod>2024-11-04</lastmod>
    <priority>0.8</priority>
  </url>
</urlset>

よくあるトラブルと解決方法

リダイレクト設定でよく起こる問題と対処法です。

問題1:リダイレクトループが発生

症状:
「このページは正しく機能していません」
「リダイレクトが多すぎます」

原因:
リダイレクト設定が循環している

❌ 悪い例:
   ページA → ページB → ページA → ページB...(無限ループ)

解決方法:

# リダイレクト設定を見直す
# 条件を明確にする

# 悪い例
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

# 良い例(条件を追加)
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

問題2:リダイレクトが動作しない

原因1:.htaccessが読み込まれていない

解決方法:

Apacheの設定を確認:

# httpd.conf または apache2.conf
<Directory /var/www/html>
    AllowOverride All  # これが必要
</Directory>

原因2:mod_rewriteが有効になっていない

解決方法:

# Ubuntu/Debian
sudo a2enmod rewrite
sudo systemctl restart apache2

# CentOS/RHEL
# httpd.confでLoadModule rewrite_moduleを有効化
sudo systemctl restart httpd

原因3:.htaccessの記述ミス

解決方法:

  • 構文エラーがないか確認
  • エラーログを確認:tail -f /var/log/apache2/error.log

問題3:HTTPSリダイレクトで無限ループ

原因:
プロキシやCDN経由で、サーバーが正しくHTTPS判定できない

解決方法:

# X-Forwarded-Protoヘッダーを使う
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

CloudflareやAWS ELB経由の場合に有効です。

問題4:一部のページだけリダイレクトされない

原因:
リダイレクト順序の問題、または条件が厳しすぎる

解決方法:

# より具体的なルールを先に書く
# 一般的なルールは後に書く

# 正しい順序
RewriteRule ^special-page\.html$ /new-special-page/ [R=301,L]
RewriteRule ^(.*)\.html$ /$1/ [R=301,L]

# 間違った順序
RewriteRule ^(.*)\.html$ /$1/ [R=301,L]
RewriteRule ^special-page\.html$ /new-special-page/ [R=301,L]  # 実行されない

問題5:モバイルでだけリダイレクトされない

原因:
ユーザーエージェント判定の問題

解決方法:

# より広い範囲で判定
RewriteCond %{HTTP_USER_AGENT} (android|iphone|ipad|mobile) [NC]
RewriteRule ^$ /mobile/ [R=302,L]

リダイレクトのベストプラクティス

効果的なリダイレクト設定のコツをまとめました。

基本原則

1. 適切なステータスコードを使う

  • 恒久的な変更:301
  • 一時的な変更:302
  • 迷ったら301(元に戻す予定がなければ)

2. リダイレクトチェーンを避ける

  • 最大2段階まで
  • 定期的に見直す
  • 直接最終URLへリダイレクト

3. 関連性のあるページへリダイレクト

  • 同じ内容のページへ
  • トップページへの安易なリダイレクトは避ける
  • ユーザー体験を第一に

4. サーバーサイドリダイレクトを優先

  • .htaccessやNginx設定
  • PHPなどのサーバーサイドスクリプト
  • JavaScriptやメタリフレッシュは最終手段

サイト移転時のチェックリスト

移転前:

  • [ ] リダイレクトマップを作成
  • [ ] テスト環境でリダイレクトをテスト
  • [ ] バックアップを取得
  • [ ] サイトマップを準備

移転時:

  • [ ] リダイレクトを実装
  • [ ] 全ページの動作確認
  • [ ] リダイレクトチェーンがないか確認
  • [ ] モバイルでも確認

移転後:

  • [ ] Google Search Consoleで確認
  • [ ] アナリティクスでトラフィック確認
  • [ ] エラーログをチェック
  • [ ] 数週間後に再確認

パフォーマンスへの配慮

キャッシュの活用:

# リダイレクトもキャッシュ可能
<IfModule mod_headers.c>
    Header set Cache-Control "public, max-age=31536000"
</IfModule>

ただし、301リダイレクトは慎重に。
一度キャッシュされると変更が困難です。

CDNの利用:

CloudflareやCloudFrontなどのCDNを使うと、リダイレクトもエッジで処理されて高速化します。


まとめ:正しいリダイレクトでSEOとUXを両立しよう

この記事では、Webリダイレクトについて詳しく解説してきました。

重要なポイントのおさらい:

  • リダイレクトはURLの転送機能で、サイト運営に不可欠
  • 301は恒久的、302は一時的な移転に使う
  • 迷ったら「元に戻す予定があるか」で判断
  • SEO評価を引き継ぐには301リダイレクトが必須
  • サーバーサイドでの実装が推奨(.htaccess、Nginx)
  • リダイレクトチェーンは避け、最大2段階まで
  • 関連性のあるページへリダイレクトする
  • 設定後は必ず動作確認とSEO監視を行う

リダイレクトは正しく設定すれば、SEO評価を守りながらサイト構造を最適化できる強力な手段です。

特に重要なのは:

  • 適切なステータスコード(301 vs 302)の選択
  • 直接的なリダイレクト(チェーンを避ける)
  • 関連性のあるページへの転送

今すぐできること:

  1. 既存のリダイレクトをチェックツールで確認
  2. リダイレクトチェーンがないか調査
  3. 不要な302を301に変更(恒久的な変更の場合)
  4. Google Search Consoleでエラーを確認

リダイレクトは一度設定したら終わりではありません。
定期的に見直して、最適な状態を保ちましょう!

コメント

タイトルとURLをコピーしました