SEOコマンドラインツールキット

seoheadコマンドで、すべてのコアツールをスクリプト、CI、ターミナル作業から使えます。ドキュメントに載せたコマンドは、CIで検証しています。

できること

スクリプトから使える

出力は標準出力のJSONなので、jq、スクリプト、CIのステップにそのままパイプできます。終了コード0はコマンドが完了したこと、1は完了できなかったことを表し、理由はJSONに入っています。入力は、フラグ、--inputで渡すJSONオブジェクト、標準入力のJSONのいずれでも指定できます。ファイルを書き出すコマンドの多くは、--outや--applyのように、パスやフラグを明示する必要があります。

  • 上限は明示します:crawl-siteは--max-urls、--max-depth、--max-urls-per-secondを受け付けます
  • 終了コード2を使うのはlog-scanだけで、実行結果の数値が互いに矛盾する場合です
  • ドキュメントに載せたコマンドは、CIでフィクスチャに対して実行しています

ツールカタログ

tool-catalogでは、各コマンドの機能に加えて、ネットワークを使うか、ファイルを書き出すか、費用が発生しうるかを検索できます。ページング前に絞り込むので、redirectのようなクエリなら短い一覧が返ります。引数の形式が必要なときは、--include-argumentsを付けます。オフラインで動作し、何も書き込みません。

  • 副作用は、offline、network、writes、paidのいずれかで表示
  • 有料のプロバイダーコマンドはオフラインで見積もりを表示し、明示的な確認が必要
  • seohead doctorは、書き込みなしでPython、ブラウザー、MCP、SQLiteの前提条件を確認

1つのハンドラー、2つの入口

公開されている機能は、どれも1つのハンドラーです。seoheadコマンドとしても、同じ名前のMCPツールとしても提供するので、crawl-siteはseo_crawl_siteになります。ターミナルで試したものが、そのままエージェントの呼び出しになります。グループ形式は別名で、scan listはscan-listと同じです。

  • seohead mcpでローカルのstdioサーバーを起動
  • sfコマンドは、Screaming Frogの監査ワークフローの入口
  • CLIは仮想環境から、macOS、Linux、Windowsで動作

3ステップで、スキャンを1件保存

  1. コマンドを選ぶ

    seohead --helpを実行するか、tool-catalogで検索します。各コマンドの役割は1つで、カタログにも1項目だけ載っています。

  2. JSONと終了コードを読む

    出力は常に標準出力のJSONです。終了コード0はコマンドが完了したこと、1は完了できなかったことを表し、理由はJSONにあります。

  3. AIエージェントにも同じコマンド

    seohead mcpでローカルのMCPサーバーが起動します。すべてのコマンドは、seo_<command>という名前のツールとしても使えます。たとえばseo_crawl_siteです。

この機能のチェック項目

チェック項目意味重要度根拠
BROKEN_PAGE_4XXページが4xxのレスポンスを返す。Criticalcrawl-siteが返すURLごとのレスポンスコード
SERVER_ERROR_5XXページが5xxのレスポンスを返す。Criticalcrawl-siteが返すURLごとのレスポンスコード
BLOCKED_BY_ROBOTSrobots.txtがURLをブロックしている。Importantcrawl-siteで、そのURLに一致したrobots.txtのルール
SITEMAP_URL_4XX_5XXサイトマップに、4xxまたは5xxを返すURLが載っている。Criticalsitemap-crawlで取得したサイトマップのエントリ
SITEMAP_DESYNCサイトマップのURL群と、クロールしたURL群が一致しない。Importantsitemap-crawlのサイトマップと、crawl-siteの結果との比較
URL_NOT_IN_SITEMAPインデックス可能なページがサイトマップにない。Tipクロール結果と、サイトマップのURL群との比較

コマンド1つで実行

bash
seohead tool-catalog --query redirect --limit 5

先にインストールします: インストールガイド。どのコマンドも、AIエージェント向けのMCPツールとして実行できます。

必要なもの

  • Python 3.10以降と、ツールキットをインストールした仮想環境
  • コマンドに応じて、URL、保存済みのスキャンファイル、またはプロジェクトフォルダ
  • 任意:MCP、レポート、PDF、レンダリング用の追加パッケージ
  • 有料またはアカウント制のコマンドに限り、プロバイダーのキー

制限事項

  • networkと表示されたコマンドはリクエストを送ります。どれが該当するかは、tool-catalogで確認できます
  • 出力は機械での処理が前提です。ターミナルオブザーバーを除き、対話式のプロンプトはありません
  • ネイティブのクロールは、Screaming Frogと完全に同等ではありません。一部のチェックはスキップされますが、誤って問題なしと表示されることはありません
  • 有料のソースやアカウント制のソースには、ご自身のキーが必要です。ツールキットはキーを提供しません

よくある質問

CLIにはアカウントやホスト型サービスが必要ですか?
いいえ。CLIは手元のマシンで動作します。tool-catalogや保存済みスキャンのコマンドのようなオフラインのコマンドは、ローカルのデータだけを読みます。networkと表示されたコマンドは、サイトやデータプロバイダーにリクエストを送ります。
コマンドに費用がかかるかどうかは、どう分かりますか?
tool-catalogを実行すると、各項目にネットワークの使用、ファイルの書き込み、費用の有無が表示されます。有料のセマンティクス系コマンドは明示的な確認が必要で、MCP版はconfirm_paid=trueがないと実行を拒否します。
クロールでサイトが変更されることはありますか?
いいえ。クロールが送るのは読み取り専用のリクエストです。ファイルを書き出すのは、--scan-outや--out-dirのように指定したパスだけです。既定では、クロールのスキャンは./scans/に保存されます。
終了コードが0以外のときは、何を意味しますか?
終了コード1は、コマンドが完了できなかったことを表します。JSONではokがfalseになり、プロセスが異常終了した場合は、標準エラー出力にエラー行が出ます。終了コード2を使うのはlog-scanだけです。
多くのフラグを使わずに、複雑な入力を渡せますか?
はい。多くのコマンドは、ハンドラーの引数に対応するJSONオブジェクトを--inputで受け取れます。標準入力からJSONを読むコマンドもあります。
対応しているOSは何ですか?
macOS、Linux、Windowsが、同じPythonパッケージを使います。Windowsでは、仮想環境内のインタープリターを明示的に指定してください。CIでは、ロック、プロジェクト、スキャン、実際のMCPセッションについて、Windowsのチェックも実行しています。