WordPressを利用していると、記事を公開した時などにクローラーへ通知を送信するプラグインがあるのですが、Laravelでは自前で実装しないといけないため、SearchConsoleAPIを使ってサイトマップを自動送信する方法をご紹介します。
目次
SearchConsoleAPIの発行
SearchConsoleAPIは、Google Cloud Platformで発行します。
Google Cloud Platformにアクセスしましょう。
プロジェクト作成
SearchConsoleAPIを利用するためのプロジェクトを作成します。
※ 既にプロジェクトがある場合は作成する必要はありません。
左上の「プロジェクトを選択」の次に「新しいプロジェクト」をクリックして、新しいプロジェクトを作成します。
※ プロジェクト名は任意のものに変更してください。
SearchConsoleAPIを有効化
次に上記で作成したプロジェクトで、SearchConsoleAPIを有効にします。
ダッシュボード画面で、「APIとサービスの有効化」をクリックします。
APIとサービスの検索画面で「search console」と入力して検索し、「Google Search Console API」を選択します。
SearchConsoleAPIを有効にします。
「有効にする」をクリックしましょう。
認証情報を作成
次にAPIを実行するための認証情報を作成します。
ダッシュボード > 認証情報 > 認証情報を作成 より 「サービスアカウント キー」を作成します。
各項目を入力して認証情報を作成します。
※ サービスアカウント名は任意のものに変更してください。
作成完了すると、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」の値を使います。
以上で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');
コメントを残す