[レベル: 上級]
この記事では、Googleが公開しているドキュメントに基づいて、AMPキャッシュの仕組みについて説明します。
具体的には、次を扱います。
- AMPキャッシュのURLフォーマット
- AMPキャッシュの更新プロセス
- AMPキャッシュの更新強制
- AMPキャッシュの削除
あなたがAMPをすでに実装しているなら、知っておくと役に立つこともあるはずです。
では行ってみましょう⚡
AMPキャッシュのURLフォーマット
AMP CDNにキャッシュされたコンテンツはたとえば次のようなURLになります。
https://cdn.ampproject.org/c/s/example.com/amp_document.html
https://cdn.amproject.org/i/example.com/images/logo.png
分解して、どんな構成になっているのかを見てみましょう。
※ここでは、Googleが提供しているAMP CDNのキャッシュについて話します。もしGoogle以外のAMP CDNを使うなら仕様は異なるでしょう。
https://cdn.amproject.org
AMPキャッシュのURLは常に https://cdn.amproject.org
で始まります。
Googleが公開しているAMP CDNのURIになります。
コンテンツのタイプ
https://cdn.amproject.org
のあとには次の3つのいずれかが続きます。
これらは、コンテンツのタイプを表します。
/c
−− HTMLドキュメント/i
−− 画像/r
−− フォントなどのリソース
HTTPS (TLS)
オリジナルのAMPページまたは画像、リソースがHTTPSで配信されているときは、コンテンツのタイプ (/c
, /i
. /r
) の次に /s
が続きます。
URI
最後に来るのは、オリジナルのAMPページのURLから、http://
または https://
を取り除いた部分です。
URLがパラメータ (?) を含んでいてもそのまま使えます。
ここまでをふまえて、AMPキャッシュのURLをもう一度見てみましょう。
オリジナルのAMPページ(あなたのサーバーに直接アクセスしたときのAMPページ)のURLが次のようだったとします。
http://example.com/amp_document.html
このとき、AMPキャッシュのURLはこのようになります。
https://cdn.ampproject.org/c/example.com/amp_document.html
まず、固定の https://cdn.ampproject.org
で始まります。
https://cdn.ampproject.org/c/example.com/amp_document.html
次に、コンテンツタイプがHTMLドキュメントなので、 /c
が続きます。
https://cdn.ampproject.org/c/example.com/amp_document.html
そのあとは、元のURLから http://
を取り除いた example.com/amp_document.html
で終わります。
https://cdn.ampproject.org/c/example.com/amp_document.html
同じAMPページをHTTPSで配信していたとします。
https://example.com/amp_document.html
AMPキャッシュのURLはこのようになります。
https://cdn.ampproject.org/c/s/example.com/amp_document.html
先ほどと似ていますが、コンテンツのタイプを表す /c
のあとに、HTTPSを示す /s
が入っています。
今度は、画像のAMPキャッシュURLを見てみましょう。
オリジナルの画像を次のURLで配信しています。
https://example.com/images/logo.png
AMPキャッシュのURLはこのようになります。
https://cdn.ampproject.org/i/s/example.com/images/logo.png
画像なのでコンテンツのタイプの部分が /i
になっていることに気付いてください。
またHTTPSで配信しているので、/s
が入ります。
AMPキャッシュの更新プロセス
簡単に言うと、AMPキャッシュの更新は、ユーザーにキャッシュを配信したときにオリジナルのコンテンツが更新されていれば、更新されたコンテンツをAMP CDNサーバーが自動で取得しキャッシュし直す仕組みになっています。
ただし新しいキャッシュが配信されるのは、その次のユーザーに対してです。
もう少し詳しいプロセスは次のようになります。
- ユーザーがAMPキャッシュをリクエストする(例: 検索結果のAMPカルーセルからアクセスする)
- そのユーザーには今保持しているキャッシュを返す
- 同時に、オリジナルのコンテンツが更新されていないかどうかをチェックしに行く(
Max-Age
ヘッダーなどを見る) - オリジナルのコンテンツが更新されていれば、それを取得しキャッシュを最新の状態に保つ
- 次のユーザーには更新されたコンテンツのAMPキャッシュを返す
- オリジナルのコンテンツに更新がなければ、キャッシュも更新せずそのまま使い続ける
コンテンツに更新が発生していた場合は、そのユーザーには現在のキャッシュを返しますが、次のユーザーには新しいキャッシュを返すというのが特徴的ですね。
ユーザーが頻繁に閲覧するページほど、最新の状態に保たれやすくなります。
逆に、ユーザーが閲覧しないページのキャッシュはいつまでたっても古いままです。
なおサーバーに負荷をかけないために、HTMLドキュメントに対しては最低でも15秒以上の間隔を空けてリクエストします。
画像やリソースに対しては最低でも1分以上の間隔を空けてリクエストします(間隔は将来変更される可能性あり)。
AMPキャッシュの更新強制
説明したように、ユーザーが閲覧する限りはAMPキャッシュは自動で更新されます。
しかしオリジナルのコンテンツを更新し、キャッシュも今すぐにでも更新したいことがあるでしょう。
そんな状況では、ユーザーの閲覧を待たずともAMPキャッシュを更新することができます。
方法はとても簡単です。
あなたが、AMPキャッシュのURLにアクセスすればいいのです。
オリジナルのコンテンツが更新されていることをAMP CDNが認識できれば、キャッシュも更新されます。
ユーザーには新しくなったキャッシュが返されます。
AMPキャッシュのURLは、この記事の初めに説明しましたね(なので、AMPキャッシュURLのフォーマットの理解は大切なのです)。
この記事のAMPキャッシュを更新したければ、次のURLにアクセスします。
https://cdn.ampproject.org/c/s/www.suzukikenichi.com/blog/anatomy-of-amp-cache/amp/
AMPキャッシュの更新には、Fetch as Googleのインデックス送信を使ったりしなくていいのです。
AMPキャッシュの削除
AMPページまたはAMPページで使っている画像やリソースは、本体を削除すればいずれAMPキャッシュからも削除されます。
一般的なウェブページや画像と同じです。
ですが、キャッシュを至急で削除したい場合に利用できる仕組みがあります。
“update-ping“を使います。
AMPキャッシュされている https://example.com/amp_document.html
のAMPページを削除リクエストするには次のURLにアクセスします。
https://cdn.ampproject.org/update-ping/c/s/example.com/amp_document.html
AMPキャッシュのURLで、https://cdn.ampproject.org
の次に /update-ping
を差し込みます。
http://example.com/images/logo.png
の画像のAMPキャッシュを削除リクエストするには、次のURLにアクセスします。
https://cdn.ampproject.org/update-ping/i/example.com/images/logo.png
update-ping に加えて、おさらいの目的も兼ねて以下にも注意してください。
- コンテンツタイプが画像なので
/i
になる - オリジナルのURLはHTTPなので、
/s
は付かない
HTTPとHTTPSは連動しません。
キャッシュは別々に保存されています。
なお、update-pingを使ったURLに「アクセスする」と表現しましたが、正確には「GETリクエストを送信」します。
“204 No Content”のHTTPステータスコードが返ってきます。
update-ping を使うとキャッシュが自然に削除されるのを待つよりもずっと速くキャッシュを削除できます。
この記事でのAMPキャッシュに関する説明は以上です。
ブログ読者に向けた解説というよりは、僕自身のためのまとめの意味合いのほうが実は強かったりします(AMPキャッシュの更新方法について、何度か質問されたことがあった)。
公式ドキュメントには、AMPキャッシュに関する情報がほかにも書かれていますが、僕にとって重要な部分に絞って説明しました。
AMPキャッシュの仕組みに興味を持ったなら、公式ドキュメントもお読みください。
【追記】
Google検索からAMPキャッシュにアクセスした場合のURLのドメイン名は、cdn.ampproject.org ではなく www.google.com や www.google.co.jp になります。
ですが実態は同じで、キャッシュは cdn.ampproject.org から読み込んでいます。