2024 年 12 月 9 日(月曜日)
Google がキャッシュ保存をできるようにしてください。ぜひともお願いします。
インターネットの成長に伴い、Google によるクロールも増加しています。Google のクロール インフラストラクチャは、ヒューリスティックなキャッシュ保存のメカニズムをサポートしています。これは以前からそうです。ただ、ローカル キャッシュから返されるリクエストの数は 10 年前と比較して減少しています。10 年前はフェッチ全体の約 0.026% がキャッシュに保存できました。この数値も決して高いわけではありませんが、現在では 0.017% にまで下がっています。
キャッシュ保存が重要である理由
キャッシュ保存は大きなパズルと言えるインターネットの重要なピースです。キャッシュ保存により、再度ページにアクセスしたときに高速でページが読み込まれます。また、コンピューティング リソースを節約でき、結果として天然資源の節約にもつながります。クライアント側とサーバー側の両方において費用のかかる帯域幅の使用量も大幅に削減されます。
大規模なサイトで、個々の URL のコンテンツが滅多に変更されない場合は特に、ローカルでのキャッシュ保存を可能にするとより効率的にサイトがクロールされるようになります。Google クローラーのインフラストラクチャは、HTTP キャッシュ標準で定義されているヒューリスティックな HTTP キャッシュ保存をサポートしています。具体的には ETag
レスポンスおよび If-None-Match
リクエスト ヘッダーと、Last-Modified
レスポンスおよび If-Modified-Since
リクエスト ヘッダーを使用します。
エラーとミスが発生しにくい ETag
を強くおすすめします(Last-Modified
値とは異なり値が構造化されていません)。可能であれば両方を設定してください。きっと、インターネットも喜ぶはずです。
どのような変更をクライアントがキャッシュを更新する必要がある変更と捉えるかは、個別の判断です。コンテンツに対して重大な変更を行った場合に、キャッシュの更新を求めるようにすることをおすすめします。たとえば、ページの一番下にある著作権の日付を更新しただけでは重大な変更とは言えないでしょう。
ETag
と If-None-Match
Google クローラーは HTTP キャッシュ標準の定義のとおり、ETag
ベースの条件付きリクエストをサポートしています。つまり、Google クローラーにキャッシュ保存の設定を伝えるには、アクセスされた URL でホストされているコンテンツを一意に示す任意の ASCII 文字列を Etag
値として設定します(通常はコンテンツのハッシュまたはバージョン番号を使用しますが、円周率でも何でも構いません)。たとえば、同じ URL で同じコンテンツの複数のバージョンをホストしている場合(モバイル版と PC 版など)、各バージョンの一意の ETag
値を設定します。
キャッシュ保存をサポートしている Google クローラーはその URL の以前のクロールで返された If-None-Match header
の ETag
値を送信します。クローラーが送信した ETag
値が、サーバーが生成した現在の値と一致する場合、サーバーは HTTP 304
(変更なし)のステータス コードを HTTP 本文なしで返します。この最後の「HTTP 本文なし」という点が、次の観点から重要となります。
- サーバーはコンピューティング リソースをコンテンツの生成に充当する必要がないため、費用を抑えられる
- サーバーは HTTP 本文を転送する必要がないため、費用を抑えられる
ユーザーのブラウザまたは Googlebot のようなクライアント サイドでは、その URL に含まれるコンテンツはクライアントの内部キャッシュから取得されます。データ転送を伴わないため、この処理は速やかに完了します。ユーザーの満足度向上につながると同時に、ユーザー用にリソースを節約できる可能性もあります。
Last-Modified
と If-Modified-Since
ETag
と同様に、Google クローラーは HTTP キャッシュ標準の定義のとおり、Last-Modified based
の条件付きリクエストもサポートしています。これは結果からみると ETag
と同様に機能します。つまり、識別子はリソースがキャッシュ保存の対象となるかどうかを判断するために使用されます。また、クライアント サイドでも ETag
と同じ効果をもたらします。
ただ、キャッシュ ディレクティブとして Last-Modified
を使用する場合には、いくつかの推奨事項があります。
-
Last-Modified
ヘッダーの日付は HTTP 標準に従った形式とします。解析に関する問題が発生しないように、「Weekday, DD Mon YYYY HH:MM:SS Timezone」という日付形式を使用することをおすすめします(「Fri, 4 Sep 1998 19:15:56 GMT」など)。 -
必須ではないものの、
Cache-Control
ヘッダーのmax-age
フィールドを設定して、クローラーが特定の URL を再クロールするタイミングを判断できるようにすることも検討してください。max-age
フィールドの値には、コンテンツが変更されない想定期間を秒単位で設定します。たとえば、Cache-Control: max-age=94043
と設定します。
例
私のように、ヒューリスティックなキャッシュ保存の仕組みを理解するのが難しい方は、一連のリクエストとレスポンスの例を確認すると理解が深まります。こちらでは、1 つは ETag
/ If-None-Match
、もう 1 つは Last-Modified
/ If-Modified-Since
という 2 つの流れについて、その仕組みをまとめています。
ETag / If-None-Match |
Last-Modified / If-Modified-Since |
|
---|---|---|
クロールに対するサーバーのレスポンス: これは ETag と Last-Modified のどちらの前提条件のヘッダー フィールドをクローラーが保存できるかについてのレスポンス。 |
HTTP/1.1 200 OK Content-Type: text/plain Date: Fri, 4 Sep 1998 19:15:50 GMT ETag: "34aa387-d-1568eb00" ... |
HTTP/1.1 200 OK Content-Type: text/plain Date: Fri, 4 Sep 1998 19:15:50 GMT Last-Modified: Fri, 4 Sep 1998 19:15:56 GMT Cache-Control: max-age=94043 ... |
後続のクローラーによる条件付きリクエスト: 条件付きリクエストは以前のリクエストで保存された前提条件のヘッダー値に基づく。値はサーバーに返送され、If-None-Match および If-Modified-Since リクエスト ヘッダーが検証される。 |
GET /hello.world HTTP/1.1 Host: www.example.com Accept-Language: en, hu User-Agent: Googlebot/2.1 (+http://www.google.com/bot.html) If-None-Match: "34aa387-d-1568eb00" ... |
GET /hello.world HTTP/1.1 Host: www.example.com Accept-Language: en, hu User-Agent: Googlebot/2.1 (+http://www.google.com/bot.html) If-Modified-Since: Fri, 4 Sep 1998 19:15:56 GMT ... |
条件付きリクエストに対するサーバーのレスポンス: クローラーが送信した前提条件ヘッダーの値はサーバーサイドで検証されているため、サーバーは 304 HTTP ステータス コード(空の HTTP 本文)をクローラーに返す。これは後続のリクエストごとに、前提条件の検証が失敗するまで(サーバーサイドで ETag または Last-Modified の日付が変更されるまで)実行される。 |
HTTP/1.1 304 Not Modified Date: Fri, 4 Sep 1998 19:15:50 GMT Expires: Fri, 4 Sep 1998 19:15:52 GMT Vary: Accept-Encoding If-None-Match: "34aa387-d-1568eb00" ... |
HTTP/1.1 304 Not Modified Date: Fri, 4 Sep 1998 19:15:50 GMT Expires: Fri, 4 Sep 1998 19:15:51 GMT Vary: Accept-Encoding If-Modified-Since: Fri, 4 Sep 1998 19:15:56 GMT ... |
ユーザーの満足度を高め、ホスティング費用を少しでも節約したい場合は、ホスティング プロバイダ、CMS プロバイダ、デベロッパーと、サイトで HTTP キャッシュ保存を有効にする方法について検討してください。少なくとも、ユーザーのサービス満足度が少し上がるはずです。
キャッシュ保存について話がしたい場合は、最寄りの検索セントラルのヘルプ コミュニティにアクセスしてください。Google によるキャッシュ保存についてご意見がある方は、このブログ投稿と一緒に公開しているキャッシュ保存に関するドキュメントにフィードバックをお寄せください。
クロールについて詳しくは、12 月のクロール情報シリーズ全体をご覧ください。
Aaseesh Marina
プロダクト サポート マネージャー Aaseesh Marina は、Google で Search Console を担当するプロダクト サポート マネージャーで、Google 検索におけるサイトの視認性を高めるのに必要なサポートをサイト所有者の皆様に提供することを使命としています。 以前は Google のサーチ クオリティ チームに在籍しており、Google 検索の検索結果の品質評価と、スパムをはじめとする不正行為からのユーザーの保護に尽力していました。Aaseesh Marina による
Adrian Gregory Lui
ニュース パートナーシップ担当マネージャー Adrian Gregory Lui による Google 検索セントラル ブログの投稿をご覧ください。 LinkedIn
Adriana Porter Felt
Chrome セキュリティ Adriana Porter Felt による Google 検索セントラル ブログの投稿をご覧ください。
Alan Kent
デベロッパー アドボケイト Google 検索セントラル ブログの Alan Kent による投稿をご覧ください。 Twitter
Aldrich Christopher
ポリシーの透明性 Aldrich Christopher による Google 検索セントラル ブログの投稿をご覧ください。 Twitter | LinkedIn | YouTube
Alissa Roberts
元サーチ クオリティ チーム メンバー Alissa Roberts による Google 検索セントラル ブログの投稿をご覧ください。 LinkedIn
Amir Rachum
Search Console ソフトウェア エンジニア Google 検索セントラル ブログの Amir Rachum による投稿をご覧ください。 ウェブサイト
Andrei Pascovici
ウェブマスター ツールチーム Andrei Pascovici による Google 検索セントラル ブログの投稿をご覧ください。
Anna Ogawa(小川安奈)
シニア検索エコシステム コンサルタント Anna Ogawa(小川安奈)による Google 検索セントラル ブログの投稿をご覧ください。 Twitter | LinkedIn
Asaph Arnon
ソフトウェア エンジニア マネージャー Asaph Arnon による Google 検索セントラル ブログの投稿をご覧ください。 LinkedIn
Aurora Morales
Trust & Safety Aurora は Google Trust & Safety チームに所属しています。長年にわたり、業界に対するサービス ポリシーとガイドラインの啓蒙に携わり、多様なオーディエンスに向けたより安全性の高いエコシステムの構築をサポートしてきました。 特に Aurora が時間をかけて取り組んでいるプロジェクトには、英語とスペイン語の検索セントラル ヘルプ コミュニティの管理、パブリッシャーに対する Google
Candice Denic
プロダクト マネージャー Candice Denic による Google 検索セントラル ブログの投稿をご覧ください。 LinkedIn
Chris Nelson
サーチ クオリティ チーム Chris Nelson による Google 検索セントラル ブログの投稿をご覧ください。 LinkedIn
Cory Benavente
動画検索プロダクト マネージャー Cory Benavente による Google 検索セントラル ブログの投稿をご覧ください。 LinkedIn
Daniel Yosef
ソフトウェア エンジニア Daniel Yosef による Google 検索セントラル ブログの投稿をご覧ください。 LinkedIn
Danielle Marshak
動画検索プロダクト マネージャー Google 検索セントラル ブログの Danielle Marshak による投稿をご覧ください。 LinkedIn
Danny Sullivan
検索担当のパブリック リエゾン Google 検索セントラル ブログの Danny Sullivan による投稿をご覧ください。 Mastodon
Duy Nguyen
検索品質アナリスト Duy Nguyen による Google 検索セントラル ブログの投稿をご覧ください。
Earl J. Wagner
ソフトウェア エンジニア Earl J. Wagner による Google 検索セントラル ブログの投稿をご覧ください。 LinkedIn
Edu Pereda
Google 検索オープンソース化チーム Edu Pereda による Google 検索セントラル ブログの投稿をご覧ください。 LinkedIn | GitHub | Mastodon | Twitter
Eiji Kitamura
Chrome デベロッパー アドボケイト Eiji Kitamura による Google 検索セントラル ブログの投稿をご覧ください。 Website | Twitter | GitHub | Mastodon | LinkedIn
Eric Silva
プロダクト マネージャー Eric Silva による Google 検索セントラル ブログの投稿をご覧ください。 LinkedIn
Fan Zhang
ソフトウェア エンジニア Google 検索セントラル ブログの Fan Zhang による投稿をご覧ください。
Giacomo Gnecchi Ruscone
信頼性と安全性におけるパートナーシップ Giacomo は、パートナーシップを通じて Google の、ひいてはインターネットの安全性を高めることに注力しており、子どもの安全、誤った情報、金融詐欺などの現実世界の主要な問題に取り組んでいます。Giacomo Gnecchi Ruscone による Google 検索セントラル ブログの投稿をご覧ください。 Twitter
Greg Grothaus
サーチ クオリティ チーム、スタッフ ソフトウェア エンジニア Greg Grothaus による Google 検索セントラル ブログの投稿をご覧ください。 ウェブサイト
Ian Hung(洪翊恩)
検索エコシステム コンサルタント Ian Hung(洪翊恩)による Google 検索セントラル ブログの投稿をご覧ください。 LinkedIn
Irina Tuduce
ソフトウェア エンジニア Irina Tuduce による Google 検索セントラル ブログの投稿をご覧ください。 LinkedIn
Jennifer Granito
ニュース品質担当グループ プロダクト マネージャー Jennifer Granito は、Google でニュース品質を担当するグループ プロダクト マネージャーです。現在、検索や Google ニュースアプリ、その他の Google サービスにおけるニュースの品質と信用性のプロダクト リードを務めており、質の高いニュース コンテンツへのアクセスを提供することで、誰もが世界の出来事を理解できるように取り組んでいます。 以前は、Google が買収した Kifi
Jeremy Weinstein
Google ウェブマスター Google 検索セントラル ブログの Jeremy Weinstein による投稿をご覧ください。 LinkedIn
Jessica Wong
サーチ クオリティ チーム Google 検索セントラル ブログの Jessica Wong による投稿をご覧ください。 LinkedIn