記事JSONが入ってから、
公開URLが返るまで
SEOBuilder は「どの媒体に、どの原稿を、どの順番で出すか」を媒体の能力から機械的に決めます。 人が媒体ごとに貼り替える作業を無くすのが目的です。
1. 配信順は「役割」で決まる
配信先には primary / syndicate / variant / manual / social / line の役割があり、
この順に実行されます。順番に意味があります — 自社サイトの公開URLが確定していないと、転載先にcanonicalを渡せず、SNSに貼るリンクも決まらないからです。
| 順 | 役割 | やること |
|---|---|---|
| 1 | primary | 自社ドメインへ公開し、その URL を正規URLとして確定する |
| 2 | syndicate | canonical に対応する媒体へ、同一本文+正規URL指定で転載する |
| 3 | variant / manual | 別原稿があれば投稿、無ければ要約+リンク。手動媒体は貼り付け用パッケージを生成 |
| 4 | social | 要約+計測パラメータ付きリンクをSNSへ投稿する |
| 5 | line | LINE公式アカウントの友だちへ新着を配信する |
2. 本文の出し分けは3段階で決まる
canonical に対応しない媒体に来たとき、エンジンは次の順で投稿する原稿を選びます。
- 別原稿があるか — 記事JSONの
variants["qiita"]のように媒体名で用意されていれば、それを投稿します。同じテーマを別の角度で書いたものなので、複製にはなりません。 - 無ければ fallback に従う — 既定は
teaser。抜粋・「この記事で分かること」(本文のH2から自動抽出)・全文へのリンクだけの短い原稿を組み立てます。 - 明示的に指定もできる —
fallback: "skip"ならその媒体には出しません。"full"なら同一本文を出します(重複を承知で使う設定です)。
なお、自社サイトの公開URLがまだ無い状態(ドライラン・primary未設定)では teaser のリンク先が作れないため、全文にフォールバックします。
3. CTAは本文の構造を見て差し込む
CTAブロックは top / middle / bottom の指定位置に入ります。単純に先頭と末尾へ足すだけではありません。
- 中盤は本文中の
##見出しの位置を数え、その中央の見出しの直前に入れます。段落の途中を割りません。 - 末尾は「参考情報 / 出典 / References」の見出しを探し、その前に置きます。出典リストの後ろに埋もれると読まれないためです。
- 本文中に既に同じLINE URLが書かれている場合は、二重に差し込みません。
すべてのCTAリンクには utm_source / utm_medium / utm_campaign と、位置ごとの utm_content=cta_middle が付きます。
元のURLにパラメータが付いていた場合は壊さずに残します。
4. 失敗は媒体ごとに閉じ込める
1つの媒体が落ちても、残りの配信は最後まで進みます。408 / 425 / 429 / 5xx と通信エラーは指数バックオフで再試行し、
それでも駄目なら理由を failed として記録して次の媒体へ進みます。認証情報が足りない配信先は、通信する前に失敗として明示されます。
結果は1つのジョブにまとまり、媒体ごとの状態・公開URL・エラー文が残ります。note や Ameba のように人が投稿する媒体は manual として記録され、
投稿後に PUT /v1/jobs/{id}/results でURLを書き戻すとジョブが完成します。
5. 送る前に、送る中身を確認できる
dry_run=true を付けると、外部へは一切送信せず「どの媒体に何を送る予定か」だけが返ります。
認証情報を1つも設定していない状態でも動くので、導入前の確認に使えます。