このすみノート

Webエンジニアが技術や趣味を書くブログです。

HTTPのRetry-Afterヘッダーについて - GooglebotはRetry-Afterを見るらしい

Software DesignのWebAPI特集号に、サービス閉塞時は"503" + "Retry-After"を返すという記述があります。

WEBエンジニアとして、Sorryページでメンテナンス時間を案内するといった対応は、長年やってきました。 しかしながら、HTTPヘッダーでメンテナンス時間が表現できるのは、不勉強ながら初耳です。

どうやらGooglebotも公式に対応しているようで、知っておいて損はなさそうですので、紹介します。

Retry-Afterの使い方

Google検索セントラルの『サイトのダウン タイムへの対処の仕方』の記事から引用しますが、WEBシステムを一時的にメンテナンスするケースで、503を返却するパターンで使われます。

header('HTTP/1.1 503 Service Temporarily Unavailable');
header('Retry-After: Sat, 8 Oct 2011 18:27:00 GMT');

なお、Retry-Afterにはサービスが復旧する日時、または復旧するまでの時間(秒数)を記述します。

developers.google.com

Googlebotはどうするのか

HTTPが503ステータスを返すパターンでは、Retry-Afterヘッダーを参考にして、再クロールのタイミングを決めてくれます。 記事の最終更新が「2011年2月10日木曜日」でしたので、少なくとも10年以上前から対応しているようです。

なお、『場合があります』という表現だったため、100%確実ではありません。

Google 検索セントラルブログ > サイトのダウン タイムへの対処の仕方
HTTP ステータス コードとして 503 (Service Unavailable) を返すように設定した方が、検索エンジンのクローラに対してダウン タイムが一時的であることを伝えることができます。
〜中略〜 Retry-After ヘッダー (英語)を利用することで、あらかじめ分かっているダウン タイムの時間やサイトの復旧日時について指定することができます。ちなみに、Googlebot は、この情報を参考にして、再クロールのタイミングを決める場合があります。

Retry-Afterの表現形式

2種類の表現パターンがあります。

  • Retry-After: <delay-seconds>
    • 復旧までの残り時間を、秒数で記載します。正の10進数です。
  • Retry-After: <http-date>

developer.mozilla.org

あとがき

Retry-Afterヘッダーは馴染みがなかったのですが、HTTPの仕組みでWebAPIのメンテナンス時間や復旧時間を表現できるので、今後お世話にケースが出てくるかもしれません。