site-content-catalog について
site-content-catalog は、サイトマップやフィード、ブログページからウェブサイトのコンテンツを一覧化するスキルです。ページ分類や公開傾向をまとめ、選択したページの詳細分析も行えます。
主な機能
- 01サイトマップ、フィード、ブログからページを検出
- 02コンテンツ種別とトピックで分類
- 03公開頻度と傾向を集計
- 04選択ページの詳細分析に対応
- 05JSON と Markdown の概要を出力
活用シーン
- 01ウェブサイトの全コンテンツを一覧化
- 02コンテンツ種別ごとの件数を比較
- 03過去1年間の公開ペースを確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ gooseworks-ai/ goose-skills --skill site-content-catalogインストール後、Claude Code で/site-content-catalogを入力して読み込まれたか確認します。
同梱ファイルscripts/catalog_content.pyskill.meta.json
詳細
サイトコンテンツカタログ
Web サイトのサイトマップとブログをクロールし、完全なコンテンツインベントリを作成します。URL、タイトル、日付、コンテンツタイプ、トピッククラスターとともに、すべてのページをカタログ化します。コンテンツをカテゴリー別にグループ化し、公開パターンを特定します。必要に応じて、主要ページを詳細に分析することもできます。
クイックスタート
# Basic content inventory
python3 scripts/catalog_content.py --domain "example.com"
# With deep analysis of top 20 pages
python3 scripts/catalog_content.py --domain "example.com" --deep-analyze 20
# Output to specific file
python3 scripts/catalog_content.py --domain "example.com" --output content-inventory.json
入力
| パラメーター | 必須 | デフォルト | 説明 |
|---|---|---|---|
| domain | はい | — | カタログ化するドメイン(例:「example.com」) |
| deep-analyze | いいえ | 0 | コンテンツ分析のために詳細を読み込む上位ページの数 |
| output | いいえ | stdout | JSON 出力の保存先パス |
| include-non-blog | いいえ | true | ランディングページやドキュメントなどもカタログ化します(ブログだけではありません) |
コスト
- サイトマップ/RSS のクロール: 無料(直接 HTTP リクエスト)
- Apify サイトマップ抽出ツール(フォールバック): サイトあたり約 $0.50
- 詳細分析: 無料(個々のページで WebFetch を使用)
処理
フェーズ 1:すべてのページを検出
スクリプトは、サイト上のすべてのページを見つけるため、以下の方法を順番に試します。
A) Sitemap.xml
https://[domain]/sitemap.xmlを取得します- サイトマップインデックスの場合は、すべての子サイトマップを再帰的に取得します
- よくある別の場所:
/sitemap_index.xml、/sitemap-index.xml、/wp-sitemap.xml robots.txtのSitemap:ディレクティブを確認します
B) RSS/Atom フィード
/feed、/rss、/atom.xml、/blog/feedなどを確認します- タイトル、日付、URL とともに投稿を抽出します
- RSS で見つかるのは通常、最近のコンテンツ(直近 10〜50 件)のみです
C) ブログインデックスのクロール
/blog、/resources、/insights、/news、/articlesを取得します- ページからリンクを抽出します
- ページネーションがあればたどります(
/blog/page/2、?page=2など)
D) サイト内検索(フォールバック)
- WebSearch:
site:[domain]でインデックス済みページの総数を推定します - WebSearch:
site:[domain]/blogでブログコンテンツを見つけます - WebSearch:
site:[domain] intitle:でページタイトルのパターンを特定します
E) Apify Sitemap Extractor(JS を多用するサイト向けのフォールバック)
- Actor:
onescales/sitemap-url-extractor - sitemap.xml が見つからず、サイトが JS でレンダリングされる場合に使用します
フェーズ 2:各ページを分類
検出した各 URL を、以下の基準で分類します。
コンテンツタイプ
URL のパターンとページタイトルに基づいて分類します。
| タイプ | URL のパターン | 例 |
|---|---|---|
blog-post | /blog/、/posts/、/articles/ | ハウツーガイド、意見記事 |
case-study | /case-study/、/customers/、/success-stories/ | 顧客事例 |
comparison | /vs/、/compare/、/alternative/ | X 対 Y のページ |
landing-page | /solutions/、/use-cases/、/for-/ | 製品マーケティングページ |
docs | /docs/、/help/、/documentation/、/api/ | 技術ドキュメント |
changelog | /changelog/、/releases/、/whats-new/ | 製品の更新情報 |
pricing | /pricing/ | 料金ページ |
about | /about/、/team/、/careers/ | 企業ページ |
legal | /privacy/、/terms/、/security/ | 法務/コンプライアンス |
resource | /resources/、/guides/、/ebooks/、/webinars/ | アクセス制限付き/ダウンロード可能なコンテンツ |
glossary | /glossary/、/dictionary/、/terms/ | SEO 用語集ページ |
integration | /integrations/、/apps/、/marketplace/ | 連携ページ |
other | — | その他すべて |
トピッククラスター
URL スラッグとタイトルからトピックの手がかりを抽出してグループ化します。
- URL パスの各セグメントからキーワードを抽出します
- 類似したキーワードをクラスターにまとめます(例:「aws-cost」、「cloud-spending」、「finops」→「クラウドコスト管理」)
- シンプルなキーワードの共起を使ってクラスタリングします
フェーズ 3:公開パターンを分析
日付のあるコンテンツ(主にブログ投稿)を基に、以下を分析します。
- コンテンツ総数: タイプ別
- 公開頻度: 過去 12 か月の月別投稿数
- 傾向: 公開量が増加、減少、または安定しているか
- 最新度: 最も新しい公開日
- 著者の多様性: ユニークな著者数(RSS から抽出できる場合)
フェーズ 4:詳細分析(任意)
--deep-analyze N が指定されている場合、上位 N 件のページ(ブログ記事を優先)を取得して、以下を抽出します:
- 単語数(概算)
- ターゲットキーワード(タイトル、H1、URL から推定)
- ファネル段階: TOFU(認知)、MOFU(検討)、BOFU(決定)
- コンテンツの深さ: 浅い(500 語未満)、中程度(500~1500 語)、深い(1500 語以上)
- 画像/動画の有無: ブール値
- CTA の有無: ブール値(一般的な CTA パターンを検出)
- 内部リンク数
フェーズ 5:出力
JSON 出力(デフォルト)
{
"domain": "example.com",
"crawl_date": "2026-02-25",
"total_pages": 347,
"discovery_methods": ["sitemap.xml", "rss"],
"pages": [
{
"url": "https://example.com/blog/reduce-aws-costs",
"title": "How to Reduce Your AWS Bill by 40%",
"date": "2025-11-15",
"type": "blog-post",
"topic_cluster": "Cloud Cost Optimization",
"deep_analysis": {
"word_count": 2100,
"target_keyword": "reduce aws costs",
"funnel_stage": "TOFU",
"content_depth": "deep",
"has_images": true,
"has_cta": true
}
}
],
"summary": {
"by_type": {"blog-post": 89, "landing-page": 23, "case-study": 12, ...},
"by_topic": {"Cloud Cost Optimization": 34, "FinOps": 18, ...},
"publishing_cadence": {
"posts_per_month_avg": 4.2,
"trend": "increasing",
"most_recent": "2026-02-20"
}
}
}
Markdown サマリー(あわせて生成)
# Content Inventory: example.com
**Crawled:** 2026-02-25 | **Total pages:** 347
## Content by Type
| Type | Count | % |
|------|-------|---|
| Blog Posts | 89 | 25.6% |
| Landing Pages | 23 | 6.6% |
| ...
## Content by Topic Cluster
| Topic | Posts | Most Recent |
|-------|-------|-------------|
| Cloud Cost Optimization | 34 | 2026-02-20 |
| ...
## Publishing Cadence
- Average: 4.2 posts/month
- Trend: Increasing (3.1 → 5.4 over last 6 months)
- Most recent: 2026-02-20
## Full Catalog
| # | Date | Type | Topic | Title | URL |
|---|------|------|-------|-------|-----|
| 1 | 2026-02-20 | blog-post | Cloud Cost | How to Reduce... | https://... |
ヒント
- Sitemap.xml が最適な情報源です。 適切に保守されているサイトの多くにあります。ない場合、それ自体が SEO シグナル(マイナス)です。
- RSS で確認できるのは最近のコンテンツのみです。 カタログ全体が必要な場合、サイトマップは不可欠です。RSS は補足情報です。
- 詳細分析は任意ですが、有用です。 brand-voice-extractor に渡す場合や、ファネル段階のマッピングが必要な場合に使用します。
- JavaScript でレンダリングされるサイトでは、Apify フォールバックが必要になることがあります。sitemap.xml が HTML を返す、またはブログページの大部分が JavaScript で構成されている場合が該当します。
- seo-domain-analyzer と組み合わせて、コンテンツインベントリにトラフィックデータを重ね合わせ、実際に成果を上げているコンテンツを確認します。
依存関係
- Python 3.8+
requestsライブラリ(pip install requests)APIFY_API_TOKEN環境変数(Apify フォールバックモードでのみ使用)
コメント
Markdown 対応