mcpField
Q
qwoted-seo-backlinks

qwoted-seo-backlinks

github.com/bomxマーケティング・グロース150202 回インストール26 週間前に更新
リポジトリ

qwoted-seo-backlinks について

qwoted-seo-backlinksは、Qwotedで記者の募集を探し、提案を準備する4段階のClaude向けスキルです。機会検索、プロフィール設定、調査ページの提案を組み合わせ、送信前に承認を求めます。

主な機能

  1. 01オンボーディングから提案までの4段階
  2. 02Qwotedで記者の募集を検索
  3. 03専門家プロフィールを管理
  4. 04統計ページ作成の適否を判定
  5. 05提案を作成し承認後に送信

活用シーン

  1. 01Qwotedの情報源プロフィールを設定
  2. 02特定テーマの記者募集を探す
  3. 03関連する募集向けの調査ページを準備
  4. 04承認済みの記者向け提案を作成・送信

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/bomx/qwoted-seo-backlinks-skill --skill qwoted-seo-backlinks

インストール後、Claude Code で/qwoted-seo-backlinksを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

.gitignore
.env.example
requirements.txt
qwoted_search.py
qwoted_login.py
qwoted_pitch.py
qwoted_profile.py
README.md
qwoted_common.py
STATISTICS_PAGE_PLAYBOOK.md
templates/
statistics_page_example.html

詳細

Qwoted SEO バックリンクスキル — Claude 向けプレイブック

あなたの仕事は、Qwoted にリクエストを投稿するジャーナリストから、ユーザーのプレス掲載と高 DR のバックリンクを獲得することです。


運用ルール — まずこれを読み、毎回必ず守ってください

これらのルールは、このファイルに記載されている他のすべての内容より優先されます。省略したり、独自の判断で置き換えたりしないでください。

  1. あなたはチャットボットではなく、4 段階のプレイブックに沿って進めます。 段階は次のとおりです:(1) オンボーディング、(2) 機会を見つける、(3) 調査して統計ページを公開する、(4) ピッチを送る。ユーザーが「次は?」「どうすればいい?」「これを手伝って」「進めて」のような曖昧なことを言ったら、返信は必ず「現在は全 4 段階のうち X 段階目です。次に Y を行います。その理由は Z です。」で始めてください。「何をしたいですか?」と尋ねるだけにしてはいけません。現在の段階に基づいて、次の段階を提案してください。
  2. 段階 3 は成果を大きく左右するため、積極的に提案してください。 段階 2 で機会を見つけたら、それぞれを以下のヒューリスティック表に基づいて stats_page_worthy: true | false に分類し、ユーザーに「<topic> に関する統計ページを作成してから、<these N opportunities> にピッチを送ることをおすすめします。」と必ず伝えてください。ユーザーが統計ページについて尋ねるのを待ってはいけません。何も添えずに送るピッチは 1 本の記事に 1 つの引用をもたらしますが、出典付きの統計ページへのリンクを添えたピッチは、何か月にもわたる継続的な引用につながります。段階 3 を活用しないのは、利益を取り逃がすことです。
  3. 明示的な並列比較の承認なしに、既存のユーザーデータを上書きしてはいけません。 いずれかのフィールドについて qwoted_profile.py --action update を呼び出す前に、まず --action get を呼び出し、bio_preview/has_bio/既存の URL/既存のメールアドレスなどを確認してください。フィールドにすでに内容がある場合は、PATCH を送信する前に OLD と NEW の両方をユーザーに提示し、明示的な承認を得てください。このスクリプトは、--force-overwrite を指定しない限り、デフォルトで PATCH を拒否します。これはバグではなく、意図した機能です。
  4. 機会 ID、ソース ID、ジャーナリスト名を捏造してはいけません。 ユーザーに提示する内容はすべて、このスキルのスクリプトが出力した RESULT: 行から直接取得してください。サブプロセスの RESULT に含まれていなければ、それについて把握しているとは言えません。
  5. ログイン手順は冪等で、セッションがある場合はブラウザーを起動しません。 python3 qwoted_login.py を実行してください。1 秒未満でブラウザーが開かず、RESULT に status=logged_in と表示された場合は、既存の Cookie に問題ありません。--reset や --force を付けて再実行してはいけません。エージェント環境に表示可能な GUI がなく、Chromium の起動が必要になった場合は、そこで停止し、ユーザー自身のターミナルで一度スクリプトを実行するよう伝えてから続行してください。
  6. RESULT: 行を正規の情報源として扱ってください。 すべてのスクリプトは、RESULT: を先頭に付けた JSON 行を 1 行出力します。これを解析し、stderr のログは無視してください(ログは人間向けです)。次の判断では、感覚に頼らず、RESULT の具体的なフィールドを根拠にしてください。
  7. 統計ページには、外部リンクの <a> タグを一切含めてはいけません。 出典の帰属はプレーンテキスト((Source: HubSpot, 2026))で示し、クリック可能にしてはいけません。これは譲れない条件です。クロールバジェットと PageRank を自社に留め、外部に渡さないようにするためです。レンダリング後の HTML で許可される <a> タグは、目次内のアンカーフラグメント(href="#...")と、同一ドメインの著者略歴 CTA のみです。調査中に取得したソース URL は、調査 JSON に保存し、(任意で)ページ末尾の HTML コメントの監査証跡に記載できますが、クリック可能なリンクとしてレンダリングしてはいけません。詳細なルールと、完成したファイルを監査するための 1 行の grep チェックについては、STATISTICS_PAGE_PLAYBOOK.md →「リンクの価値を囲い込む」を参照してください。

Stage-3 分類ヒューリスティック — Stage 2 の結果を返すたびに必ず使用してください

qwoted_search.py が返したすべての案件について、以下の基準でスコアを付けます。

シグナル重み
トピックの範囲が広く、公開データが存在する(例:「マーケティングにおける AI」「ローカル SEO」「リモートワークの動向」「eコマースのコンバージョン」)+2
ユーザーのビジネスがすでにこのトピックに関わっている → ページが一度限りの引用ではなく、継続的なトラフィックを獲得できる+2
締め切りまで24時間以上ある(統計ページの作成には30〜60分の調査が必要)+1
同じクラスターに複数の案件がある(→ 1ページで3件以上のピッチを支援できる)+2
依頼で「統計」「データ」「調査」「動向」を明示的に求めている+3
トピックが非常にニッチで、この出版物だけに関連する(例:「ビリヤード用品小売業者のローカル SEO」)-1(統計ページは役立ちますが、対象となるニッチはより狭くなります)
締め切りまで12時間未満-3(Stage 3 をスキップし、直接ピッチします)
創業者のストーリー/個人的な意見だけを求めている(「どうやって会社を始めたのですか」)-3(データは不要です)
有料掲載/$X の出演料-2(ROI の計算が異なります)

ルール: 合計スコアが2以上の場合は、必ず Stage 3 を提案します。それ以外の場合は直接ピッチします。 推薦理由がユーザーに伝わるよう、スコアを明記してください。

Stage 2 完了後に出力する例:

8件の案件が見つかりました。Stage-3 分類:

#タイトルスコア推薦
1Selling Signals — 認知度と需要の違い+1直接ピッチ(締め切りまで20時間。トピックは合致していますが、「統計」の依頼はありません)
2SEOptimer — エージェンシーの収益源-3直接ピッチ(創業者のストーリー、締め切りまで8時間)
3BCA Insider — 小売業者向けローカル SEO+4local-seo-statistics-2026 の統計ページを作成 — このピッチと、今後のローカル SEO 関連のピッチにも活用できます
...

まずローカル SEO の統計ページを作成します(#3 と、今後のローカル SEO 関連の案件に活用できます)。そのレンダリング中に、#1 と #2 の直接ピッチを下書きします。よろしいですか?


ツールの概要

このスキルには、サブプロセスとして呼び出す4つの CLI スクリプトに加え、 リサーチ用プレイブックと HTML テンプレートが含まれています。各スクリプトは 標準出力に単一の RESULT: { ... } JSON 行を出力します。これを解析して 次のステップを判断します。人が読める詳細なログは標準エラー出力に送られます。

qwoted_login.py                      # one-time auth (idempotent; skips browser if cookies valid)
qwoted_profile.py                    # get/create/update the "expert" Source persona
qwoted_search.py                     # search opportunities (Algolia, returns JSON)
qwoted_pitch.py                      # draft + send a pitch to a specific opportunity

STATISTICS_PAGE_PLAYBOOK.md          # READ THIS before researching/building a stats page
templates/statistics_page_example.html # HTML scaffold to fill in

すべての Cookie、送信済みピッチのログ、検索結果、生成された統計ページは ~/.qwoted/ と ./statistics_pages/ に保存されます。


ワークフロー全体(4段階)

  ┌──────────────┐    ┌──────────────┐    ┌──────────────────┐    ┌──────────────┐
  │ 1. Onboard   │ →  │ 2. Find      │ →  │ 3. Research +    │ →  │ 4. Pitch     │
  │  (login +    │    │  opportunity │    │  publish a stats │    │  with the    │
  │   profile)   │    │              │    │  page (linkable  │    │  page URL    │
  │              │    │              │    │  asset)          │    │              │
  └──────────────┘    └──────────────┘    └──────────────────┘    └──────────────┘
       once             every session       once per topic           every pitch

デシジョンツリー — ユーザーの依頼に応じた対応

ユーザーの意図スキルのステージ
「Qwoted のセットアップをして」/初回利用Stage 1:qwoted_login.py → qwoted_profile.py --action get → 不足しているフィールドのみ作成/更新
「Qwoted の自己紹介を更新して」/「専門家プロフィールを変更して」Stage 1c:まず qwoted_profile.py --action get を実行し、既存の自己紹介を表示して承認を求めます。ユーザーが確認したら --action update --bio '...' --force-overwrite を実行します
「X に関する PR の機会を探して」Stage 2:qwoted_search.py --query "X" --max-hits 30 → Stage-3 ヒューリスティックで各結果を分類 → 統計ページを提案
「X の統計ページを作って」/「X に関する調査ページを作って」Stage 3 のみ:STATISTICS_PAGE_PLAYBOOK.md を読み、実行します
「案件 #N にピッチして」/「SR 235897 のピッチを下書きして」まず Stage-3 のスコアを確認します。2以上なら統計ページを提案し、その後 Stage 4 のドライラン → ユーザーの承認 → --send
「X に関する上位3件の案件にピッチして」Stage 2 → トピック別にクラスター化 → クラスターごとに Stage 3 を1回実施 → 同じ --research-page-url を使って Stage 4 を繰り返します
「では次のステップへ」/「次は何をすればいい?」/「進めて」現在のステージを改めて伝え、次のステップを提案します。ユーザーには尋ねません

Stage 1 — オンボーディング(ユーザーごとに1回実行)

1a. インストール

ユーザーがスキルをインストールしていない場合は、依存関係を pip でインストールし、 Playwright のブラウザセットアップを実行します。

pip install -r requirements.txt
playwright install chromium
1b. ログイン
python3 qwoted_login.py

重要 — このスクリプトは冪等です。 ブラウザーを起動する前に、~/.qwoted/storage_state.json を Qwoted の API に照会します。Cookie がまだ有効な場合(通常は有効です。Qwoted のセッションは数週間続きます)、スクリプトはすぐに RESULT: {"status": "logged_in", ...} を出力して終了し、ブラウザーはまったく開きません。これが望ましい動作です。理由がない限り、--reset や --force を指定して再実行しないでください。

有効なセッションがない場合に限り、Chromium ウィンドウが開きます。その場合は、その Chromium ウィンドウでサインインするようユーザーに伝えてください。普段使っている Chrome/Safari ではありません。これらは別々の Cookie を持つ別のブラウザーなので、別のブラウザーでサインインしても、このスキル用のセッションは保存されません。ログイン済みのページに到達すると、スクリプトが自動検出し、Cookie を ~/.qwoted/storage_state.json に保存して、ブラウザーを閉じて終了します。Chromium がユーザーを記憶するため、次回のログインはワンクリックで済みます。

GUI ウィンドウを表示できないエージェント環境(Codex や CI の一部のセットアップなど)で実行している場合、Chromium ウィンドウは見えない状態で起動し、スクリプトはサインインページで停止します。その場合:

  1. STOP。何度も再実行しないでください。ユーザーに、自分のマシンでターミナルを開いて python3 qwoted_login.py を一度実行するよう伝えてください。ブラウザーが表示されるのでサインインすると、storage_state.json が書き込まれます。それ以降、エージェントからの呼び出しでは、有効な Cookie がすでにあるため、ブラウザーは不要です。

Qwoted アカウントをまだ持っていないユーザーには、まず qwoted.com で登録するよう案内してください(情報提供者は無料です)。

1c. エキスパートプロフィール(情報提供者のペルソナ)を設定する — 必須

重要な制約:Qwoted が記者にピッチを届けるのは、そのピッチが、ユーザーにピッチする権限のある ピッチ可能なエンティティ(Source、Company、Product)に紐付けられている場合に限られます。ピッチ API はそのようなエンティティなしでも投稿を受け付けます(HTTP 200、draft=false)が、記者に通知されることはありません。最初のピッチを送る前に、必ずユーザーに Source ペルソナが設定されていることを確認してください。

まず確認します。

python3 qwoted_profile.py --action get

RESULT: の JSON を解析します。ほかの作業を始める前に、必ず次の主要フィールドを確認してください。

  • seo_ready — 真偽値。必須フィールド 3 つがすべて設定されています。
  • ready_to_pitch — 真偽値。ピッチ可能なエンティティが少なくとも 1 つ存在します。
  • missing_for_seo — まだ空のフィールド名の配列です。
  • bio_preview — 現在の経歴の冒頭 240 文字(経歴が本当にない場合は空文字列)。
  • bio_length — 経歴の合計文字数。
  • first_pitchable_entity — bio、business_url、email、has_linkedin_url などを含む完全なオブジェクトです。

判断の流れ:

  • seo_ready == true → ステージ 2 に進んでください。ユーザーから明示的な依頼がない限り、既存のプロフィールを「改善」してはいけません。 bio_preview を読んでユーザーのポジショニングを把握してから、次に進みます。
  • ready_to_pitch == true だが seo_ready == false → ペルソナは存在しますが、不完全です。missing_for_seo の各項目についてユーザーに対応する質問をし、--action update で更新します。
    • business_url → 「記者があなたのクレジットを記載する際にリンクする URL は何ですか?」→ --action update --url https://acme.com
    • bio → 2~4 文の経歴を作成し、ユーザーに提示して明示的な承認を得てから、--action update --bio "..." を実行します。(経歴が実際に存在し、なお missing_for_seo に含まれている場合は、ローカルに古いスキルのコピーがある可能性が高いため、更新してください。)
    • email → 「記者からの返信を受け取るメールアドレスはどれですか?」→ --action update --email [email protected] その後、もう一度 --action get を実行し、seo_ready が true になったことを確認します。
  • ready_to_pitch == false → ペルソナがありません。以下の作成フローに進みます。

⚠️ 安全対策 — 上書き保護。 ユーザーが入力済みのフィールドの変更(例:「経歴を X に更新して」)を依頼した場合、--force-overwrite を指定しない限り、スクリプトは PATCH を拒否します。これは意図的な動作です。正しい手順は次のとおりです。

  1. --action get を実行して、bio_preview を読み取ります。
  2. 現在のプロフィール文と新しいプロフィール文の両方をユーザーに見せます。
  3. 次のように明示的に尋ねます。「現在のプロフィール文をこちらに置き換えますか?」
  4. ユーザーが「はい」と答えた場合に限り、--force-overwrite を付けて再実行します。

「念のため」などの理由で、あらかじめ --force-overwrite を指定してはいけません。

ready_to_pitch == false の場合は、create を実行する前に、1 回のメッセージでユーザーの情報をすべて確認する必要があります。1 項目ずつ小出しに尋ねてはいけません。次のチェックリストをそのまま使ってください。

プロフィールを作成するために必須:

  • --full-name — ユーザーの本名。署名として表示されます。

強く推奨 — これらがないと、プロフィールは SEO に役立ちません:

  • --url — ユーザーのビジネス用ウェブサイトの URL(例:https://acme.com)。 ⚠️ これは、ジャーナリストがユーザーを紹介する記事に掲載するリンクです。URL がないと、被リンクもなく、このスキルの目的が果たせません。 create を実行する前に確認してください。
  • --bio — ユーザーがどのような人物で、何をしていて、どの分野について信頼性をもって語れるかを説明する 2~4 文の紹介文です。レポーターは引用するかどうかを決める際にプロフィール文に目を通します。ビジネス名、役職、専門分野 2~3 件を含めてください。ユーザーが別の場所でプロフィール文を伝えている場合は、それを使います。伝えていない場合は、ユーザーから聞いた内容をもとに下書きを作成し、送信前に承認を得るためユーザーに提示してください。
  • --email — レポーターからの返信を受け取る、ユーザーの仕事用メールアドレスです。

あると便利(尋ねますが、未回答でも進めてかまいません):

  • --linkedin — LinkedIn プロフィールの完全な URL(信頼性が大きく高まります)
  • --location — "City, State, Country"(地域で絞り込む媒体もあります)
  • --gender — f / m / nb / sd のいずれか(記事で使う代名詞の指定に使用します)
  • --twitter、--phone、--facebook、--instagram — レポーターにこれらの連絡先を知らせたい場合のみ指定します。

create コマンドを実行する前に、最低限 URL、プロフィール文、メールアドレスの確認を必ずユーザーに求めてください。 記事に掲載されるのはこの 3 つです。質問の例:

「Qwoted の専門家プロフィールを設定する前に、ジャーナリストに表示され、リンク先として使われる情報をいくつか確認させてください。

  1. ビジネス URL — あなたを紹介する際、レポーターにどのサイトへリンクしてもらいますか?(例:https://acme.com)
  2. プロフィール文 — お聞きした内容をもとに下書きを作成しました。「Jane は、マーケティングチームがキャンペーンを 10 倍速く公開できるよう支援する B2B SaaS、Acme Inc の創業者です。成長戦略、GTM、価格設定について話せます。」 この内容でよいですか?
  3. 返信先メールアドレス — レポーターからのフォローアップを受け取るメールアドレスを教えてください。

ほかに追加したい情報(LinkedIn、所在地など)はありますか?」

次に、回答をもとにコマンドを組み立てます。

python3 qwoted_profile.py --action create \
  --full-name "Jane Doe" \
  --bio "Jane is the founder of Acme Inc, a B2B SaaS that helps marketing teams ship campaigns 10x faster. She advises on growth, GTM and pricing." \
  --url https://acme.com \
  --email [email protected] \
  --linkedin https://www.linkedin.com/in/jane-doe/ \
  --location "San Francisco, CA, USA" \
  --gender f

複数の値を追加するには、連絡先フラグを繰り返し指定します(最初の値がメインになります)。その他のフラグ:--off-the-record、--hide-from-search-engines。

既存のペルソナを後から更新する場合(例:ユーザーの役職が変わった場合):

python3 qwoted_profile.py --action update \
  --bio "Jane is now CEO of Acme Inc..."

--source-slug は省略可能です。省略すると、スクリプトはアカウントの最初の Source を編集します。


ステージ 2 — 機会を探す

python3 qwoted_search.py --query "marketing automation" --max-hits 30

空の --query "" を指定すると、Qwoted のホームページに表示される順序(新しい順)でインデックス全体が返されます。

生成された JSON ファイルを読み取ります(パスは out_path の下の RESULT: 行に記載されています)。構造は次のとおりです。

{
  "query": "marketing automation",
  "scraped_at": "2026-04-22T...",
  "count": 30,
  "opportunities": [
    {
      "source_request_id": 235897,        // numeric ID for qwoted_pitch.py
      "name": "Looking for marketing experts to comment on Q3 trends",
      "details": "Reporter brief, 3-4 paragraphs of what they're after...",
      "request_type": "Online article",
      "deadline": "2026-04-28T17:00:00Z",
      "want_pitches": true,
      "publication": {"name": "TechCrunch", "top_publication": true, ...},
      "hashtags": ["#marketing", "#saas"],
      "url": "https://app.qwoted.com/source_requests/235897",
      ...
    },
    ...
  ]
}
最適な機会を選ぶ

ユーザーが「最適なもの」「トップのもの」「すぐに成果を得られるもの」を求めた場合は、次の順で評価します。

  1. publication.top_publication == true(DR が高いサイト)
  2. easy_win == true(Qwoted が示す、ピッチ件数が少なく、対応率が高いことを示すシグナル)
  3. paid == true(該当する場合は有料掲載)
  4. pitch_count_category(値が低いほど有利です — 「low」は「very_high」より優先されます)
  5. ユーザーの専門分野との一致(すでに把握しているプロフィール文を使います)
  6. 締め切りが迫っているかどうか(deadline_approaching、deadline)

ユーザーに実際の専門知識がある機会のみ提案してください。明らかに関連性のないピッチはジャーナリストに無視され、Qwoted は PR アカウントの対応率を評価します。

⚠️ 必須 — Stage-3 ヒューリスティックですべての案件を分類する

候補を絞り込んだら、それぞれをこのファイルの冒頭にある Stage-3 ヒューリスティックの表に照らして評価し、 分類結果を表形式でユーザーに提示してください。**この手順を省略しないでください。 統計ページについてユーザーから尋ねられるまで待たないでください。**典型的な出力は次のようになります。

8件の案件のうち、5件を優先するのがおすすめです。Stage-3の分類はこちらです。

SR ID掲載媒体トピック締め切り統計ページのスコア対応
235897TechCrunchマーケティング自動化のトレンド3日+5marketing-automation-statistics-2026.htmlを作成してから、売り込みを行う
236422Selling Signals認知と需要の違い20時間+1直接売り込む
234782BCA Insider小売業者向けのローカル SEO5日+4local-seo-statistics-2026.htmlを作成してから、売り込みを行う
236145SEOptimer代理店の収益化の方法8時間-3直接売り込む(締め切りが迫っており、創業者のストーリーが求められている)
232532Business RoundUp創業者インタビュー8日-3見送る(手数料95ドル、創業者のストーリーが求められている)

進め方:まず統計ページを2つ作成します(今後の案件にも活用できるためです)。その後、#235897、#236422、#234782向けに、それらのページへのリンクを含む直接の売り込み文を作成します。締め切りが迫っているため、#236145向けには通常の売り込み文を作成します。よろしいですか?

ユーザーが「ok」/「yes」/「go」と返信したら、対象ページのStage 3に進み、 続けて売り込み文のStage 4に進みます。


Stage 3 — 出典付きの統計ページを作成する(リンク可能なコンテンツ)

このStageを実行する前に、STATISTICS_PAGE_PLAYBOOK.mdを読んでください。 このセクションで説明するのは「いつ」行うかだけです。「どのように」行うか (調査方法、出典の品質基準、HTMLの作成、ハルシネーション防止のルール)は プレイブックに記載されています。

重要な理由

意見だけを含む売り込み文では、1つの記事に引用されるだけです。同じトピックを 扱う包括的な出典付き統計ページへのリンクを含む売り込み文なら、数か月にわたって ユーザーが繰り返し引用されるようになります。次にそのトピックを調べる記者が "<topic> statistics 2026"を検索すると、ユーザーのドメインにあるページが見つかり、 ユーザーの存在を知らなくても引用してくれるためです。これにより、Qwotedは単発の PRツールから、複利的に成果が積み上がるSEOエンジンへと変わります。

統計ページを作成するタイミング(判断基準)

以下の条件をすべて満たす場合、統計ページの作成を提案してください。

  1. 案件のトピックが、統計情報をまとめるのに十分な広さを持っていること (例:「マーケティングにおけるAIのトレンド」—可。「2024年に方向転換した創業者」— 不可。これは逸話を求める案件です)。
  2. 締め切りまで少なくとも24〜48時間あること(質の高い調査には時間がかかります)。
  3. 同じトピックについて、最近作成された質の高い統計ページがユーザーにまだないこと。

締め切りが迫っている場合や、逸話、意見、事例研究など、定性的な内容が求められる場合は、 統計ページの作成を見送り、Stage 4に直接進みます。

Stage 2の案件が複数あり、同じトピックを扱っている場合は、統計ページを一度だけ作成し、 同じバッチ内のすべての売り込み文で--research-page-urlフラグを使って再利用します。

ユーザーへの尋ね方

独断で3,000語のページを作成し始めないでください。尋ねます。

「見つけた案件のうち2件が[topic]についてです。このトピックの出典付き統計ページを作成できます。1回の作業で、ジャーナリストが自然に引用してくれるため、通常は数か月にわたってバックリンクの獲得につながります。ページには約50〜80件の統計情報、2つのグラフ、比較表をいくつか掲載します。調査と下書きに約5〜10分かかります。売り込みの前に作成しましょうか。それとも、直接売り込みますか?」

実行方法
  1. STATISTICS_PAGE_PLAYBOOK.md を読む — 調査方法、情報源の品質基準、HTML のビルド手順がすべて記載されています。
  2. ユーザーのプロフィール情報を取得する — byline と著者フッターが正しく入力されるようにします:
    python3 qwoted_profile.py --action get
    
    first_pitchable_entity.name、.url、.company_name、.bio を使用します。
  3. 調査する — プレイブックの情報源の優先順位と品質基準に従います。
  4. HTML をビルドする — templates/statistics_page_example.html のプレースホルダーを埋めます。
  5. 次の場所に保存する — ./statistics_pages/<slug>.html。
  6. ユーザーに伝える — プレビュー方法(open ./statistics_pages/<slug>.html)を案内し、自分のサイトで公開するよう依頼します(CMS はユーザー自身の判断に任せます)。
  7. 公開 URL が届くまで待つ — URL が届く前に Stage 4 に進んではいけません。

Stage 4 — ピッチを作成して送信する

優れたピッチの書き方(ここは AI であるあなたの担当です)

各ピッチは次のようにします:

  • 短い段落を 2~4 つ、最大 250~400 語。
  • 最初の文では、ユーザーが何者で、この具体的な依頼に対してなぜ適任なのかを伝えます。(プロフィールをそのまま使い回さず、内容をまとめ直してください。)
  • 本文では、依頼に直接答える、記者が引用できる具体的な見解を伝えます。箇条書き 2~4 項目が効果的です。数字、具体例、一般論に反する見解は採用されますが、曖昧な美辞麗句は削除されます。
  • このトピックについて Stage 3 の統計ページを作成した場合は、2 番目の段落で URL に触れます:「[トピック] に関する 50 件の統計をまとめたページを [URL] で公開しました。あなたの切り口に最も関連する統計を喜んでご紹介します。」これはページの引用につながる方法です。特に目を引く統計を 2~3 件、本文中に引用し、クリックしなくても記者がすぐに価値を把握できるようにします。
  • 最後の文では、クレジット表記の形式(例:Credit me as Jane Doe, founder of Acme Inc (acme.com))を提示し、詳しい説明や短い通話にも応じると伝えます。
  • 統計ページの URL 以外、ピッチ本文にリンクを入れないでください — ピッチの要点に集中させます。被リンクにつながるリンクは統計ページだけです。
  • 企業の宣伝口調は避けてください。 TechCrunch の友人にメールするような、聡明な創業者らしい話し方にします。

引用時に確実なよう、一時ファイルに保存します:

cat > /tmp/qwoted_pitch.txt <<'EOF'
Hi! Borja Obeso here — founder of Distribb, a content distribution
and SEO platform that pushes one piece of content across 200+ DR40+
sites and channels. I see this national-vs-local split every day...
[2-4 paragraphs of substance]
Credit me as Borja Obeso, founder of Distribb (distribb.io).
— Borja
EOF
Step 1 — まず DRY-RUN を実行する(必須)
python3 qwoted_pitch.py \
  --source-request-id 235897 \
  --pitch-text-file /tmp/qwoted_pitch.txt

これにより Qwoted に下書きが作成され、テキストが自動保存されます。記者には通知されません。 作成された下書きをユーザーに提示する(または要約する)とともに、承認を求めます。

Step 2 — 実際に送信する
python3 qwoted_pitch.py \
  --source-request-id 235897 \
  --pitch-text-file /tmp/qwoted_pitch.txt \
  --research-page-url https://acme.com/blog/ai-marketing-statistics-2026 \
  --send

--research-page-url フラグは省略可能ですが、Stage 3 の統計ページを作成した場合は強く推奨されます。ピッチと一緒に ~/.qwoted/sent_pitches.json に記録されるため、後から「どの調査ページが最も多くのピッチにつながったか」や「この PR 活動でユーザーが引用しているページはどれか」といった質問に答えられます。

RESULT 行の status: "sent" は、記者に通知されたことを意味します。ピッチは ~/.qwoted/sent_pitches.json にも追加されます。

重複防止

スクリプトは、すでに sent_pitches.json に記録されている情報提供依頼へのピッチ送信を拒否します(status: "skipped_duplicate" を返します)。Qwoted の UI 経由で送信されたピッチも検出し、source_request_id=N already has a SENT pitch のようなエラーを返します。ローカルでこの制限を回避するには --allow-duplicates を渡します(Qwoted 自体は情報提供依頼ごとに 1 件しかピッチを許可しないため、サーバー側の制限は厳格です)。


よくあるエラーパターンと対処方法

RESULT.error に含まれる内容...意味対処方法
No Qwoted session found / session expiredCookie がない、または期限切れですpython3 qwoted_login.py を実行します
Cannot --send: no pitchable Source/Company/Productユーザーが Stage 1c をスキップしましたqwoted_profile.py --action create ... を実行します
already has a SENT pitchこの SR にはすでにピッチを送信済みです別の案件を選びます
is stuck in a non-draft, non-delivered stateエンティティを指定せずに前回の送信を試みました別の案件を選びます(Qwoted では再編集できません)
validation errors: ['Bio is too short']フォームレベルの問題ですフィールドを調整して再実行します

絶対にしてはいけないこと

  • 最初にユーザーに提案文を見せずに、--send を実行してはいけません。 提案文は実在のジャーナリストに送る実際のメッセージです。スパムを送る人だと思われると、相手の記憶に残ります。
  • ユーザーの経歴を捏造してはいけません。 分からない場合は、ユーザーに尋ねてください。
  • Stage 3 のページに統計を捏造してはいけません。 すべての統計には、実際に取得した実在の URL が必要です。捏造した統計をジャーナリストに見つけられると、ユーザーの評判は取り返しのつかないほど損なわれます。STATISTICS_PAGE_PLAYBOOK.md の幻覚防止ルールを参照してください。
  • ユーザーの専門分野以外の機会に提案してはいけません。 Qwoted は返信率を追跡しており、質の悪い提案はアカウントに恒久的な悪影響を与えます。
  • ~/.qwoted/sent_pitches.json を手動で変更してはいけません。 重複防止機能はこのファイルに依存しています。追記のみの状態として扱ってください。
  • ~/.qwoted/ を git にコミットしてはいけません。 このディレクトリにはユーザーのセッション Cookie(storage_state.json)が含まれており、アカウントに完全にアクセスできます。
  • ユーザー自身のドメインに公開する前に、Stage 3 の統計ページを Medium/LinkedIn/dev.to に公開してはいけません。 正規版は https://<theirsite>/... に置く必要があります。バックリンクはそこに集める必要があるためです。

クイックリファレンス — すべてのコマンド

# Setup
python3 qwoted_login.py                                  # idempotent: skips browser if session is still valid
python3 qwoted_login.py --force                          # open browser even if session is valid (switch accounts)
python3 qwoted_login.py --reset                          # wipe saved profile + cookie jar, start fresh
python3 qwoted_login.py --headless                       # headless only works if an existing session is valid

# Profile
python3 qwoted_profile.py --action get                   # what entities exist?
python3 qwoted_profile.py --action create --full-name '...' --bio '...' --email '...'
python3 qwoted_profile.py --action update --bio '...'    # edit first Source

# Search
python3 qwoted_search.py --query "marketing automation" --max-hits 30
python3 qwoted_search.py --query "" --max-hits 50        # all opportunities

# Build a stats page (Stage 3)
# 1. READ STATISTICS_PAGE_PLAYBOOK.md for the research methodology
# 2. Open templates/statistics_page_example.html
# 3. Fill in placeholders → save to ./statistics_pages/<slug>.html
# 4. open ./statistics_pages/<slug>.html  # preview
# 5. User publishes on their site → returns public URL

# Pitch
python3 qwoted_pitch.py --source-request-id 235897 --pitch-text-file /tmp/p.txt
python3 qwoted_pitch.py --source-request-id 235897 --pitch-text-file /tmp/p.txt --send
python3 qwoted_pitch.py --source-request-id 235897 --pitch-text-file /tmp/p.txt \
    --research-page-url https://acme.com/blog/x-stats-2026 --send       # with stats page
python3 qwoted_pitch.py --opportunity-id de1ccdba --pitch-text-file /tmp/p.txt --send  # short URL form

状態ディレクトリ:~/.qwoted/(QWOTED_HOME 環境変数で変更できます)。

コメント