リダイレクトとは? — URLを自動転送する仕組み
リダイレクトとは、ユーザーや検索エンジンのクローラーが特定のURLにアクセスした際に、自動的に別のURLへ転送する仕組みです。Googleのクローラーもリダイレクトを認識し、転送先のURLをインデックスします。
Webサイトの運用では、URLの変更は日常的に発生します。ページの統合、ドメインの変更、SSL化、サイトリニューアルなど、URLが変わる理由は多岐にわたります。こうした場面でリダイレクトを正しく設定しなければ、ユーザーは404エラーに遭遇し、検索エンジンに蓄積されたSEO評価も失われてしまいます。リダイレクトは「URLの変更を安全に行うためのセーフティネット」であり、SEO施策の根幹を支える技術的な仕組みです。
リダイレクトの基本的な仕組み
リダイレクトは、HTTPステータスコードを使って、ブラウザや検索エンジンに「このURLは別のURLへ移動した」と通知します。処理は次のステップで進みます。
- ユーザーが旧URL(example.com/old-page/)にアクセスする
- サーバーがHTTPステータスコード(301や302)とともに新URLを返す
- ブラウザが自動的に新URL(example.com/new-page/)へ移動する
- ユーザーには新URLのページが表示される
この一連の処理は通常1秒未満で完了し、ユーザーはほとんど意識することなく新しいページを閲覧できます。クローラーも同様のプロセスを辿りますが、HTTPレスポンスヘッダーのLocationフィールドを直接読み取るため、ブラウザより高速に転送先を認識します。実際のレスポンスは次のような構造になっています。
HTTP/1.1 301 Moved Permanently
Location: https://example.com/new-page/
Content-Type: text/html; charset=UTF-8
ステータスライン(1行目)が転送の種類を、Locationヘッダーが転送先を示します。301と302ではこのステータスラインとブラウザのキャッシュ挙動が異なり、それがSEO評価の引き継ぎに直結します。
リダイレクトを設定する主な目的
| 目的 | 具体例 | リダイレクトなし時のリスク |
|---|---|---|
| URLの変更に対応 | サイトリニューアルでURL構造が変わった場合 | 旧URLが404エラーとなり検索流入が消失 |
| ドメインの統一 | wwwあり/なし、http/httpsの統一 | 重複コンテンツとして評価が分散 |
| ページの統合 | 類似コンテンツを1つのURLにまとめる場合 | 被リンク評価が複数URLに分散 |
| 一時的なメンテナンス | メンテナンス中に仮ページへ転送する場合 | ユーザーがエラーページに遭遇 |
| 404エラーの回避 | 削除したページへのアクセスを関連ページへ誘導 | ユーザー体験の悪化と離脱率上昇 |
| 正規化(canonical対応) | 重複URLを1つのURLに統一する場合 | クロールバジェットの浪費 |
被リンク評価の分散がなぜ問題になるかは、被リンクのSEO効果と評価の仕組みの解説とあわせて理解すると理解が深まります。
リダイレクトの種類 — 301・302・307・308・メタリフレッシュの違い
リダイレクトにはいくつかの種類があり、目的に応じた使い分けが必要です。検索エンジンはステータスコードを「シグナル」として読み取り、転送元と転送先の関係を判断します。たとえば301は「恒久的な移転」のシグナルで、Googleは旧URLの評価を新URLに引き渡します。一方の302は「一時的な転送」のシグナルで、旧URLの評価はそのまま旧URLに保持されます。
主要なリダイレクトの比較表
| 種類 | コード | 転送の性質 | SEO評価の引き継ぎ | HTTPメソッド | 主な用途 |
|---|---|---|---|---|---|
| 301リダイレクト | 301 | 恒久的(Permanent) | 引き継ぐ | GETに変換 | URL変更、ドメイン移行、ページ統合 |
| 302リダイレクト | 302 | 一時的(Found) | 原則引き継がない | GETに変換 | メンテナンス中の一時転送、A/Bテスト |
| 307リダイレクト | 307 | 一時的(Temporary) | 原則引き継がない | 維持される | HTTPメソッドを維持する一時転送 |
| 308リダイレクト | 308 | 恒久的(Permanent) | 引き継ぐ | 維持される | HTTPメソッドを維持する恒久転送 |
| メタリフレッシュ | — | 非推奨 | 不確実 | — | HTMLのmetaタグによる転送 |
| Javascriptリダイレクト | — | 非推奨 | 不確実 | — | Javascriptによるクライアント側転送 |
301リダイレクトと302リダイレクトの違い
最も重要な違いは「恒久的か一時的か」です。この違いはSEO評価の引き継ぎに直結するため、正確に理解しておく必要があります。
301リダイレクト(恒久的転送)は「このURLは永久に新しいURLへ移動した」という意味です。Googleは旧URLの評価を新URLへ引き継ぎ、ブラウザはリダイレクト先をキャッシュします。URL変更・ドメイン移行・ページ統合など、元に戻す予定がない場面で使います。
302リダイレクト(一時的転送)は「このURLは一時的に別のURLへ転送している」という意味です。Googleは旧URLの評価を保持し、新URLには引き継ぎません。ブラウザはリダイレクト先をキャッシュしません。メンテナンス・A/Bテスト・季節キャンペーンなど、元に戻す予定がある場面で使います。
なお、Googleは長期間302が設定されたままだと、それを301として解釈することがあります。ただし、恒久移転なら最初から301を返すのが正しい設計です。
307と308 — HTTPメソッドを維持するリダイレクト
307と308はHTTP/1.1で導入された比較的新しいステータスコードで、301/302との最大の違いは「HTTPメソッドを維持する」ことです。ユーザーがフォーム送信(POST)した際に301や302でリダイレクトされると、ブラウザはPOSTをGETに変換してしまいます。307/308はこの変換を行わず、元のHTTPメソッドを保ったまま転送するため、API連携やフォーム処理を伴うリダイレクトに適しています。
| シナリオ | 推奨コード | 理由 |
|---|---|---|
| ページURLの恒久的変更 | 301 | 一般的なSEOリダイレクト |
| メンテナンス中の一時転送 | 302 | 元URLに戻す予定がある |
| APIエンドポイントの恒久移転 | 308 | POSTメソッドを維持する必要がある |
| フォーム送信先の一時変更 | 307 | POSTメソッドを維持しつつ一時転送 |
メタリフレッシュとJavascript転送は非推奨
サーバー設定を触れない場合の代替として、HTMLのmeta refreshやJavascriptによる転送が使われることがありますが、いずれもSEO目的では非推奨です。ステータスコードを返さないため、Googleへの評価の引き継ぎが不確実になります。
<!-- 非推奨: HTMLのmeta refreshによる転送(SEO評価が不確実) -->
<meta http-equiv="refresh" content="0; url=https://example.com/new-page/">
<!-- 非推奨: Javascriptによるクライアントサイド転送 -->
<script>
window.location.href = "https://example.com/new-page/";
</script>
これらはやむを得ない場合の最終手段にとどめ、可能な限りサーバーサイドの301/302を選びましょう。
リダイレクトの種類を選ぶ判断フロー
| 判断ポイント | 回答 | 推奨リダイレクト |
|---|---|---|
| 元のURLに戻す予定はあるか | いいえ | 301リダイレクト |
| 元のURLに戻す予定はあるか | はい | 302リダイレクト |
| HTTPメソッド(POST等)を維持する必要があるか | はい(恒久的) | 308リダイレクト |
| HTTPメソッド(POST等)を維持する必要があるか | はい(一時的) | 307リダイレクト |
| サーバー設定にアクセスできない | — | メタリフレッシュ(非推奨・最終手段) |
Googleの公式見解はリダイレクトと Google 検索(検索セントラル)で確認できます。
リダイレクトが必要になる6つのケース
実務でリダイレクトが必要になる代表的なケースを整理します。SEOコンサルタントとしてクライアント対応をすると、以下のいずれかに必ず遭遇します。それぞれ「なぜ必要か」「何を設定すべきか」を把握しておくことが重要です。
ケース1: サイトリニューアル
URL構造が変わる場合、旧URLから新URLへの301リダイレクトが必須です。怠ると旧URLは404となり、蓄積されたSEO評価も失われます。リニューアルは最もリダイレクト設計が複雑になるケースで、数十〜数千のURLに対してマッピングを作成し、パターンマッチによる一括リダイレクトと個別リダイレクトを組み合わせる設計が求められます。企画段階からSEOを組み込む進め方はWeb制作にSEOを組み込む方法で全体像を確認できます。
ケース2: ドメイン変更
old-domain.com から new-domain.com へ移行する場合、全ページに301を設定します。旧ドメインのDNSとサーバーは一定期間維持し、リダイレクトが動作する状態を保つ必要があります。旧ドメインの契約が切れるとリダイレクトが止まり、被リンク評価の引き継ぎも停止します。最低1年、理想的には2年以上は旧ドメインを維持しましょう。
ケース3: HTTP→HTTPSの移行
SSL化に伴い http:// から https:// への301を設定します。2026年現在もHTTPSはGoogleのランキングシグナルの一つです。SSL化自体は多くのサーバーやCDNで簡単に行えますが、リダイレクトを忘れるとHTTPとHTTPSの両方でインデックスされ、重複コンテンツの問題が発生します。
ケース4: URLの正規化
同じコンテンツに複数のURLでアクセスできる状態(重複URL)を解消します。
| 正規化の対象 | リダイレクト元 | リダイレクト先 | 影響 |
|---|---|---|---|
| www有無の統一 | www.example.com | example.com(またはその逆) | 被リンク評価の分散を防止 |
| トレイリングスラッシュ | example.com/page | example.com/page/(またはその逆) | 重複コンテンツの解消 |
| index.htmlの除去 | example.com/index.html | example.com/ | URLの簡潔化 |
| パラメータ付きURL | example.com/page?ref=123 | example.com/page | クロールバジェットの最適化 |
| 大文字/小文字の統一 | example.com/Page | example.com/page | 重複URLの解消 |
URLを残したまま正規URLを指定したい場合は、リダイレクトではなくcanonicalタグを使います。両者の使い分けはcanonicalタグとURL正規化の完全ガイドで詳しく解説しています。
ケース5: ページの統合・削除
類似コンテンツを1つに統合する場合や、不要なページを削除する場合に、関連性の高いページへ301を設定します。コンテンツ統合は「キーワードカニバリゼーション」を解消する有効な手段です。複数ページが同じキーワードで競合しているとき、最も評価の高いページへ301で統合すれば、検索評価を集約できます。
ケース6: 多言語・多リージョンサイトの統合
グローバルサイトの再編で国別URLを統合する場合にもリダイレクトが必要です。たとえば example.co.jp と example.com/ja/ を統合する場合は、hreflangタグとの整合性を考慮しながら301を設計します。
リダイレクトの設定方法 — .htaccess・Nginx・サーバー別の実装
.htaccessでの設定(Apache)
最も一般的な設定方法です。Apacheの.htaccessファイルに記述します。.htaccessはドキュメントルートに配置し、サーバーのAllowOverrideディレクティブが有効になっている必要があります。記述ミスは500 Internal Server Errorの原因になるため、変更前に必ずバックアップを取り、テスト環境で確認してから本番へ反映しましょう。
個別ページの301リダイレクト
# 単一ページのリダイレクト
Redirect 301 /old-page/ https://example.com/new-page/
# 複数ページを個別に指定
Redirect 301 /old-post-1/ https://example.com/new-post-1/
Redirect 301 /old-post-2/ https://example.com/new-post-2/
正規表現を使ったリダイレクト
RewriteEngine On
# ディレクトリ全体を新ディレクトリへ転送
RewriteRule ^old-directory/(.*)$ https://example.com/new-directory/$1 [R=301,L]
# .html付きURLを拡張子なしのクリーンURLへ
RewriteRule ^(.*)\.html$ https://example.com/$1/ [R=301,L]
# パラメータ付きURLをクリーンURLへ(?id=123 -> /products/123/)
RewriteCond %{QUERY_STRING} ^id=([0-9]+)$
RewriteRule ^product\.php$ https://example.com/products/%1/? [R=301,L]
ドメイン全体・HTTPS・www統一
RewriteEngine On
# 旧ドメインから新ドメインへ全ページ転送
RewriteCond %{HTTP_HOST} ^old-domain\.com$ [NC]
RewriteRule ^(.*)$ https://new-domain.com/$1 [R=301,L]
# HTTP -> HTTPS へ強制
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# www あり -> www なしへ統一
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
.htaccessの主要ディレクティブ一覧
| ディレクティブ | 用途 | 記述例 |
|---|---|---|
| Redirect | 単純なURLリダイレクト | Redirect 301 /old/ /new/ |
| RedirectMatch | 正規表現によるリダイレクト | RedirectMatch 301 ^/old-articles/(.*)$ /articles/$1 |
| RewriteRule | 高度なURLリライト+リダイレクト | RewriteRule ^old/(.*)$ /new/$1 [R=301,L] |
| RewriteCond | リライトの条件指定 | RewriteCond %{HTTPS} off |
Nginxでの設定
Nginxではサーバー設定ファイルにlocationブロックやserverブロックで記述します。反映には設定のリロードが必要です。
# 個別ページのリダイレクト
location = /old-page/ {
return 301 https://example.com/new-page/;
}
# ディレクトリ全体のリダイレクト
location /old-directory/ {
Rewrite ^/old-directory/(.*)$ https://example.com/new-directory/$1 permanent;
}
# 旧ドメインから新ドメインへ
server {
server_name old-domain.com;
return 301 https://new-domain.com$request_uri;
}
# HTTP -> HTTPS
server {
listen 80;
server_name example.com;
return 301 https://example.com$request_uri;
}
主要サーバー・CMS別の設定方法まとめ
| 環境 | 設定方法 | ファイル/設定場所 | 難易度 |
|---|---|---|---|
| Apache | .htaccessファイル | ドキュメントルートの.htaccess | 中 |
| Nginx | 設定ファイル | /etc/nginx/conf.d/ | 中〜高 |
| WordPress | プラグイン(Redirection等) | WordPress管理画面 | 低 |
| Cloudflare | Redirect Rules / Bulk Redirects | Cloudflareダッシュボード | 低 |
| Vercel | vercel.json | プロジェクトルート | 低〜中 |
| Netlify | _Redirects または netlify.toml | プロジェクトルート | 低 |
| AWS CloudFront | CloudFront Functions | AWSコンソール | 高 |
| Firebase Hosting | firebase.json | プロジェクトルート | 低〜中 |
WordPress・Cloudflare・Vercelでの具体的設定手順
サーバーの設定ファイルを直接編集できない場合でも、CMS・CDN・ホスティングの機能を使えばリダイレクトを設定できます。ここではWordPress・Cloudflare・Vercelの3つを、コード例付きで解説します。
WordPressでのリダイレクト設定
WordPressでリダイレクトを設定する方法は主に3つあります。
| 方法 | メリット | デメリット | 推奨ケース |
|---|---|---|---|
| Redirectionプラグイン | GUI操作で簡単、ログ機能あり | プラグイン依存 | 数十〜数百件のリダイレクト |
| Yoast SEOプレミアム | SEOプラグインと統合管理可能 | 有料プラン必要 | Yoastを既に導入済みのサイト |
| functions.phpに記述 | プラグイン不要 | コード知識が必要 | 少数の固定リダイレクト |
Redirectionプラグインでの設定手順
- 管理画面 →「プラグイン」→「新規追加」で「Redirection」を検索してインストール・有効化
- 「ツール」→「Redirection」を開く
- 「新しいリダイレクトを追加」をクリック
- ソースURL(旧URL)とターゲットURL(新URL)を入力
- グループを「Redirections」に設定
- 「リダイレクトを追加」をクリック
functions.phpでのリダイレクト(コード例)
// functions.php に追記
function custom_Redirects() {
$Redirects = array(
'/old-page/' => '/new-page/',
'/old-post/' => '/new-post/',
'/service/old/' => '/service/new/',
);
$request_uri = $_SERVER['REQUEST_URI'];
foreach ( $Redirects as $from => $to ) {
if ( strpos( $request_uri, $from ) === 0 ) {
wp_Redirect( home_url( $to ), 301 );
exit;
}
}
}
add_action( 'template_Redirect', 'custom_Redirects' );
数十件を超える場合や、リダイレクトのヒット状況をログで確認したい場合は、functions.phpよりRedirectionプラグインのCSV一括インポートが管理しやすくなります。CSVは source(旧URL)・target(新URL)・code(301等)・match(url)のカラムで作成します。
Cloudflareでのリダイレクト設定
Cloudflareはエッジサーバーでリダイレクトを処理するため、オリジンサーバーに負荷をかけずに高速な転送が可能です。Redirect Rulesでの手順は次のとおりです。
- ダッシュボードにログインし、対象ドメインを選択
- 「Rules」→「Redirect Rules」を開く
- 「Create rule」をクリックし、ルール名を入力
- 「When incoming requests match」で条件を設定(例: URI Path が /old-directory/ で starts with)
- 「Then」で転送先URLとステータスコード(301)を設定
- 「Deploy」をクリック
数百〜数千件を設定する場合はBulk Redirectsを使います。方式ごとの上限は下表のとおりです。
| 機能 | Page Rules | Redirect Rules | Bulk Redirects |
|---|---|---|---|
| リダイレクト数の上限 | 3件(無料プラン) | 10件(無料プラン) | 最大20,000件 |
| 正規表現対応 | 非対応 | 対応 | 非対応 |
| エッジ処理 | はい | はい | はい |
| 推奨ケース | 少数の単純ルール | 中規模のルール | 大量の個別リダイレクト |
Vercelでのリダイレクト設定
Vercelではvercel.jsonにリダイレクトルールを記述します。
{
"Redirects": [
{
"source": "/old-page",
"destination": "/new-page",
"permanent": true
},
{
"source": "/news/:slug",
"destination": "/articles/:slug",
"permanent": true
},
{
"source": "/docs/:path*",
"destination": "https://docs.example.com/:path*",
"permanent": false
}
]
}
| パラメータ | 型 | 説明 | 例 |
|---|---|---|---|
| source | string | リダイレクト元のURLパターン | /old-page |
| destination | string | リダイレクト先のURL | /new-page |
| permanent | boolean | true = 308、false = 307 | true |
| has | array | マッチ条件(ヘッダー、クエリ等) | [{“type”:”query”,”key”:”ref”}] |
Vercelの permanent: true は301ではなく308を返す点に注意してください。SEO上は301と同等に扱われますが、クライアント側のHTTPメソッド維持に影響する場合があります。Next.jsを使っている場合は next.config.js でも設定できます。
// next.config.js
module.exports = {
async Redirects() {
return [
{
source: '/old-articles/:slug',
destination: '/articles/:slug',
permanent: true,
},
{
source: '/old-docs/:path*',
destination: '/docs/:path*',
permanent: true,
},
];
},
};
より体系的にテクニカルSEOを学びたい場合は、テクニカルSEO完全ガイドもあわせて参考にしてください。
大規模リニューアル時のリダイレクトマッピング設計手法
数百〜数千URLの移行を伴う大規模リニューアルでは、個別に設定するのではなく体系的な「マッピング設計」が不可欠です。マッピング設計とは、旧URLと新URLの対応関係を整理し、パターンベースのルールと個別ルールを組み合わせてリダイレクト計画を策定することです。これなしに場当たり的に設定すると、漏れや重複が発生し、リダイレクトチェーンやループの原因になります。
マッピング設計の5ステップ
| ステップ | 作業内容 | 担当 | 成果物 |
|---|---|---|---|
| 1. 旧URLの棚卸し | Screaming Frogで旧サイト全URLをクロール | SEOコンサルタント | 旧URLリスト(CSV) |
| 2. 優先度付け | 被リンク・検索流入・PVに基づく優先度設定 | SEOコンサルタント | 優先度付きURLリスト |
| 3. 新URL構造の確定 | 新サイトのURL設計をディレクトリ単位で確定 | ディレクター+エンジニア | 新URL設計書 |
| 4. マッピングシート作成 | 旧URL→新URLの対応表を作成 | SEOコンサルタント | マッピングシート |
| 5. パターンルール設計 | 正規表現ルールと個別ルールの振り分け | エンジニア | リダイレクト設定ファイル |
マッピングシートのテンプレート
実際の案件で使うマッピングシートのカラム例です。被リンク数や検索流入は優先度判断の材料として記録します。
| No. | 旧URL | 新URL | 種類 | 優先度 | 備考 |
|---|---|---|---|---|---|
| 1 | /seo-guide-old/ | /seo-guide/ | 301(個別) | 高 | 主力記事・被リンク多数 |
| 2 | /services/consulting/ | /service/seo-consulting/ | 301(個別) | 高 | CVページ |
| 3 | /old-category/news/* | /category/news/* | 301(パターン) | 中 | カテゴリ一括 |
| 4 | /tag/* | /category/* | 301(パターン) | 低 | タグ一括 |
| 5 | /old-landing-page/ | / | 301(個別) | 低 | 終了LP→トップ |
パターンルールと個別ルールの使い分け
| ルール種別 | 適用ケース | メリット | デメリット |
|---|---|---|---|
| パターンルール(正規表現) | ディレクトリ構造が規則的に変更された場合 | 一括で大量のURLを処理可能 | 例外的なURLに対応しにくい |
| 個別ルール | 被リンクが多い重要ページ、URL構造が不規則な場合 | 正確な1対1マッピングが可能 | 数が多いと管理が煩雑 |
| 組み合わせ | 大規模リニューアル | 効率性と正確性の両立 | 設計・テストに時間がかかる |
リダイレクト設定の検証チェックリスト
| 検証項目 | 確認方法 | OKの基準 |
|---|---|---|
| 全URLが正しく転送されるか | Screaming Frogで全旧URLをクロール | 全旧URLが新URLに301で転送 |
| リダイレクトチェーンがないか | httpstatus.ioで抽出確認 | 1ホップ以内 |
| リダイレクトループがないか | Screaming Frogのレポートで確認 | ループなし |
| ステータスコードが正しいか | curlコマンドでサンプル確認 | 301 Moved Permanently |
| クエリパラメータの扱い | パラメータ付きURLで動作確認 | 意図通りの挙動 |
リダイレクトとJavascript SPA・AI検索時代の注意点
React・Vue.js・Next.js・Nuxt.jsなどを使ったSPA(Single Page Application)が増えています。SPAはクライアントサイドでルーティングを行うため、従来のサーバーサイドリダイレクトとは異なるアプローチが必要です。AI OverviewsやAI Modeといった生成AI検索が普及した2026年でも、AIが参照するのはGoogleがクロール・レンダリングしたインデックスであり、クローラーが転送を正しく認識できるかどうかは依然として重要です。
SPAにおけるリダイレクトの課題
SPAではページ遷移がブラウザ上のJavascriptで制御され、サーバーには初回アクセス時の1リクエストしか到達しません。このためクライアントサイドで行う「リダイレクト」は、クローラーが正しく認識できない可能性があります。
| 項目 | 従来のWebサイト | SPA |
|---|---|---|
| ページ遷移の仕組み | サーバーが新しいHTMLを返す | JavascriptがDOMを書き換える |
| リダイレクトの処理 | サーバーが301/302を返す | クライアント側のルーターが処理 |
| Googleの認識 | 即座に認識 | レンダリング後に認識(遅延の可能性) |
| クローラビリティ | 高い | 設定次第で低下する可能性 |
SPAでのリダイレクト実装方法
推奨されるのは、Next.jsやNuxt.jsなどのSSR/SSG対応フレームワークのリダイレクト機能を使い、サーバーサイドで処理する方法です。これが最もSEOに安全です。
// Nuxt.js: nuxt.config.ts でのリダイレクト設定
export default defineNuxtConfig({
routeRules: {
'/old-page': { Redirect: '/new-page' },
'/old-articles/**': { Redirect: '/articles/**' },
},
});
次善策はCloudflareやVercelのエッジでの処理です。React Routerなどによるクライアントサイドリダイレクトは、GoogleがJavascriptをレンダリングするまで認識されないため、SEO目的では推奨しません。
SPA別リダイレクト対応まとめ
| フレームワーク | 推奨リダイレクト方法 | 処理レイヤー | SEO安全性 |
|---|---|---|---|
| Next.js(Vercel) | next.config.js + vercel.json | サーバーサイド | 高 |
| Nuxt.js(Netlify) | nuxt.config.ts + _Redirects | サーバーサイド | 高 |
| Gatsby(Netlify) | gatsby-node.js + _Redirects | ビルド時+サーバーサイド | 高 |
| React SPA(S3+CloudFront) | CloudFront Functions | エッジ | 中〜高 |
| Vue SPA(Apache/Nginx) | .htaccess / nginx.conf | サーバーサイド | 高 |
| Angular SPA(Firebase) | firebase.json | サーバーサイド | 高 |
SPAのリダイレクトで最も重要な原則は「クライアントサイドに頼らず、サーバーサイドまたはエッジで処理する」ことです。
リダイレクトとSEOの関係 — 評価の引き継ぎと注意点
301リダイレクトによるSEO評価の引き継ぎ
Googleは、301リダイレクトによってPageRankが失われることはないと公式に説明しています。正しく301を設定すれば、旧URLが持っていたSEO評価は新URLへ引き継がれます。ただし「損失がない」のは理論上の話で、実際のリニューアルでは一時的な順位変動が起こるのが一般的です。Googleが旧URLから新URLへの評価移行を完了するまでには数週間〜数ヶ月を要するため、短期的な変動は計画に織り込んでおくべきです。
リダイレクト種類別のSEO影響比較
| 種類 | PageRankの引き継ぎ | インデックスされるURL | クロールバジェットへの影響 | 推奨度 |
|---|---|---|---|---|
| 301リダイレクト | 引き継ぐ | 新URL | 初回クロール時にコスト発生 | 最も推奨 |
| 302リダイレクト | 状況による | 旧URLが維持される傾向 | 毎回クロール時にコスト発生 | 一時的な場合のみ |
| 308リダイレクト | 引き継ぐ | 新URL | 301と同等 | API移転時に推奨 |
| リダイレクトなし(404) | 引き継がない | インデックスから削除 | — | 非推奨 |
| リダイレクトチェーン | 引き継ぐが速度面で不利 | 最終URLがインデックス | 多段階でコスト増大 | 解消推奨 |
| メタリフレッシュ | 不確実 | 不定 | 正しく処理されない場合あり | 非推奨 |
SEO観点での注意点
リダイレクトチェーンを避ける
リダイレクトチェーンとは、A→B→Cのように複数回リダイレクトが発生する状態です。Googleはチェーンを追跡できますが、クロール効率が下がります。過去に複数回リニューアルしたサイトでは、旧リダイレクトの上に新しいリダイレクトが重なり、3段階以上のチェーンが生じているケースがあります。Screaming Frogなどで定期的に確認し、見つけたらA→Cの直接リダイレクトに修正しましょう。
関連性のないページへのリダイレクトはNG
旧ページと無関連なページへリダイレクトすると、Googleは「ソフト404」として扱う可能性があります。商品ページが廃止になった場合は、トップページではなく同カテゴリの一覧ページや後継商品ページへ転送するのが適切です。関連ページが存在しないなら、リダイレクトではなく410(Gone)を返すのも選択肢です。
リダイレクトの維持期間
Googleは「少なくとも1年間はリダイレクトを維持すること」を推奨しています。評価の移行に時間がかかるためです。被リンクが多い重要ページは、恒久的に維持することを推奨します。
クロールバジェットへの影響
大量のリダイレクトはクロールバジェットを消費します。特に大規模サイトでは、Googlebotが転送の追跡に時間を費やし、新しいコンテンツのクロールが遅れる可能性があります。
| サイト規模 | URL数 | 影響 | 対策 |
|---|---|---|---|
| 小規模 | 〜100ページ | ほぼ影響なし | 通常のリダイレクト設定で問題なし |
| 中規模 | 100〜1,000ページ | 軽微な影響 | チェーンの解消、不要なリダイレクトの削除 |
| 大規模 | 1,000ページ以上 | 無視できない影響 | RewriteMapの活用、段階的な移行 |
リダイレクトのよくあるエラーと対処法
エラー一覧と対処法
| エラー | 症状 | 原因 | 対処法 | 深刻度 |
|---|---|---|---|---|
| リダイレクトループ | 「リダイレクトの回数が多すぎます」と表示 | A→B→Aの循環リダイレクト | 設定を見直しループを解消 | 高 |
| リダイレクトチェーン | 表示が遅い、クローラビリティ低下 | A→B→C→Dの多段階リダイレクト | 直接リダイレクト(A→D)に修正 | 中 |
| 302の誤使用 | SEO評価が新URLに移行しない | 恒久移行に302を使用 | 301に変更 | 中 |
| ソフト404 | Search Consoleで「ソフト404」と報告 | 関連性のないページへ転送 | 関連性の高いページへ変更 | 中 |
| リダイレクトの欠落 | 旧URLが404を返す | リダイレクトが未設定 | マッピングを作成し設定 | 高 |
| HTTPS/HTTPの混在 | 一部ページがHTTPのままアクセス可能 | HTTPSリダイレクトの設定漏れ | サイト全体のHTTPSリダイレクトを確認 | 中 |
| トレイリングスラッシュの不統一 | 同一ページが2URLでアクセス可能 | スラッシュ有無の統一が未実施 | 一方に統一するリダイレクトを設定 | 低 |
リダイレクトの確認ツール
| ツール | 確認できること | 費用 | 推奨場面 |
|---|---|---|---|
| Google Search Console | リダイレクトエラー、インデックス状況 | 無料 | 事後モニタリング |
| httpstatus.io | HTTPステータスコード、リダイレクトチェーン | 無料 | 個別URL確認 |
| Screaming Frog | サイト全体のリダイレクト状況 | 500URLまで無料 | サイト全体の検証 |
| curl コマンド | ターミナルからのステータスコード確認 | 無料 | 技術的な検証 |
Search Consoleの使い方に不慣れな場合は、サーチコンソールの使い方完全ガイドでインデックス状況の確認手順を押さえておくと、リダイレクト後のモニタリングがスムーズになります。
curlコマンドによる確認方法
# ステータスコードとリダイレクト先を確認
curl -I https://example.com/old-page/
# リダイレクトチェーンを最後まで追跡
curl -IL https://example.com/old-page/
# ステータスコードのみを表示
curl -o /dev/null -s -w "%{http_code}" https://example.com/old-page/
【実践】当サイトのNext.js→WordPress移行と301リダイレクト設計
ここまでの内容を、当サイト scale-basics.com 自身の移行事例で具体化します。当サイトは2026年7月にNext.js(SSG)で構築していた教材サイトから、WordPressベースのメディアへ全面移行しました。この移行では、記事URLの接頭辞 /blog/ を廃止し、ルート直下へ集約する再設計を行っています。つまり /blog/Redirect/ のような旧URLを /Redirect/ へ変更する、URL構造の一括変更です。
URL構造を変えるため、旧URLに蓄積したSEO評価を失わないよう、旧 /blog/ 配下のすべてのURLから新しいルート直下のURLへ301リダイレクトを設定しました。Apache環境の.htaccessで、次のようなパターンルール1行を軸に転送しています。
# 【当サイトの実例】/blog/ 配下のURLを新しいルート直下へ301転送
RewriteEngine On
RewriteRule ^blog/(.+)$ https://scale-basics.com/$1 [R=301,L]
この設計で特に意識したのは、本記事でも繰り返し触れた「チェーンを作らない」ことです。旧URLから新URLへ1ホップで到達するようルールを組み、A→B→Cのような多段階転送を避けました。結果として、移行後もインデックス面での問題は発生していません。Search Consoleのカバレッジには移行直後に旧URLの再クロールが記録されましたが、これは想定内の挙動であり、順次新URLへ置き換わっていきました。
移行後の表示速度についても、当サイトの実測(2026年7月計測)ではTTFBは平均0.19秒で、余分なリダイレクトを挟まないクリーンな転送設計がこの数値の維持に寄与しています。移行時の技術的な工夫と実測データの詳細は、SEOに強いコーディングの実測データ解説にまとめています。
実践事例から得られた教訓
| ステップ | 作業内容 | 使用ツール |
|---|---|---|
| 1. 旧URLの洗い出し | サイト全体のURLリストを作成 | Screaming Frog |
| 2. マッピング | /blog/ 配下→ルート直下の対応を確認 | スプレッドシート |
| 3. パターンルール設計 | 1行のRewriteRuleで一括転送を設計 | テキストエディタ |
| 4. 設定の検証 | 旧URLのステータスコードを確認 | curl / httpstatus.io |
| 5. 事後モニタリング | カバレッジとインデックス状況を監視 | Google Search Console |
URL接頭辞の一括変更のように規則性の高い移行は、個別ルールを大量に書くよりパターンルール1本のほうが漏れも保守負担も小さくなります。Googleのような大規模プラットフォームでも同様の考え方でURL移設が行われており、実例として2026年3月にクローラーのIPレンジ一覧ファイルの公開URLが /search/apis/ipranges/ から /crawling/ipranges/ へ移され、旧パスは6か月以内に廃止・リダイレクトされる予定です(GoogleクローラーのIPレンジ一覧が新URLへ移動した件の解説)。旧パスを一定期間併存させてから廃止・リダイレクトするという段取りは、本記事で述べた移行設計のセオリーそのものです。
リダイレクトに関するよくある質問
Q. 301リダイレクトはいつまで維持する必要がありますか?
Googleは「少なくとも1年間」を推奨しています。可能であれば恒久的に維持するのが望ましいです。外部サイトからの被リンクが旧URLに向いている場合、リダイレクトを解除するとそのリンク評価が失われるためです。サーバーコストの都合で永久維持が難しい場合は、被リンク数が多い上位ページのリダイレクトのみ維持し、被リンクのない低優先度ページは1年後に解除する段階的なアプローチが有効です。
Q. 301リダイレクトとcanonicalタグはどう使い分けますか?
301リダイレクトは「URLが変更された場合」、canonicalタグは「複数のURLで同じコンテンツにアクセスできる状態を解消する場合」に使います。URLそのものが変わるなら301、URLは残すが正規URLを指定するならcanonicalです。
| 状況 | 推奨手法 | 理由 |
|---|---|---|
| URLが完全に変わった | 301リダイレクト | ユーザーも検索エンジンも新URLに転送する必要がある |
| 同じコンテンツに複数URLでアクセス可能 | canonicalタグ | URLは残しつつ正規URLを検索エンジンに伝える |
| パラメータ違いの重複URL | canonicalタグ | パラメータ付きURLを残しつつ正規URLを指定 |
| HTTP→HTTPS移行 | 301リダイレクト | HTTP版へのアクセスをHTTPS版に転送 |
正規化の考え方をより深く知りたい場合は、canonicalタグとURL正規化の完全ガイドを参照してください。
Q. 大量のリダイレクトはサイト速度に影響しますか?
.htaccessに大量のリダイレクトルールを記述すると、サーバー処理に負荷がかかる場合があります。1,000件以上の個別ルールを書くとApacheのリクエスト処理時間が増える傾向があるため、その規模ではRewriteMapやデータベースベースのリダイレクトを検討しましょう。RewriteMapを使えば、ルールを外部ファイルに切り出してメモリ上のハッシュマップとして処理でき、パフォーマンスの劣化を防げます。
Q. JavascriptリダイレクトはSEOに影響がありますか?
Javascriptリダイレクトは、Googleがレンダリングして初めて認識されるため、サーバーサイドの301と比べて認識が遅れる可能性があります。SEO目的のリダイレクトには、必ずサーバーサイドの301/302を使用してください。
Q. リダイレクト設定後、Search Consoleでエラーが増えたのはなぜですか?
リダイレクト設定直後はGoogleが旧URLを再クロールするため、一時的にレポートでエラーが検出されることがあります。通常は2〜4週間で収束します。実際、GoogleのJohn Mueller氏らは、Search Consoleに表示される未インデックスや404、移行時のリダイレクトページの多くは対処すべき問題ではなく想定内の状態であることが多いと説明しています(GoogleがSearch Consoleの「エラー」表示を正常なケースが多いと説明した件)。すべての報告を修正対象とせず、いつもと異なるパターンがないかを見極めるのが実務的です。修正後にどうしても再クロールを早めたい場合の「Validate Fix」の使いどころは、GSCの「Validate Fix」を使うべき場面の解説が参考になります。
Q. リダイレクトマッピングはどのように管理すべきですか?
スプレッドシートで管理するのが一般的です。「旧URL」「新URL」「リダイレクト種類」「優先度」「被リンク数」「設定日」「確認日」のカラムを設け、チームで共有します。大規模サイトではCMS内のリダイレクト管理機能や専用ツールの導入も検討しましょう。
まとめ — リダイレクトは「正しい種類」と「正確な設定」が命
リダイレクトは、URLの変更時にSEO評価を守り、ユーザー体験を維持するための不可欠な仕組みです。本記事の要点を整理します。
- リダイレクトはURLを自動転送する仕組みで、HTTPステータスコードで制御される
- 恒久的な転送は301、一時的な転送は302。HTTPメソッドを維持するなら308/307を使う
- 301リダイレクトではSEO評価(PageRank)が新URLに引き継がれる
- .htaccess・Nginx・WordPress・Cloudflare・Vercelなど環境別に適切な設定方法がある
- 大規模リニューアルではマッピングシートによる体系的な設計が必須
- SPAサイトではサーバーサイドまたはエッジレベルでリダイレクトを処理する
- リダイレクトチェーン・ループは必ず回避し、1ホップに保つ
- 移行時は事前のマッピング作成と事後のモニタリングをセットで行い、最低1年は維持する
当サイト自身の /blog/→ルート直下への移行でも、301リダイレクトを1ホップに保つ設計でインデックス問題なく引き継げました。「正しい種類を選び、正確に、チェーンを作らずに設定する」——この基本を徹底することが、リダイレクト成功の要です。テクニカルSEO全体の実践はテクニカルSEO完全ガイドもあわせて確認してください。
本記事は、Google 検索セントラルの公開ドキュメント(リダイレクトと Google 検索)およびHTTP仕様の確立された定義に基づき、scale-basics.com編集部が作成しました。文中の当サイトの移行事例・実測値(TTFB平均0.19秒)は2026年7月に当サイトが自ら実施・計測したものです。設定例のドメイン名・パスはすべて説明用のサンプルです。