algo-seo-crawl について
サイト監査、構造化データ収集、SEO サイトマップの構築に取り組む開発者向けのウェブクローリングガイドです。robots.txt とドメインごとのアクセス間隔を守る巡回手順を説明します。
主な機能
- 01URL フロンティアの管理
- 02robots.txt と巡回範囲の確認
- 03遅延と再試行を伴うページ取得
- 04リンク、コンテンツ、メタデータの抽出
- 05URL 正規化とクローラートラップ対策
活用シーン
- 01サイト監査用のページとリンク構造の発見
- 02ウェブサイトの構造化データの大規模収集
- 03SEO 分析向けのサイト構造の把握
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ asgard-ai-platform/ skills --skill algo-seo-crawlインストール後、Claude Code で/algo-seo-crawlを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
examples/sample_scenario.mdreferences/distributed-crawl.mdurl-normalization.md詳細
Web クローラー
概要
Web クローラーは、URL を発見し、コンテンツを取得して HTML を解析し、結果を保存することで、Web ページを体系的に巡回します。BFS または優先度に基づくフロンティア管理を使用します。パフォーマンスは I/O に依存し、通常は計算能力よりもクローリング時の配慮事項によって制限されます。
使用する場面
使用条件:
- すべてのページとそのリンク構造を発見するサイト監査ツールを構築する場合
- Web サイトから大規模に構造化データを収集する場合
- SEO 分析のためにサイトアーキテクチャをマッピングする場合
使用しない場面:
- 単一の API エンドポイントからデータを取得する場合(HTTP クライアントを直接使用してください)
- 必要な URL がすべて sitemap.xml に記載されている場合(代わりにサイトマップを解析してください)
アルゴリズム
IRON LAW: Respect robots.txt and Rate Limits
A crawler MUST:
1. Parse and obey robots.txt before crawling any path
2. Enforce crawl-delay (default 1s if unspecified)
3. Identify itself with a descriptive User-Agent
Ignoring these is unethical and will get your IP blocked.
フェーズ 1:入力の検証
シード URL を解析し、各ドメインの robots.txt を取得して解析し、クローリング範囲(同一ドメイン、サブドメイン、またはクロスドメイン)を設定します。 ゲート: 有効なシード URL、robots.txt のルールを読み込み済み、範囲を定義済み。
フェーズ 2:コアアルゴリズム
- シード URL で URL フロンティアを初期化します(優先度キューまたは FIFO)
- URL を取り出し、未訪問であること、robots.txt で許可されていること、範囲内であることを確認します
- タイムアウトと再試行のロジックを使用してページを取得し、crawl-delay を遵守します
- HTML を解析します:リンクを抽出(正規化、重複排除)し、コンテンツとメタデータを抽出します
- 発見した URL をキューに追加し、解析済みデータを保存します
- フロンティアが空になるか、上限に達するまで繰り返します
フェーズ 3:検証
クローリングログに robots.txt 違反がないこと、保存されたページに重複がないこと、発見した URL がすべて処理されていることを確認します。 ゲート: 範囲内でクローリングが完了し、クローリング時の配慮が維持されていること。
フェーズ 4:出力
ページ、リンクグラフ、抽出したメタデータを含むサイトマップを返します。
出力形式
{
"pages": [{"url": "...", "status": 200, "title": "...", "links_out": 15, "depth": 2}],
"metadata": {"pages_crawled": 500, "errors": 12, "duration_seconds": 300, "domain": "example.com"}
}
例
入出力例
入力: シード:「https://example.com」、max_depth: 2、max_pages: 100 期待される結果: 深度 0 にホームページ、深度 1~2 にリンク先ページを含み、robots.txt を遵守したクローリングツリー
エッジケース
| 入力 | 期待される結果 | 理由 |
|---|---|---|
| robots.txt で / が禁止されている | ページを 0 件クローリング | 禁止ルール全体を遵守する必要があるため |
| リダイレクトループ | 5 回のリダイレクト後に停止 | 無限ループを防止するため |
| ソフト 404(エラーページを含む 200) | ソフト 404 としてフラグ付け | ステータスコードだけでは不十分なため |
注意点
- URL の正規化:
http://Example.COM/path/とhttp://example.com/pathは同じ URL です。ホストを小文字にし、デフォルトポートを削除し、末尾のスラッシュを削除し、クエリパラメーターを並べ替えて正規化します。 - JavaScript で描画されるコンテンツ:基本的な HTTP 取得では JavaScript で描画されるコンテンツを取得できません。SPA ではヘッドレスブラウザー(Playwright/Puppeteer)を使用してください。
- トラップの検出:カレンダーページ、URL 内のセッション ID、無限ページネーションはクローラートラップを生み出します。最大深度と URL パターンの上限を設定してください。
- 過剰なリクエスト:ドメインごとのレート制限なしで並列取得すると、小規模なサーバーに過剰な負荷をかけます。ドメインごとのセマフォを使用してください。
- 文字エンコーディング:すべてのページが UTF-8 とは限りません。HTTP ヘッダーと meta タグからエンコーディングを検出し、検出できない場合は文字セット検出ライブラリを使用してください。
参考資料
- URL の正規化規則(RFC 3986)については、
references/url-normalization.mdを参照してください - 分散クローリングアーキテクチャについては、
references/distributed-crawl.mdを参照してください