307一時リダイレクト

307 Temporary Redirectとは何か、302と違ってHTTPメソッドを厳密に保持する仕組み、HSTSや一時移動で現れる場所、GoogleがSEO上どう扱うかを解説します。

初回公開:2026年6月28日 · 最終更新:2026年8月22日 · Advanced
言語
このページには証拠シグナルが1件あります

307 Temporary Redirectは、Googleにとって302と同じ弱い一時シグナルです。元URLのランキングを対象へ移すものではないため、ランキング上どちらを選ぶ理由もありません。302との本当の違いは仕様上の保証で、307はリクエストメソッドとボディを変えないため、POSTはPOSTのままです。フォーム、API、現代的なフレームワーク(Next.jsの既定値は307)では重要ですが、通常のGETページのリダイレクトでは関係ありません。多くの人を混乱させる307はリダイレクトではなく、HSTSがhttpをhttpsへ更新するときにブラウザーだけが作る表示です。サーバーが送っていない0バイトのボディを持ち、リダイレクトチェッカーかHSTS状態を使わないプレーンなcurlで実際のステータスコードを確認できます。

TL;DR — 307はRFC 9110に従う一時的なリダイレクトで、“MUST NOT change the request method.” (翻訳)「リクエストメソッドを変更してはならない」という302にはない厳格な保証があります。SEO上は動きがなく、Googleの文書では*“Equivalent to 302”* (翻訳)302と同等」という弱い一時シグナルです。Muellerも307と302の選択は*“doesn’t really matter”* (翻訳)「実際には重要ではない」と述べており、差が出るのはPOSTやAPIのトラフィックを正しく扱う必要があるかどうかです。実際に混乱を招く307はHSTSのブラウザー内アーティファクトで、サーバーが送っていない0バイトの「リダイレクト」です。httpをhttpsへブラウザーが自動更新したときに作られます。この2つの機能的に無関係なケースを分けることがこの記事の中心です。

307にはまったく異なる2つのケースがある

以下を整理する軸は、私のステータスコードガイド から直接導いたものです。そこでは307に2つの別々の項目があります。“307 Temporary Redirect – Has the same functionality as a 302 redirect, except you can’t switch between POST and GET” (翻訳)「307 Temporary Redirect — 302リダイレクトと同じ機能だが、POSTとGETを切り替えられない」と、“307 HSTS Policy – Forces the client to use HTTPS when making requests instead of HTTP.” (翻訳)「307 HSTS Policy — HTTPではなくHTTPSでリクエストするようクライアントに強制する」です。同じ番号を共有するだけで、ほかはほとんど別物です。

  1. 実サーバーが発行する一時的な307 — 非GETリクエストでHTTPメソッドとボディを保つために意図的に選ぶ、またはフレームワークが既定値として選ぶものです。
  2. HSTSによるブラウザーアーティファクトとしての307 — サーバーレスポンスではありません。ブラウザーがhttpをhttpsへ内部的に更新し、その更新に307というラベルを付けます。

この2つを混同することが、307をめぐる混乱の最大の原因です。ここから1つずつ見ていきます。

ケース1:実際の307 — 仕様が要求すること

RFC 9110(現在のHTTPセマンティクス仕様)§15.4.8の文言は明確です。

“The 307 (Temporary Redirect) status code indicates that the target resource resides temporarily under a different URI and the user agent MUST NOT change the request method if it performs an automatic redirection to that URI.” (翻訳)「307(Temporary Redirect)ステータスコードは、対象リソースが一時的に別のURIに存在することを示し、ユーザーエージェントは自動リダイレクトを行う場合にリクエストメソッドを変更してはなりません。」

Evidence for this claim RFC 9110 defines 307 Temporary Redirect as a temporary move and requires clients not to change the request method when following it automatically. Scope: HTTP semantics for real server 307 responses, not browser-internal HSTS displays. Confidence: high · Verified: IETF: RFC 9110 §15.4.8 — 307 Temporary Redirect

この*“MUST NOT”* (翻訳)「変更してはならない」は提案ではなく、厳格な要件です。307が解決するために作られた歴史的な302の混乱を、§15.4.3の記述と比べてください。“For historical reasons, a user agent MAY change the request method from POST to GET for the subsequent request. If this behavior is undesired, the 307 (Temporary Redirect) status code can be used instead.” (翻訳)「歴史的な理由から、ユーザーエージェントは後続リクエストでPOSTからGETへメソッドを変更してもよい。この動作が望ましくない場合は、代わりに307(Temporary Redirect)を使える」と書かれています。つまり307は、古いクライアントが302で持っていたPOST→GETの曖昧さをなくすために存在します。

MDNは同じ違いを実用的に説明しています。

“The difference between 307 and 302 is that 307 guarantees that the client will not change the request method and body when the redirected request is made. With 302, older clients incorrectly changed the method to GET. 307 and 302 responses are identical when the request method is GET.” (翻訳)307302の違いは、リダイレクト後のリクエストでクライアントがメソッドとボディを変更しないことを307が保証する点です。302では古いクライアントが誤ってメソッドをGETに変更しました。リクエストメソッドがGETなら、307302のレスポンスは同一です。」

最後の文がSEOにとって最も重要です。SEO担当者が扱うリダイレクトのほとんど、つまり古いページを新しいページへ移すケースはGETリクエストであり、GETでは307と302は文字どおり同一です。メソッド維持の保証が効くのは、メソッドがGETではない場合だけです。フォームの再送、APIエンドポイント、Webhookの宛先、決済や認証のPOST引き継ぎなどが該当します。仕様が保証するのはメソッドとボディであり、リプレイ時のヘッダー、資格情報、クロスオリジンリクエストの扱いまで自動的に決めるわけではありません。実際のクライアントで確認し、バイト単位の動作を思い込まないでください。通常のページ移動で2つのコードを比較する場合は、専用の302と307の記事で詳しく扱っています。この記事は一時リダイレクトの基本を知っている前提で、307固有の点に集中します。

302・303・307を1つの表で比較

3つともRFCの「一時的」な分類に入りますが、重要な2軸、つまりメソッド維持とキャッシュでは同じ動作をしません。

コード自動リダイレクト時のメソッドヒューリスティックにキャッシュ可能か
302 FoundPOSTからGETに変わることがある(歴史的なクライアント動作で、RFCの要件ではない)いいえ
303 See Other対象をGETまたはHEADで意図的に取得するいいえ
307 Temporary Redirectメソッドを変更してはならないいいえ

3つとも既定ではヒューリスティックにキャッシュ可能ではありません。307(302や303と同様)をキャッシュが再確認なしに保存するには、Cache-ControlExpiresなど明示的な鮮度シグナルが必要です。

ケース1・続き:Googleは実際の307をSEO上どう扱うか

短く言えば、302とまったく同じです。Googleの*“HTTP Status Codes”* (翻訳)「HTTPステータスコード」文書では307の行を*“Equivalent to 302”* (翻訳)302と同等」とし、307が引き継ぐ302の行は次の意味を説明しています。

“By default, Google’s crawlers follow the redirect, and Google systems use the redirect as a weak signal that the redirect target should be processed.” (翻訳)「既定ではGoogleのクローラーがリダイレクトに従い、Googleのシステムはリダイレクトを、対象を処理すべきだと示す弱いシグナルとして使います。」

「弱い」が重要な語です。一時的なリダイレクトは、永久リダイレクトのように対象へ正規化を集約しません。Googleの*“Redirects and Google Search”* (翻訳)「リダイレクトとGoogle検索」文書は302、303、307を「temporary」としてまとめ、動作を直接説明しています。“Googlebot follows the redirect, but the indexing pipeline doesn’t use the redirect as a signal that the redirect target should be canonical.” (翻訳)「Googlebotはリダイレクトに従うが、インデックス処理パイプラインは対象を正規URLにすべきだというシグナルとしてリダイレクトを使わない」としています。同じページは、“If you just want to send users to a different page temporarily, use a temporary redirect.” (翻訳)「利用者を一時的に別ページへ送るだけなら、一時的なリダイレクトを使う」と説明します。

Evidence for this claim Google's indexing pipeline does not use a temporary 302, 303, or 307 redirect as a signal that the redirect target should be canonical. Scope: redirect crawling, indexing, and canonicalization Confidence: high · Verified: Redirects and Google Search

307と308の行の直後に、Googleは壁に刻んでおきたい注意書きを加えています。

“While Google treats these status codes the same way, keep in mind that they’re semantically different. Use the status code that’s appropriate for the redirect so other clients (for example, e-readers, other search engines) may benefit from it.” (翻訳)「Googleはこれらのステータスコードを同じように扱うが、意味は異なることを覚えておく必要がある。ほかのクライアント(電子書籍リーダーや別の検索エンジンなど)が恩恵を受けられるよう、リダイレクトに適したステータスコードを使うべきだ。」

Googleはランキング上は307と302を同じ箱に入れますが、意味に合うコードを選ぶようにも求めています。SEOについての答えはこれに尽きます。 Evidence for this claim Google treats 307 as equivalent to 302 for Search while noting that the HTTP semantics differ. Scope: Google Search redirect handling; clients still need the semantically appropriate status code. Confidence: high · Verified: Google: HTTP status codes and Search John MuellerはSearch Off the Record第51回「Let’s talk redirects」でさらに率直に、“with 307, 308, it also forwards POST requests” (翻訳)「307と308ではPOSTリクエストも転送される」と説明しました。301/302がGETリクエストを転送するのとは対照的です。そして結論として次のように述べています。

“I think for SEO, it doesn’t really matter. It’s more like, I don’t know… Does it work for APIs or not? And usually, APIs are not something that you need to have indexed directly in Search.” (翻訳)「SEOでは実際には重要ではないと思う。むしろ、APIで機能するかどうかだ。通常、APIは検索に直接インデックスさせる必要があるものではない。」

一時的なリダイレクトを307へ変えても、ランキング上の利点はありません。選ぶ正当な理由はメソッドとボディの維持、または後述する一般的な将来対応の好みだけです。

ケース1・続き:フレームワークとCDNの既定値

「なぜ307なのか」という質問の多くは、意図的な選択ではなくフレームワークの既定値です。Next.jsredirect()関数は307を既定値にしており、見出しそのものが*“Why does redirect use 307 and 308?”* (翻訳)「なぜredirectは307と308を使うのか」となっています。文書は理由を、“The redirect() method uses a 307 by default, instead of a 302 temporary redirect, meaning your requests will always be preserved as POST requests.” (翻訳)redirect()メソッドは302の一時リダイレクトではなく、既定で307を使うため、リクエストは常にPOSTとして保持される」と明記します(Next.jsはServer Actions内では303を使い、308については別のpermanentRedirect()を提供します)。自分で307を書いていないのに見えるなら、フレームワークやエッジプラットフォームが非GETリダイレクトに既定で使っていないか確認してください。通常はそれが理由で、正しい動作です。

ケース2:サーバーが送っていないHSTSの「幻の307」

ここは十分に説明されておらず、専用の307記事が価値を持つ領域です。サイトがStrict-Transport-Security(HSTS)ヘッダーを送ると、ブラウザーに「これからは常にhttpsだけで読み込む」と伝えます。次にhttp版へリクエストすると、ブラウザーはサーバーと通信せず自分でhttpsへ更新し、その内部更新を開発者ツールやクローラーに「307」と表示します。

John Muellerは自身のサイトでこの仕組みを説明しました。

“After seeing the HTTPS URL with the HSTS header (for example, with any redirect from the HTTP version), Chrome will act like it’s seeing a 307 redirect the next time you try to access the HTTP page. Your server’s not returning a 307, Chrome is just showing it to you as such to explain that it’s doing the redirect for you.” (翻訳)「HSTSヘッダー付きのHTTPS URLを見た後(例えばHTTP版からのリダイレクトを通じて)、次にHTTPページへアクセスするとChromeは307リダイレクトを見ているように動作する。サーバーは307を返しておらず、Chromeが自分のためにリダイレクトしていることを説明するためにそう表示しているだけだ。」

0バイトのボディが手掛かりです。Muellerも、“the 307 isn’t actually a redirect at all, it’s just a placeholder.” (翻訳)「307は実際にはリダイレクトではなく、単なるプレースホルダーだ」と加えています。私のリダイレクト ガイド は監査上の実務的な結論を、“When web servers require clients to only use HTTPS connections (HSTS policy), Google won’t see the 307 because it’s cached in the browser. The initial hit (without cache) will have a server response code that’s likely a 301 or a 302. But your browser will show you a 307 for subsequent requests which makes it more difficult to troubleshoot. You will need to use a fresh Incognito session to see the returned status code.” (翻訳)「WebサーバーがクライアントにHTTPS接続だけを要求する場合(HSTSポリシー)、ブラウザーにキャッシュされるためGoogleは307を見ない。キャッシュなしの最初のアクセスでは、おそらく301または302のサーバーレスポンスになる。しかしブラウザーは後続リクエストで307を表示するため、トラブルシューティングが難しくなる。返されたステータスコードを見るには新しいシークレットセッションが必要だ」と説明しています。

HSTSについてGooglebotが実際に見るもの(そして変化した経緯)

5年離れたGoogleの2つの発言を一緒に読む価値があります。2015年12月、当時GoogleにいたZineb Ait BahajjiはSearch Engine Roundtable 経由で、“With HSTS implemented, Googlebot sees a 301 redirect (try it with Fetch as Google). The 307 is just an ‘internal redirect’.” (翻訳)「HSTSを実装するとGooglebotは301リダイレクトを見る(Fetch as Googleで試せる)。307は単なる『内部リダイレクト』だ」と述べました。2020年10月、MuellerのAsk Google Webmasters動画(Search Engine Journal 経由)の表現は少し違い、“In short, [Googlebot] doesn’t interact with them. 307 redirects are generally not real redirects.” (翻訳)「要するに、[Googlebot]はそれらとやり取りしない。307リダイレクトは通常、本物のリダイレクトではない」としました。いずれにせよ、クローラーは人間が開発者ツールで見る同じ「307」を見ていません。Fetch as GoogleがURL Inspectionに置き換えられるなど、ツールとクロール基盤は変わりましたが、HSTSの場合にサーバー発行の本物の307はないという点は少なくとも10年間変わりません。2020年の発言を現行指針として扱い、2015年の発言は有用な歴史として扱ってください。

実務上の重要な結論は、HSTSはブラウザーの利便性であってクロール発見の仕組みではないということです。クローラーにもhttp→httpsの経路を機能させたいサイト所有者は、本物のサーバー側リダイレクト(実際の301)を用意し続ける必要があります。

Bingは307をどう扱うか

率直に言えば、文書上の空白があります。Bingが307という名前、またはHSTSによる307を具体的に扱う公開声明は見つかりませんでした。Bingのリダイレクトガイダンス(2011年の*“Managing redirects – 301s, 302s and canonicals”* (翻訳)「リダイレクトの管理 — 301、302、正規URL」記事と、2020年の*“Website Migration with Bing”* (翻訳)「Bingを使ったウェブサイト移行」記事)は301/302の永久・一時の分離だけを扱い、307、308、HSTSには触れていません。したがってGoogleと同じだと仮定せず、Bingは307について公開の具体的説明をしていないとそのまま扱うべきです。現象自体は検索エンジンに関係なく実在し、クローラーにも関係します。Screaming FrogのSEO SpiderがHSTSがクロールに影響するため*“Respect HSTS Policy”* (翻訳)「HSTSポリシーを尊重」トグルを備えているのはそのためですが、これはBingの声明ではなくツールの文書です。

307を意図的に選ぶ場面

元のメソッドやボディを失うと動作が壊れる場合は、302ではなく307を選びます。

  • APIエンドポイントとWebhookの宛先 — POST/PUT/PATCHを受け取るもの。
  • フォーム送信(POST)の流れ — 処理後にリダイレクトするもの。
  • 決済/ログインのPOST引き継ぎ — ホスト間で処理を渡すもの。
  • ボディを持つリクエスト全般 — 失う余裕がないもの。

通常のページ間移動では、302と307はGoogleにとって区別できないため、SEOの観点ではどちらでも構いません。このメソッド維持ロジックの永久版を扱うなら、301と308の関係になります。307が302に対応するように、308は301に対応します。

私のリダイレクト ガイド で示した好みは、「どちらでもよい」という一般的な説明より踏み込んでいます。“my preferred order would be: 307 / 302 / 303 > Meta refresh 0 / HTTP refresh 0.” (翻訳)「私の好みの順序は307 / 302 / 303 > Meta refresh 0 / HTTP refresh 0」です。一時的な選択肢では307を先頭に置いています。一貫して使えば、メソッド維持の面では常に安全になるという、Muellerの「完全性」に近い考え方です。どれを選んでも、本物の307(またはHSTSアーティファクト)が長いリダイレクトチェーンの1ホップにならないよう注意してください。余分なホップは遅延と効率低下を生みます。

Try it live

This is a real endpoint on this site — not a simulation. Hit it from the button, open it in a new tab, or curl -i it from your terminal, and the server answers with the actual status code this article is about.

Open in new tab ↗

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.