GoogleのAMPキャッシュを更新する方法を色々試してみた結果

「GoogleのAMPキャッシュを更新するにはどうしたら良いの?」

ハッキリ言ってわかりません。
ネット検索で調べたことを試しましたが、GoogleのAMPキャッシュを更新することは出来ませんでした。

ただ、良いところまでは進んだつもりです。
私の最終結果は403エラー(ユーザーのアクセスが禁止されている)でした。

GoogleのAMPキャッシュを更新するための順序についてはGoogle Developersに解説がありますが、分かっている人向けの内容なので私レベルでは理解できませんでした。
おそらく以下のような事を言いたかったのだと思います。

  1. RSA鍵を生成する。
  2. RSA鍵の公開鍵と秘密鍵をサーバーに設置する。
  3. 公開鍵を暗号化して特定のURLを作成する。
  4. 特定のURLをブラウザのアドレス欄に入力してアクセスする。

結局「GoogleのAMPキャッシュを更新する」という目的を達成できていないので正しい情報とは言えませんが、私が試したことが皆さんの役に立つかもしれないので書き記しておきます。

ちなみに私の作業環境
  • GoogleのAMPキャッシュを更新したいpikopiko.blogはエックスサーバーに設置している。
  • pikopiko.blogはhttpsで開くようにしている。
  • OSはWindows10。

RSA鍵を生成する

OpenSSLのインストール

まずはRSA鍵を作るためにOpenSSLをインストールしましょう。
OpenSSLの公式サイトからインストーラーをダウンロードすることができます。

インストールするPCに合ったバージョンを選択しましょう。
よくわからない場合は64ビットでも動く「Win32 OpenSSL v1.1.1k Light」を選んでおけば、とりあえずは良さそうです。

インストーラーを起動させて作業を進めていくといくつかの選択・入力項目が表示されます。
入力項目はそのままでも大丈夫ですが、OpenSSLの保存先だけはメモしておきましょう。

「Select Additional Tasks」という選択項目について、「The Windows system directory」にダウンロードファイルを格納することは推奨されていないそうなので、「The OpenSSL binaries (/bin) directory」を選択してください。

最後にInstallボタンを押した後にチェックボックスが表示されますが、これはOpenSSLにどれぐらい寄付をしますか、という意味です。
寄付をしたい場合はチェックして進めてください。
寄付を見送りたい場合はチェックをすべて外して進めてください。

システムの設定変更

WindowsのコマンドプロンプトでOpenSSLを動かすことになるのですが、その時に少しでもコマンド入力の手間を省くためにシステムの設定を変更しておきましょう。
まずはWindowsボタンから設定⇒システムの詳細設定をクリックしてください。

システムのプロパティの詳細設定の中から環境変数をクリックしてください。

環境変数の中からPathを選択して編集ボタンをクリックしてください。

環境変数名の編集から新規ボタンをクリックしてOpenSSLの保存先+\binを入力してください。
このブログ記事ではbinの前にバックスラッシュが表示されているかもしれませんが、環境変数名の編集時には¥マークになります。
入力が完了したらOKボタンで閉じてください。

OpenSSLを実行する

念のため、OpenSSLが実行できるかどうかを確認をするためにコマンドプロンプトを起動しましょう。
コマンドプロンプトはWindowsボタンを右クリック⇒検索⇒コマンドプロンプトと入力、で見つけられます。

コマンドプロンプトが表示されたら「openssl version」と入力してからEnterキーで決定してください。
正しく実行できていればOpenSSLのバージョンが表示されます。

RSA鍵の公開鍵と秘密鍵を作る

コマンドプロンプトに「openssl genrsa 2048 > private-key.pem」と入力してからEnterキーで決定してください。
その後に「openssl rsa -in private-key.pem -pubout > apikey.pub」と入力してからEnterキーで決定してください。

private-key.pemが秘密鍵でapikey.pubが公開鍵です。
エクスプローラーを開いてPC⇒private-key.pemを検索をすると、どの場所に作られたかを確認できます。

私の場合はCドライブ⇒ユーザー⇒ユーザー名のファルダにありました。

RSA鍵の公開鍵と秘密鍵をサーバーに設置する

私はRSA鍵の公開鍵と秘密鍵をエックスサーバーに設置しました。
なぜなら、よくわからないコマンドプロンプトを使うよりも多少は心得のあるphpを使いたかったからです。

というわけで、FTPソフトでpikopiko.blogが設置されているエックスサーバーに接続してファイルマネージャーを開きました。
ルートディレクトリであるpublic_htmlの下に「.well-known」というフォルダを作って、さらにその下に「amphtml」というフォルダを作りました。

amphtmlのフォルダの中にprivate-key.pemとapikey.pubを移します。
それからapikey.pubのMIMEタイプを変更するために、public_htmlの下にある.htaccessを開きます。

.htaccessに「AddType text/plain .pub」と追記して更新します。

apikey.pubのMIMEタイプが変更されているか確認をするために、amphtmlの下にmime.phpを作ります。
そして以下のコードを記述して更新します。

<?php
echo mime_content_type('apikey.pub');
?>
Code language: PHP (php)

ブラウザでmime.phpにアクセスして、apikey.pubのMIMEタイプを確認します。

公開鍵を暗号化して特定のURLを作成する

公開鍵の暗号化には手間がかかるので、phpでユーザー定義関数を作りましょう。
まずはamphtmlの下にupdate-cache.phpを作ります。

update-cache.phpには次のようなコードを記述します。

update-cache.phpに書き込むコード

<?php

function generateURL( $page ) {
    $domain = 'pikopiko.blog';// 自分のドメインに変更してください。
    $url    = $domain . $page;

    $timestamp  = time();
    $ampBaseUrl = "https://" . str_replace( array( '-', '.' ), array('--', '-' ), $domain ) . ".cdn.ampproject.org";
    $signatureUrl = '/update-cache/c/s/' . $url . '?amp_action=flush&amp_ts=' . $timestamp;

    // opening the private key
    // Xserverに設定しているpikopiko.blogの場合です。
    $pkeyid = openssl_pkey_get_private( "file:///home/poppink/pikopiko.blog/public_html/.well-known/amphtml/private-key.pem" );// private-key.pemのフルパスを指定してください。
    if ( $pkeyid == false ) {
        echo 'could not open the private key.';
        exit;
    }

    // generating the signature
    openssl_sign( $signatureUrl, $signature, $pkeyid, OPENSSL_ALGO_SHA256 );
    openssl_free_key( $pkeyid );

    // urlsafe base64 encoding
    $signature = urlsafe_b64encode( $signature );

    global $ampUrl;
    // final url for updating
    $ampUrl = $ampBaseUrl . $signatureUrl . "&amp_url_signature=" . $signature;

    return $ampUrl;

}

function urlsafe_b64encode( $string ) {
    return str_replace( array( '+', '/', '=' ), array( '-', '_', '' ), base64_encode( $string ) );
}

generateURL( '/1163' );// Google AMP Cacheを更新したいページに変更してください。
global $ampUrl;
echo "Update Google AMP Cache URL = " . $ampUrl;

?>
Code language: PHP (php)

特定のURLをブラウザのアドレス欄に入力してアクセスする

Update Google AMP Cache URLを表示するにはブラウザのアドレス欄に「ドメイン/.well-known/amphtml/update-cache.php」を入力して開けば良いです。

ここで表示されたURLをコピー⇒ブラウザのアドレス欄にペースト⇒開く、をするとGoogle AMP Cacheが更新されるはず、なのですが、403エラー(ユーザーのアクセスが禁止されている)のページが表示されました。

もしかしたらRSA鍵を更新したら結果が変わるかも、と思ったので「https://pikopiko-blog.cdn.ampproject.org/r/s/pikopiko.blog/.well-known/amphtml/apikey.pub」にアクセスしましたが、こちらは404エラー(存在しない)のページが表示されました。

ネット検索をしてもこれ以上の情報は出てこないので、結局私はGoogleのAMPキャッシュを更新することは出来ませんでした。

なぜGoogleのAMPキャッシュを更新しようと思ったの?

AMP用のグーグルアドセンス自動広告を削除したのにいつまで経っても自動広告が表示されるのでGoogle AdSense コミュニティに質問をしたところ、GoogleのAMPキャッシュを更新したら問題が解決するかも、といった回答をいただいたからです。

GoogleのAMPキャッシュを更新できなくても問題はないの?

わかりません。
いずれ勝手に更新されるみたいですが、当ブログから自動広告のコードを削除してグーグルアドセンスでも自動広告をオフにしたのが2021年6月21日で、この記事を執筆している2021年6月27日現在も自動広告が表示されています。

2021年7月25日にAMPをやめることでAMPキャッシュの問題は解決しました。


はい、と言うことで、GoogleのAMPキャッシュを更新する方法を色々試してみましたが、私はGoogleのAMPキャッシュを更新することは出来ませんでした。
いつまでもこの問題に取り組んでいるのは時間がもったいないので、今回は無理だと思ってあきらめます。

以上「GoogleのAMPキャッシュを更新する方法を色々試してみた結果」でした。