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

Webサイトを運営していると、「リダイレクト」という言葉を耳にすることがありますよね。
リダイレクト(redirect)とは、ユーザーがアクセスしたURLから、別のURLへ自動的に転送する仕組みのことです。
身近な例で理解しよう
分かりやすい例を挙げてみましょう。
引っ越しの転送サービスに似ている
郵便物の転送届を出すと、旧住所に届いた手紙が新住所に自動的に転送されますよね。
リダイレクトも、これと同じような仕組みなんです。
ユーザーが訪問:https://old-site.com
↓
自動転送
↓
実際に表示:https://new-site.com
ユーザーは旧サイトのURLをクリックしても、自動的に新サイトに連れて行かれます。
リダイレクトが必要になる場面
実際にどんな時に使われるのでしょうか?
ドメイン変更
- 会社名変更でドメインが変わった
- ブランドリニューアルで新しいドメインにした
- 例:
old-company.com→new-company.com
サイト構造の変更
- ページのURLを整理した
- カテゴリ構造を見直した
- 例:
/blog/2024/01/article.html→/articles/article-name/
HTTPSへの移行
- セキュリティ強化のためHTTPS化
- 例:
http://example.com→https://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]
既存のリダイレクトを定期的に見直す:
- リダイレクトチェックツールで確認
- 不要な中間リダイレクトを削除
- 直接最終URLにリダイレクトするよう修正
重要なポイント:
リダイレクトは最大でも2段階までに抑えましょう。
リダイレクトの確認方法

設定したリダイレクトが正しく動作しているか確認する方法です。
ブラウザの開発者ツールで確認
最も手軽な方法です。
手順:
- Google Chromeで確認したいURLを開く
F12キーを押して開発者ツールを開く- 「Network」タブをクリック
- ページをリロード(
Ctrl + R) - 最初のリクエストを見る
確認するポイント:
- 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/ | 301 | URL構造変更 |
| /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で監視
リダイレクト設定後は、必ず確認しましょう。
確認する項目:
- カバレッジレポート:エラーが出ていないか
- URL検査ツール:正しくインデックスされているか
- リンク:被リンクが引き継がれているか
異常があれば:
- リダイレクト設定を見直す
- チェーンになっていないか確認
- 404エラーになっていないかチェック
サイトマップの更新
リダイレクト後は、サイトマップも更新が必要です。
やるべきこと:
- 旧URLをサイトマップから削除
- 新URLをサイトマップに追加
- 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)の選択
- 直接的なリダイレクト(チェーンを避ける)
- 関連性のあるページへの転送
今すぐできること:
- 既存のリダイレクトをチェックツールで確認
- リダイレクトチェーンがないか調査
- 不要な302を301に変更(恒久的な変更の場合)
- Google Search Consoleでエラーを確認
リダイレクトは一度設定したら終わりではありません。
定期的に見直して、最適な状態を保ちましょう!


コメント