Google Search Console 上の左メニュー の、[検索トラフィック]>[モバイルユーザビリティ] から モバイルフレンドリーテストが実施できます。モバイルフレンドリーテスト用の WEB API も用意されており、定期的に実施する目的で、python で Web API を叩くスクリプトを作成してみました。
作ったものについて記載します。


プログラムから、モバイルフレンドリーテストを実行する動機

実際に実施してみたところ、制限が厳しく定期的に全画面のチェックを行うことはできませんでしたが、以下がプログラムから実行したい動機になります。
定期的に実行する場合は、10 URL程度をサンプリングして 一括実行する のが現実的かなと思います。

  • 確認したい URL が複数あり、モバイルフレンドリテストを一括実行したい。
    複数対象 URL がある場合、1つ1つ画面から実行するのは結構たいへんです。

  • 定期的に、自動実行したい。
    リリース毎に手動での確認は工数がかかります。日次で問題が発生していないかを確認したいです。
    スケジューラーからスクリプト実行することで、忘れることなく実行ができます。


作成したスクリプトについて

作成したスクリプトは以下2つになります。

  1. sitemap.xml から、チェックする対象の url の一覧を取得する

  2. 取得した url に対して、URL Testing Tools API を使って、モバイルフレンドリーテストを実行する


1. sitemap.xml から、チェックする対象の url の一覧を取得する

以下の python スクリプトを作成して、sitemap.xml から、url のみを抽出し、
console に出力するようにしました。

  • pip インストール
    実行には、requests と、beautifulsoup4必要になります。

    pip install requests
    pip install beautifulsoup4
    

  • get_url_from_sitemap.py

    # -*- coding: utf-8 -
    
    import requests
    import argparse
    from bs4 import BeautifulSoup
    
    
    def main():
        parser = argparse.ArgumentParser(description="description goes here")
        parser.add_argument(
            "-url", type=str, help="help text goes here. This option is required", required=True)
        command_arguments = parser.parse_args()
        soup = BeautifulSoup(requests.get(command_arguments.url).text, "xml")
        for loc in soup.find_all('loc'):
            print(loc.get_text())
    
    if __name__ == '__main__':
        main()
    

  • 実行コマンド
    以下、コマンド実行で、sitemap.xml に記載されている一覧が、プロンプトに出力されます。

    python get_url_from_sitemap.py -url https://www.monotalk.xyz/sitemap.xml
    

  • エラーになっているURLの一覧を取得したい場合
    Google Search Console の、モバイルユーザビリティのページから、
    CSVダウンロードできますので、エラーとなったURLのみ取得する場合は、それでいいかと思います。

2. 取得した url に対して、URL Testing Tools API を使って、モバイルフレンドリーテストを実行する

以下の python スクリプトを作成して、URL Testing Tools API使用して、
モバイルフレンドリーテストを実行するようにしました。

  • API キーの発行
    実行には、Google Developer Console から API キーの発行が必要になります。
    API キーには、referer の設定を行ってください。

  • pip インストール
    実行には、requests必要になります。

    pip install requests
    

  • validate_mobile_friendly.py

    # -*- coding: utf-8 -
    import requests
    import argparse
    
    API_URL = "https://searchconsole.googleapis.com/v1/urlTestingTools/mobileFriendlyTest:run"
    
    
    def main():
    
        parser = argparse.ArgumentParser(description="description goes here")
        parser.add_argument(
            "-key", type=str, help="help text goes here. This option is required", required=True)
        parser.add_argument(
            "-url", type=str, help="help text goes here. This option is required", required=True)
        parser.add_argument(
            "-referer", type=str, help="help text goes here. This option is optional", required=False)
        command_arguments = parser.parse_args()
        payload = {'url': command_arguments.url}
        headers = {'Content-Type': 'application/json'}
        if (command_arguments.referer):
            headers.update({'referer': command_arguments.referer})
        response = requests.post(
            API_URL + "?key=" + command_arguments.key, params=payload, headers=headers)
    
        print("URL=" + command_arguments.url)
        print("RESULT=" + response.text)
    
    
    if __name__ == '__main__':
        main()
    

  • 実行コマンド
    -key には、APIキーを、-referer には、APIキーに設定した リファラーを、-url には、チェック対象の URL を設定してください。

    python validate_mobile_friendly.py -key api_key -referer your_referer -url your_url
    

  • アウトプット
    以下のようなアウトプットが出力されます。

    URL=https://www.monotalk.xyz/blog/jackson-covertvalue-exclude-fields-no-annotation/
    RESULT={
      "testStatus": {
        "status": "COMPLETE"
      },
      "mobileFriendliness": "MOBILE_FRIENDLY",
      "resourceIssues": [
        {
          "blockedResource": {
            "url": "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"
          }
        }
      ]
    }
    
    テスト結果 NG の場合は、mobileFriendliness戻り値が、NOT_MOBILE_FRIENDLYなります。


URL Testing Tools API の使用上限について

Usage Limits  |  URL Testing Tools API (Experimental)  |  Google Developers記載がありますが、API の 使用上限は 1 QPS (1 秒間に<wbr> 1 回) です。

Per-user limit (calls made by the same user): 1 QPS Per-project limit (calls made using the same Developer Console key): 1 QPS

実際、実行してみたところ、実質この制限よりも若干厳しいように思いました。API には、Experimental記載があり、そのため厳しいのかもしれません。
実行間隔として、1秒以上(5秒、10秒とか) の間隔を空けて実行することをお勧めします。

スクリプトは当初 for loop で実装していましたが、 for loop で連続実行は、使用制限に引っかかり厳しかったので、URL 1件指定で使うようにしました。
当初作成したスクリプトは、URL Testing Tools API (Beta) を実行するpython スクリプト UP しましたので、必要であればご確認ください。


出力された警告についての対処

テスト時の結果と、出力された警告の対応方法ついては、Google モバイルフレンドリーテストで出力された警告に対処する | Monotalkまとめました。
よろしければご確認ください。

以上です。

コメント

カテゴリー