504 Gateway Timeout(ゲートウェイタイムアウト)

504 Gateway Timeoutの意味、遅いupstreamサーバーが504を引き起こす仕組み、Googlebotがタイムアウトを扱う方法、クロールバジェットとインデックス登録への影響を解説します。

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

504 Gateway Timeoutは、ゲートウェイまたはプロキシ(CDN、ロードバランサー、リバースプロキシ)が背後のupstreamサーバーから時間内にレスポンスを受け取れなかったことを意味します。502(不正なレスポンス)や503(明示的な利用不能)とは異なるタイムアウトです。Googleのペナルティではなく、アクセシビリティの問題です。単発の504は再試行されますが、429/500/503と同様にタイムアウトが続くとGooglebotは速度を落とし、持続すればページがインデックスから削除される可能性があります。修正する前に実際にタイムアウトしたホップを特定してください。サーバーレスポンスタイム(TTFB)は遅いoriginに対する強力な予防策ですが、タイムアウト値を上げるだけでは解決しません。

TL;DR — 504は、upstreamサーバーがタイムアウト時間内に応答しなかったとゲートウェイ/プロキシが伝えるものです。502(不正なレスポンス)や503(明示的な利用不能)とは異なるタイムアウトです。ペナルティではなく、アクセシビリティの問題です。504は429/500/503と同じグループに入り、Googlebotはこれらを検知するとクロールを控えます。504が続くとインデックス削除のリスクがあります。持続的な解決策は、タイムアウト値を長くすることではなく、サーバーのレスポンスタイム(TTFB)を改善することです。タイムアウトを延ばすと、通常は遅いupstreamを隠し、負荷下では事態を悪化させることがあります。

リクエストチェーンのどこで504が発生するか

現代のリクエスト経路は、おおむねブラウザ → CDN/エッジ → ロードバランサー → リバースプロキシ(例:Nginx) → アプリサーバー(PHP-FPM、Nodeなど) → データベース/サードパーティAPIです。タイムアウトが切れたとき、背後のコンポーネントを待っていたコンポーネントが504を生成します。最初に確認すべき診断上の問いはこれです。 Evidence for this claim A 504 response means a gateway or proxy did not receive a timely response from an upstream server. Scope: RFC 9110 defines the timeout semantics; it does not determine why the upstream response was delayed. Confidence: high · Verified: IETF: RFC 9110 §15.6.5 — 504 Gateway Timeout

  • CDN/エッジがoriginでタイムアウト → originのパフォーマンスを改善するか、CDNのupstreamタイムアウトを慎重に引き上げます(後述)。
  • ロードバランサーがアプリサーバーでタイムアウト → アプリサーバーの状態とオートスケーリングを確認します。
  • リバースプロキシがアプリプロセスでタイムアウト → Nginxのproxy_read_timeoutfastcgi_read_timeoutと、その背後にある遅いクエリまたはプロセスを確認します。

レイヤーを正しく特定することが重要です。「エッジのタイムアウトを直す」のと「originの遅いデータベースクエリを直す」のは、まったく別の作業だからです。

504の原因

ステータスコードだけでは原因は証明できません。分かるのは、ゲートウェイがupstreamを待ってタイムアウトしたということだけです。以下は確認すべき典型的な候補であり、504がすでに証明した事実ではありません。どれかに対応する前に、ログとトレースで確認してください。

  • 遅いデータベースクエリまたはupstream API呼び出し。 インデックスのないクエリ1つや、応答の遅いサードパーティ依存先によって、レスポンスタイムがタイムアウトを超えることがあります。
  • サーバー/アプリの過負荷とリソース枯渇。 十分な同時負荷がかかると、リクエストが待ち行列に並び、ワーカープロセスが埋まり、レスポンスが時間内に届かなくなります。
  • タイムアウト値の設定ミス。 Nginx、Apache、ロードバランサー、CDNの各レイヤーで値が一致せず、別のレイヤーより先に1つが諦めることがあります。
  • トラフィック急増、ボットの大量アクセス、DDoS。 一時的に処理能力を圧迫します。

504は断続的で負荷に依存することが多い

これが504を厄介にします。完全な停止とは異なり、504は負荷がかかっているときだけ発生することがよくあります。そのため、静かな時間帯に稼働監視が実行されると100%正常に見える一方、より大きなバーストでクロールするGooglebotはひそかにタイムアウトを収集している可能性があります。Google Search ConsoleのURL検査では、明確で継続的なエラーではなく、**「Hostload exceeded」**という状態として表示されることがあります。監視は問題ないのにクロールの統計情報が異なる場合、負荷依存の504が有力な容疑です。

Googlebot(およびBingbot)はタイムアウトをどう扱うか

Googleは504をコンテンツ品質の判断として扱いません。利用可能性のシグナルとして扱い、応答は自動的なスロットリングになります。クロールに関するドキュメントには、次のように明記されています。 “Googlebot will scale back its crawling if it detects that your servers are having trouble responding to crawl requests.” (翻訳)「サーバーがクロールリクエストへの応答に問題を抱えていると検知すると、Googlebotはクロールを縮小します。」大規模サイト向けのクロールバジェットガイドも、予算の観点から同じことを述べています。 “If the site slows down or responds with server errors, the limit goes down and Google crawls less.” (翻訳)「サイトの速度が落ちたりサーバーエラーで応答したりすると、上限が下がり、Googleのクロール量も減ります。」 Evidence for this claim Google reduces crawling when server errors or slow responses indicate a site is having trouble responding. Scope: Google's documentation supports automatic crawl throttling for server trouble; it does not attribute a specific 504 to any particular bottleneck. Confidence: high · Verified: Google: Troubleshoot crawling errors

遅いレスポンスやタイムアウトするレスポンスに直接結び付けた最新の説明は、Googleの2026年3月のInside Googlebot解説です。そこではGary Illyesが次のように述べたと引用されています。 “If your server is struggling to serve bytes, our crawlers will automatically back off to avoid overloading your infrastructure, which will drop your crawl frequency.” (翻訳)「サーバーがバイトの配信に苦労している場合、クローラーはインフラへの過負荷を避けるため自動的に速度を落とし、その結果クロール頻度が下がります。」(Search Engine Landの報道によるものです。他所で引用するなら、元の録音または文字起こしで確認する価値があります。)504は、その苦闘が目に見える形になったものです。

理解しておきたい注意点があります。Googleはブラウザと同じように、常に文字どおりの「504」を確認できるとは限りません。Googlebotがステータス行をまったく受け取る前にタイムアウトすると、クロールの統計情報では明確な5XXではなくタイムアウト/ネットワークエラーとして記録されます。一方、中間プロキシやCDNがタイムアウトして独自の504レスポンスを生成すると、Googlebotは標準的な5XXサーバーエラーを受け取ります。どちらの場合も効果は同じで、クロールレートが抑制され、続けばインデックスから削除されます。

Bingはタイムアウトをサーバーエラーとは別のクロールエラー分類として記録します。レスポンスが遅すぎるとBingbotはページへのアクセスを試みなくなり、継続的な推奨事項として、サーバーレスポンスタイムの確認、サーバーソフトウェアの更新、遅いリソースの最適化、単発の異常ではなく体系的なパターンを確認するためのサーバーログの参照を挙げています。BingはGoogleと同じレベルのスロットリング後の回復の詳細を公開していないため、意図はおおむね似ていると考えてください。挙動が同一だと確認されたわけではありません。

スロットリングしてから回復するフィードバックループ

安心できる点は、このループが自動的に自己修正することです。Googleはエラーやタイムアウトを検知するとクロールを抑え、レスポンスが健全になると徐々にクロールを再び増やします。根本原因を直した後に手動で押す「スロットリング解除」ボタンはありません。John Muellerも次のように述べています。 “Once things settle down on the server, the crawl rate will return to normal automatically.” (翻訳)「サーバーの状態が落ち着けば、クロールレートは自動的に通常へ戻ります。」同氏は非対称性も指摘しています。問題にすぐ対処するため、下げるスロットリングは速く行われますが、再び増やすときは慎重です。

一時的な異常がインデックス問題に変わるのは継続期間

短時間で解消した、急増時の数回の504のような短く一時的な504は、再試行され、大部分が許容されます。インデックス削除のリスクになるのは、長い期間にわたる継続的なタイムアウトのパターンです。過負荷時に意図的に503または429を返す「後で戻ってきてください」という仕組みについて、Googleの文書はURLが削除され始めるまでのおおよその2日という時間軸を示しています。ただし、この具体的な数字が文書化されているのは503/429であり、504ではありません。Googleのより一般的な5xxガイダンスでは、クロールレートはエラーになるURLの数に比例して下がり、レスポンスが健全になると徐々に回復するとされていますが、504について固定された期間は示されていません。2日という数字を504に拡張するのは合理的な推論であって、文書化された事実ではありません。短い504は乗り越えられますが、数日続くパターンは心配すべき範囲であり、発生日を保証するトリガーではない、と考えてください。

大規模サイトやECサイトで重要性が増す理由

公開した当日にページがクロールされる小規模サイトなら、ほとんど気づかないでしょう。しかし大規模または頻繁に変化するサイト(大きなECカタログ、ニュース、マーケットプレイス)では、クロールバジェットがすでに制約となっています。ピーク負荷中の504の波は、本当に再クロールが必要なページのクロールを圧迫する可能性があります。規模が大きくなると、タイムアウトとクロールバジェットは同じ話です。

サーバーレスポンスタイムとTTFBは強力な予防策 — origin側の原因に対して

多くの504記事が見落としている点があります。エラーが現れてからログをgrepするのは事後対応です。サーバーレスポンスタイムを継続的に監視し、タイムアウトへ転じる前の変化を捉えるのが予防対応です。今日、遅いがまだタイムアウトしていないサーバーは、少し負荷が増えるか依存先が少し遅くなるだけで、明日は504を生成するサーバーになります。**TTFB(time to first byte)**を事後検証の指標だけでなく継続的な早期警告シグナルとして監視することで、その変化を捉えられます。

ただし、TTFBの監視が対象にするのはorigin側の遅さです。正常なoriginに対するCDNのタイムアウト、早く諦めるよう誤設定されたロードバランサー、ホップ間のネットワーク経路の問題は検知できません。まず、どのホップが発生させたのかを特定する必要があります(上の「リクエストチェーンのどこで504が発生するか」、または下の意思決定ツリーを参照)。TTFBは、本当に遅いupstreamという一般的なケースには現実的で持続的な解決策ですが、万能ではありません。originがボトルネックだと確認したら、ページ・オブジェクト・CDNのキャッシュ、より速いデータベースクエリと適切なインデックス、負荷に応じたオートスケーリング、妥当なCDN upstream設定で最適化します。

「タイムアウトを単に引き上げる」が間違った直感である理由

proxy_read_timeoutやCDNのupstreamタイムアウトを引き上げると、504が表示されなくなることはあります。しかし、upstreamのレスポンスが速くなるわけではありません。さらに負荷下で待ち時間を長くすると、リクエストが積み上がり、ワーカープロセスと接続をより長く占有するため、過負荷の悪循環を改善するどころか悪化させる可能性があります。タイムアウトの延長が正しい場合もあります(本当に長時間かかることが分かっている処理など)が、反射的に行うと本当の問題を隠します。

停止が計画済みであるか、意図的に負荷を減らしている場合、正しい手段はページを504に任せることではありません。503Retry-Afterヘッダー付き)を返し、検索エンジンに雑なタイムアウトではなく、明確で意図的な「後で戻ってきてください」を伝えます。

実際に504を診断する

原因を推測する前に、発生させたホップを特定してください。それが本当の問題を直すのか、症状を直すのかの分かれ目です。

  • 再現し、どのホップが応答したかを特定する。 ブラウザで読み込み、curlでアクセスしてTTFBのtime_starttransferを確認します。Ahrefs Site AuditやScreaming Frogなどのクローラーに通し、サイト全体か一部だけかを確認します。可能ならCDN/プロキシを迂回してoriginへ直接テストし、origin自体が完了するかを確認します。
  • ログを読む。 サーバーとプロキシのログから、どのレイヤーが、何を待ってタイムアウトしたのか(遅いクエリ、停止したupstream、枯渇したワーカープールなど)を確認できます。推測せず、タイムスタンプとリクエストIDでレイヤー間を照合します。
  • Search Consoleを確認する。 クロールの統計情報にはレスポンスコードの急増と平均レスポンスタイムが表示されます。ページのインデックス登録レポートとURL検査では、Googleがタイムアウト(「Hostload exceeded」を含む)に遭っているかを確認できます。

ツール間の結果を突き合わせることも重要です。ブラウザの504、Ahrefs Site Auditの5xx、GSCのタイムアウトは、異なる視点から見た同じ遅いoriginを示している可能性があります。3つのツールが3つの問題を意味すると考えないでください。

関連するコード

504は小さなファミリーの一員です。500は、より具体的なコードがない一般的なサーバーエラーです。502は不正または壊れたupstreamレスポンスです。503は、明示的で、多くの場合意図的な「利用不可」です。実際にどれを返しているかを把握し、計画停止中に正しいものを意図して返すことが、問題解決の半分です。

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.