概要

Google AMP キャッシュは、ウェブに公開されている有効な AMP コンテンツのキャッシュ コピーを提供します。Google AMP キャッシュからコンテンツを直接提供することで、高速なユーザー エクスペリエンスを実現します。

Google AMP キャッシュを利用するには、AMP キャッシュの URL フォーマットを使用して、キャッシュから AMP URL に直接アクセスする必要があります。ユーザーがキャッシュから AMP コンテンツにアクセスするたびにコンテンツが自動的に更新されます。また、コンテンツがキャッシュされると、次にアクセスしたユーザーには更新版のコンテンツが提供されます。

AMP キャッシュの URL フォーマット

AMP キャッシュの URL フォーマットは次のコンポーネントで構成されています。

コンポーネント 説明
サブドメイン名

Google AMP キャッシュで作成されたサブドメインは、文字数制限と技術仕様で許容される場合には人が読める形式になり、サイト運営者のドメインによく似たものになります。可能な場合、Google AMP キャッシュでは次の手順で各サブドメインが作成されます。

  1. AMP ドキュメントのドメインを IDN(Punycode)から UTF-8 に変換する。
  2. すべての「-」(ダッシュ)を「--」(2 個のダッシュ)に置き換える。
  3. すべての「.」(ドット)を「-」(ダッシュ)に置き換える。
  4. AMP ドキュメントのドメインを IDN(Punycode)に戻す。

たとえば、pub.compub-com.cdn.ampproject.org にマッピングされます。技術的な制限によってサブドメインを人が読める形式にできない場合は、代わりに一方向ハッシュが使用されます。

コンテンツ タイプ コンテンツ タイプには、「c」(AMP HTML ドキュメント)、「i」(画像)、「r」(フォントなどのリソース)のいずれかを指定します。Google AMP キャッシュは、これらのコンテンツ タイプが指定されていないリソースに対して 404 エラーを返します(主要なエラーを参照)。
オプションの「s」 指定されている場合、Google が TLS(セキュアな HTTPS)を使用して元のページからコンテンツを取得する必要があります。「s」が指定されていない場合、通常の HTTP を使用して元のページからコンテンツが取得されます。
URI 取得されるコンテンツの URI。この URI にはスキーム(「http://」や「https://」など)を含めることができません。

サブドメイン名の確認

通常、Google AMP キャッシュ URL のサブドメイン名は、上記の手順で元の URL を人が読める形式に変換したものになります。ただし、このようにならない場合もあるため、製品版アプリケーションの Google AMP キャッシュ URL を取得する場合は、Google AMP Cache URL API を使用することをおすすめします。

製品版以外の場合、Google AMP キャッシュによって生成されたサブドメイン名を確認するには、amp.dev にある Google AMP キャッシュを使用するのインタラクティブ ツールを試してみてください。

TLS を使用したドキュメントのリクエストの例

https://example.com/amp_document.html から取得した AMP HTML ドキュメント(/c プレフィックスで指定)のリクエスト:

https://example-com.cdn.ampproject.org/c/s/example.com/amp_document.html

/s/c プレフィックスの後にあるため、ドキュメントは TLS を使用して example.com から取得されます。

通常の HTTP を使用した画像のリクエストの例

http://example.com/logo.png から取得した画像(/i プレフィックスで指定)のリクエスト:

https://example-com.cdn.ampproject.org/i/example.com/logo.png

/s/i プレフィックスの後にないため、画像は HTTP over TLS ではなく通常の HTTP を使用して example.com から取得されます。

クエリ パラメータの例

AMP キャッシュの URL フォーマットには、クエリ文字列のパラメータを含めることもできます。次は、パラメータを含む HTTPS の例です。https://example-com.cdn.ampproject.org/c/s/example.com/g?value=Hello%20World

Google AMP キャッシュの更新

ユーザーが Google AMP キャッシュに対して AMP ドキュメントをリクエストすると、次にリクエストするユーザーに最新のコンテンツを提供できるようにするために、コンテンツがキャッシュされた後に Google AMP キャッシュから更新が自動的にリクエストされます。このモデルでは、AMP ドキュメントの更新が自動的にすばやく反映されるため、ドキュメントの更新後に更新前のバージョンが表示されることはほとんどありません。

キャッシュは、「stale-while-revalidate」モデルに従います。このモデルでは、特定のドキュメントやリソースが最新でないかどうかを判断する際のヒントとして、元のキャッシュ ヘッダー(Max-Age など)を使用します。ユーザーが最新でないものに対するリクエストを行うと、そのリクエストによって新しいコピーが取得され、次にリクエストするユーザーが最新のコンテンツを取得できるようになります。

Google AMP キャッシュでは、サイト運営者のサイトに生じる負荷の量を制限するために、ドキュメントは 15 秒以上、リソースは 1 分以上の間、最新と見なされます。Google では、キャッシュの調整によってサイト運営者のサイトの鮮度と負荷の最適なバランスを保っています。そのため、この時間は将来変更される可能性があります。

キャッシュの最適化と変更

Google AMP キャッシュでは、次のような最適化と変更を行います。

  • コンテンツが本当に AMP 形式になっており、AMP のパフォーマンス目標をすべて達成しているかどうかを検証します。
  • AMP ドキュメントに加え、画像やフォントもキャッシュします。
  • 画像の最大サイズを制限し、ブラウザのメモリに関する問題や応答性の低下を防止します。
  • amp-img タグを使用した各種変更により、画像の配信効率が向上します。たとえば、次のような変更を行います。
    • 表示されないデータや表示しづらいデータ(特定のメタデータなど)の削除。
    • 小さな画像形式からよりモバイル フレンドリーな画像形式への画像の変換(WebP 対応のブラウザでの GIF、PNG、JPEG 形式から WebP 形式への画像の変換など)。
    • リクエストに Save-Data ヘッダーが含まれている場合の低画質の画像への変換。
    • サイズ調整されたバージョンの生成と、それに応じてサイズ調整された画像の配信をサポートするための srcset 属性の追加。
  • セキュアなチャネル(HTTPS)で配信し、最新のウェブ プロトコル(SPDY、HTTP/2)を使用します。
  • 誤って閉じられた HTML タグやコメントなどに基づく XSS 攻撃を防止するために、AMP ドキュメントをサニタイズします。

上記の変更を行うにあたり、Google AMP キャッシュでは「Cache-Control: no-transform」ヘッダーを無視します。

HTML のサニタイズ

Google AMP キャッシュでは、解析を標準化するためにすべてのドキュメントが書き換えられます。許可されない業務形態の例は次のとおりです。

  • すべての HTML コメントが削除されます。
  • タグ名と属性名が小文字に変換されます。
  • 属性値が常に引用符で囲まれ、エスケープされます。
  • HTML5 の空要素を除くすべてのタグが閉じられます。
  • タグ内の空白は削除されます。
  • テキストがエスケープされます。
  • エンコードされたテキスト文字が、UTF-8 の同等の文字を使用して簡略化されます。
  • body 内でのみ指定できる要素は body 内に移動されます。
  • ドキュメントがサイト運営者からではなく Google AMP キャッシュから提供される場合でも外部へのリンクを引き続き使用できるよう、外部へのリンクが絶対リンクに設定されます。

プリフェッチ タグを挿入する

Google AMP キャッシュでは、各種のプリフェッチ ヒントタグをブラウザ用に追加することにより、リソースの早期読み込みをサポートしています。たとえば、<link href='https://fonts.googleapis.com/css?family=Lato' rel='stylesheet’> は次のように変更されます。

<link href="https://fonts.googleapis.com/css?family=Lato" rel="stylesheet">
<link href="https://fonts.gstatic.com" rel="dns-prefetch preconnect">