AltoRank について
AltoRank は、コンテンツチーム向けのオープンソースでセルフホスト可能な SEO ライティングツールです。キーワード調査、記事の作成と採点、事実確認を行い、MCP とエージェント API は草稿を人によるレビューキューに入れます。エージェントに承認・公開の権限はありません。
主な機能
- 01キーワード調査と SERP 分析
- 02サイト準備状況の監査とクロール
- 03記事の生成、採点、事実確認
- 04ワークスペース別のブランドボイス設定
- 05順位追跡と Search Console 同期
- 06草稿の Markdown・HTML 出力
活用シーン
- 01サイトの SEO 準備状況の監査
- 02キーワード調査と記事草稿の作成
- 03記事内の数値を出典と照合
- 04公開前に草稿を人がレビュー
MCP 対応
MCP サーバーはローカル stdio またはホストアプリの Streamable HTTP エンドポイントで SEO ツールを提供します。エージェントは調査と草稿作成を行えますが、人の承認がない草稿は承認・公開できません。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://app.altorank.co/api/mcpclaude mcp add --transport http co-altorank-altorank https://app.altorank.co/api/mcp{"mcpServers":{"co-altorank-altorank":{"type":"http","url":"https://app.altorank.co/api/mcp"}}}Cursor で開く{"servers":{"co-altorank-altorank":{"type":"http","url":"https://app.altorank.co/api/mcp"}}}VS Code で開く{"mcpServers":{"co-altorank-altorank":{"type":"http","url":"https://app.altorank.co/api/mcp"}}}{"mcpServers":{"co-altorank-altorank":{"serverUrl":"https://app.altorank.co/api/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
詳細
AltoRank:オープンソースでセルフホスト可能な AI SEO コンテンツライター(Outrank の代替)
Outrank と Jasper に代わるオープンソースのツールです。 AltoRank はキーワードを調査し、記事を執筆してスコアを付け、ファクトチェックを行います。数値については、その根拠として引用されているページに記載があるかを確認し、出典のない数値にはレビュー担当者向けのフラグを付けます。すべての下書きは、Markdown(フロントマターを含む)または HTML としてコピーするか、.md ファイルとしてダウンロードして、公開先に貼り付けられます。
承認して貼り付け、公開済みとしてマークすると公開 URL が記録され、以後、記事のインデックス登録と順位が追跡されます。
AltoRank は、氏名が記録された担当者の承認なしにサイトへ公開することはありません。各下書きを手動で承認するか、保留しない限り保留期間の経過後に下書きを承認するルールを設定できます(このルールは CMS 接続を通じて公開します。この機能は実装済みですが、エンドツーエンドの検証はまだ行われていません。ステータスを参照してください)。 エージェントは MCP サーバーとエージェント API を通じて調査や下書き作成を行えます。 どちらも承認はできず、担当者がすでに承認した記事以外を公開することもできません(公開側の唯一の呼び出しは、承認済み記事の公開に失敗した場合に再試行します)。
AGPL-3.0 のもとで無料でセルフホストするか、ホスト版アプリ app.altorank.co をご利用ください。
製品全体がオープンソースです。機能制限のあるプランも、ee/ ディレクトリもありません。
ステータス
app.altorank.co のホスト版アプリはこのリポジトリそのもので、main からデプロイされています
(docs/deploy.md)。セルフホスト版は、独自の Supabase と API キーを使って同じコードを実行します。調査、下書き作成、スコアリング、ファクトチェック、監査、順位追跡、Search Console / Bing の同期は現在稼働中です。詳細は以下の表をご覧ください。まだ完了していない項目は次のとおりです。
- 有料顧客も、導入事例もありません。 ここに掲載されている機能には、成長を示す数値が紐付いていません。意図的にそうしています。
- CMS への公開機能は実装済みですが、エンドツーエンドの検証はまだ行われていません。 13 個のアダプターは
apps/web/lib/cms/にあり、接続フォームもすべてに対応していますが、実際のサイトへの公開を確認できたものはありません。そのため、/connectのプラットフォームタイルには「接続」ではなく、連携のリクエストが表示されます。現在、すべての下書きを Markdown または HTML としてコピーできます。 詳細は現在利用できる機能をご覧ください。 - AI 可視性の追跡機能は実装済みですが、有効化されていません。 プローブ、週次 cron、
/geoページは存在しますが、ワークスペースで追跡を有効にしたり、測定対象のプロンプトを追加したりする機能はアプリ内にありません。そのため、サイドバーでは「近日公開」と表示されています(apps/web/lib/constants.ts)。 - CLI は公開可能な状態ですが、まだ npm には公開されていません。
packages/altorank-cliはapps/web/scripts/cli.tsをaltorankバイナリにバンドルします(公開後はnpx altorank auth whoamiを実行できます)。それまでは、apps/webでnpm run cliを実行すると、チェックアウトしたコードから同じエージェント API を利用できます。skills/altorank/SKILL.mdはコーディングエージェントが読み込むスキルファイルで、npxでインストールできます。詳細は以下をご覧ください。
仕組みを知りたい場合も、自分で実行したい場合も、パッチを送信したい場合も、必要なものはすべてここにあります。
公開の承認判断
ゲートは1つ、通過する方法は2つです。lib/publishing/core.ts は、approved_by が設定された approved または scheduled 以外の記事を拒否します。これらのカラムに書き込めるのはサーバーだけです。サインインしたユーザー自身のデータベースクライアントから、記事を承認済み、予約済み、または公開済みにすることはできず(マイグレーション 109)、承認済みの記事を編集すると、再びレビューに戻されます。承認を書き込める方法は次のとおりです。
- 人による承認。エディターから実行し(
approveArticle)、approved_byに記録されます。ボタンを押すと、有効なプランがあることを確認し、出典のない数値があれば拒否します。 - アカウント内の名前付きメンバーが設定したルール(
auto_approve、マイグレーション 079):公開 cron は「承認」ボタンより厳しいチェックを実行します。有効なプラン、公開先があること、出典のない数値がないこと、承認が必要な名前付きレビュアーが残っていないこと、監査項目に不合格がないこと、SEO スコアが最低基準以上であることを確認します。さらに、保留期間(デフォルトは 24h)を設け、その間、下書きメールには保留リンクが含まれます。approved_byにはルールを有効にしたユーザーが記録され、approval_kindはautoになります。保留された下書きには、理由がその行に記録されます。lib/publishing/auto-approve.tsを参照してください。
live は、承認済みの記事を公開した後に書き込まれます。また、公開以外の処理でも書き込まれる場合が1つあります。夜間のサイト掲載確認(lib/found-on-site/detect.ts)は、記事の本文がすでに顧客自身のサイトに掲載されている場合、下書きを公開済みにします。これは AltoRank の外部で完了したことを記録するもので、CMS への送信は行わず、承認も伴わず、エディターから元に戻せます。
承認を書き込めないものは、エージェントです。MCP ツールやエージェント API の呼び出しによって記事が承認されたり、下書きが公開されたりすることはありません。機能が無効なのではなく、そもそも存在しません。公開に関する唯一の呼び出しである altorank_retry_publish(POST /articles/{id}/retry-publish)は、人がすでに承認した記事の公開失敗を再試行します。それ以外の場合は拒否されます。すべての MCP ツールは apps/web/lib/mcp/server.ts に登録されており、サーバーの指示でもそのことをエージェントに伝えています。
競合ツールは「あなたが主導権を保てます」という文言を宣伝に使っています。ここでは、その違いを確認できます。すべての live 行は、クリックまたはルールによって承認された記事か、顧客自身のサイトですでに公開されていることが確認された記事です。
現在利用できる機能
| キーワード調査+SERP 分析 | DataForSEO |
| ドメイン監査 | 9 項目の準備状況チェック、クロール、PageSpeed |
| 記事生成 | 調査 → 下書き → スコア付け → ファクトチェック |
| ブランドボイス | ワークスペースごとのボイスプロファイル |
| 公開 | すべての下書きを Markdown および HTML でエクスポート;13 個のアダプター(以下参照)。実装済みですが、エンドツーエンドでの検証はまだです |
| ロケール | 35(apps/web/lib/seo/locales.ts) |
| 検索順位の追跡 | SERP の定期チェック |
| 検索アナリティクス | Google Search Console;Bing Webmaster Tools(1 日あたりのクリック数とインプレッション数) |
| AI での可視性 | まだ有効化されていません:AI の回答で自社が言及されているか、代わりにどの企業が言及されているかを記録する機能(lib/geo/、週次実行の /api/cron/geo、/geo ページ)は実装済みですが、現時点ではアプリ内にワークスペースで有効化する方法がありません |
公開先(apps/web/lib/cms/adapter.ts)— 10 種類の CMS プラットフォームをカバーする 13 個のアダプターです。WordPress には 2 通りの接続方法があり、git と webhook は CMS ではなく公開先です。Framer、Ghost、git、HubSpot、Magento、Notion、Shopify、Webflow、webhook、Wix、WooCommerce、WordPress、WordPress プラグインです。WordPress プラグインは、アプリケーションパスワードの代わりにプラグインをインストールしてサイトごとのトークンを使用する、WordPress への 2 つ目の推奨接続方法です(apps/web/lib/cms/wordpress-plugin.ts)。そのため、WordPress は 2 回記載されています。
13 個のアダプターはいずれも、稼働中のサイトでエンドツーエンドの検証がまだ完了していません。そのため、apps/web/lib/cms/connectable.ts の CONNECTABLE_CMS は意図的に空になっており、/connect のすべての CMS タイルには「Request integration」が表示され、「Connect」は表示されません。このセットに ID を追加すると、そのタイルに「Connect」ボタンが再び表示されます。接続フォーム自体は変更されておらず、引き続き 13 個すべてに対応しています。ページの「New connection」ボタン、下書きの公開パネル、/connect?connect=<id> のいずれからもフォームを開けます。接続していない場合、エディターではすべての下書きを Markdown(フロントマターを含む)または HTML としてコピーするか、.md ファイルとしてダウンロードできます。
プラグインをインストールする
Claude Code。ターミナルから実行します。
claude plugin marketplace add AltoRank/altorank
claude plugin install altorank@altorank
または Claude Code のセッション内で、/plugin marketplace add AltoRank/altorank を実行し、続けて /plugin install altorank@altorank を実行します。
plugins/altorank/ には、ホスト型 MCP サーバー(https://app.altorank.co/api/mcp、OAuth 対応、コピーする API キーは不要)と、そのツール向けに作成されたスキルが含まれています。同じフォルダーには、ChatGPT と Codex が読み込むポータブルな plugin.json と mcp.json もあり、.agents/plugins/marketplace.json にはそれら向けの登録情報が記載されています。
スキルをインストールする
npx skills add AltoRank/altorank
これにより、skills/altorank/SKILL.md が Claude Code、Cursor、Codex、Copilot、Windsurf、Gemini CLI、Cline、および skills CLI がサポートするその他のエージェントから読み込める場所に配置されます。このスキルは、エージェント API(/api/agent/v1)を操作する方法をエージェントに教えます。キーの事前確認、サイトの準備状況の確認、キーワードの一覧表示または提案、人間のレビューキューへの下書きの生成、検索と置換による下書きの編集、コンテンツ計画の移動を行います。下書きの承認、削除、公開は行いません。API にそのような呼び出しはありません。公開関連の呼び出しは 1 つだけあり、すでに人が承認した記事の公開に失敗した場合に再試行します。
このスキルには API キーが必要です。ダッシュボードの /settings/api-keys で作成し、ALTORANK_API_KEY としてエクスポートしてください。セルフホスト環境では、ALTORANK_BASE_URL も設定します。skills/altorank/commands/ には、よく使う呼び出し向けの簡易なスラッシュコマンドが 5 つあります。skills CLI はスラッシュコマンドを登録しないため、使用する場合は .claude/commands/(Claude Code)またはお使いのエージェントに相当するディレクトリにコピーしてください。
実行方法
Node 22 以降と、Supabase プロジェクト(Docker 経由のローカル環境、またはホスト環境)が必要です。 ホスト環境とセルフホストの完全なデプロイ手順は docs/deploy.md に、Cloudflare の評価は docs/deploy-cloudflare.md に記載されています。
npm install
cp docker/.env.example apps/web/.env.local # every variable, with what each one enables
npm run dev
セルフホストのインストールを最初から最後まで動作させるには、以下が必要です。
- Supabase の URL、anon キー、および
SUPABASE_SERVICE_ROLE_KEY NEXT_PUBLIC_APP_URL。アプリを開く際のアドレスです。メールで送信されるすべての リンク(サインアップの確認、招待、パスワードのリセット)はこの値から作成され、 Docker ビルドではイメージに組み込まれるため、docker compose up --buildの前に設定してください。設定されていないと、compose はビルドを拒否します。ANTHROPIC_API_KEYENCRYPTION_KEYとCRON_SECRET(それぞれopenssl rand -hex 32で生成します)。CRON_SECRETがないとdocker composeは起動を拒否し、スケジュールされた ジョブも実行されません。RESEND_API_KEYとRESEND_FROM_EMAIL(Resend アカウントで認証済みのドメインに属する 送信者)。サインアップはメールで確認するため、これらがないと誰もアカウントを 作成できず、パスワードもリセットできません。
キーワードの検索ボリュームと順位を追跡するには、DATAFORSEO_LOGIN /
DATAFORSEO_PASSWORD を追加してください。これらがない場合、該当する処理は失敗せずに
スキップされます。サンプルファイルにあるその他の設定はすべて任意で、それぞれ
設定した機能だけが無効になります。対象の機能はファイルに記載されています。
プロダクト分析(2 つの NEXT_PUBLIC_POSTHOG_* 変数、プロジェクトトークンとホスト)も
任意です。設定しない場合、ブラウザーのコンソールに分析機能が無効であることが表示されますが、
それ以外に変更はありません。
その他のエントリーポイント:
npm run test # vitest, unit tier: mocks only, needs no services
npm run test:db # vitest, db tier: *.db.test.ts against the local Supabase only
npm run smoke # research → prompt → model → fact check, against real APIs
また、apps/web から:
npm run mcp # MCP server over stdio, for driving the engine from an AI assistant
npm run cli -- --help # the agent API from a shell; auth with ALTORANK_API_KEY
npm run readiness -- <domain> # the agent-readiness checks on their own
ホスト型 MCP エンドポイント
実行中のアプリは同じツールを /api/mcp(Streamable HTTP)で提供するため、MCP クライアントは
stdio サーバーを実行する代わりに、コネクターとして 1 つの URL を追加できます。ホスト環境では
https://app.altorank.co/api/mcp、セルフホストの場合は独自のオリジンを使用します。
認証にはベアラートークンを使用します。トークンは /settings/api-keys の API キー、または
組み込みの OAuth フローで発行されるものです。
/.well-known/oauth-authorization-serverおよび/.well-known/oauth-protected-resource/api/mcpでディスカバリー/api/oauth/registerで動的なクライアント登録(パブリッククライアント、PKCE は S256 のみ)/oauth/authorizeで同意(オーナーまたは管理者のみ。書き込みスコープはオプトイン)/api/oauth/tokenでトークンを取得(認可コードグラント。リフレッシュトークンなし)
コネクターが受け取るトークンは api_keys の行(マイグレーション 080)なので、
他のキーと同様に /settings/api-keys に一覧表示され、有効期限が設定され、取り消されます。
Claude Code は次のコマンドで登録します。
claude mcp add --transport http altorank https://app.altorank.co/api/mcp。
ChatGPT と Claude.ai では、同じ URL をカスタムコネクターとして指定します。
CLI も MCP サーバーも、記事の承認や削除はできません。これは設定によるものではなく、
エージェント API にそのような呼び出しがなく、DELETE ハンドラーも一切ないためです。
また、どちらも記事を公開することはできません。CMS に到達する唯一のエンドポイントは
POST /articles/{id}/retry-publish で、人がすでに承認したものの、公開に失敗した記事
の公開を再試行します。下書きまたはレビュー中の記事は拒否され、担当者に引き継ぐよう
呼び出し元に伝えます(apps/web/app/api/agent/v1/articles/[id]/retry-publish/route.ts:13-35)。
データベース
apps/web/supabase/ には config.toml と番号付きのマイグレーションがあり、順番に適用されます。
Supabase CLI を使用する場合:
cd apps/web
supabase start # local Postgres + auth; applies the migrations, prints the URL and keys for .env.local
初回起動時に supabase start はすべてのマイグレーションをローカルデータベースに適用します
(supabase db reset を実行すると、最初から再適用されます)。ローカルスタックでは
supabase db push を実行しないでください。リンク済みのリモートプロジェクトが対象になります。
ホストプロジェクトでは、まず supabase link --project-ref <ref> を実行し、その後
supabase db push を実行してください。すべてのクエリはマイグレーションで作成される
テーブルを対象とするため、マイグレーションがないとアプリは正常に動作しません。
Node を直接実行したくない場合に備え、docker/ にコンテナー構成があります。
ディレクトリ構成
apps/web/ the engine and dashboard (Next.js)
app/(dashboard)/ dashboard routes
lib/audit/ domain analysis, readiness checks
lib/seo/ recommendations, scoring, locales, topical profile
lib/content/ generation (one implementation, shared by route + cron)
lib/ai/ fact checking
lib/cms/ 13 publishing adapters
lib/geo/ AI-answer visibility
scripts/mcp.ts MCP server
scripts/cli.ts CLI over /api/agent/v1
plugins/altorank/ Claude / ChatGPT / Codex plugin: hosted MCP server + skill
skills/altorank/ the skill file a coding agent reads (`npx skills add AltoRank/altorank`)
packages/altorank-cli/ npm package `altorank`: bundles scripts/cli.ts into a bin
docker/ container setup for self-hosting
tools/agent-readiness/ standalone agent-readiness scanner
ライセンス
GNU AGPL-3.0-only。 全文はLICENSEをご覧ください。
実際の運用では、セルフホストして、自分のクライアント向けに商用利用しても、何も支払う必要はなく、何かを公開する必要もありません。唯一の義務が及ぶのは、製品を再構築する人だけです。ソースを変更し、その変更版をネットワーク経由で他者に提供する場合は、変更内容を同じライセンスで共有する必要があります。
アカウントを運用するのは無料で、制約もありません。変更したコピーをクローズドな競合サービスとして再公開することはできません。
貢献
Issue とプルリクエストを歓迎します。コードの出来にかかわらず、次の2点に該当するパッチは却下されます。
- 個人に帰属しない公開方法を追加すること。たとえば、クリックだけで公開する方法や、名前のあるメンバーが設定し、拒否できるルール以外の方法です。エージェントが開始する公開は、典型的な例です。
- リポジトリで裏付けられない主張を追加すること。
grepで機能が見つからないなら、README に記載することはできません。
パッチのレビューで参照されるコード規約と、このリポジトリとマーケティングサイトの関係については、CONTRIBUTING.mdをご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。