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

ウェブサイトには定期的にGoogleのクローラーが巡回しに来ますが、その時にサイトマップの変更を確認することはないそうです。
Google では、サイトがクロールされるたびにサイトマップを確認することはありません。サイトマップの確認は最初に通知されたときのみであり、その後は変更が Google に通知された場合にのみ確認します。
つまり、クロール頻度の設定とは別に、サイトマップの更新をGoogleに伝える必要があります。
一般的に更新を伝える方法として、robots.txtにサイトマップの場所を記述することが多いですが、この方法を使った場合、クロール時に更新を確認し、次回のクロールから更新分が反映されます。
クロール頻度をdailyに設定していたとしても、初めて更新分がクロールされるのは翌日ということになります。
今回はSSGのビルドと同時に、サイトマップを送信し、最短で更新を伝える方法を紹介します。
ちなみにGoogleは、更新もしてないのに何度も送ってくるなとも言っていますので、この点には注意してください。
未変更のサイトマップについて、送信や通知を複数回行わないようにしてください。
代理送信できてしまう時点でペナルティはないと思いますが、やる場合は自己責任でお願いします。
実行環境
このサイトはGatsby.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に送信されます。