...

NGINXによるルールベースのリダイレクト - SEOと構造のベストプラクティス

NGINXによるルールベースのリダイレクトは、構造、ランキング、ロード時間を保証します。 nginxリダイレクト ルールを明確に、素早く、テストできるようにする。その際、私は 戻る パフォーマンスと リライト パターンに対して、ステータスコードをクリーンに保ち、チェーンやループを防ぐ [1][3]。

中心点

  • 戻る 高速な単一リダイレクトのため、 リライト サンプル[1][3]について
  • 301 パーマネント用、 302 一時的なものである。
  • HTTPS でクエリ文字列を強制します。 $is_args$args を受けた[1][5]。
  • 正規表現 経済的, ルール まとめる とテスト [3]
  • モニタリング チェーンから、404と インデックス作成 ロールアウト後
データセンター環境でNGINXを使用したSEO対応リダイレクト

NGINXディレクティブの簡単な説明

NGINXには2つの転送方法があります: 戻る そして リライト.単一の、明確に定義されたURLをリダイレクトしたい場合はreturnを使う。なぜなら、サーバは正規表現なしですぐに応答するからだ [1][3]。パターンやグループ、変数を評価する必要がある場合は、rewriteを使い、permanentやbreakなどのフラグでフローを制御します[1][7]。どちらのアプローチもお互いを補い合うものだが、単純なケースではreturnが第一選択であることに変わりはない。こうして、無駄のない、読みやすく、しかも フレキシブル.

NGINXのコンテキストと実行順序

を考慮に入れている。 シーケンス NGINXは、まずserver_nameで適切なサーバブロックを選択し、次にロケーションマッチングを行います(正規表現よりもプレフィックスベースのロケーションが優先され、最も長くマッチしたものが優先されます)[1]。 リライト-サーバー開始時のステートメントが早期に有効になる。 最後 新しい場所の検索を開始します、 休憩 は書き換えフェーズを終了する。 戻る は即座に応答する。これによって、ルールをどこに置くべきかを計画することができる。グローバルなカノニカルはserver{}に、細かいパターンはマッチするlocation{}ブロックに置く。

# 例: 早期のユニークなリダイレクト
サーバー
  リスン80
  サーバ名 alt.example.tld;
  return 301 https://neu.example.tld$request_uri;
}

いつ戻るか、いつ書き直すか?

をセットした。 戻るパターンが必要なく、ターゲットURLが固定されている場合。 パフォーマンス [1][3].パスグループ、大文字小文字の区別、パスの保存などのパターンについては、正規表現 [5][7]による書き換えが必要である。例:パス転送を伴うドメイン移動は、リライトと$1 [1]でエレガントに解決できる。新しいルートを指す個々の古い商品ページは、return [3]を使うことで、より迅速かつ安全にマッピングできる。この明確なスキームにより、後々のルールの衝突を防ぎ、監査を容易にする。

一貫した正規化の実装

私は早い段階でパスを決める ノーマライズ を設定できる:トレイリングスラッシュ yes/no、インデックスファイルの削除、www variant、ホストの正規化 [3]。これにより、特殊なケースが少なくなります。

スラッシュのない # 変形: /category/ → /category
書き換え ^/(.+)/$ /$1パーマネント;

スラッシュのある#変形: /category → /category/
書き換え ^/([^.]+)$ /$1/ 永続的;

# インデックスファイルの標準化
を書き換える ^/(.*)/index.(html|htm|php)$ /$1/ permanent;

にこだわる。 1TP4トゥーリ正規化されたパスベースが必要な場合は $request_uriクエリーを含むオリジナルのコール全体がターゲットにとって重要な場合。安全なパラメータ転送のためには $is_args$args 1つである[5]。

ステータスコードを正しく選択する

ステータスコードは、クローラーやブラウザがリダイレクトをどのように解釈するかを制御します。 アウェア.恒久的な移動については、301経由でシグナルを転送する。 クラリティ インデックスとユーザー[3]のためのものです。302は、テスト、バナー、短期的なA/Bルートなどの一時的なリダイレクトを知らせます。307/308はメソッドを保持し、APIやフォームのPOSTに適しています。次の表は、一般的なコードをコンパクトに分類したものです。

コード 用途 SEO効果
301 永久転用 信号が送信され、インデックスが更新される [3] 。
302 暫定ルート 古いURLが残り、シグナルは[3]と完全に一致しない。
307 一時的なもので、方法はそのまま フォームのPOSTやAPIに便利
308 恒久的な方法 恒久的なAPIルートの安定性

ステータスコードの洗練:410/451を正しく使う

内容物 永久削除 ターゲットを絞る 410ゴーンにリダイレクトされます。これは、古くなったURLがより早くインデックスから消え、ユーザーが明確なシグナルを受け取ることを意味する。法的にブロックされたコンテンツには 451.重要なのは一貫性です。私はキャンセルされた製品のシリーズリストを管理し、それを定期的にコンフィギュレーションに移行しています。

# ターゲット除去
location = /landing/action-2023 { return 410; }.

HTTPをHTTPSに安全にリダイレクト

私は一貫して、暗号化されていない通話を HTTPS を使うことで、ユーザとクローラは安全な variant [1]だけを見ることができます。$request_uri または $is_args$args を使用します。これにより、コンテンツの重複や中間目的地経由の不要なチェーンを防ぐことができます。証明書とSSLセットアップの背景についてもっと知りたい方は、このコンパクトな本に実用的なヒントがあります。 HTTPS転送.それは重要なことです:私は、クローラーが正しい参照を安定に保つように、正確に1つのcanonical host variantを定義します[3]。

安全なHTTPS:HSTSとキャッシュ

HTTPS の安定した切り替えの後、私は以下を有効にした。 こうそくきじょうほうそうちしきブラウザが将来的に暗号化されたリクエストを直接行えるようにするためだ。控えめに始めて、すべてのサブドメインが準備できたら期間を長くします。また キャッシング-リダイレクトのためのセマンティックは、不必要な再検証を避けるためである。

# HTTPSサーバでのみHSTSを使用する
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" 常に;

# 持続的リダイレクトのための明示的キャッシュヒント
ロケーション = /alt/kontakt
  add_header Cache-Control "public, max-age=86400";
  301 /contact/ を返します;
}

RegExリダイレクトをきれいに設定する

パターンには、私はあえて 正規表現 しかし、簡潔でテストしやすいようにする [3][5]。チルダ演算子はロケーションブロックのパターンを有効にし、~*は大文字/小文字を無視するため、典型的なタイピングのバリエーションをカバーする[5]。グループによって、関連するルートをグループ化し、残りのパスを$1で取ることができる[1]。.*のような極端に広いパターンは避け、具体的なパスアンカーを使うことでエンジンの無駄を省きます[3]。各ルールを簡潔に文書化することで、後からの拡張を切れ目なく実装できるようにしている。 機能.

ifトラップを避け、地図を使う

をセットした。 もし を好んで使う。 地図決断を下す リクエスト処理以外 3]を満たす。こうしてロジックをロケーションから切り離し、コンフィギュレーションをロバストに保っている。

# マップでレガシー行列をバンドルする
マップ $uri $legacy_target { { { $legacy_target
  デフォルト "";
  /alt/about-us /about-us/;
  /alt/shipping /service/shipping/;
}

サーバー
  if ($legacy_target != "") { return 301 $scheme://$host$legacy_target$is_args$args; } }.
}

クエリパラメータを正しく保持する

すべてのパラメータを $is_args$args または$request_uriを使うことで、トラッキング、フィルター、ページネーションが保持されます[5]。特定の値だけが必要な場合は、$argsを使って値を抽出し、setと適切な変数を使ってターゲットルートを調整する[5]。こうすることで、ユーザーは選択を失うことなく、適切な製品や検索ページに直接たどり着くことができる。このような配慮により、ユーザーの流れとコンテキストが保持されるため、バウンスが減少する。クローラーにとっても、これは明確である、 一貫した ターゲット

パラメータを失わずにクリーンアップする

特定の追跡パラメータが必要な場合がある 削除情報を失うことなく私は 1TP4タルグ そして 地図を使ってきれいな variant を作成し、正規化する。こうすることで、ユーザーの流れを乱すことなく重複を減らすことができる[3][5]。

# 例: utm_* を削除し、必須フィルタは残す
$args $clean_args { をマップする。
  デフォルトの$args;
  ~*^(.*)(?:&)?utm_[^&]+(.*)$ $1$2;
}

ロケーション /category/ {
  # クエリが本当に変更された場合のみリダイレクトする
  if ($args != $clean_args) { #
    return 301 $scheme://$host$uri$is_args$clean_args;
  }
}

研削とチェーンを避ける

防ぐ ループ条件を明確に限定し、AからAへ転送しない [3]。常に最終目的地を直接指し示し、中間ステーションを削除することで、チェーンの速度を落とす [3]。CMSのセットアップでは、プラグインがすでにリダイレクトを生成しているかどうかもチェックし、重複したルールが作成されないようにしている。CMSプラグインで問題が発生した場合、以下のような既知のトラップがないか素早くチェックする。 WordPressのリダイレクトループ.これにより、サーバーは無駄がなく、ユーザーは一回で目的地に到達できる。 ホップ.

セキュリティ:オープンリダイレクトの防止

パラメータから外部ターゲットを使用するオープンリダイレクトを許可しない ブラインド を引き継ぐ。その代わりに、許可されたホストやルートをホワイトリストに登録し、それ以外はすべてブロックしている。

# Secure /go?dest=...ホワイトリスト付き
マップ$arg_dest $go_ok {。
  デフォルト 0;
  ~^https?://(partner.tld|trusted.tld)(/|$) 1;
}
location = /go { { { $go_ok
  if ($go_ok = 0) { return 400; } } } } } { return 302 $ar_ok{デフォルト0; ~^https?
  return 302 $arg_dest;
}

バンドル・ルールとテスト・ルール

似たようなパターンを ルール そして、ブロックが互いに干渉しないようにシーケンスを明確にしておく [3]。それぞれのロールアウトの前に、nginx -tで構文をチェックし、ダウンタイムを避けるために設定をリロードする。curl -I を使ってステータスコード、ターゲット、ヘッダーを検証し、テストケースを小さなチェックリストにまとめておく。Apacheのマイグレーションについては、既存の htaccessリダイレクト を作成し、NGINXの構造体に転送します。これにより、ファイルが短くなり、保守しやすくなり 読みやすい.

ロギングと透明性

効果と副作用を見るために、私は次のように分けた。 3xx-ログ.これによって、連鎖、外れ値、間違ったルールを素早く認識し、必要に応じて的を絞った変更を加えることができる[3]。

# 3xx リクエストを別のログに書き出す
マップ $status $is_redirect { { $is_redirect
  デフォルト0;
  ~^30[12378]$ 1;
}

log_format redirects '$remote_addr - $time_local "$request" $status '
                     '$bytes_sent "$http_referer" "$http_user_agent"';
access_log /var/log/nginx/redirects.log redirects if=$is_redirect;

再出発と移籍の例

リローンチの際、私はリダイレクト・マトリクスを作成し、各旧URLを正確に1つの ゴール を割り当てる。私はカテゴリーパスをパターンにまとめ、新しいショップロジックに誘導し、個々のトップセラーはリターン経由で新しい詳細ページに誘導する。ドメインを移行する際は、ディープリンクとバックリンクが摩擦なく残るように、常にパス全体を採用する[1]。末尾のスラッシュについては、各ルートが有効なバリアントを1つだけ持つように、明確な線を定義する。同じことがwwwと非wwwにも当てはまり、私はホストフォームを選択し、そこに厳密にリダイレクトする。 バリアント [3].

国際化とジオターゲティング

多言語でのパフォーマンスには、私は次のものを頼りにしている。 安定したURL構造 (e.g. /de/, /en/)、Accept-Languageに基づく強制リダイレクトを避ける。音声認識を使う場合は 慎重 を、言語を変更するための明確なオプション付きの302として送信します。国のサブショップについては、クローラーがジオリダイレクトなしでどのようなバリアントでも検索できること、そして不要な301が作成されないことをチェックする[3]。

NGINXアーキテクチャ:高速の理由

リダイレクトでは、私は次のような恩恵を受けている。 イベントドリブン NGINX のアーキテクチャは、少ないプロセス数で多くの接続に対応できる [2]。マスターはワーカーを管理し、効率的に何千ものリクエストを受け付け、並列に応答します [2]。スレッドを多用するセットアップとは対照的に、これはRAMを節約し、コンテキストスイッチを減らし、高負荷時でも短い応答時間をもたらします[2]。TTFB値の短縮はランキングに貢献し、クリック満足度を高めます。このアーキテクチャは、NGINXがトラフィックのピーク時にもリダイレクトを使用することを前提としています。 速い を配信する。

CDNおよびアップストリームとの協力

CDNがすでに ホスト/HTTPSカノニカル NGINXで重複を無効化 - あるいはその逆。真実のソースは重要だ。エッジリダイレクトの場合、私はCDNエンジンを使用するのは、データを使用することを決定した場合だけだ。 縁の下 それ以外はすべてNGINXに残す。こうすることで、ルールセットの分岐を回避し、レイテンシーとメンテナンスを抑制している[3]。

展開後のモニタリング

広げた後、私はこう思った。 クロールエラーすべてのリダイレクトが計画通りに機能するように、ステータスコードとインデックスを作成する [3]。Search Consoleでは、404、soft-404、目立つチェーンをチェックし、クローラーレポートは間隔を置いてチェックする。不必要なホップはすべて時間と予算がかかるため、ロード時間もチェックする。異常があった場合は、早い段階でルールを調整し、効果を追跡できるように変更履歴を残す。このように常にコントロールすることで、リダイレクト・ランドスケープを維持している 健康的.

簡単にまとめると

をセットした。 戻る 単純な目標に対して、 リライト そのため、シグナルは保存され、ルートは明確なままである [1][3]。HTTPSリダイレクト、パラメータ保存、固定ホストバリアントは重複コンテンツを防ぎ、一貫性を強化します [1][5]。少数のよくまとまったルールの方が、多くの小さな正規表現を多用するエントリよりも、メンテナンスとパフォーマンスに有利だからです [3]。nginx -t と curl を使ったテストと継続的なモニタリングは、ライフサイクル全体にわたって品質を保証します。これらのガイドラインに従えば、ユーザーフローとランキングを確実にサポートする無駄のないリダイレクト戦略を構築することができます。

現在の記事