WordPressサイトのSEO対策、手作業で一つずつ直していませんか?
SEO Agent は、プラグインをインストールするだけで、REST API経由でSEOの問題検出から修正までをリモート実行できるWordPressプラグインです。noindex設定、サイトマップ最適化、日本語スラッグ変換、構造化データ、セキュリティヘッダーなど、9種類の修正をAPIコマンド1本で適用できます。
動作要件:WordPress 6.0以上 / PHP 7.4以上
どんなプラグイン?
SEO Agentは、「顧客のサイトにインストール → トークンを共有 → こちらからAPI経由でSEO修正を適用」というワークフローを実現するためのプラグインです。
もちろん自分のサイトにインストールして、ターミナルからcurlコマンドで操作することもできます。
主な特徴
- 8項目のSEOスキャン — ワンコマンドで問題を一括検出
- 9種類のリモート修正 — API経由でnoindex、リダイレクト、構造化データなどを適用
- セキュアなトークン認証 — bcryptハッシュ + IPごとのレート制限
- 修正履歴の完全記録 — 誰がいつ何を変更したか追跡可能
- WordPress標準に準拠 — Settings API、REST API、insert_with_markers等を正しく使用
- アンインストール時に完全クリーンアップ — データもテーブルも.htaccessの変更も全削除
なぜ作ったか
自分のブログ(このサイト)のSEO整備をしていて、mu-pluginとしてnoindex制御、サイトマップ除外、リダイレクト、構造化データ出力、セキュリティヘッダーなどを一つのファイルに書いていました。
これを汎用化して、API経由で操作できるようにすれば、SEO代行サービスのツールとして使えるのでは?と思って作ったのがSEO Agentです。
スキャンで検出できる8つの問題
| # | チェック項目 | 概要 |
|---|---|---|
| 1 | noindex未設定 | support/privacyページなど、インデックス不要なページの検出 |
| 2 | サイトマップ漏れ | noindexにすべきページがサイトマップに残っている |
| 3 | 日本語URLスラッグ | %e3%80%90… のようなエンコード済みスラッグの検出 |
| 4 | 構造化データ未設定 | BlogPosting JSON-LDが出力されていない |
| 5 | ユーザー列挙可能 | REST API /wp/v2/users が匿名アクセスで閲覧可能 |
| 6 | RSSフィード漏れ | 不要な記事がRSSフィードに含まれている |
| 7 | タグアーカイブのnoindex | タグページがインデックスされている |
| 8 | セキュリティヘッダー未設定 | .htaccessにHSTS等のヘッダーがない |
API経由で実行できる9つの修正コマンド
| アクション | 内容 |
|---|---|
add_noindex_rule | パターン/スラッグ/ID/タクソノミー指定でnoindex追加 |
add_sitemap_exclusion | サイトマップからの除外ルール追加 |
add_redirect | 301/302リダイレクト追加 |
migrate_slug | 投稿スラッグの変更(旧スラッグの自動リダイレクト付き) |
migrate_term_slug | カテゴリー/タグのスラッグ変更 |
enable_structured_data | BlogPosting JSON-LD自動出力 |
block_user_enumeration | REST APIユーザー列挙ブロック |
add_rss_exclusion | RSSフィードからの除外 |
update_htaccess | セキュリティヘッダーの追加 |
インストールと使い方
Step 1:プラグインのインストール
- 上のボタンから購入・ZIPファイルをダウンロード
- WordPress管理画面 → プラグイン → 新規追加 → プラグインのアップロード
- ZIPを選択してインストール → 有効化
Step 2:トークンの取得
有効化すると、設定 → SEO Agent にAPIトークンが表示されます。
このトークンは1回しか表示されません。すぐにコピーして安全な場所に保存してください。紛失した場合は「Regenerate Token」ボタンで再発行できます。
Step 3:APIでスキャン実行
curl -H "Authorization: Bearer YOUR_TOKEN" \
https://your-site.com/wp-json/seo-agent/v1/scan
レスポンス例:
{
"scanned_at": "2026-02-23T15:00:00+09:00",
"issue_count": 3,
"issues": [
{
"type": "noindex_missing",
"message": "Page \"siplog-support\" should be noindex.",
"fix": "add_noindex_rule"
},
{
"type": "no_structured_data",
"message": "BlogPosting JSON-LD is not enabled.",
"fix": "enable_structured_data"
}
]
}
Step 4:修正コマンドの実行
noindexルール追加(パターンマッチ):
curl -X POST \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"action":"add_noindex_rule","params":{"match_type":"pattern","pattern":"-(support|privacy)$"}}' \
https://your-site.com/wp-json/seo-agent/v1/fix
日本語スラッグの変更:
curl -X POST \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"action":"migrate_slug","params":{"post_id":88,"new_slug":"english-slug"}}' \
https://your-site.com/wp-json/seo-agent/v1/fix
構造化データ有効化:
curl -X POST \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"action":"enable_structured_data","params":{}}' \
https://your-site.com/wp-json/seo-agent/v1/fix
セキュリティヘッダー追加:
curl -X POST \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"action":"update_htaccess","params":{}}' \
https://your-site.com/wp-json/seo-agent/v1/fix
Step 5:適用済み修正の確認・削除
修正一覧を取得:
curl -H "Authorization: Bearer YOUR_TOKEN" \
https://your-site.com/wp-json/seo-agent/v1/fix
特定の修正を削除(UUIDを指定):
curl -X DELETE \
-H "Authorization: Bearer YOUR_TOKEN" \
https://your-site.com/wp-json/seo-agent/v1/fix/uuid-here
REST APIエンドポイント一覧
すべてのリクエストに Authorization: Bearer <token> ヘッダーが必要です。
| メソッド | エンドポイント | 用途 |
|---|---|---|
| GET | /seo-agent/v1/scan | SEOスキャン実行 |
| POST | /seo-agent/v1/fix | 修正コマンド実行 |
| GET | /seo-agent/v1/fix | 適用中の修正一覧 |
| DELETE | /seo-agent/v1/fix/{id} | 修正の削除 |
| GET | /seo-agent/v1/status | プラグイン状態確認 |
| GET | /seo-agent/v1/history | 修正履歴取得 |
セキュリティについて
- トークンは48文字のランダム文字列をbcryptでハッシュ化して保存
- 平文トークンは管理画面で1回だけ表示(表示後にサーバーから削除)
- 認証失敗はIPごとに5回/15分でレート制限
- リダイレクト先は同一サイト内のURLのみ許可(オープンリダイレクト防止)
- 正規表現パターンは実行前にバリデーション(ReDoS対策)
- .htaccessは
insert_with_markers()で安全に書き換え(改行インジェクション防止) - プラグイン削除時に全データ・テーブル・.htaccessルールを完全削除
- Cocoonテーマの
cocoon_noindexフィルターにも対応
管理画面でも操作可能
APIを使わなくても、WordPress管理画面の設定 → SEO Agentから以下の操作ができます:
- トークンの表示・再発行
- APIエンドポイントURLのコピー
- 適用中の修正の一覧と個別削除
- ワンクリックでSEOスキャン実行
- 修正履歴の確認(直近50件)
技術仕様
- ファイルサイズ: 20KB(ZIP)
- PHP: 7.4以上
- WordPress: 6.0以上
- データ保存: wp_options(修正設定)+ カスタムテーブル(履歴)
- キャッシュ: スキャン結果は1時間のTransientキャッシュ
- ライセンス: GPL-2.0-or-later
動作要件:WordPress 6.0以上 / PHP 7.4以上
質問やフィードバックがあれば、コメント欄でお気軽にどうぞ。


コメント