Page Speed Insights の score を 定期的に計測して、DataStudio でグラフ化する | Monotalk で、score のみを定期的に計測して取得するスクリプトを作成しました。
Page Speed Insight の APIはスコア以外のページの統計情報の取得できるのでそれらを取得するスクリプトと作成しました。 作成したスクリプトの説明と、スプレッドシートへの記録方法を記載します。

[TOC]


作成したスクリプト

kemsakurai/Page-Speed-Score-metric UPしました。
スプレッドシート 1行あたり、2回APIを実行して、Mobile 閲覧時のページに関する統計情報と、PC 閲覧時のページに関する統計情報 を取得、記録します。


前回作成時からの変更点について

前回作成したスクリプトから変更点はざっくり以下になります。

  • ページの統計情報を取得項目として追加した。

  • 4分経過後に再実行するため、スクリプトトリガーを登録するようにした。

  • API を v2 から v4 に変更、指定パラメータと結果取得項目を変更した。


v2 と v4 の変更点について

以下、リリースノートに、変更点が記載されています。
* リリースノート  |  PageSpeed Insights  |  Google Developers

v2 は、2018 年 6 月には使用できなくなるので、それまでには v4 に変更する必要があります。
API の INPUT と OUTPUT は私が確認した限り以下の違いがありました。

strategy mobile でAPI実行時に、USABILITY スコア が返却されなくなった

v2 では、USABILITY スコアが存在しましたが、v4 では、USABILITY スコア が返却されません。
これは、速度評価に特化したということかと思います。
USABILITY 評価については、モバイルフレンドリーテスト API があるのでこれを使って評価すればいいのかと思います。1
About the API  |  URL Testing Tools API (Experimental)  |  Google Developers
ただ、URL Testing Tools API (Experimental) は、MOBILE_FRIENDLYどうかを返すので、スコアの返却は行われません。

統計情報の戻り値が追加された

API の 戻り値ベースで確認すると、v2 では以下の統計情報が返却されます。

numberResources
numberHosts
totalRequestBytes
numberStaticResources
htmlResponseBytes
cssResponseBytes
imageResponseBytes
javascriptResponseBytes
otherResponseBytes
numberJsResources
numberCssResources

v4 では以下の情報が返却されます。

numberResources
numberHosts
totalRequestBytes
numberStaticResources
htmlResponseBytes
overTheWireResponseBytes
cssResponseBytes
imageResponseBytes
javascriptResponseBytes
otherResponseBytes
numberJsResources
numberCssResources
numTotalRoundTrips
numRenderBlockingRoundTrips

追加されているフィールドについて以下説明します。

  • overTheWireResponseBytes
    転送されたレスポンスの合計バイト数です。gzip圧縮されている場合は、圧縮されたサイズで合計が算出されるのかと思われます。

  • numTotalRoundTrips
    ページを全て読み込むために必要なラウンドトリップ数

  • numRenderBlockingRoundTrips
    レンダリングをブロックするリソースを読み込むために必要なラウンドトリップ数

ドキュメントを確認する限り、統計情報として他のフィールドもあります。
これらは、条件により設定される項目なのかと思います。
Pagespeedapi: runpagespeed  |  PageSpeed Insights  |  Google Developers

loadingExperience が戻り値に追加された

このブログでは取得できていないですが、loadingExperience戻り値に追加されています。
ある程度アクセス数のあるサイトであれば、以下の形式でFCP (First Contentful Paint)値と、DCL(DOMContentLoaded)値が取得できるようになったようです。

  "loadingExperience": {
    "id": string,
    "metrics": {
      (key): {
        "median": integer,
        "distributions": [
          {
            "min": integer,
            "max": integer,
            "proportion": double
          }
        ],
        "category": string
      }
    },
    "overall_category": string,
    "initial_url": string
  }
この機能の説明は以下の記事がわかりやすかったです。
新しくなったGoogle PageSpeed Insights — ブログ | 株式会社Spelldata

この Chrome で取得され、収集された情報は、Chrome User Experience Report  |  Tools for Web Developers  |  Google Developers記載の手順でアクセスできるようです。

API の入力パラメータに Google Analytics のキャンペーンパラメータが追加された

v2 にも あったのかもしれませんが、v4 になってから気がつきました。
utm_source と、utm_campaign API に指定できるので、Google Analytics で PSI からのアクセスの特定ができます。
フィルタ設定で対象のキャンペーンパラメータに該当する場合は、除外設定をしてもよいかもしれません。


スクリプトで取得する統計情報について

loadingExperience取得する検証ができなかったので、pageStatsぶら下がる項目を取得して、スプレッドシートに転記するようにしました。
pageStatsぶら下がる項目は、フィールドとして設定されない場合もあり、設定がない場合は、スコアなしで空文字をセルに設定しています。


使い方

スプレッドシートの準備

シート名 config以下のレイアウトのスプレッドシートを作成します。
Key には、Page Speed Insights の API キー、
Urls には、チェック対象の URL、
SheetName には、チェック対象の URL の画面名を入力します。
スプレッドシート

スクリプト実行の事前準備

スクリプトの実行

  • configシートの入力後に、init.gs を実行
    config シートに記録対象のページ情報を入力後、init.gs のinitialize メソッドを実行し、スコア記録用のシートを作成します。

  • pageSpeed.gs の referer変更、スケジュール実行トリガーを登録します。
    API Keyに referrer を設定している場合は、referer変更します。2
    手動で、executePageSpeed起動するか、スケジュール実行するのであれば、executePageSpeed 時刻起動トリガーを登録してください。
    起動時刻が4分を超える場合は、1次中断し、中断したところから、1分後再度記録します。
    10 画面程度であれば、5分以内に完了すると思いますが、それ以上の画面数を記録する場合は、2重起動しないように起動間隔を調整してください。3


グラフでの可視化方法

取得できる統計情報を眺めた限り、ダッシュボードには以下のグラフを配置するのが良いのかと思いました。4

  • Mobile ページ、PC ページのスコア時系列グラフ
    スコアを時系列グラフを表示して、リリースタイミングでの変化を監視、記録する。

  • Resource 数の積み上げ時系列グラフ、または、積み上げ棒グラフ
    Resource 数はカテゴリごとに取得できるので、そのカテゴリごとの時系列と、合計を示すための積み上げを設定、または、numberResource合計リソース数を示すので、それを使うでもよいかもしれません。

  • Response バイト数の積み上げ時系列グラフ、または、積み上げ棒棒グラフ
    Response バイト数もカテゴリごとに取得ができます。Resource数と同様の描画でいい感じになりそうに思います。

  • RoundTrip数の時系列グラフ
    numTotalRoundTrips numRenderBlockingRoundTrips取得できます。
    2つだけなので、それぞれ時系列で表示するのがよいように思います。


時系列での記録はそこまで有用ではない?

時系列でしばらく記録していますが、Speed Index に比べると、時系列で取得する意味は薄いかなと思いました。
どちらかというと、定期的にサイトの大部分の画面のスコアを取得し、その結果を可視化して傾向分析するような使い方のほうが使いやすいのかもと思いました。
sitemap.xml をインプットにして、サイトのページのスコアを取得して、Mobileスコア、PCスコアを散布図で出力とかすると、出力ページの特性、構造で点数の出方に偏りがわかったりするかもしれないと思いました。
以上です。


  1. Experimental と記載がありますが..確かに以前実行した時はあまり応答が返ってこなかった。 

  2. header のスペルミスっている気がするので、referer でうまく動作していないようであれば、referrer変更してください。 

  3. 2重起動すると、作り的に2度同じ画面が記録されるのかと思います。中断時に実行トリガー設定しないで、5分間隔で実行を繰り返したほうがいいかもしれないです。 

  4. 思っただけで、グラフは作成中です。実際に描画するといい感じにならず悩ましいです。 

コメント