リダイレクト API と Rules as Code: URL 変更を CI/CD で安全に運用する
リダイレクトルールは本番トラフィックの設定です。レビュー、検証、ステージング、公開、監視、ロールバックまで含めて扱うべきです。

リダイレクトは、最初は小さな修正として始まります。商品 URL が変わる。ヘルプページを移動する。キャンペーン LP の slug を変える。誰かが next.config.js、Cloudflare、CMS プラグイン、Nginx に 1 行追加する。
数件なら問題になりません。EC サイトの移行、ドメイン変更、ヘッドレス化、LINE や広告からのキャンペーン流入、パートナーリンクが絡むと、同じ運用はすぐに危うくなります。
リダイレクトルールは、古い検索流入、QR コード、広告クリック、メール、アフィリエイト、ドキュメント URL の行き先を決めます。これは小さな設定ではなく、本番トラフィックの設定です。
安全な形は、リダイレクトをデプロイ可能な設定として扱うことです。ルールを構造化し、CI で検証し、ステージングで挙動を確認し、production には versioned snapshot を公開し、ロールバックを先に用意します。
なぜリダイレクトをリリースフローに入れるのか
開発チームはすでに環境変数、DB migration、feature flag、middleware をレビューしています。SEO、広告、売上に影響するリダイレクトも同じ扱いが必要です。
弱い運用はこうなりがちです。
- SEO がスプレッドシートを持つ
- 開発が app config にコピーする
- マーケティングが別ツールで campaign destination を変える
- CMS プラグインが見えない redirect を作る
- CDN が hostname を正規化する
- 問題が起きたとき、どの層が反応したかわからない
Rules as Code は、redirect map をレビュー可能な成果物にします。YAML、JSON、Terraform、CSV、API payload のどれでも構いません。大事なのは、誰が承認し、何を検証し、どう戻すかです。

source と destination だけでは足りない
old_url と new_url だけでも redirect はできます。ただし、安全には運用できません。
意図まで含めた契約にします。
{
"source": "/old-pricing",
"destination": "/pricing",
"status": 301,
"match": "exact",
"queryPolicy": "preserve_allowlist",
"preserveQuery": ["utm_source", "utm_medium", "utm_campaign", "gclid"],
"owner": "growth",
"reason": "pricing page consolidation",
"expiresAt": null
}EC や移行では、priority、locale、country、device、batch、review status、fallback も必要になります。
| フィールド | 必要な理由 |
|---|---|
status | 恒久移転は 301/308、一時的なキャンペーンやテストは 302/307 |
match | exact、wildcard、regex、host、query、header、condition を区別する |
queryPolicy | UTM、click ID、coupon、affiliate ID を落とさない |
owner | SEO、サポート、analytics の問い合わせ先を明確にする |
batch | 移行単位で publish と rollback を行える |
expiresAt | 一時的なキャンペーンルールを放置しない |
Google のリダイレクト説明でも、恒久か一時か、検索結果にどの URL を出したいかが判断の軸になります。CI はその判断を代行しませんが、危険な組み合わせは止められます。
API sync で手作業を減らす
リダイレクトは repository の外で生まれます。CMS の slug が変わる。EC カタログの商品が終了する。docs の version が変わる。SEO 会社が migration map を渡す。パートナー用の branded link が必要になる。
すべてを手作業で転記すると、すぐにズレます。
Redirect API は境界を整理します。
| 発生元 | API で行うこと |
|---|---|
| CMS | slug 変更時に redirect を作成。ただし重要ページは承認待ちにする |
| EC カタログ | 販売終了商品を代替商品、カテゴリ、waitlist、unavailable page に送る |
| Docs build | 旧 docs path を release と一緒に公開する |
| Migration sheet | 承認済み batch を import、validate、snapshot として公開する |
| Internal tools | support や ops が CDN 権限なしで rule を依頼できるようにする |

Cloudflare は Rulesets API で redirect rule を作成できます。Next.js や Vercel も config で redirects を持てます。実行層はあります。難しいのは、validation、owner、staging、analytics、rollback です。
CI で確認すべきこと
Redirect の CI は、構文だけではなく挙動を確認します。
確認項目:
- source の重複
- destination の形式
- owner、reason、status の欠落
- exact rule を隠す wildcard や regex
- 期間限定キャンペーンに permanent status が付いていないか
- destination の 404、410、5xx、予期しない redirect
- redirect chain の長さ
- loop
- UTM、click ID、coupon、partner ID の欠落
- country、device、header、query 条件に fallback があるか
- 他 batch との衝突
重要 URL は request matrix で確認します。
source=/old-pricing
country=JP
device=desktop
query=?utm_source=google&gclid=test
expectedStatus=301
expectedDestination=/pricing?utm_source=google&gclid=testこれで、公開前に実際の到達先を説明できます。

staging は最終ルートを見せる
リダイレクト用 staging は、次の質問に答えるべきです。この URL と request context なら、本番で何が起きるのか。
表示したい情報:
- match した rule
- status code
- final destination
- query handling
- condition result
- competing rules
- chain length
- owner と batch
- published snapshot との差分
GitHub Actions の environments は deployment 前に reviewer を要求できます。同じ考え方を redirect にも使えます。CI が検証し、staging が証拠を出し、production publish は正しい owner の承認を待ちます。
rollback は機能要件
リダイレクトの rollback のために origin app を深夜に redeploy するべきではありません。
公開済み snapshot を保存します。import batch に tag を付けます。一時キャンペーンと恒久 migration を分けます。緊急 override は見える場所に置きます。
| 問題 | より安全な対応 |
|---|---|
| migration batch が間違っていた | batch を停止または rollback |
| 重要ページの行き先が違う | 高優先度の exact rule を追加 |
| campaign landing が落ちた | 一時的に fallback へ切り替える |
| regex が広すぎた | pattern を止め、例外を明示的に公開 |
| query policy で analytics が壊れた | 以前の policy に戻し、UTM 付き URL を再テスト |
SEO、広告、サポート、売上に影響する rule なら、rollback は最初から設計に入れるべきです。
UrlEdge が担う部分
UrlEdge は、URL 変更のたびに origin deploy をしたくないチームのための redirect workflow です。
- API で domain、rule、publish、自動化を扱う
- Redirect Management で owner、analytics、snapshot、rollback を管理する
- Bulk URL Management で migration map や大量 import を処理する
- Advanced Redirect Rules で wildcard、regex、query、condition を扱う
- Redirect Checker で route と status を確認する
- Collaboration で SEO、marketing、platform、agency の review をそろえる
アプリに属する小さな redirect は app config に残せます。単純な host 正規化は CDN でも構いません。レビュー、証拠、自動化、早い復旧が必要になったら、Redirect API と Rules as Code の出番です。
FAQ
Redirect rules as code とは何ですか?
リダイレクトルールを構造化されたレビュー可能な形式で管理し、検証、staging、公開、rollback を通す運用です。
すべて Git に置くべきですか?
いいえ。安定した migration rule には Git が向きます。CMS、EC、partner、internal tool から生まれる rule には API sync が向きます。
CI/CD から直接 publish できますか?
できます。ただし validation、staging evidence、権限、リスクの高い変更の approval、rollback が必要です。
参考文献
関連記事
すべて見る
EC向けGeo Redirect: 国別ストア、通貨、言語、SEOを壊さないfallback
Geo Redirectはユーザーを正しい地域ストアへ送れますが、強制しすぎると検索エンジンやユーザーからローカルページを隠してしまいます。

UTM・QR・パートナー流入を壊さないブランド付きキャンペーンリンク
キャンペーンリンクは見た目が信頼できるだけでなく、UTM計測を保ち、LINE配信、QR印刷、パートナー掲載後も行き先を直せる必要があります。