背景

これまで運営しているサイトのデプロイ時にcurlでサイトマップPingを送信することで検索エンジン側にサイトの更新を通知していましたが、これが廃止されることになり代替策を検討することになりました。

匿名サイトマップPingの廃止

2023年12月、GoogleはサイトマップPingのサポートを終了しました。1またBingもこれに先立ち2022年にサイトマップPingを廃止しています。2

サイトマップPingは未認証のREST APIのため他人のサイトマップを送信することもできていました。そのためスパム問題が発生していたようです。

代替策の検討

検索エンジンにコンテンツのインデックスを更新させる方法は大きく以下の2つの方法があります。

  • インデックス要求APIでURLを送信
  • 認証APIでサイトマップを送信

インデックス要求APIはGoogleなら Indexing API、Bingなら IndexNowとなります。
また認証APIでのサイトマップ送信はGoogleなら Search Console API、Bingなら Bing Webmaster APIとなります。

これらは以下の違いがあります。

要求単位 インデックスの速さ 用途
インデックス要求API URL 数分 指定のURLをできるだけ早くインデックスさせる
サイトマップ送信 サイトマップ 数日 サイトが更新されたことを検索エンジンに知らせる

なおインデックス要求APIには リクエスト上限があります。更新していないURLを含めるなど無計画にリクエストすると上限に達してしまう恐れがあります。

今回のサイトは静的サイトジェネレーターで構築しており、以下の理由によりサイトマップの送信を選択しました。

  • サイト内のページ数が多くないこと
  • インデックスの速さがそこまで重要ではないこと
  • 対象URLを取りまとめるのが面倒
    静的サイトジェネレーターによりサイト全体をビルドし公開する形なので、対象ページを割り出す処理が必要になる。例えばページの更新日時が前回デプロイ日時以降のページを抽出するなど。

例えばWordPressなど動的なコンテンツ管理システム上で記事を更新している場合は個々の記事の更新タイミングが明確なのでインデックス要求APIが適しているかと思います。また、大規模な求人サイトなどURL数が膨大なサイトや、ニュースサイトなどインデックスの速さが重要になるサイトもインデックス要求APIが適しています。

逆に、静的サイトジェネレーターなど何らかの理由で個々の記事の更新タイミングでインデックス要求することができない場合は、サイト全体が更新されたことを知らせるサイトマップ送信を使うことになるかと思います。

これからは基本的にインデックス要求APIを使うことになるのかもしれませんが、サイトマップ送信も一定の需要を維持し続けると思います。

サイトマップ送信コマンド

Search Console APIの認証トークン生成がシェルスクリプトでは難しかったため、専用のコマンドを探しましたが無かったので作りました。これでこれまで通りサイトデプロイ時にサイトマップを送信できるようになりました。

以下のリポジトリでソースコードを公開しています。リリースページから実行ファイルをダウンロードできます。主な特徴は以下のとおりです。

  • GoogleとBingに対応
  • 認証情報は環境変数に設定する形
  • 実行ファイル形式なのでファイルを1つ配置すれば実行可能

使い方など詳細はリポジトリを参照ください。