n8nにClaude APIを組み込んでリライト提案を自動生成する方法

柴田

よし!n8nでサチコ(Googleサーチコンソール)のデータを取ってきて、記事データを解析、リライトの優先順位までつけた!
これで記事をリライトすれば検索順位爆上げだ!

AI

じゃあ頑張ってリライト作業してくださいネ

柴田

…ちょっと待ちたまえ。どうリライトすればいいかなんて、皆目見当もつかないのだ。自分の記事に何が足りないのか、あと少し何を加えればいいのか…お願いだから一緒に考えてくださいませんか

AI

結局そこも頼るんカーイ

このシリーズの第4回です。

前回はCodeノードでリライト優先度スコアリングを実装しました。今回はスコアが高い記事に対して、Claude APIを使って「どこをどう改善すべきか」を自動提案する実装を解説します。

ここが今回のワークフローで一番面白い部分です。

【この記事でわかること】

  • n8nからClaude APIを呼び出す設定方法
  • リライト提案を引き出すプロンプト設計
  • GeminiではなくClaudeを選んだ理由とコスト試算
目次

なぜGeminiではなくClaudeを使うのか

このブログのワークフローはもともとGemini APIを使っていました。ただSEO解析のような推論が必要な場面でGeminiの回答精度がイマイチだと感じることが多く、Claude APIに切り替えました。

実際に使い比べた印象もありますが、Gemini API(有料、無料)とClaude API(有料)をガチ比較しているので、そちらの記事もご覧ください。

柴田

Gemini APIでも十分なケースもあります(特に有料のProモデルの推論力はClaude APIと比較しても大差はない)。こちらの記事でGemini APIを発行する手順を紹介しました。Gemini APIならモデルによりますが、無料で使うことも可能です!

コストについては後述しますが、このワークフローで使う程度なら月数百円以内に収まります。

事前準備

必要なもの

  • 前回までで作成した、スコアリング済みのデータを出力するn8nワークフロー
  • Anthropic Consoleのアカウント(APIキーを発行し、少額のクレジットをチャージしておいてください)

前回のCodeノードの設定がまだの方は、先にこちらの記事を済ませておいてくださいね!

Step1:Anthropic APIキーを取得する

Anthropic(https://console.anthropic.com/)にアクセスしてアカウントを作成します。

柴田

ここで住所や支払い情報を入植しますが、特に住所の入力は注意です!「実際に詰まったこと」を先に読んでおいてください

「API Keys」→「Create Key」でAPIキーを発行します。

注意点⚠️  APIキーは発行時にしか表示されません。必ずコピーして安全な場所に保存してください。

Step2:n8nにHTTPリクエストノードを追加する

n8nにはClaude専用のノードがありません。HTTPリクエストノードを使ってAPIを直接呼び出します。

n8n1
Screenshot

ノードの設定

項目設定値
MethodPOST
URLhttps://api.anthropic.com/v1/messages
AuthenticationNone
柴田

AuthenticationはこのあとHeaderで設定するのでNoneでOKです

ヘッダーの設定

Send Headersをオンにして以下を追加します。

NameValue
x-api-key取得したAPIキー
anthropic-version2023-06-01
content-typeapplication/json
n8n2

Step3:リクエストボディの設定

基本的なボディの構成

{
  "model": "claude-sonnet-4-20250514",
  "max_tokens": 1500,
  "messages": [
    {
      "role": "user",
      "content": "={{ $json.prompt }}"
    }
  ]
}

$json.promptは前のCodeノードで生成したプロンプトを受け取ります。

柴田

出力はここの”max_tokens”によります。場合によっては途中できられることもあるので、そのときはここを2000にするとかして調整してください

Step4:プロンプト設計

ここが一番重要です。何を渡してどう聞くかでアウトプットの質が大きく変わります。

前のCodeノードに以下のプロンプト生成コードを追加します。

// 各記事のプロンプトを生成して追加
results.push({
  url: d.url,
  topKeyword: d.keywords[0],
  totalClicks: d.totalClicks,
  totalImpressions: d.totalImpressions,
  avgCtr: Math.round(avgCtr * 10000) / 100 + '%',
  avgPosition: Math.round(avgPosition * 10) / 10,
  score,
  reasons: reasons.join(' / '),
  keywordCount: d.keywords.length,
  prompt: `あなたはSEOの専門家です。以下のブログ記事データを分析して、リライトの具体的な改善提案をしてください。

## 記事情報
- URL: ${d.url}
- 主要キーワード: ${d.keywords.slice(0, 5).join('、')}
- 平均順位: ${Math.round(avgPosition * 10) / 10}位
- 表示回数: ${d.totalImpressions}回
- CTR: ${Math.round(avgCtr * 10000) / 100}%
- スコアの理由: ${reasons.join(' / ')}

## 依頼内容
以下の3点について具体的に提案してください。
1. タイトルの改善案(現在のキーワードを活かした3案)
2. 検索意図に合わせた見出し構成の改善点
3. CTRを上げるためのメタディスクリプション改善案

回答は日本語で、箇条書きで簡潔にまとめてください。`
});
柴田

前回の記事で作ったCodeノードの最後のから数えて5〜15行あたりに同じようにresults.push(…するコードの塊があるので、それをまるっと差し替えてください!
で、この部分はプロンプトになるので「イマイチだなぁ…」と思ったら自分なりに調整してみてくださいね!

Step5:Claude APIのレスポンスを整形する

Claude APIから返ってくるデータはこういう形です。

{
  "content": [
    {
      "type": "text",
      "text": "リライト提案の内容..."
    }
  ]
}

HTTPリクエストノードの後にCodeノードを追加して、テキスト部分だけを取り出します。

const items = $input.all();

return items.map(item => {
  const response = item.json;

  // contentが存在しない、または空配列の場合のエラー処理
  if (!response.content || !response.content[0] || !response.content[0].text) {
    return {
      json: {
        url: item.json.url || 'unknown',
        suggestion: '(リライト提案の取得に失敗しました)',
        error: true
      }
    };
  }

  const suggestion = response.content[0].text;

  return {
    json: {
      url: item.json.url,
      suggestion: suggestion,
      error: false
    }
  };
});

コスト試算

Claude Sonnetの料金で計算します。

項目トークン数料金
入力(1記事分のプロンプト)約450トークン約$0.00135
出力(1記事分の提案)約650トークン約$0.00975
10記事分の合計約11,000トークン約$0.11(約15円)

週1回実行で月4回として、月約60円です。

実際に動かしてみた結果

result
柴田

よっしゃ!これでこの出力にしたがって実際にリライトすればOKだ

実際に詰まったこと

今回一番詰まった部分はClaude APIを購入するときにクレジットカードが拒否された、というところです。実際やってみてクレカが拒否されたら

柴田

え…なんか悪いことしたかな?そんなクレカが拒否されることなんかしてないぞ…多分

と思うかもしれませんが、とりあえず心配しないでください。Anthropicに支払いをするときに、世界中のあちこちで同じ問題が報告されています。

ただ、原因と解決する方法は結構色々らしく、

  • カード会社に登録してある住所と入力した住所の不一致
  • 決済サービスStripe(Anthropicの支払いにはこれが使われている)の「Link」機能が古い情報を掴んでいる
  • カード会社の「海外不正利用フィルター」に引っかかっている

などなど。私の場合はとりあえずカード会社のアプリを通して登録してある住所(が古かったので書き換えたけど)を確認して、ビシッとそれと一致させて(数字の半角全角とかも完全に)申請したら払えました。

柴田

JCBですが払えました。あと、住所は日本語で入力しました。

カード会社などによっても原因は変わるかもしれないので、上記のポイントなどに注意しながら支払いするしかないですね…。

柴田

すでにClaude Proにアップデートしてる人は大丈夫だと思います

注意点:APIキーの管理

APIキーはn8nのCredentialsに登録して管理してください。コードの中に直接書くのはセキュリティ上NGです。

ただしHeader AuthのValueにAPIキーを直接入力する場合、n8nのCredentials機能が使えないので環境変数として設定するのがベストです。

VPS上のn8nで環境変数を設定する方法は別記事で解説予定です。

次のステップ

Claude APIの提案が出力されたら、次回はGoogle Sheetsに結果を自動出力する実装を解説します。

完成版ワークフローは公式ラインで配布します

今回全部を統合した完成版ワークフローを公式ラインで配布します。

公式LINEに登録して、「GSC自動解析」とメッセージをください。ワークフローのJSONファイルへのリンクを送信します!

柴田

完全無料配布です!このブログ記事を参考にセットアップしてみてください!

【公式ラインQRコード】

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次