目次
- SEOタイトルとメタディスクリプション、なぜ手作業がしんどいのか
- AIで生成するときの基本ルール(文字数・KW配置・NG例)
- SEOタイトルの文字数規定
- メタディスクリプションの文字数規定
- やりがちなNG例
- ChatGPTで作るプロンプト例(コピペ可能)
- SEOタイトル生成プロンプト
- メタディスクリプション生成プロンプト
- 生成結果のビフォーアフター(実際の記事で使った例)
- Claude Code で作る場合の指示例
- CLAUDE.md にSEOメタ生成ルールを書く方法
- frontmatter の seo_title / seo_description に自動で書き込ませる指示例
- frontmatter設計の全体フロー
- ChatGPT との使い分け
- 3大SEOプラグインへの反映方法(Yoast / RankMath / SEOPress)
- 各プラグインのメタキー一覧(実コード付き)
- frontmatter → publish_post.py → REST API で自動反映するフロー
- REST API で反映されないとき(保護フィールド問題と WP-CLI フォールバック)
- 生成後のチェックリスト(5項目)
- よくある質問
- Q1: SEO Simple Pack を使っている場合、frontmatter から自動反映できますか?
- Q2: AIが生成したメタディスクリプションでクリック率は上がりますか?
- まとめ——メタ情報は「作る」より「仕組みに組み込む」
AIでSEOタイトルとメタディスクリプションを作る方法|プロンプト例+WordPress自動反映
記事を書き終わったあとに、毎回こんな作業をしていませんか。
「SEOタイトルを30字以内で……キーワードを先頭に入れて……でもクリックしたくなる言葉も欲しくて……」
「メタディスクリプションは120字で、記事の内容を要約して、でも引きのある文章で……」
月1〜2本ならまだ耐えられます。でも本数が増えるにつれて、この作業が地味に重くなっていきます。記事本文を書く集中力が切れたあとに、さらに「パッと思いつかない文章」を絞り出す作業は、思っている以上に消耗します。
私は現在、AIを使ったブログ自動化の仕組みを構築しながら月25本前後のペースで記事を公開しています。そのなかで気づいたのは、SEOタイトルとメタディスクリプションの作成こそ、AIに任せるとコスパが最もよい作業のひとつだということです。
ただし、「AIに任せる」というのは「ChatGPTで生成して終わり」ではありません。生成した情報をWordPressのSEOプラグインに自動で反映させるところまで仕組み化することで、初めて手作業がゼロになります。
この記事では、AIでSEOメタ情報を生成するプロンプト例から、SEOプラグイン(Yoast / RankMath / SEOPress)への自動反映フロー、そしてREST APIで詰まったときのWP-CLIフォールバックまで、実装ベースで解説します。
ブログ運営全体の自動化フローについては、AIでブログ運営を自動化する5ステップの全体像にまとめています。SEOメタ生成はそのStep 2に相当する工程です。
SEOタイトルとメタディスクリプション、なぜ手作業がしんどいのか
記事を公開するとき、いくつかの「地味にしんどい作業」があります。アイキャッチを作るとか、SNS告知文を考えるとか。そのなかでも、SEOタイトルとメタディスクリプションの作成は特殊な難しさがあります。
「制約が多い割に、正解がわかりにくい」 からです。
文字数制限があって、キーワードを入れる位置に気を配って、でも読んだ人がクリックしたくなる言葉も必要で——この条件を同時に満たす文章を、記事本文を書ききった後の疲れた頭で毎回考えるのはきついです。
私がこの作業に特に面倒さを感じたのは、月10本を超えてきたあたりでした。本数が増えると、以前書いた記事のタイトルと微妙に似てきたり、同じような言い回しが繰り返されたりします。「このタイトル、どこかで使ったっけ」と過去記事を漁りながら考える時間が、地味に積み上がっていきます。
この問題、AIで解決できます。しかも「生成するだけ」ではなく、frontmatterに書いておけばWordPressへの反映まで自動化できます。
AIで生成するときの基本ルール(文字数・KW配置・NG例)
AIに生成させる前に、人間側が「これだけは知っておく」べき判断基準があります。ここを曖昧にしたままプロンプトを投げると、AIの出力が何度やっても微妙になります。
SEOタイトルの文字数規定
SEOタイトルの推奨文字数は PC表示で30〜32字 です。
Google検索結果のタイトル表示は、厳密にはピクセル幅(約600px)で制御されています。日本語1文字は英字2〜3文字分の幅を取るため、日本語タイトルは 28〜35字 あたりが実用的な目安になります。32字を超えると末尾が「…」で切れることが増えます。
モバイル表示ではさらに短く、20〜25字 程度で切れる場合があります。タイトルの前半20字に最も伝えたいキーワードを入れておくと、モバイルでも伝わります。
タイトル設計の原則
- ターゲットキーワードをできるだけ先頭に置く
- 全体を28〜32字に収める
- 数字や記号(【】|)を使って視認性を上げる(ただし過剰は逆効果)
- クリックしたくなる要素を1つ入れる(実例あり・完全ガイド・初心者でもなど)
良い例:AIでSEOタイトル・メタディスクリプションを作る方法(28字)
悪い例:初心者でも簡単!AIを活用してSEOに強いタイトルとメタディスクリプションを効率的に作成する完全ガイド(51字・長すぎる)
メタディスクリプションの文字数規定
メタディスクリプションは PC表示で120字前後 が推奨です。Googleが検索スニペットとして表示する文字数は環境によって変動しますが、日本語の場合は 100〜130字 の範囲に収めておくと大きく切れることを防げます。
モバイルでは 70〜80字 程度で切れることがあります。先頭70字に核となる情報(何がわかるか・誰に向けた記事か)を入れておくとよいです。
| 環境 | 推奨文字数 | 優先情報 |
|---|---|---|
| PC | 100〜130字 | 記事の要約・キーワード・具体的な内容 |
| モバイル | 70〜80字 | 記事の核心(先頭部分が特に重要) |
なお、メタディスクリプションは検索順位には直接影響しない とされています。ただし検索結果のクリック率(CTR)には影響するため、手を抜く理由にはなりません。
やりがちなNG例
AIで生成するときも人間が書くときも、同じパターンで失敗しがちです。
1. キーワードの詰め込み
悪い例(NG):
SEOタイトル 自動生成 AI メタディスクリプション 作り方 自動化 WordPress
→ キーワードを並べただけ。読む人間向けの文章になっていない
2. 本文の内容と一致しない
「完全解説」「全網羅」と書いたのに記事の内容が薄い、あるいはタイトルで約束したことが本文に書かれていない場合、直帰率が上がります。
3. 抽象的すぎる
悪い例(NG):
AIを使って効率的にSEO対策ができます。詳しく解説しています。
→ 何が書いてあるかわからない。クリックする理由がない
AIにプロンプトを投げる前に、これら3つのNGパターンを制約として明示しておくと、出力の質が上がります。
ChatGPTで作るプロンプト例(コピペ可能)
ここからが実践です。ChatGPT(4o / 4o-mini どちらでも動きます)で使えるプロンプトを、そのままコピペできる形でまとめます。
SEOタイトル生成プロンプト
以下の記事情報をもとに、SEOタイトル案を3つ作ってください。
【記事タイトル(仮)】
{ここに仮タイトルを入れる}
【ターゲットキーワード(メイン)】
{ここにメインキーワードを入れる}
【記事の概要(2〜3行)】
{ここに記事の要点を入れる}
【制約条件】
- 文字数:28〜32字(絶対に35字を超えない)
- ターゲットキーワードを先頭30字以内に含める
- クリックしたくなる表現を1つ入れる(例:実例あり・具体的な手順・初心者向けなど)
- NG:キーワードの詰め込み、「完全解説」「全網羅」のような誇大表現
【出力形式】
案1:(タイトル)(XX字)
案2:(タイトル)(XX字)
案3:(タイトル)(XX字)
ポイントは「制約条件」の明示です。 文字数を「28〜32字」と数字で指定し、「絶対に35字を超えない」と上限を念押しするだけで、出力の質が大きく変わります。
メタディスクリプション生成プロンプト
以下の記事情報をもとに、メタディスクリプション案を2つ作ってください。
【記事タイトル】
{ここにタイトルを入れる}
【記事の主な内容(箇条書きで3〜5項目)】
{ここに記事の見出し・ポイントを入れる}
【ターゲット読者】
{例:WordPress でブログを運営していて、SEO メタ情報を効率化したい個人ブロガー}
【制約条件】
- 文字数:110〜130字(モバイル先頭70字に核心を置く)
- 記事を読むと何が得られるかを具体的に書く
- NG:「詳しく解説しています」「完全ガイド」などの抽象表現
- NG:同じキーワードの繰り返し
【出力形式】
案1:(メタディスクリプション)(XX字)
案2:(メタディスクリプション)(XX字)
生成結果のビフォーアフター(実際の記事で使った例)
ピラー記事「AIでブログ運営を自動化する5ステップ」のタイトルを生成した際の実例です。
ビフォー(プロンプトなしで最初に思いついたもの):
AIでブログを自動化する方法【完全ガイド】(20字)
→ 字数は短いが「完全ガイド」が曖昧。キーワード「Claude Code」が入っていない
AIへの入力:
– キーワード:AI ブログ 自動化
– 内容:5ステップ・非エンジニアの実例・Claude Code を使った具体的な手順
– 制約:32字以内・実例を示す言葉を入れる
AIの出力(採用した案):
AIブログ自動化の5ステップ|非エンジニアの実例付き(25字)
→ キーワード「AI ブログ 自動化」が先頭に入り、「非エンジニアの実例付き」で読者に具体性を伝えられる
この例のように、プロンプトに制約と具体的な素材を渡すと、自分では気づかなかった言い回しをAIが提案してくれることがあります。生成結果を採用するかどうかは人間が判断すればよいので、「たたき台を作らせる」感覚で使うのが最もコスパがよいと感じています。
Claude Code で作る場合の指示例
ChatGPTが「単発のメタ情報生成」に向いているとしたら、Claude Codeは「記事執筆→メタ生成→frontmatter書き込み」を1つのフローとして完結させるのに向いています。
CLAUDE.md にSEOメタ生成ルールを書く方法
CLAUDE.md(Claude Codeの動作を設定するファイル)に以下のようなルールを書いておくと、記事を書くたびに毎回指示しなくて済みます。
## SEOメタ情報の生成ルール
記事の frontmatter を作成するとき、以下のルールで seo_title と seo_description を生成すること。
### seo_title の規則
- 28〜32字(35字超えは絶対NG)
- ターゲットキーワードを先頭30字以内に配置
- クリックしたくなる表現を1つ含める
- 誇大表現(完全ガイド・全網羅・必見)は使わない
### seo_description の規則
- 110〜130字
- 先頭70字に記事の核心を置く(モバイル対応)
- 記事を読むと何が得られるかを具体的に書く
- キーワードの繰り返しを避ける
frontmatter の seo_title / seo_description に自動で書き込ませる指示例
CLAUDE.mdにルールを書いたうえで、記事作成時に以下のように指示します。
この記事の frontmatter を作成してください。
記事タイトル(仮):{タイトル}
ターゲットキーワード:{キーワード}
記事の概要:{概要2〜3行}
frontmatter には以下のフィールドを含めてください。
- title
- slug
- seo_title(CLAUDE.md のルールに従って生成)
- seo_description(CLAUDE.md のルールに従って生成)
- excerpt(seo_description と同文でよい)
- categories
- tags
- status: publish
Claude Codeはこの指示をもとに、CLAUDE.mdのルールを参照しながらfrontmatterを生成します。生成後、ファイルに直接書き込む指示も出せます。
生成した frontmatter を drafts/articles/{slug}/04_draft_v1.md の冒頭に書き込んでください。
frontmatter設計の全体フロー
frontmatterの設計と管理については、Markdown記事をWordPressに投稿する自動化フローで詳しく解説しています。本記事では「SEOメタ情報の生成と反映」に絞りますが、frontmatter全体の設計を知りたい場合はそちらを参照してください。
ChatGPT との使い分け
| 用途 | 向いているツール | 理由 |
|---|---|---|
| 単発の生成(1本ずつ手動で確認) | ChatGPT | 手軽・ブラウザで完結 |
| 記事執筆フローに組み込む | Claude Code | frontmatter への書き込みまで自動化できる |
| 複数記事を一括処理したい | Claude Code | スクリプト経由でまとめて処理可能 |
| 生成結果を見ながら対話的に調整したい | どちらでも | 好みの問題 |
「まず試してみたい」という段階ならChatGPT、「毎回の記事作成フローに組み込みたい」という段階ならClaude Codeという切り分けが実用的です。
3大SEOプラグインへの反映方法(Yoast / RankMath / SEOPress)
AIで生成したSEOタイトルとメタディスクリプションを、WordPressのSEOプラグインに反映させるところまでやらないと、自動化として完結しません。
ここが「他の記事には書いていない部分」です。
各プラグインのメタキー一覧(実コード付き)
WordPress REST APIでSEOメタ情報を更新するとき、プラグインごとに使うメタキーが異なります。間違えると「反映されている気がしない」という状態に陥ります。
| プラグイン | SEOタイトルのメタキー | メタディスクリプションのメタキー |
|---|---|---|
| SEOPress | _seopress_titles_title |
_seopress_titles_desc |
| Yoast SEO | _yoast_wpseo_title |
_yoast_wpseo_metadesc |
| RankMath | rank_math_title |
rank_math_description |
| SEO Simple Pack | ssp_meta_title |
ssp_meta_description |
私のスクリプト(publish_post.py)には、この3分岐を処理する build_seo_meta 関数があります。
def build_seo_meta(frontmatter: dict, seo_plugin: str) -> dict:
"""
frontmatter の seo_title / seo_description を
SEOプラグイン向けのメタフィールドに変換して返す。
対応プラグイン:
seopress : SEOPress(推奨・無料でREST API対応)
yoast : Yoast SEO
rankmath : RankMath SEO
none : SEO設定なし
"""
seo_title = frontmatter.get("seo_title", "")
seo_desc = frontmatter.get("seo_description", "")
if not seo_title and not seo_desc:
return {}
if seo_plugin == "seopress":
return {
"_seopress_titles_title": seo_title,
"_seopress_titles_desc": seo_desc,
}
elif seo_plugin == "yoast":
return {
"_yoast_wpseo_title": seo_title,
"_yoast_wpseo_metadesc": seo_desc,
}
elif seo_plugin == "rankmath":
return {
"rank_math_title": seo_title,
"rank_math_description": seo_desc,
}
else:
return {}
この関数は、.env ファイルの WP_SEO_PLUGIN の値(seopress / yoast / rankmath のいずれか)を読んで、適切なメタキーに変換します。
frontmatter → publish_post.py → REST API で自動反映するフロー
実際の自動反映の流れはこうなっています。
Step 1: frontmatter に seo_title / seo_description を書く
---
title: "AIでSEOタイトル・メタディスクリプションを作る方法"
slug: ai-seo-meta-generator
seo_title: "AIでSEOタイトル・メタディスクリプションを作る方法"
seo_description: "SEOタイトルとメタディスクリプションをAIで効率的に作る方法を解説。ChatGPT・Claude Codeのプロンプト例、Yoast・RankMath・SEOPressへの自動反映フローまで。"
excerpt: "SEOタイトルとメタディスクリプションをAIで効率的に作る方法を解説..."
status: publish
categories:
- AI記事作成
tags:
- SEOタイトル
- メタディスクリプション
---
Step 2: .env に使用プラグインを設定する
WP_BASE_URL=https://halolab.jp
WP_USERNAME=your_username
WP_APP_PASSWORD=xxxx xxxx xxxx xxxx xxxx xxxx
WP_SEO_PLUGIN=seopress
WP_SEO_PLUGIN に seopress / yoast / rankmath のいずれかを設定します。ここが空だったり、スペルミスがあったりすると build_seo_meta 関数が空の辞書を返し、SEOメタが反映されません。
Step 3: publish_post.py を実行する
python scripts/publish_post.py drafts/articles/ai-seo-meta-generator/
スクリプトは内部で以下を実行します。
# build_seo_meta でプラグイン向けのメタフィールドを生成
seo_meta = build_seo_meta(frontmatter, settings["seo_plugin"])
# 投稿データに meta フィールドとして含める
payload = {
"title": frontmatter["title"],
"content": body_html,
"slug": frontmatter["slug"],
"status": frontmatter.get("status", "draft"),
# ...
"meta": seo_meta, # ← ここにSEOメタが入る
}
# REST API で WordPress に POST
response = requests.post(
f"{WP_BASE_URL}/wp-json/wp/v2/posts",
json=payload,
auth=HTTPBasicAuth(WP_USERNAME, WP_APP_PASSWORD)
)
WordPress自動投稿の詳しい実装については、Claude CodeでWordPressに自動投稿する方法で解説しています。
REST API で反映されないとき(保護フィールド問題と WP-CLI フォールバック)
ここが最もつまずくポイントです。
保護フィールド問題とは
WordPressのREST APIでカスタムメタフィールドを更新するには、そのフィールドが「REST APIに公開されている」必要があります。SEOプラグインが管理するメタフィールドは、プラグインが明示的に register_post_meta() でREST APIへの公開を設定していないと、REST API経由では更新できません。
- SEOPress:REST API 対応済み。
_seopress_titles_titleと_seopress_titles_descは標準の/wp-json/wp/v2/posts/{id}エンドポイントのmetaフィールド経由で更新可能 - Yoast SEO:
yoast_head_jsonフィールドが REST API レスポンスに含まれるが、書き込みはできない(読み取り専用)。書き込みは_yoast_wpseo_title/_yoast_wpseo_metadescキー経由 - SEO Simple Pack(SSP):
ssp_meta_title/ssp_meta_descriptionが REST API 経由では更新できない(保護されている)
私は最初、SEO Simple Packを使っていました。REST API経由でメタ情報を更新しようとしても、何度やっても管理画面に反映されない。スクリプトはエラーにならないのに、WordPress側のSEO設定欄は空のまま——という状態で数日間詰まっていました。
原因がわかったのはREST APIのレスポンスをじっくり読んだときで、meta フィールドにSSPのキーが含まれていないことに気づきました。SSPがそのメタキーをREST APIに公開していなかったのです。
解決策1:SEOPress に切り替える(推奨)
私はこの問題を機に、SEO Simple PackからSEOPressに切り替えました。SEOPressは無料で、かつREST API対応が確認できています。
プラグインを変更したら .env の WP_SEO_PLUGIN を seopress に変更するだけです。
解決策2:WP-CLI フォールバック
プラグインを変えたくない場合や、SSH接続が可能なレンタルサーバーを使っている場合は、WP-CLIで直接メタフィールドを更新できます。
# SEO Simple Pack の場合
wp post meta update {投稿ID} ssp_meta_title "SEOタイトルをここに入力"
wp post meta update {投稿ID} ssp_meta_description "メタディスクリプションをここに入力"
# Yoast SEO の場合
wp post meta update {投稿ID} _yoast_wpseo_title "SEOタイトルをここに入力"
wp post meta update {投稿ID} _yoast_wpseo_metadesc "メタディスクリプションをここに入力"
{投稿ID} の部分は実際の投稿IDに置き換えてください。WordPress管理画面の投稿URLに含まれる post=XXXX の数字です。
SSH接続ができない環境(さくらインターネットのスタンダードプランなど)の場合は、この方法が使えないこともあります。その場合はプラグイン変更が現実的な解決策です。
REST APIを使った自動投稿で頻繁に出会うエラーの一覧は、WordPress REST API でつまずいたこと集にまとめています。保護フィールド問題以外のエラーで詰まったときも参照してみてください。
生成後のチェックリスト(5項目)
AIで生成したSEOメタ情報は、そのまま使わず以下の5項目を確認してから使います。AIの出力は精度が高くなっていますが、機械的なチェックを通すことでケアレスミスを防げます。
チェックリスト
-
[ ] 1. ターゲットキーワードが先頭30字以内に入っているか
キーワードが後ろに追いやられていると、検索エンジンとユーザーの両方に伝わりにくくなります。タイトルの前半にキーワードを置くのが基本です。 -
[ ] 2. 文字数が規定内に収まっているか
SEOタイトル:28〜32字(35字超えは要修正)
メタディスクリプション:110〜130字
文字数カウントは、テキストをコピーしてGoogleドキュメントやメモ帳に貼り付けるだけで確認できます。Claude Codeに「この文字数を教えて」と聞いても出てきます。
-
[ ] 3. 記事の実際の内容と一致しているか
AIは記事の概要から生成しますが、実際の本文と細部がズレることがあります。「〇〇が全部わかる」「完全解説」など、本文で約束できていないことが書かれていないか確認します。 -
[ ] 4. クリックしたくなる要素があるか
検索一覧に並んだとき、自分のタイトルを読んでクリックしたいと思えるかどうか。「他の記事ではなくこれを読む理由」が1つでも伝わると良いです。数字、具体性(実例・手順・費用)、読者属性(初心者向け・非エンジニア向け)などが有効です。 -
[ ] 5. 他の自分の記事と被っていないか
似たキーワードを扱う記事が複数あるブログでは、タイトルやメタディスクリプションが似通ってしまうことがあります。「同じようなタイトルが2本あるな」と気づいたら、それぞれの記事が「何が違うか」を明示するようにタイトルを調整します。
よくある質問
Q1: SEO Simple Pack を使っている場合、frontmatter から自動反映できますか?
結論から言うと、標準のREST API経由では難しいです。SEO Simple PackはREST APIのメタフィールドへの書き込みに対応していないため、publish_post.py から meta フィールドで更新しようとしても管理画面には反映されません。
対処法は2つです。
1つ目は SEOPressに乗り換える方法。SEOPressは無料で使えてREST API対応が確認できており、私自身がこの理由でSEO Simple PackからSEOPressに切り替えました。乗り換え後は .env の WP_SEO_PLUGIN=seopress に変更するだけで、build_seo_meta 関数がそのまま使えます。
2つ目は WP-CLIで手動更新する方法。SSHが使えるサーバーなら、以下のコマンドで記事ごとにメタを更新できます。
wp post meta update {投稿ID} ssp_meta_title "ここにSEOタイトル"
wp post meta update {投稿ID} ssp_meta_description "ここにメタディスクリプション"
自動化という観点では回り道ですが、「すぐにプラグインを変えたくない」という場合の一時的な回避策として使えます。
Q2: AIが生成したメタディスクリプションでクリック率は上がりますか?
メタディスクリプションは検索順位には直接影響しないとされています。一方で、検索結果のスニペットとして表示されるため、クリック率(CTR)には影響します。
AIで生成したものが必ずしも良い・悪いというわけではなく、「記事内容との一致度」と「クリックしたいと思わせる言葉が入っているか」が品質を決めます。
私の感覚では、AIが生成したものをそのまま使うより、生成後に少し手直しするほうがコスパが良いです。AIは文字数調整と「そもそもの文章の叩き台作り」が得意で、クリックしたくなるかどうかの最終判断は人間が見た方が速いことが多いです。チェックリスト(5項目)を通してから使う、という習慣が結果的に一番安定していると感じています。
まとめ——メタ情報は「作る」より「仕組みに組み込む」
SEOタイトルとメタディスクリプションをAIで生成することは、今やそれほど難しくありません。ChatGPTにプロンプトを渡せば、数秒で候補が出てきます。
でも、そこで止まると「毎回AIに貼り付けて生成する」という新たな手作業が生まれるだけです。
本当に手作業がゼロになるのは、frontmatter に書いておけば投稿時に自動で反映される状態を作ったときです。記事を書いてfrontmatterを用意し、コマンドを1回叩くだけで、記事投稿とSEOメタの反映が同時に完了する——この仕組みがあると、月25本ペースでも「メタ情報を考える時間」がほぼゼロになります。
入り口はfrontmatterの設計です。記事ファイルの冒頭に seo_title と seo_description のフィールドを用意する、それだけで自動化の土台ができます。
AIでブログ運営を自動化する5ステップの全体像では、このSEOメタ反映をStep 2として位置づけ、記事作成から公開まで1コマンドで完結するフロー全体を解説しています。個別の工程を理解したあと、全体像を確認したいときに読んでみてください。
publish_post.py のコード全文と、SEOメタ反映に至るまでのつまずき記録——「なぜSSPからSEOPressに切り替えたか」「WP-CLIに逃げた記録」なども含めて——はnoteで公開しています。コードを動かしながら記録を残してきた過程に興味がある方は読んでみてください。
関連 note 記事
publish_post.py の SEO メタ処理含む全コードは note の有料記事で公開しています(500円)。
