Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

ページに広告が届くまで

Promovolve はコンテンツをターゲットにします。だからページが広告を載せられるようになる前に、システムはそのページが何についてのページかを知らなければなりません。面白いのはいつそれが起きるかという判断です。クロールのスケジュールではなく、最初の読者が現れたときなのです。

オンデマンド、読者起動

パブリッシャーのサイトを歩き回るクローラーは存在しません。(初期には存在しました。毎晩の予算を誰も訪れないページの再読に費やしていたので、削除されました。crawler というクラスターロールは、ランディングページ解析ワーカーのホストとしてのみ生き残っています。)代わりに、こう動きます。

  1. 広告タグが、サーバーがまだ分類したことのない URL の広告をリクエストします。レスポンスには空のスロットと、ゼロの鮮度トークンが載ります——テキストを送って
  2. タグはページの可読テキストをブラウザ内で抽出し(8,000文字が上限)、/v1/classify-page に送信します。応答は即座に 202 Accepted。分類が配信をブロックすることはありません。
  3. サイトのエンティティがテキストを LLM(Gemini、現在は gemini-2.5-flash)で IAB コンテンツタクソノミー 3.0 のカテゴリーに分類します——上位3件、信頼度スコア付き。キャンペーンは同じ分類体系に需要——買いたいカテゴリー——を登録するので、マッチングは祖先展開付きの直接的なカテゴリー参照になります(野球のページはスポーツをターゲットにするキャンペーンにマッチ)。中間のマッピング層はありません。

分類のきっかけになったページに広告は出ません。以降のすべての読者には出ます。ページは読者がその存在を証明したまさにそのときに分類され、LLM のコストはトラフィック量ではなく新規 URL の数で抑えられます。サイトエンティティのシングルフライトガードが、話題の記事に殺到する最初の訪問者たちを1回の分類呼び出しにまとめるのです。

公開日ではなく、鮮度

分類はサイトの分類鮮度ウィンドウ——デフォルト48時間——のあいだ有効です。これは分類に対する TTL であって、記事の公開日のチェックではありません。システムのどこも公開日を読みません。

すべての配信レスポンスには、このループを駆動するトークン reclassifyInMs が載ります。これが正のあいだ、広告タグは何も送りません。切れたら、次の訪問がテキストを再送し、新しい分類が新しいウィンドウを開きます。その帰結は——

  • エバーグリーンなコンテンツは配信され続ける。 読者が生きている3年前の記事は、永遠に48時間ごとに再分類されます。
  • 死んだページは失効する。 トラフィックの止まったページはすべてのキャッシュから抜け落ちます——オークショニアは5分ごとにウィンドウを過ぎた分類を刈り取ります。状態量は、読者が実際に訪れるものの量で抑えられます。
  • 内容の変化は捕捉される。 編集された記事は、1ウィンドウ以内に読み直されます。

再起動と障害を生き延びるために

分類はサイトの永続エンティティに保存され、3つの経路でオークション層に再生されます。エンティティの復旧時。新しいオークショニアが名乗りを上げたとき(再起動したオークショニアは空のページキャッシュから始まるので、教え直しが必要です)。そして5分ごとの更新ティック。再生は冪等——同じか古いタイムスタンプは無視される——ので、経路が重なっても無害です。だからクラスターの再起動は自己治癒します。数瞬のうちにオークショニアはすべての新鮮なページを学び直し、オークションを再実行します。

LLM 呼び出し自体はサーキットブレーカー(5連続失敗で30秒オープン)と、API ティアに合わせたトークンバケットのレートリミッターに包まれています。分類の失敗はシングルフライトのスロットを解放するだけで、次の読者が再試行します。配信経路がモデルを待つことは決してありません。