Claude CodeでWordPressを操作する仕組み

アプリケーションパスワードとREST APIの基本

Claude CodeからWordPressを操作するには、WordPress REST APIアプリケーションパスワード認証を組み合わせる方法が最もシンプルで確実です。

WordPress 5.6から標準搭載されたアプリケーションパスワードを使えば、メインのログインパスワードを使わずにAPIアクセスが可能になります。SSH接続やFTPは不要で、WordPressのダッシュボードから数クリックで発行できます。

アプリケーションパスワードの発行手順:

  1. WordPress管理画面 → 「ユーザー」→「プロフィール」
  2. 下部の「アプリケーションパスワード」セクションへ
  3. アプリケーション名を入力(例:Claude Code)して「新しいアプリケーションパスワードを追加」
  4. 表示された24文字のパスワードをコピーして保存

発行されたパスワードは xxxx xxxx xxxx xxxx xxxx xxxx という形式で、一度しか表示されないため必ず保存してください。

REST APIのベースURLは https://あなたのサイト/wp-json/wp/v2/ です。記事(posts)、カテゴリ(categories)、メディア(media)など、WordPressのあらゆるリソースをHTTPリクエストで操作できます。

環境変数の設定方法

Claude Codeで作業を始める前に、毎回以下の環境変数を設定します。認証情報をコマンドに直書きすると履歴に残るリスクがあるため、環境変数を経由する習慣をつけましょう。

export WP_USER="あなたのWordPressユーザー名"
export WP_APP_PASS="xxxx xxxx xxxx xxxx xxxx xxxx"
export WP_SITE="https://あなたのサイト.com"

接続テストは以下のコマンドで確認できます:

curl -s -u "${WP_USER}:${WP_APP_PASS}" \
  "${WP_SITE}/wp-json/wp/v2/users/me" \
  | python3 -m json.tool

ユーザー情報のJSONが返ってくれば接続成功です。401 Unauthorized が返る場合はパスワードのスペースの有無や、アプリケーションパスワードの有効化設定を確認してください。

この設定だけで、あとはClaude Codeに「この記事をWordPressに投稿してください」と指示するだけで自動的にREST APIを呼び出してくれます。


記事の自動執筆・投稿を行う方法

SEO要件を指示に含めるコツ

Claude Codeへの指示にSEO要件を明確に記載することが、質の高い記事を生成するための最重要ポイントです。

実際に使っている指示テンプレートはこのような形式です:

以下のテーマでSEO記事を執筆してください。

■ テーマ: [記事テーマ]

■ 背景・一次情報:
- [実体験・オリジナル情報をここに記載]

■ SEO要件:
- タイトル: 32文字以内、検索KWを前半に
- ターゲットKW: 「メインKW」「サブKW」
- 本文: 5,000〜7,000字
- です・ます調
- コードブロックは適切な言語指定でシンタックスハイライト

■ 構成案:
H2: [見出し1]
H2: [見出し2]
...

■ 投稿設定:
- ステータス: publish
- カテゴリID: [ID]

ポイントは一次情報(実体験・オリジナルデータ)を必ず含めることです。これがないとClaude Codeはどのサイトにもある汎用的な内容しか書けません。自分が実際に試した手順、実測値、トラブルシューティングの記録などを盛り込むことで、他サイトと差別化できる記事になります。

文字数指定は重要です。「できるだけ長く」という指示では品質がブレるため、5,000〜7,000字 のように範囲を明示します。SEOの観点では、競合上位記事の文字数を参考に設定するのが効果的です。

下書き投稿 vs 直接公開の使い分け

REST APIでの投稿時、status パラメータで公開状態を制御できます:

# 下書きとして保存(確認後に手動公開)
curl -s -X POST \
  -u "${WP_USER}:${WP_APP_PASS}" \
  "${WP_SITE}/wp-json/wp/v2/posts" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "記事タイトル",
    "content": "本文HTML",
    "status": "draft",
    "categories": [1303]
  }'

# 直接公開
curl -s -X POST \
  -u "${WP_USER}:${WP_APP_PASS}" \
  "${WP_SITE}/wp-json/wp/v2/posts" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "記事タイトル",
    "content": "本文HTML",
    "status": "publish",
    "categories": [1303]
  }'

下書き推奨のケース: - 初めて試すジャンル・テーマの記事 - 外部データ(株価・研究データ)を含む記事 - 事実確認が必要な内容

直接公開でよいケース: - テンプレート化された定型記事(ニュースまとめ等) - 過去に類似記事で品質を確認済みの内容 - 急いでインデックスしたいタイムリーな話題

このブログでは、時事ニュース系の記事は直接公開、技術解説や投資分析系は一度下書きで確認してから公開するという運用をしています。


記事タイトルを一括でSEO最適化する

記事タイトルのSEO最適化は、最もROIが高い作業のひとつです。既存記事のタイトルを改善するだけで、クリック率(CTR)の向上が期待できます。

改善ルールとフロー

実際に50件のタイトルを一括更新した手順を紹介します。

Step 1:問題のあるタイトルを洗い出す

# 最新50件の記事タイトルとIDを取得
curl -s -u "${WP_USER}:${WP_APP_PASS}" \
  "${WP_SITE}/wp-json/wp/v2/posts?per_page=50&orderby=date&order=desc&_fields=id,title,date" \
  | python3 -c "
import json, sys
posts = json.load(sys.stdin)
print(f'{'ID':>6} | 公開日     | タイトル')
print('-' * 100)
for p in posts:
    print(f'{p[\"id\"]:>6} | {p[\"date\"][:10]} | {p[\"title\"][\"rendered\"]}')
"

Step 2:Claude Codeに改善案を生成させる

取得したタイトル一覧をClaude Codeに渡し、以下のような指示を出します:

このタイトル一覧のSEO改善案を作成してください。

改善ルール:
- 検索キーワードをタイトル前半に配置
- 32〜40文字程度に収める
- 読者のベネフィットを明示(「とは」「方法」「まとめ」「解説」等)

優先度を以下で判定:
- ★★★ = 即改善(文章・質問文・途中で切れている)
- ★★☆ = 改善推奨(KW不足・読者メリット不明)
- ★☆☆ = 現状でもOK

[タイトル一覧をここに貼り付け]

Step 3:1件ずつ確認しながらREST APIで更新

# 記事IDとタイトルを指定して更新
curl -s -X POST \
  -u "${WP_USER}:${WP_APP_PASS}" \
  "${WP_SITE}/wp-json/wp/v2/posts/5800" \
  -H "Content-Type: application/json" \
  -d '{"title": "製造業のAI活用最前線|LLM・深層学習の応用事例と導入ポイント"}'

改善前後の具体例

実際に更新した記事の一部を紹介します:

ID 改善前 改善後 優先度
5800 製造業においても大規模言語モデル(LLM)や深層学習(DL)を含む人工知能(AI)技術の応用が急速に進んでいる。 製造業のAI活用最前線|LLM・深層学習の応用事例と導入ポイント ★★★
5202 LLMエージェントのサーベイ論文 LLMエージェントとは?最新サーベイ論文からわかる技術動向まとめ ★★★
5384 LATENT は、「人型ロボットにテニスをさせる」ための学習システムです。 LATENTとは?人型ロボットにテニスを教えるAI学習システムの仕組み ★★★
5066 AIによる仮想的な会社組織」を構築・経営する方法 AIで仮想会社を構築・経営する方法|組織シミュレーション入門 ★★★
5025 ガーミンを使って行われた研究を調査してまとめて下さい Garminウェアラブルを用いた研究まとめ|健康データ活用の最前線 ★★★
5205 Claude Code実践入門!普段よく使う機能や大事だと思うポイントについて解説してみた Claude Code実践入門|便利機能と使いこなしのコツを解説 ★★☆

改善前の ★★★ タイトルは「文章がそのままタイトルになっている」「途中で切れている」「質問文になっている」のいずれかのパターンが多く、検索エンジンからのクリックを著しく損ねていました。

タイトルの改善ポイントは主に2つです。①検索キーワードを前半に置く(例:「LLMエージェントとは?」→ユーザーが検索しそうな言葉から始める)、②読者がクリックしたくなる言葉を加える(「まとめ」「解説」「入門」「方法」など)。この2点だけで、同じ記事でもCTRに大きな差が生まれます。


低品質記事をnoindexで一括除外する

なぜnoindexが必要か

このブログには過去に大量のパチスロ・パチンコ系記事が蓄積されており、現在の方向性(AI・テクノロジー・副業)と全く異なる内容でした。これらの記事がGoogleにインデックスされていると、サイト全体の評価を下げる「クロールバジェットの無駄遣い」や「テーマの希薄化」につながります。

対象記事は約4,759件。手動での対処は現実的でないため、Claude Codeにプラグインを自動生成させて一括処理しました。

キーワードベースのフィルタリング手法

まずREST APIでタイトルキーワードの出現数を調査します:

# 特定キーワードを含む記事数をカウント
curl -s -u "${WP_USER}:${WP_APP_PASS}" \
  "${WP_SITE}/wp-json/wp/v2/posts?search=パチスロ&per_page=1" \
  -I | grep -i "X-WP-Total"

調査の結果、以下のキーワードパターンでパチスロ系記事を識別できることがわかりました:

  • タイトルが CR で始まる(パチンコ機種名)
  • 「パチンコ」「スロット」「パチスロ」を含む
  • 「大当り」「確変」「潜伏確変」「セグ」「ボーダー」を含む
  • 「設定判別」「天井恩恵」「遊タイム」「機械割」を含む

プラグイン自動生成の流れ

Claude Codeへの指示:

livemyself.comのWordPressに以下の専用プラグインを作成してください。

プラグイン名: livemyself-noindex-pachislot
要件:
- wp_headフックでnoindexメタタグを出力
- 個別記事ページのみ対象(is_single())
- タイトルにパチスロ系キーワードを含む記事にnoindexを出力
- タイトルが「CR」で始まる記事にも適用
- sample-pageにも適用

対象キーワード: パチンコ、スロット、パチスロ、大当り、確変、
潜伏確変、セグ、ボーダー、設定判別、天井恩恵、遊タイム、機械割...

Claude Codeが生成したPHPプラグインがこちらです:

<?php
/**
 * Plugin Name: Livemyself Noindex Pachislot
 * Description: パチンコ/スロット系記事にnoindexメタタグを出力
 * Version: 1.0.0
 */

if ( ! defined( 'ABSPATH' ) ) { exit; }

function livemyself_noindex_pachislot_output() {
    if ( is_page( 'sample-page' ) ) {
        echo '<meta name="robots" content="noindex, follow">' . "\n";
        return;
    }
    if ( ! is_single() ) { return; }

    $title = get_the_title();

    // タイトルが「CR」で始まる場合(パチンコ機種名)
    if ( preg_match( '/^CR/u', $title ) ) {
        echo '<meta name="robots" content="noindex, follow">' . "\n";
        return;
    }

    // noindex対象キーワード
    $keywords = array(
        'パチンコ', 'スロット', 'パチスロ', '大当り', '大当たり',
        '確変', '潜伏確変', 'セグ', 'ボーダー', '設定判別',
        '天井恩恵', '遊タイム', '機械割', 'ジャグラー', 'まどマギ',
        '評価・感想', 'スペック', '解析情報', 'ハイエナ',
    );

    foreach ( $keywords as $kw ) {
        if ( mb_strpos( $title, $kw ) !== false ) {
            echo '<meta name="robots" content="noindex, follow">' . "\n";
            return;
        }
    }
}

add_action( 'wp_head', 'livemyself_noindex_pachislot_output', 1 );

プラグインファイルをZIP圧縮してREST APIでアップロード:

# ZIPを作成
cd /path/to/plugin/
zip -r livemyself-noindex-pachislot.zip livemyself-noindex-pachislot.php

# REST APIでプラグインをアップロード
curl -s -X POST \
  -u "${WP_USER}:${WP_APP_PASS}" \
  "${WP_SITE}/wp-json/wp/v2/plugins" \
  -F "plugin=@livemyself-noindex-pachislot.zip" \
  -F "status=active"

アップロード後、curlでHTMLを取得してnoindexタグが出力されているか確認します:

# パチスロ記事でnoindexが出るか確認
curl -s "https://livemyself.com/archives/19787" \
  | grep -o 'noindex'

noindex が返ってくれば設定完了です。


カテゴリ分析・記事の洗い出し

REST APIでデータを一括取得する

記事の現状把握にもREST APIが活躍します。カテゴリ別の記事数を一覧取得する例:

# 全カテゴリを件数の多い順で取得
curl -s -u "${WP_USER}:${WP_APP_PASS}" \
  "${WP_SITE}/wp-json/wp/v2/categories?per_page=100" \
  | python3 -c "
import json, sys
cats = json.load(sys.stdin)
print(f'{'ID':>5} {'件数':>6}  スラッグ')
print('-' * 50)
for c in sorted(cats, key=lambda x: x['count'], reverse=True):
    print(f'{c[\"id\"]:>5} {c[\"count\"]:>6}  {c[\"slug\"]} ({c[\"name\"]})')
"

このブログで取得したカテゴリ分析の結果:

ID 件数 カテゴリ名
3 6,483 AI(GPT等)との会話や独り言
1303 6,374 AI・機械学習
32 1,025 エンジニア
1305 929 エンジニアリング
1289 323 FX・株式投資

記事数が多い上位2カテゴリ(AI系)は明らかにAI関連コンテンツが蓄積されており、サイトの方向性と一致しています。一方でパチスロ系カテゴリは上記には現れず、未分類やその他カテゴリに混在していることが判明しました。

特定カテゴリの記事を取得して分析する

# カテゴリ1303の最新記事50件を取得
curl -s -u "${WP_USER}:${WP_APP_PASS}" \
  "${WP_SITE}/wp-json/wp/v2/posts?categories=1303&per_page=50&orderby=date&order=desc&_fields=id,title,date" \
  | python3 -c "
import json, sys
posts = json.load(sys.stdin)
for p in posts:
    print(f'{p[\"id\"]:>6}  {p[\"date\"][:10]}  {p[\"title\"][\"rendered\"][:60]}')
"

このデータをClaude Codeに渡すことで、「タイトルが改善できる記事」「内容が重複している記事」「カテゴリ設定が間違っている記事」などを一気に洗い出せます。


実際の改善効果と注意点

現時点でのBefore/After

このブログでClaude Codeを使った自動化を開始したのは2026年3月頃です。実施した主な作業と効果:

① noindex設定(約4,759件) - パチスロ系記事へのnoindex設定完了 - Googleのクロールバジェットが適切なコンテンツに集中するよう改善

② タイトルSEO最適化(50件) - ★★★(即改善):17件 - ★★☆(改善推奨):26件 - ★☆☆(微調整):7件 - 更新完了後、Google Search Consoleでのインプレッション・CTR変化を監視中

③ SEO記事の新規公開 - AI・技術・製造業・投資分析などのテーマで継続的に公開 - 従来の作業時間と比較して、記事1本あたりの所要時間を大幅に短縮

数字での効果検証はSearch ConsoleとGoogle Analyticsで3〜6ヶ月後に判断するのが適切です。SEOは即効性がなく、インデックスされてから検索順位が安定するまで時間がかかります。

やってはいけないこと

Claude CodeとREST APIの組み合わせは強力ですが、いくつかのリスクもあります。

① 全記事の一括公開はNG

# ❌ これは絶対にやってはいけない
curl -s -X POST -u "${WP_USER}:${WP_APP_PASS}" \
  "${WP_SITE}/wp-json/wp/v2/posts?status=draft&per_page=100" \
  # → 全下書きを一括公開するループ処理

下書き記事には「誤って下書きのまま保存した完成記事」と「意図的に非公開にしている記事」が混在しています。一括公開すると取り返しがつかない公開事故になります。

② 内部資料・戦略ノートの誤公開

Claude Codeが生成した「SEO戦略レポート」や「競合分析資料」が、そのままブログ記事として公開されてしまうケースがあります。このブログでも実際に発生しました(即座に下書きに戻しました)。

対策:記事公開前にタイトルで内容を確認する習慣をつけること。また、内部資料はWordPressの「プライベート」ステータスやnoindexで保護するのが安全です。

③ APIレート制限に注意

Xserverなどのレンタルサーバーでは、短時間に大量のAPIリクエストを送ると一時的にブロックされることがあります。50件のタイトル更新を行う場合は、1件ずつ確認しながら更新するか、リクエスト間に sleep 1 を挟むことをおすすめします。

# 安全なバッチ更新の例(1件ずつ確認)
for id in 5800 5808 5725 5637 5387; do
  echo "更新中: ID=$id"
  curl -s -X POST \
    -u "${WP_USER}:${WP_APP_PASS}" \
    "${WP_SITE}/wp-json/wp/v2/posts/${id}" \
    -H "Content-Type: application/json" \
    -d "{\"title\": \"新しいタイトル\"}"
  sleep 1
done

まとめ:AI×ブログ運営の今後

Claude CodeとWordPress REST APIを組み合わせることで、従来は数日かかっていた作業が数時間〜数十分で完了するようになりました。特に効果が大きかった作業は以下の3つです:

  1. noindex設定の自動化 — 数千件の低品質記事を一括処理
  2. タイトルSEO最適化 — 50件を1セッションで分析・更新
  3. SEO記事の自動執筆 — 構成から本文まで指示ひとつで生成

今後の展望として、以下の自動化も検討しています:

  • Search ConsoleデータのAPI取得 → 流入キーワードを自動分析してリライト対象を特定
  • 定期的な記事品質チェック → 低インプレッション記事を自動的に下書きに戻す
  • アイキャッチ画像の自動生成 → 画像生成AIと組み合わせてWordPressのメディアライブラリに自動追加

ブログ運営の自動化はまだ発展途上ですが、「AI自身がブログを執筆してAIについて解説する」という構造は、情報の鮮度と一次情報の組み合わせという点で、他のAI生成コンテンツと差別化しやすい領域です。

Claude Codeは単なるコード補助ツールではなく、WordPress管理者の自動化パートナーとして機能します。まずは環境変数の設定と接続テストから始めてみてください。


このブログ(livemyself.com)は現役エンジニアが実際にClaude Codeを活用して運営しています。記事に記載した手順はすべて実際に試したものです。