5分でできる!AMPキャッシュを update-cache で更新する方法

WordPress
WordPress
スポンサーリンク

AMP(Accelerated Mobile Pages)に対応したウェブページは、ドキュメントや画像を Google などの AMPキャッシュプロバイダがキャッシュするため、ウェブページを高速に表示することができます。しかし問題となるのは、ウェブページの内容を更新しても、AMPキャッシュが更新されるまでは古い内容が配信されてしまうことです。そこで今回は、Google の AMPキャッシュを update-cache という仕組みを使って更新する方法をご紹介します。

参考記事:AMP ページのキャッシュの仕組み – AMP

AMPキャッシュを更新するための手順

Google の AMPキャッシュを更新するための手順です。RSA鍵は一度作成してサーバーに設置してしまえば何回でも使えます。

  • RSA鍵を作成する(秘密鍵と公開鍵)
  • 公開鍵をサーバーに設置する
  • update-cache リクエストを作成する
  • 秘密鍵で update-cache リクエストに署名する
  • update-cache リクエストを実行する

参考記事:AMP コンテンツを更新する | Google AMP キャッシュ

RSA鍵を生成する

まずはじめに RSA鍵(秘密鍵と公開鍵)を適当な場所に作成します。秘密鍵「private-key.pem」はその名のとおり秘密にして管理しましょう。

openssl genrsa 2048 > private-key.pem
openssl rsa -in private-key.pem -pubout > apikey.pub

公開鍵をサーバーに設置する

公開鍵「apikey.pub」をサーバーの以下の場所に設置します。

/<ドキュメントルート>/.well-known/amphtml/apikey.pub

公開鍵「apikey.pub」は、コンテンツタイプに「text/plain」を指定する必要がありますので、WEBサーバーの設定ファイルにコンテンツタイプの設定を追加して再起動しておきます。(以下は Apache httpd サーバーでの設定例です)

sudo vim /etc/httpd/conf/httpd.conf

AddType text/plain .pub

Apache httpd を再起動

sudo systemctl reload httpd

公開鍵「apikey.pub」にアクセス可能であること、コンテンツタイプが「text/plain」になっていることを確認します。

curl -I https://wwww.example.com/.well-known/amphtml/apikey.pub
 
HTTP/2 200 ←アクセス可能
date: Sat, 02 Mar 2019 20:36:19 GMT
server: Apache
(略)
content-type: text/plain ←コンテンツタイプが「text/plain」

update-cache リクエストの実行

update-cache リクエストを作成して秘密鍵で署名するのですが、手作業ではなかなか大変なので「AMPコンテンツを更新する」の手順をシェルスクリプトにまとめてみました。よければ使ってみてください。(下のリンク先の「Clone or download 」ボタンの「Download ZIP」からダウンロードできます)

https://github.com/sizaki30/google-amp-update-cache

スクリプトをダウンロードしたら、スクリプトの「private_key」に作成した秘密鍵の場所をフルパスで指定してください。

vim google-amp-update-cache.sh

private_key='/home/sample/private-key.pem'
 ↓
private_key='/<秘密鍵の場所をフルパスで指定>/private-key.pem'

AMPキャッシュを更新したいページのURLを指定して、スクリプトを実行します。(URLはクオートすることをオススメします)「OK」と表示されれば update-cache リクエスト成功です。

bash google-amp-update-cache.sh 'https://wwww.example.com/article'
 
OK ← update-cache リクエスト成功

おわりに

AMPキャッシュは、なにもしなくても更新されるそうなのですが、このブログのようにアクセスが少ないページでは、AMPキャッシュが更新されるまでに数日かかるようです(^^;) 同じような悩みを持っている方はぜひ update-cache を試してみてくださいね。

コメント

  1. dekiruyone より:

    この操作をどこで行えばよいのでしょうか。ちなみに私はmixhostのcPanel内ターミナルから操作していますが、秘密鍵が読めないとの事でエラーが出てしまいます。最後の手段でドキュメントルートに秘密鍵を置いてやったりしてみましたがダメです

    • あぱーブログ あぱーブログ より:

      >dekiruyoneさん

      コメントありがとうございます。
      たしかにこの記事の内容ではどこで操作を行えばいいか、わからないですね(^^;) スミマセン

      RSA鍵の生成は手元のパソコンで行い、秘密鍵は手元のパソコンに置いたままにしておいてください。「公開鍵のみ」を mixhost の「/<ドキュメントルート>/.well-known/amphtml/apikey.pub」にアップロードします。(アップロードした秘密鍵は削除してください)

      そして update-cache リクエストは、秘密鍵のある手元のパソコンから実行します。

  2. 匿名 より:

    補足です。
    コマンドプロンプトでbash google-amp-update-cache.sh ‘https://wwww.example.com/article’を実行すると以下の結果が返ってきます。

    ‘bash’ は、内部コマンドまたは外部コマンド、
    操作可能なプログラムまたはバッチ ファイルとして認識されていません。

    • あぱーブログ あぱーブログ より:

      >匿名さん
      コメントありがとうごさいます。
      google-amp-update-cache.sh は Linux 用のスクリプトです。
      Windowsで実行する場合は WSL(Windows Subsystem for Linux)をインストールすれば実行できるかもしれません。

      • 匿名 より:

        ご返信ありがとうございます。頂いたヒントからWSL(Windows Subsystem for Linux)をインストールし、再度実行しましたところ以下の結果でした。
        bash: google-amp-update-cache.sh: No such file or directory
        という結果でした。

        以下についてですが、

        private_key=’/home/sample/private-key.pem’
         ↓
        private_key=’/<秘密鍵の場所をフルパスで指定>/private-key.pem’

        <秘密鍵の場所をフルパスで指定>←の記述の仕方がわかりません。
        Cドライブのmmmというファイルにprivate-key.pemを置いた場合、’c/mmm/private-key.pem’という記述で良いのでしょうか?

        また、スクリプト内で他に変更する箇所はないのでしょうか?例えば、スクリプト内にある’wwww.example.com/article’はそのままでいいのでしょうか?

        初歩的な質問で申し訳ございませんが何卒宜しくお願い致します。

        • あぱーブログ あぱーブログ より:

          >匿名さん

          >bash: google-amp-update-cache.sh: No such file or directory
          >という結果でした。

           同じディレクトリに google-amp-update-cache.sh があるか ls コマンドで確認してみてください。

          > Cドライブのmmmというファイルにprivate-key.pemを置いた場合、’c/mmm/private-key.pem’という記述で良いのでしょうか?

           mmm はフォルダということですね。その場合WSLだと以下のようになるかと思います。
           '/mnt/c/mmm/private-key.pem'

          >また、スクリプト内で他に変更する箇所はないのでしょうか?例えば、スクリプト内にある’wwww.example.com/article’はそのままでいいのでしょうか?

           スクリプト内で変更する箇所は、「private_key='/home/sample/private-key.pem'」だけでOKです。
           スクリプト内にある’wwww.example.com/article’はそのままで大丈夫です。

          Windows10+WSLの環境で確認できないため、抽象的な回答ですみません!
          よろしくお願いいたします。

           

           

タイトルとURLをコピーしました