Discourse-indexnow — トピックの作成または編集時にBingとYandexへ即座に通知

:information_source: 概要 トピックの作成、編集、削除、および返信時に、パブリックなトピックURLを自動的に IndexNow プロトコルに送信します。これにより、Bing、Yandex、および他の互換検索エンジンが、クローラーを待たずに数分以内にコンテンツを発見またはリストから削除できます。
:hammer_and_wrench: リポジトリ github.com/imlotso/discourse-indexnow
:open_book: インストールガイド Discourseにプラグインをインストールする方法

より詳細な背景を含む中国語の解説も、私のフォーラムで利用できます: sitetalk.net/t/topic/642

機能

  • 新しいパブリックなトピックを自動的に送信し、最初の投稿または重要なトピック属性が変更された場合に再送信します。
  • 返信時の送信: 新しい返信が投稿された際に、ページネーション付きURL(例: ?page=3)を自動的に送信します。スパム防止のために、URLごとのクールダウン時間を設定できます。
  • トピック削除時にURLを自動的に送信し、エンジンが404/410を検出して迅速にリストから削除するのを助けます。
  • コンテンツのローカライズ とクローラーのロケールクエリパラメータが有効な場合、ローカライズされたトピックURLを自動的にバッチ処理して送信します。ハードコードではなく、実際に設定されたロケールパラメータを使用します。
  • キャンオニカルURLとローカライズURLを単一の IndexNow urlList バッチリクエストにまとめ、1つずつ送信する代わりに処理します。
  • 履歴バックフィル: カテゴリと日付範囲でフィルタリングし、一致数のプレビューと一括送信が可能です。プロトコルの10,000件制限を超えるバッチには自動チャンク分割が適用されます。アクティブなジョブはログタブからキャンセルできます。
  • 手動送信: 必要に応じて、カスタムURLを1行ずつ送信できます。外部リンクや条件を満たさないリンクは自動的にフィルタリングされます。
  • スマートレートリミッティング: 詳細なスライディングウィンドウアルゴリズムを使用して、時間ごとおよび日ごとの制限を適用します。429 エラー時に自動的にバックオフし(Retry-After を尊重)、管理UIには現在の使用量と容量が解放されるまでの正確な時間を示すビジュアルなクォータバーが表示されます。
  • 自動化されたプライバシーフィルターの上位にあるビジネスレイヤーのルールとして、特定のカテゴリおよびタグを除外できます。
  • 誤って上書きした場合の確認ダイアログ付きのキーローテーション。以前のキーは即座に無効化されます。
  • /<key>.txt のパブリックアクセシビリティの管理者検証。
  • トピックの移動、カテゴリの表示設定変更、およびタグの更新は、UIのブロックを防止するために、バックグラウンドジョブで非同期の再送信または除外のファンアウトをトリガーします。
  • バッチID、ロケール、トリガー理由、7日間の成功/失敗トレンドチャート、およびカテゴリ分けされた失敗理由(レート制限、キーエラー、ドメイン不一致)を含む豊富なログエントリ。
  • プライバシー境界に準拠した完全非同期送信: PM、制限付きカテゴリ、未公開/削除されたトピック、ログインが必要なサイトは決して送信されません。
  • 英語と簡体字中国語の両方で利用可能です。

セットアップ手順

  1. 上記のガイドに従ってプラグインをインストールし、コンテナを再構築します。
  2. 管理 > プラグイン > discourse-indexnow に移動します。
  3. 設定 の下で、キーを生成 をクリックします(または既存の32文字の16進数キーを貼り付けます)。
  4. IndexNow送信を有効にする にチェックを入れます。
  5. キーのパブリックアクセシビリティを確認します:
https://your-forum-domain.com/<key>.txt

キー文字列とともにHTTP 200を返す必要があります。管理パネルには、キャッシュされた緑/赤のインジケーターも表示されます。
6. (オプション)ログ タブで、「バックフィル」パネルを使用します: 基準を選択し、プレビュー をクリックしてから、送信 をクリックします。
7. (オプション)手動送信ボックスを使用して、自動化フローの外で個々の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プロトコルに参加していません。
  • ローカライズされたURLは、クローラーのロケールパラメータが有効で、ローカライズされたコンテンツが存在する場合にのみ送信されます。
  • 現在、最初の投稿の編集と新しい返信のページネーションはサポートされていますが、中間の返信への編集は独立して送信をトリガーしません。

これは独立した非公式プラグインであり、Discourseチームによってメンテナンスされていません。私のフォーラムで本番環境として動作しており、すべてのプッシュ/PRに対してCIによるRSpecテストカバレッジを持っています。GitHub issuesまたはここでの返信を通じて、バグ報告や機能リクエストをお待ちしています。

「いいね!」 7

ありがとうございます!まさに今、「自分で Indexnow プラグインを作る必要があるのか?」と呟いていたところ、見つけたんです!

indexnow_submit_on_edit は、コンテンツが変更されるすべてのリベイク時に Indexnow 送信を行うのでしょうか?

いいえ — これは通常のPostRevisorフローによる本物の編集時のみ発火し、かつトピックの最初の投稿(OP)に対してのみ適用されます。OP以外の返信やシステムによってトリガーされる再ベイク(画像修正のcron、管理者による一括再ベイクなど)は、このプラグインがフックしているイベントを経由しないため、再提出をトリガーしません。

このプラグインを1週間使っていますが、非常に満足しています。必要な動作を正確に果たしていますが、インストール直後にプラグインが失敗するいくつかのバグに遭遇しました。

具体的には、同じエンドポイントを使用する他のプラグインとの間でルート衝突が発生しました。また、レート制限の問題もあり、送信が制限に達し、数分待った後、再び制限に達するという状況が発生しました。さらに、管理パネルのスタイルシートが公開エリアに注入されており、CSSクラスがプラグイン用に適切にプレフィックス付けされていませんでした。

また、本当に欲しかった機能も追加しました。トピックに返信がある場合に送信できる機能です。この送信は特定のページ番号にキー付けされており、トピック全体を処理するのを防ぎます。数百の返信があるトピックの場合、最後のページのみが送信されるため、クローラーが返信を見つけ、トピックを更新する速度が大幅に向上します。

「いいね!」 2

マージしました。

コードベースをこれほど深く掘り下げていただき、ありがとうございます。スライディングウィンドウのバケット化ロジックとバックグラウンドジョブのバッチ処理は、どちらも優れた改善点です。リプライトリガーの追加も素晴らしい工夫ですね。

メインの投稿ドキュメントを、あなたが追加した新しいクォータバーとクールダウン設定に対応するよう更新しました。

高品質なPRと詳細な説明を本当にありがとうございます。:content:

「いいね!」 1