本文へ移動
cccskills
無料GitHub で公開

site-content-catalog

Crawl a website's sitemap and blog index to build a complete content inventory. Lists every page with URL, title, publish date, content type, and topic cluster. Groups content by category and topic. Optionally deep-reads top N pages for quality analysis and funnel stage tagging. Use before SEO audits, content gap analysis, or brand voice extraction.

インストール方法を見る

含まれるファイル(3)

  • SKILL.md7.4 KB
  • scripts/catalog_content.py24.8 KB
  • skill.meta.json273 B

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Site Content Catalog

Crawl a website's sitemap and blog to build a complete content inventory — every page cataloged with URL, title, date, content type, and topic cluster. Groups content by category, identifies publishing patterns, and optionally deep-analyzes top pages.

Quick Start

# 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

Inputs

ParameterRequiredDefaultDescription
domainYes—Domain to catalog (e.g., "example.com")
deep-analyzeNo0Number of top pages to deep-read for content analysis
outputNostdoutPath to save JSON output
include-non-blogNotrueAlso catalog landing pages, docs, etc. (not just blog)

Cost

  • Sitemap/RSS crawling: Free (direct HTTP requests)
  • Apify sitemap extractor (fallback): ~$0.50 per site
  • Deep analysis: Free (WebFetch on individual pages)

Process

Phase 1: Discover All Pages

The script attempts multiple methods to find all pages on a site, in order:

A) Sitemap.xml

  1. Fetch https://[domain]/sitemap.xml
  2. If it's a sitemap index, recursively fetch all child sitemaps
  3. Common alternate locations: /sitemap_index.xml, /sitemap-index.xml, /wp-sitemap.xml
  4. Check robots.txt for Sitemap: directives

B) RSS/Atom Feeds

  1. Check /feed, /rss, /atom.xml, /blog/feed, etc.
  2. Extract posts with titles, dates, and URLs
  3. RSS typically only surfaces recent content (last 10-50 posts)

C) Blog Index Crawl

  1. Fetch /blog, /resources, /insights, /news, /articles
  2. Extract links from the page
  3. Follow pagination if present (/blog/page/2, ?page=2, etc.)

D) Site: Search (fallback)

  1. WebSearch: site:[domain] to estimate total indexed pages
  2. WebSearch: site:[domain]/blog to find blog content
  3. WebSearch: site:[domain] intitle: to discover page title patterns

E) Apify Sitemap Extractor (fallback for JS-heavy sites)

  • Actor: onescales/sitemap-url-extractor
  • Use when sitemap.xml is missing and the site is JS-rendered

Phase 2: Classify Each Page

For each discovered URL, classify by:

Content Type

Classify based on URL patterns and page titles:

TypeURL PatternsExamples
blog-post/blog/, /posts/, /articles/How-to guides, opinion pieces
case-study/case-study/, /customers/, /success-stories/Customer stories
comparison/vs/, /compare/, /alternative/X vs Y pages
landing-page/solutions/, /use-cases/, /for-/Product marketing pages
docs/docs/, /help/, /documentation/, /api/Technical documentation
changelog/changelog/, /releases/, /whats-new/Product updates
pricing/pricing/Pricing page
about/about/, /team/, /careers/Company pages
legal/privacy/, /terms/, /security/Legal/compliance
resource/resources/, /guides/, /ebooks/, /webinars/Gated/downloadable content
glossary/glossary/, /dictionary/, /terms/SEO glossary pages
integration/integrations/, /apps/, /marketplace/Integration pages
other—Anything else

Topic Cluster

Group by extracting topic signals from URL slugs and titles:

  • Extract keywords from URL path segments
  • Group similar keywords into clusters (e.g., "aws-cost", "cloud-spending", "finops" → "Cloud Cost Management")
  • Use simple keyword co-occurrence for clustering

Phase 3: Analyze Publishing Patterns

From the dated content (primarily blog posts):

  • Total content pieces by type
  • Publishing frequency: Posts per month over last 12 months
  • Trend: Increasing, decreasing, or stable output
  • Recency: Date of most recent publish
  • Author diversity: Unique authors (if extractable from RSS)

Phase 4: Deep Analysis (Optional)

If --deep-analyze N is specified, fetch the top N pages (prioritizing blog posts) and extract:

  • Word count (approximate)
  • Target keyword (inferred from title + H1 + URL)
  • Funnel stage: TOFU (awareness), MOFU (consideration), BOFU (decision)
  • Content depth: Shallow (<500 words), Medium (500-1500), Deep (1500+)
  • Has images/video: Boolean
  • Has CTA: Boolean (detected by common CTA patterns)
  • Internal links count

Phase 5: Output

JSON Output (default)

{
  "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 Summary (also generated)

# 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://... |

Tips

  • Sitemap.xml is the best source. Most well-maintained sites have one. If missing, it's itself an SEO signal (negative).
  • RSS only shows recent content. If you need the full catalog, sitemap is essential. RSS is supplementary.
  • Deep analysis is optional but valuable. Use it when feeding into brand-voice-extractor or when you need funnel stage mapping.
  • JS-rendered sites may need the Apify fallback. Signs: sitemap.xml returns HTML, or blog page returns mostly JavaScript.
  • Combine with seo-domain-analyzer to overlay traffic data on the content inventory — see which content actually performs.

Dependencies

  • Python 3.8+
  • requests library (pip install requests)
  • APIFY_API_TOKEN env var (only for Apify fallback mode)

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

Research supported advertising promises from a specific buyer's context, current product facts, customer language and observed ads. Turn them into static, video or copy ideas; match video ideas to actual recipes and save a product-scoped angle bank for write-video-ad-script. Product-led discovery can use verified facts without reviews. Reference persistence and reach are observations, not proof of performance.

日本語の概要は準備中です。原文の説明を表示しています。

gooseworks-ai/goose-skills1,2452026年10月13日 更新

Analyze ad campaign performance data (Google, Meta, LinkedIn) to identify what's working, what's wasting budget, and specific cut/scale/test recommendations. Runs statistical analysis, funnel diagnostics, and multi-channel budget reallocation with specific dollar-amount shift recommendations and scenario modeling.

日本語の概要は準備中です。原文の説明を表示しています。

gooseworks-ai/goose-skills1,2452026年10月13日 更新

For paid lead-gen and participant-recruitment ads, replaces vanity CPA with true CAC per qualified lead by joining ad-platform data with downstream funnel events, surfaces tracking gaps, and classifies every creative into Scale / Keep / Investigate / Cut.

日本語の概要は準備中です。原文の説明を表示しています。

gooseworks-ai/goose-skills1,2452026年10月13日 更新

The intake stage of a Meta ad harness. Researches the brand first, states what it assumes, and asks only what it cannot infer and what would change money, claims or legal exposure if guessed wrong — at most four questions a turn, in plain business language. Writes the brand's stable facts (ads/brand.md), the campaign brief, and a log of what was asked vs assumed. Use it when someone wants to run Meta ads and the brand's ad facts are not yet recorded.

日本語の概要は準備中です。原文の説明を表示しています。

gooseworks-ai/goose-skills1,2452026年10月13日 更新

Analyze the message match between your ads and landing pages. Checks if the promise in the ad copy carries through to the landing page headline, body, and CTA. Flags disconnects that kill conversion rates. Works with Google, Meta, and LinkedIn ads.

日本語の概要は準備中です。原文の説明を表示しています。

gooseworks-ai/goose-skills1,2452026年10月13日 更新

Turn a brand's facts, a campaign brief and the product into a one-minute Meta ad strategy with its reasoning — goal, audience, objective and placements, budget split, how many ads and how different they must be (generate 3x so the user can choose), the test frame, the success metric, and safety rules for the user to accept. Decides what launch-meta-ad-campaign then executes, and re-reads the strategy after a deep check to show which assumption changed. Use it after intake and before any creative is generated or any campaign is built.

日本語の概要は準備中です。原文の説明を表示しています。

gooseworks-ai/goose-skills1,2452026年10月13日 更新

gooseworks-ai のスキルをすべて見る

このスキルの問題を報告する