discourse-indexnow — トピック作成または編集後にBingとYandexに自動通知

:information_source: 概要 公開トピックのURLを、新規作成・編集・削除後に自動的にIndexNowプロトコルに送信し、BingやYandexなどの対応検索エンジンがクローラーがゆっくり訪れるのを待つ代わりに、数分以内にコンテンツを発見または削除できるようになります。
:hammer_and_wrench: リポジトリ github.com/imlotso/discourse-indexnow
:open_book: インストールガイド Discourseでのプラグインインストール方法

機能

  • 新しいトピックが投稿されたら自動送信し、初帖やトピックの主要な属性が編集された場合は自動で再送信します。
  • 返信で送信触发:新しい返信が生じると、対応するページングURL(例:?page=3)を自動送信し、単一URLのクールダウン時間をサポートして頻繁な送信を防ぎます。
  • トピックが削除されると、対応するURLを自動送信し、検索エンジンが404/410をより早く検出して削除を促進します。
  • サイトがContent Localizationとクローラーのlocaleパラメータを有効にしている場合、ローカライズされたトピックURLも一緒に送信します——Discourseの実際の設定localeクエリパラメータを使用し、ハードコードしません。
  • メインURLと既存のローカライズURLを1つのIndexNow urlList バッチリクエストに統合し、個別に逐条送信するのではなく処理します。
  • 過去投稿の補充送信:カテゴリと日付範囲でトピックをフィルタリングし、まず結果をプレビューしてから一度にバッチ送信します——同じバッチ送信エンジンを再利用し、プロトコルの1回あたりの10,000件上限を超えると自動的に分割されます。処理中のバッチ(たとえば範囲が大きすぎるものを選択した場合)は、Logsタブから直接キャンセルできます。
  • 手動送信:1行に1つのURLを貼り付けるだけで、必要に応じて指定されたリンクを送信できます。外部リンクと条件を満たさないトピックは自動的にフィルタリングされます。
  • インテリジェントなレート制限とクォータ管理:平滑スライディングウィンドウ(Sliding window)ベースの時間/日次送信上限をサポートします。IndexNowの429応答が発生すると自動でバックオフします(Retry-Afterヘッダーを優先して従います)。管理画面には直感的なクォータプログレスバーと残量回復カウントダウンが表示されます。
  • 指定されたカテゴリおよびタグの除外をサポートし、自動プライバシーフィルタリングの上にビジネスレイヤーの除外ルールを追加できます。
  • キーローテーションをサポート(誤操作防止の二次確認ダイアログ付き)、新しいキーを生成すると古いキーは即時無効になります。
  • 管理画面に/<key>.txtの公网到達可能チェックを内蔵しています。
  • トピックのカテゴリ移動、カテゴリの表示変更、タグ更新が発生した場合、自動的に非同期で再送信または同期で除外されます。大量操作でもページがブロックされません。
  • バッチID、locale、トリガー理由(新規作成/編集/削除/カテゴリ変更/補充/手動)、過去7日間の成功/失敗トレンド、失敗原因のカテゴリ(レート制限/キーエラー/ドメイン不一致/その他)をログ記録します。
  • すべての送信は非同期で実行され、自動送信と同じプライバシーフィルタリングロジックを使用します——メール送信、制限ありカテゴリ、リストなし/削除済みトピック、ログイン要件付きサイトは一切送信されません。
  • 管理画面は英語と簡体字中国語の2言語を提供します。

セットアップ手順

  1. 上記のインストールガイドに従ってプラグインをインストールし、コンテナを再構築します。
  2. Admin > Plugins > discourse-indexnowを開きます。
  3. SettingsタブでGenerate keyをクリックします(または、既に登録済みの32桁の16進数キーを入力することもできます)。
  4. Enable IndexNow submissionsにチェックを入れます。
  5. キーが公网からアクセスできることを確認します:
https://あなたのフォーラムドメイン/<key>.txt

正常ならHTTP 200を返し、内容はキー自体です。管理画面も自動的にこのチェックを行い、「key.txt アクセス可能」の横にキャッシュ付きの緑/赤の状態を表示します。
6. (オプション)Logsタブで「補充送信」パネルを使用:カテゴリと日付範囲を選択し、プレビューをクリックして一致件数を確認後、送信をクリックします。バッチが処理中の場合は、同じページでキャンセルできます。
7. (オプション)手動送信入力欄を使用して、1行に1つのURLを貼り付けるだけで、通常の自動フローとは別に指定されたリンクを即時送信できます。

ログページにはクォータ使用率プログレスバー、過去7日間の成功/失敗傾向グラフ、失敗原因のカテゴリ別統計も表示され、送信失敗がレート制限によるものか、キー不整合、その他の原因かを一目で確認できます。

設定項目

名前 説明
indexnow_enabled プラグインの総合スイッチ。サイトがlogin_requiredを有効にしているときは有効にできません。その後この設定を有効にすると、プラグインは自動的に無効になります。
indexnow_api_key 現在送信検証に使用されている32桁の16進数キー。
indexnow_submit_on_create 新規公開トピック投稿時に自動送信。
indexnow_submit_on_edit 初帖やトピック属性の変更後に自動再送信。
indexnow_submit_on_reply 新しい返信が生じた際に、その返信があるページングURLを自動送信。
indexnow_url_cooldown_minutes 単一URLのリフレッシュ防止クールダウン時間(分)。
indexnow_excluded_category_ids 追加で除外するカテゴリ。カテゴリ自体が公開されていても送信されません。
indexnow_excluded_tag_names 追加で除外するタグ。トピックのカテゴリが送信条件を満たしていても送信されません。
indexnow_hourly_limit 1時間あたりの最大送信URL数(スライディングウィンドウベース)。
indexnow_daily_limit 1日あたりの最大送信URL数(スライディングウィンドウベース)。

既知の制限

  • Googleは現在IndexNowプロトコルに参加していません。
  • クローラーのlocaleパラメータが有効化され、かつそのトピックに対応するローカライズコンテンツが存在する場合にのみ、ローカライズURLを送信します。
  • 現在、初帖の編集とそれ以降の返信ページ変更はサポートされていますが、中間投稿の個別編集は自動的に送信を触发しません。

これは独立した開発者が作成したプラグインで、Discourse公式のメンテナンス対象ではありません。すでに自分のフォーラムのプロダクション環境で稼働しており、RSpecテストがあり、すべてのpush/PRでCIが実行されています。GitHubのissueまたはこのトピックへの返信で問題や機能リクエストを歓迎します。