SSGでサイト更新時に、サイトマップを自動的にGoogleに送信する

ウェブサイトには定期的に Google のクローラーが巡回しに来ますが、その時にサイトマップの変更を確認することはないそうです。
Google では、サイトがクロールされるたびにサイトマップを確認することはありません。サイトマップの確認は最初に通知されたときのみであり、その後は変更が Google に通知された場合にのみ確認します。
つまり、クロール頻度の設定とは別に、サイトマップの更新を Google に伝える必要があります。
一般的に更新を伝える方法として、robots.txt にサイトマップの場所を記述することが多いですが、この方法を使った場合、クロール時に更新を確認し、次回のクロールから更新分が反映されます。
クロール頻度を daily に設定していたとしても、初めて更新分がクロールされるのは翌日ということになります。
今回は SSG のビルドと同時に、サイトマップを送信し、最短で更新を伝える方法を紹介します。
ちなみに Google は、更新もしてないのに何度も送ってくるなとも言っていますので、この点には注意してください。
未変更のサイトマップについて、送信や通知を複数回行わないようにしてください。
代理送信できてしまう時点でペナルティはないと思いますが、やる場合は自己責任でお願いします。
実行環境
このサイトは Astro.js を使って作成していますが、今回実装したのは以下の環境です。
SSG | Next.js |
デプロイ | Vercel |
ビルドコマンド | build |
サイトマップ送信プログラムの作成
送信には Node 標準のライブラリである https を使用します。
Google が用意しているサイトマップ送信用のアドレスに GET リクエストを送信します。
(() => {
const https = require('https');
const END_POINT = 'https://www.google.com/webmasters/sitemaps/ping';
const SITEMAP_URLS = ['送信するサイトマップのURL', '複数ある場合(RSSやAtomなど)は複数指定'];
for (const sitemap of SITEMAP_URLS) {
https.get(`${END_POINT}?sitemap=${sitemap}`);
console.log('🐦 Googleにサイトマップを送信しました', sitemap);
}
})();
package.json の変更
次に先ほど作成したプログラムを、ビルドが完了した後に実行されるよう設定します。
ping-sitemap の部分を作成した js ファイル名に変更してください。
"scripts": {
"build": "next build && node ping-sitemap",
}
これでデプロイ先でも、ビルドが完了する度にサイトマップが Google に送信されます。