LaravelでSearchConsoleAPIを使ってサイトマップ送信を自動化する方法

WordPressを利用していると、記事を公開した時などにクローラーへ通知を送信するプラグインがあるのですが、Laravelでは自前で実装しないといけないため、SearchConsoleAPIを使ってサイトマップを自動送信する方法をご紹介します。

SearchConsoleAPIの発行

SearchConsoleAPIは、Google Cloud Platformで発行します。
Google Cloud Platformにアクセスしましょう。

プロジェクト作成

SearchConsoleAPIを利用するためのプロジェクトを作成します。
※ 既にプロジェクトがある場合は作成する必要はありません。

左上の「プロジェクトを選択」の次に「新しいプロジェクト」をクリックして、新しいプロジェクトを作成します。

Google Cloud Platform - ホーム

Google Cloud Platform - 新しいプロジェクトを作成
※ プロジェクト名は任意のものに変更してください。

SearchConsoleAPIを有効化

次に上記で作成したプロジェクトで、SearchConsoleAPIを有効にします。
ダッシュボード画面で、「APIとサービスの有効化」をクリックします。

Google Cloud Platform - ダッシュボード

APIとサービスの検索画面で「search console」と入力して検索し、「Google Search Console API」を選択します。

Google Cloud Platform サービス検索

SearchConsoleAPIを有効にします。
「有効にする」をクリックしましょう。

Google Cloud Platform Search Console API 詳細

認証情報を作成

次にAPIを実行するための認証情報を作成します。
ダッシュボード > 認証情報 > 認証情報を作成 より 「サービスアカウント キー」を作成します。

Google Cloud Platform 認証情報

各項目を入力して認証情報を作成します。
※ サービスアカウント名は任意のものに変更してください。

Google Cloud Platform サービスアカウント作成

作成完了すると、JSONファイルがダウンロードされます。
中身は下記のようになっています。次の手順で利用しますので削除しないようにしましょう。

{
  "type": "service_account",
  "project_id": "*****",
  "private_key_id": "*****",
  "private_key": "*****",
  "client_email": "*****",
  "client_id": "*****",
  "auth_uri": "*****",
  "token_uri": "*****",
  "auth_provider_x509_cert_url": "*****",
  "client_x509_cert_url": "*****"
}

SearchConsoleにSearchConsoleAPI用のユーザーを追加

search consoleにアクセスします。
右上の歯車アイコン > ユーザーとプロパティの所有者 > 新しいユーザーを追加 よりユーザーを追加します。

追加するユーザーのメールアドレスには、上記のJSONファイルの「client_email」の値を使います。

SearchConsole ユーザー追加

以上でAPIを利用するための設定は完了です。

サイトマップの定期送信処理を実装

APIを叩くのにライブラリを使用するので、Laravelプロジェクトにライブラリを追加しましょう。

composer require google/apiclient

SearchConsoleAPIを叩くためのクラスを作成します。
「google-service-account-credentials.json」の中身は、先ほどAPIの認証情報を作成した時にダウンロードされたJSONファイルです。ファイル名は任意で構いません。
また、「APP_NAME」を先ほど作成したプロジェクト名に変更してください。

<?php

namespace App\Utils;

class SearchConsole
{
    const APP_NAME = 'SearchConsoleApiTest';
    const SCOPES = [
        'https://www.googleapis.com/auth/webmasters',
        'https://www.googleapis.com/auth/webmasters.readonly',
    ];
    const KEY_FILE_LOCATION = __DIR__ . '/google-service-account-credentials.json';

    private $webmasters;

    /**
     * API設定の初期化
     */
    public function __construct()
    {
        $client = new \Google_Client();
        $client->setApplicationName(self::APP_NAME);
        $client->setAuthConfig(self::KEY_FILE_LOCATION);
        $client->setScopes(self::SCOPES);
        $this->webmasters = new \Google_Service_Webmasters($client);
    }

    /**
     * サイトマップ送信
     */
    public function sitemapsSubmit($url, $feedUrl)
    {
        return $this->webmasters->sitemaps->submit($url, $feedUrl);
    }
}

そして、サイトマップの送信処理は、定期実行したいので、コマンドで作成します。

php artisan make:command WebmastersSitemapSend

中身を次のように実装します。
「$url」「$feedUrl」の部分は自分のサイトのURLに変更してください。

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

use App\Utils\SearchConsole;

class WebmastersSitemapSend extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'webmasters:sitemap:send';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'サイトマップを送信';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        $url = 'https://blog.hiroyuki90.com/';
        $feedUrl = 'https://blog.hiroyuki90.com/sitemap.xml';

        $searchConsole = new SearchConsole();
        $res = $searchConsole->sitemapsSubmit($url, $feedUrl);
    }
}

php artisan webmasters:sitemap:send を実行して、search console > クロール > サイトマップのところの処理日が更新されて入ればOKです。
最後に定期処理の設定として、スケジューラーに登録して終了です。

# app\Console\Kernel.php

# 追加
$schedule->command('webmasters:sitemap:update')->dailyAt('00:00');

この記事と関連している記事