Nov
14
2024
Off
Node.jsでSearch Console URL Inspection APIをローカルで実行してインデックスステータス分析の結果をCSV化する
はじめに
Search Console URL Inspection API はGoogle のインデックスに登録されたページのインデックスステータス、AMP、モバイルユーザビリティ、リッチリザルトについての分析の結果を取得することができますが、今回はSearch Console URL Inspection APIを使用して複数のサイトのURLをチェックを行い、インデックスステータス分析の結果をCSVファイルに保存する処理を行うプログラムをNode.jsで作成しました。
GoogleのURL Inspection Tool(URL検査ツール) https://support.google.com/webmasters/answer/9012289 でも同様の情報を取得することができます。
作成するプログラムについて
- Google Search Consoleからページの情報を取得
- 今回はindexStatusResult(インデックスステータス分析の結果)を書き出し
- URLリストは改行区切りのテキストファイルにて指定
- 出力先のCSVファイル上書き
出力するCSVの項目
| url | 対象URL |
| message | API呼び出しが成功した場合は’success’、失敗した場合はエラーメッセージ |
| verdict | URL がインデックスに登録されているかどうか |
| coverageState | Google がページを検出してインデックスに登録できるか |
| robotsTxtState | ページが robots.txt ルールによって Google に対してブロックされているか |
| indexingState | ページが noindex ルールによってインデックス登録をブロックするか |
| lastCrawlTime | この URL が最後にメインクローラを使用して Google によってクロールされた日時 |
| pageFetchState | Google がサーバーからページを取得できたかどうか |
| googleCanonical | Google が正規版として選択したページの URL |
| userCanonical | ページまたはサイトが正規版として宣言している URL |
| sitemap | サイトマップ(カンマ区切り) |
| referringUrls | 検査対象 URL に直接的または間接的にリンクしている URL(カンマ区切り) |
| crawledAs | Google がサイトをクロールするために使用したメインクローラー |
Google Search Console API、Node.js の準備
こちらの記事に従って、「Google Search Console API の準備」〜「Node.js の準備」までを行います。
プログラム
app-inspect.js として作成しました。
require('dotenv').config(); // .envファイルを環境変数として読み込み
const fs = require('fs');
// Google APIs Node.js Client 読み込み
const { google } = require('googleapis');
// URL一覧ファイル名
const urlsFile = './site-urls.txt';
// 保存ファイル名
const fileName = 'inspections.csv';
// CSVヘッダー
const headers = [
'url',
'message',
'verdict',
'coverageState',
'robotsTxtState',
'indexingState',
'lastCrawlTime',
'pageFetchState',
'googleCanonical',
'userCanonical',
'sitemap',
'referringUrls',
'crawledAs',
];
// Search Console URL Inspection APIの呼び出し関数
async function inspectURL(siteUrl, searchConsole) {
const response = await searchConsole.urlInspection.index.inspect({
requestBody: {
inspectionUrl: siteUrl,
siteUrl: siteUrl,
languageCode: 'ja_JP',
},
});
return response.data;
}
// 実行関数
async function runIsnspectUrls() {
// Google認証の初期化
const auth = new google.auth.GoogleAuth({
keyFile: process.env.GOOGLE_APPLICATION_CREDENTIALS,
scopes: ['https://www.googleapis.com/auth/webmasters.readonly'],
});
const authClient = await auth.getClient();
google.options({ auth: authClient });
// Search Consoleライブラリの読み込み
const searchConsole = google.searchconsole('v1');
const results = [];
// url一覧ファイルの読み込み
const text = fs.readFileSync(urlsFile);
for (const line of text.toString().split('\n')) {
const url = line.trim();
if (url) {
try {
// Search Console URL Inspection APIの呼び出し
const data = await inspectURL(url, searchConsole);
// 結果からindexStatusResultを取り出し
results.push(Object.assign({url, message: 'success'}, data.inspectionResult.indexStatusResult));
} catch (error) {
results.push({url, message: '"' + error.errors[0].message + '"'});
}
}
}
// CSVファイルへ書き出し
// ヘッダー書き出し
fs.writeFileSync(fileName, headers.join(',') + '\r\n');
for (const result of results) {
const columns = [];
for (const head of headers) {
let columnData = result[head] || '';
if (Array.isArray(columnData)) {
// 配列の場合は結合し、ダブルクォートでくくる
columnData = '"' + columnData.join(',') + '"';
}
columns.push(columnData);
}
fs.appendFileSync(fileName, columns.join(',') + '\r\n');
}
}
// 実行
runIsnspectUrls();
ファイル構成
.env Quickstart-xxxxxxxxxx.json app-inspect.js site-urls.txt
site-urls.txtの例
https://www.implementdigital.com/ https://www.digitalaccels.com/
プログラム実行
node app-inspect.js
生成されたcsvファイルの例
url,message,verdict,coverageState,robotsTxtState,indexingState,lastCrawlTime,pageFetchState,googleCanonical,userCanonical,sitemap,referringUrls,crawledAs https://www.implementdigital.com/,success,PASS,送信して登録されました,ALLOWED,INDEXING_ALLOWED,2024-11-11T06:37:01Z,SUCCESSFUL,https://www.implementdigital.com/,https://www.implementdigital.com/,"https://www.implementdigital.com/sitemap.xml","https://www.implementdigital.com/column/smartsheet/a-custom-branding-guide-for-smartsheet/,https://www.digitalstacks.net/products-satori,https://satori.marketing/partners/,https://www.implementdigital.com/ja/marketing-technology-enablement-center/",MOBILE https://www.digitalaccels.com/,"You do not own this site, or the inspected URL is not part of this property.",,,,,,,,,,,
1行目:ヘッダ行
2行目:正常に取得できた場合の例
3行目:エラーだった場合の例
※Googleスプレッドシートで開いた場合

まとめ
今回はインデックスステータス分析の結果のみ保存するプログラムを作成しましたが、他の分析結果もAPIの取得結果に含まれているので、必要に応じて保存することも可能です。
紹介したプログラムが何かの参考になれば幸いです。
Implement DigitalではGoogle Analytics / Google Tag Manager の導入・実装・運用を支援するサービスを提供しています。
ご興味がありましたらお問い合わせください
Posted inGoogle Marketing Platform