OpenSEO セルフホスティング チュートリアル: Docker デプロイメント、DataForSEO、MCP アクセス

OpenSEO のキーワード、ランキング、競合製品、サイト監査機能を紹介し、Docker と Cloudflare セルフホスティング、DataForSEO API 構成、Codex と Claude MCP アクセスをデモンストレーションします。

OpenSEO は、個人およびチーム向けのオープンソース SEO ツールであり、Semrush や Ahrefs などの商用スイートの軽量代替ツールとして位置付けられています。キーワード調査、ランキング追跡、競合製品分析、バックリンク、サイト監査、AI 可視性を提供し、SEO データを MCP を通じて Codex や Claude Code などの AI エージェントに渡して使用します。

OpenSEO は、公式にホストされているバージョンを使用することも、自分でデプロイすることもできます。セルフホスティングでは、アプリケーションとプロジェクトのデータを制御できますが、すべての SEO データが無料であるという意味ではありません。キーワード、SERP、バックリンクなどのデータは DataForSEO から取得されますが、それでも独自の API 資格情報が必要で、呼び出しごとに料金が発生します。

簡単な答え

パソコンで OpenSEO を体験するには、Docker を使用することをお勧めします。

1
2
3
git clone https://github.com/every-app/open-seo.git
cd open-seo
cp .env.example .env

.env で設定:

1
DATAFORSEO_API_KEY=YOUR_BASE64_CREDENTIALS

サービスを開始します。

1
docker compose up -d

デフォルトのアクセスアドレスは次のとおりです。

1
http://localhost:3001

重要な注意事項: Docker セルフホスト モードはデフォルトで AUTH_MODE=local_noauth を使用し、アプリケーション レベルのログイン チェックを行いません。これはローカル マシンまたは信頼されたプライベート ネットワークに適しており、ポートをパブリック ネットワークに直接公開することはできません。リモート アクセスは、認証されたリバース プロキシ、トンネル、またはプライベート ネットワークの背後にある必要があります。

OpenSEO でできること

OpenSEO は、一般的な SEO 作業をより焦点を絞ったプロセスに分割します。

ワークフロー 解決された問題
キーワード調査 クエリの検索ボリューム、難易度、CPC、意図および傾向
ランク追跡 キーワードを保存して最新のランキングを追跡
競合他社の洞察 競合するオーガニック キーワード、ページ、トラフィック リードを見つける
バックリンク バックリンクと参照ドメインの概要を表示
サイト監査 サイトの技術的な問題とページのステータスを確認する
AI の可視化 AI 検索シナリオでのブランドまたはページの可視性を観察する

MCP は、Google Search Console のクリック、インプレッション、CTR、平均掲載順位を読み取り、特定の URL のインデックス登録、クロール、正規ステータスを確認することもできます。実際にどのデータを呼び出せるかは、現在のバージョン、接続されているデータ ソース、およびアカウントの権限によって異なります。

セルフホスティングの前にコストを理解する

OpenSEO 自体は MIT ライセンスを使用していますが、SEO データの取得にはサードパーティの DataForSEO に依存しています。セルフホストの場合、通話料金はユーザーによって直接 DataForSEO に支払われます。

公式ドキュメントには、新しい DataForSEO アカウントは少量のテスト クォータを取得でき、最低リチャージ額があると記載されています。これらの価格ポリシーは変更される可能性があるため、登録する前に現在の DataForSEO 請求ページを確認する必要があります。運用 API 認証情報を Git にコミットしたり、完全な Base64 文字列をログ、チケット、チャット ログに貼り付けたりしないでください。

DataForSEO によって提供される資格情報は、アカウントの電子メールと API パスワードを組み合わせた Base64 値です。フォーマットソースは次のとおりです。

1
email:password

Base64 はエンコードのみであり、暗号化ではありません。 DATAFORSEO_API_KEY を手に入れた人は、アカウント残高を流出させたり、許可されたデータにアクセスしたりする可能性があるため、パスワードのように管理する必要があります。

Docker を使用したセルフホスティング

1. プロジェクトのクローンを作成する

1
2
git clone https://github.com/every-app/open-seo.git
cd open-seo

2. 環境変数ファイルの作成

1
cp .env.example .env

.env を編集して、少なくとも DataForSEO 資格情報を含めます。

1
DATAFORSEO_API_KEY=YOUR_BASE64_CREDENTIALS

オプションの構成には次のものが含まれます。

1
2
3
PORT=3001
ALLOWED_HOST=seo.example.com
OPENSEO_TELEMETRY_DISABLED=1

PORT デフォルトは 3001 です。 ALLOWED_HOST は、リバース プロキシのホスト名を許可するために使用されます。匿名のテレメトリを送信したくない場合は、OPENSEO_TELEMETRY_DISABLED=1 を設定するか、DO_NOT_TRACK=1 を使用できます。

3. 開始と確認

1
2
3
docker compose up -d
docker compose ps
docker compose logs -f open-seo

実際に Compose によって読み取られる設定を確認します。

1
docker compose config

ここでの出力には機密の環境変数が含まれている可能性があるため、公開問題や CI ログに直接コピーしないでください。チェックが完了したら、http://localhost:3001 を開きます。

4. 構成を変更した後、コンテナを再構築します。

.env を変更して実行します。

1
docker compose up -d --force-recreate open-seo

通常の再起動を実行するだけでは、必ずしもすべての環境変数が再適用されるわけではありません。再構築を強制すると、古い構成の残存物を簡単に削除できます。

Docker モードではパブリック ネットワークを直接公開できないのはなぜですか?

公式 Compose は AUTH_MODE=local_noauth を使用し、ローカル管理者は admin@localhost を使用し、通常の認証は実行されません。 3001 ポートをパブリック ネットワークに直接マップすると、そのアドレスにアクセスできるユーザーがアプリケーションに侵入し、構成された DataForSEO 資格情報を使用する可能性があります。

安全なリモート アクセス ソリューションは、次の少なくとも 1 つを満たす必要があります。

  • WireGuard や Tailscale などのプライベート ネットワーク経由のアクセスのみを許可します。
  • 強力な認証を備えたリバース プロキシの背後に配置します。
  • 認証およびアクセス ポリシーを備えた安全なトンネルを使用します。
  • 公式の Cloudflare セルフホスト ソリューションに切り替えます。

リバース プロキシ ドメイン名を構成する場合は、.env に設定します。

1
ALLOWED_HOST=seo.example.com

次に、サービスを再構築します。

1
docker compose up -d --force-recreate open-seo

ALLOWED_HOST を構成するだけでは認証が置き換えられるわけではなく、ホスト名制限の一部にすぎません。

アップデート、修正バージョン、ロールバック

最新のイメージをプルして再起動します。

1
2
docker compose pull
docker compose up -d

運用環境でフローティング latest を長期間使用することはお勧めできません。検証済みの画像タグは .env に固定できます。

1
OPEN_SEO_IMAGE=ghcr.io/every-app/open-seo:v1.2.3

タグの例は、構成形式を示すためにのみ使用されます。実際には、公式リリースから既存の検証済みバージョンを選択する必要があります。更新する前に永続データをバックアップし、古いタグを記録します。問題が発生した場合は、古いイメージと互換性のあるデータ バージョンを復元します。

コンテナを停止します。

1
docker compose down

次のコマンドはボリュームをまとめて削除します。バックアップなしで実行しないでください。

1
docker compose down -v

匿名テレメトリーをオフにする

公式ドキュメントには、OpenSEO がコア使用状況イベントを送信し、ランダムなインストール ID でカウントを集計すると記載されています。ドキュメントには、URL、キーワード、プロンプト、電子メール アドレス、または IP ベースの推定位置は収集されず、アイドル状態のインスタンスはデータを送信しないと記載されています。

オフにするには、.env で設定します。

1
OPENSEO_TELEMETRY_DISABLED=1

次に、コンテナを再構築します。

1
docker compose up -d --force-recreate open-seo

厳格なコンプライアンス要件がある環境の場合でも、概要の説明だけに頼るのではなく、コードの現在のバージョン、ネットワーク出口、およびプライバシーに関する声明を自分で確認する必要があります。

Cloudflare を使用した自己ホスト型

デバイスやチーム全体でパブリック ネットワークからアクセスする必要がある場合、OpenSEO は Cloudflare 無料プランを使用した Cloudflare 導入パスも提供します。公式のプロセスは大まかに次のとおりです。

  1. ウェアハウスが提供するDeploy to Cloudflareポータルを通じてワーカーを作成します。
  2. GitHub または GitLab に接続します。
  3. ワーカードメインとルートでCloudflareアクセスを有効にします。
  4. [変数とシークレット] に認証と DataForSEO 構成を追加します。
  5. Worker URL を開いて、OpenSEO ページでログインを確認します。

構成する必要があるシークレットには次のものがあります。

1
2
3
POLICY_AUD
TEAM_DOMAIN
DATAFORSEO_API_KEY

POLICY_AUDTEAM_DOMAIN は Cloudflare Access 設定から取得されます。これらをリポジトリの通常の変数ファイルに書き込まないでください。

DataForSEO の応答は、dataforseo-cache/ プレフィックスの下で R2 にキャッシュされます。公式の推奨事項は、期限切れのキャッシュを自動的にクリアするライフサイクル ルールを設定することです。

1
npx wrangler r2 bucket lifecycle add open-seo dataforseo-cache-expiry dataforseo-cache/ --expire-days 7

デプロイ中に R2 バケット名が変更された場合は、コマンド内の open-seo を実際の名前に置き換える必要があります。ライフサイクル ルールが構成されていない場合、キャッシュされたオブジェクトは蓄積され続け、ストレージ コストが増加します。

OpenSEO MCP をクロード コードに接続する

公式ホスティング MCP アドレスは次のとおりです。

1
https://app.openseo.so/mcp

クロードコードにユーザーレベルの MCP を追加します。

1
claude mcp add --transport http --scope user openseo https://app.openseo.so/mcp

初めて接続すると、OpenSEO のログインと認証プロセスが開始されます。現在のリポジトリのみを使用したい場合は、クロード コードの現在のバージョンに従ってローカル スコープを使用できます。

OpenSEO MCP を Codex に接続する

Codex CLI は以下を使用します。

1
codex mcp add openseo --url https://app.openseo.so/mcp

次に、プロンプトに従ってログイン認証を完了します。 Codex Desktop ユーザーは、[設定]、[統合]、[MCP] に移動し、[カスタム サービスの追加] を選択して、同じ URL を貼り付けることができます。

接続が成功したら、まずエージェントに OpenSEO プロジェクトをリストさせてプロジェクト ID を取得させ、次にキーワード調査またはランキング分析を実行します。最初に単に「SEO をやってください」と言うのではなく、Web サイト、市場、言語、目標、出力範囲を含めた方が効果的なリクエストとなります。

たとえば:

1
2
3
列出我的 OpenSEO 项目,选择 example.com。
找出近 28 天展示量高、CTR 低且平均排名 4-15 的查询,
只返回对应页面、查询词和一个优先级理由,不要直接修改页面。

MCP とエージェント スキルの違い

MCP は、OpenSEO データのクエリと書き込みを行うためのツールをエージェントに提供します。エージェント スキルでは、これらのツールを組み合わせてジョブを完了する方法を指定します。前者は「何にアクセスできるか」を解決し、後者は「どのようなプロセスを踏むべきか」を解決します。

公式にリストされている MCP 機能は次のとおりです。

  • キーワードの検索ボリューム、難易度、CPC、および意図をクエリします。
  • リアルタイムの Google オーガニック検索結果を取得します。
  • ドメイン名またはページのランキングキーワードを分析します。
  • キーワードセット全体でSERPの競合他社を比較します。
  • バックリンクと参照ドメイン プロファイルをクエリします。
  • Search Console のパフォーマンスと URL インデックスのステータスを読み取ります。

AI エージェントを承認する場合、アカウントとプロジェクトの範囲を制限する必要があります。エージェントに保存されたキーワードの書き込みやアイテム データの変更を依頼する前に、読み取り専用クエリで選択したアイテムが正しいことを確認してください。

よくある質問

ページは開くことができますが、SEO データのクエリは失敗します。

まず、DATAFORSEO_API_KEY が DataForSEO によって提供される完全な Base64 認証情報であるかどうか、およびアカウントに残高があるかどうかを確認してから、次のコマンドを使用して Compose が環境変数を読み取ったことを確認します。

1
docker compose config

トラブルシューティングのスクリーンショットで認証情報を公開しないでください。 .env を変更した後、open-seo コンテナーの再構築を強制します。

リバース プロキシの後、ホストが許可されていないことを示すメッセージが表示されます。

.envALLOWED_HOST を、パスを含めずに実際のパブリック ホスト名に設定し、コンテナーを再構築します。同時に、プロキシ層で認証を構成する必要があります。

MCP が接続できません

アドレスが正確に次のとおりであることを確認します。

1
https://app.openseo.so/mcp

認証に失敗した場合は、まず OpenSEO MCP をクライアントから削除し、再度追加してログインを完了します。エージェントがアイテムを見つけられない場合、エージェントは最初にアイテム リストを呼び出し、返されたアイテム ID を後続のリクエストで使用します。

セルフホスティングは完全に無料ですか?

アプリのコードは独自に実行されますが、SEO データは DataForSEO によって提供され、料金を支払います。 Cloudflare、サーバー、ドメイン名、バックアップ、ネットワーキングに追加費用がかかる場合もあります。

OpenSEO は誰に適していますか?

OpenSEO は、用途に応じて SEO データを購入したい、キーワードやランキングなどの一元化されたワークフローが必要な、AI エージェントが SEO データを直接使用したいと考えている個々のウェブマスターや小規模チームに適しています。 Docker モードはローカル エクスペリエンスに適しており、Cloudflare プランはマルチデバイスおよびチーム アクセスに適しています。

大規模な履歴データベース、成熟したエンタープライズ権限、完全な監査、およびすぐに使える多数のレポートが必要な場合は、まず OpenSEO のデータ範囲、更新頻度、総コストを実際のプロジェクトを使用した商用プラットフォームと比較する必要があり、「オープンソースの代替」という位置付けに基づいて移行するだけではありません。

概要

OpenSEO は、キーワード調査、ランキング、競合製品、リンク、サイト監査、Search Console データをオープンソース インターフェイスに組み込み、Codex や Claude などのエージェントが MCP を通じて利用できるようにします。個人的な経験は Docker から始めることができますが、ローカル モードにはアプリケーション認証がないことを覚えておく必要があります。チームまたはパブリック ネットワークの展開では、Cloudflare Access または自己構築された強力な認証境界を使用する必要があります。セルフホスティングではアプリケーションとプロセスを制御できますが、DataForSEO の通話コストは別途発生します。

プロジェクトアドレス: every-app/open-seo

公式ドキュメント: openseo.so/docs