New: Earn 20% as an AgentAlley affiliate. Share your link and earn on every sale you refer. Join now New: Earn 20% as an affiliate. Join now

Crawl a website's sitemap and blog index to build a complete

Site content catalog

by gooseworks-ai · MIT license · ★ 1,220 on GitHub · updated Sep 21

Site content catalog cover

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.

---
name: site-content-catalog
description: >
  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.
tags: [content, seo]
---

# 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

```bash

Overview

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.

Manual install (npx, ZIP)
Claude Codenpx skills add gooseworks-ai/goose-skills --skill site-content-catalog -g -a claude-code
Claude Code (manual)mkdir -p ~/.claude/skills && curl -sL https://codeload.github.com/gooseworks-ai/goose-skills/tar.gz/615c685f34f8 \ | tar -xz -C ~/.claude/skills --strip-components=4 goose-skills-615c685f34f8/skills/seo/capabilities/site-content-catalog
Windows (PowerShell)New-Item -ItemType Directory -Force "$HOME\.claude\skills" | Out-Null; Invoke-WebRequest "https://m.agentalley.io/zip/0fb28d82a32e510414e5/site-content-catalog.zip" -OutFile "$env:TEMP\site-content-catalog.zip"; Expand-Archive "$env:TEMP\site-content-catalog.zip" -DestinationPath "$HOME\.claude\skills" -Force
Claude.ai / desktopDownload the ZIP and upload it under Settings → Capabilities → Skills.
Codex, Cursor, other agentsPoint them at SKILL.md. The other files are plain text.

Connects with Agent Alley MCP · agentalley.io/mcp

Files included

  • SKILL.md7.4 KB
  • skill.meta.json273 B
  • scripts/1 file · 24.8 KB
Read the files here
gooseworks-ai/615c6853 files
SKILL.md
Show the full text204 lines

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

Parameter Required Default Description
domain Yes — Domain to catalog (e.g., "example.com")
deep-analyze No 0 Number of top pages to deep-read for content analysis
output No stdout Path to save JSON output
include-non-blog No true Also 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:

Type URL Patterns Examples
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)
1---
2name: site-content-catalog
3description: >
4 Crawl a website's sitemap and blog index to build a complete content inventory.
5 Lists every page with URL, title, publish date, content type, and topic cluster.
6 Groups content by category and topic. Optionally deep-reads top N pages for
7 quality analysis and funnel stage tagging. Use before SEO audits, content gap
8 analysis, or brand voice extraction.
9tags: [content, seo]
10---
11 
12# Site Content Catalog
13 
14Crawl 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.
15 
16## Quick Start
17 
18```bash
19# Basic content inventory
20python3 scripts/catalog_content.py --domain "example.com"
21 
22# With deep analysis of top 20 pages
23python3 scripts/catalog_content.py --domain "example.com" --deep-analyze 20
24 
25# Output to specific file
26python3 scripts/catalog_content.py --domain "example.com" --output content-inventory.json
27```
28 
29## Inputs
30 
31| Parameter | Required | Default | Description |
32|-----------|----------|---------|-------------|
33| domain | Yes | — | Domain to catalog (e.g., "example.com") |
34| deep-analyze | No | 0 | Number of top pages to deep-read for content analysis |
35| output | No | stdout | Path to save JSON output |
36| include-non-blog | No | true | Also catalog landing pages, docs, etc. (not just blog) |
37 
38## Cost
39 
40- **Sitemap/RSS crawling:** Free (direct HTTP requests)
41- **Apify sitemap extractor (fallback):** ~$0.50 per site
42- **Deep analysis:** Free (WebFetch on individual pages)
43 
44## Process
45 
46### Phase 1: Discover All Pages
47 
48The script attempts multiple methods to find all pages on a site, in order:
49 
50#### A) Sitemap.xml
511. Fetch `https://[domain]/sitemap.xml`
522. If it's a sitemap index, recursively fetch all child sitemaps
533. Common alternate locations: `/sitemap_index.xml`, `/sitemap-index.xml`, `/wp-sitemap.xml`
544. Check `robots.txt` for `Sitemap:` directives
55 
56#### B) RSS/Atom Feeds
571. Check `/feed`, `/rss`, `/atom.xml`, `/blog/feed`, etc.
582. Extract posts with titles, dates, and URLs
593. RSS typically only surfaces recent content (last 10-50 posts)
60 
61#### C) Blog Index Crawl
621. Fetch `/blog`, `/resources`, `/insights`, `/news`, `/articles`
632. Extract links from the page
643. Follow pagination if present (`/blog/page/2`, `?page=2`, etc.)
65 
66#### D) Site: Search (fallback)
671. WebSearch: `site:[domain]` to estimate total indexed pages
682. WebSearch: `site:[domain]/blog` to find blog content
693. WebSearch: `site:[domain] intitle:` to discover page title patterns
70 
71#### E) Apify Sitemap Extractor (fallback for JS-heavy sites)
72- Actor: `onescales/sitemap-url-extractor`
73- Use when sitemap.xml is missing and the site is JS-rendered
74 
75### Phase 2: Classify Each Page
76 
77For each discovered URL, classify by:
78 
79#### Content Type
80Classify based on URL patterns and page titles:
81 
82| Type | URL Patterns | Examples |
83|------|-------------|----------|
84| `blog-post` | `/blog/`, `/posts/`, `/articles/` | How-to guides, opinion pieces |
85| `case-study` | `/case-study/`, `/customers/`, `/success-stories/` | Customer stories |
86| `comparison` | `/vs/`, `/compare/`, `/alternative/` | X vs Y pages |
87| `landing-page` | `/solutions/`, `/use-cases/`, `/for-/` | Product marketing pages |
88| `docs` | `/docs/`, `/help/`, `/documentation/`, `/api/` | Technical documentation |
89| `changelog` | `/changelog/`, `/releases/`, `/whats-new/` | Product updates |
90| `pricing` | `/pricing/` | Pricing page |
91| `about` | `/about/`, `/team/`, `/careers/` | Company pages |
92| `legal` | `/privacy/`, `/terms/`, `/security/` | Legal/compliance |
93| `resource` | `/resources/`, `/guides/`, `/ebooks/`, `/webinars/` | Gated/downloadable content |
94| `glossary` | `/glossary/`, `/dictionary/`, `/terms/` | SEO glossary pages |
95| `integration` | `/integrations/`, `/apps/`, `/marketplace/` | Integration pages |
96| `other` | — | Anything else |
97 
98#### Topic Cluster
99Group by extracting topic signals from URL slugs and titles:
100- Extract keywords from URL path segments
101- Group similar keywords into clusters (e.g., "aws-cost", "cloud-spending", "finops" → "Cloud Cost Management")
102- Use simple keyword co-occurrence for clustering
103 
104### Phase 3: Analyze Publishing Patterns
105 
106From the dated content (primarily blog posts):
107- **Total content pieces** by type
108- **Publishing frequency:** Posts per month over last 12 months
109- **Trend:** Increasing, decreasing, or stable output
110- **Recency:** Date of most recent publish
111- **Author diversity:** Unique authors (if extractable from RSS)
112 
113### Phase 4: Deep Analysis (Optional)
114 
115If `--deep-analyze N` is specified, fetch the top N pages (prioritizing blog posts) and extract:
116- **Word count** (approximate)
117- **Target keyword** (inferred from title + H1 + URL)
118- **Funnel stage:** TOFU (awareness), MOFU (consideration), BOFU (decision)
119- **Content depth:** Shallow (<500 words), Medium (500-1500), Deep (1500+)
120- **Has images/video:** Boolean
121- **Has CTA:** Boolean (detected by common CTA patterns)
122- **Internal links count**
123 
124### Phase 5: Output
125 
126#### JSON Output (default)
127```json
128{
129 "domain": "example.com",
130 "crawl_date": "2026-02-25",
131 "total_pages": 347,
132 "discovery_methods": ["sitemap.xml", "rss"],
133 "pages": [
134 {
135 "url": "https://example.com/blog/reduce-aws-costs",
136 "title": "How to Reduce Your AWS Bill by 40%",
137 "date": "2025-11-15",
138 "type": "blog-post",
139 "topic_cluster": "Cloud Cost Optimization",
140 "deep_analysis": {
141 "word_count": 2100,
142 "target_keyword": "reduce aws costs",
143 "funnel_stage": "TOFU",
144 "content_depth": "deep",
145 "has_images": true,
146 "has_cta": true
147 }
148 }
149 ],
150 "summary": {
151 "by_type": {"blog-post": 89, "landing-page": 23, "case-study": 12, ...},
152 "by_topic": {"Cloud Cost Optimization": 34, "FinOps": 18, ...},
153 "publishing_cadence": {
154 "posts_per_month_avg": 4.2,
155 "trend": "increasing",
156 "most_recent": "2026-02-20"
157 }
158 }
159}
160```
161 
162#### Markdown Summary (also generated)
163```markdown
164# Content Inventory: example.com
165**Crawled:** 2026-02-25 | **Total pages:** 347
166 
167## Content by Type
168| Type | Count | % |
169|------|-------|---|
170| Blog Posts | 89 | 25.6% |
171| Landing Pages | 23 | 6.6% |
172| ...
173 
174## Content by Topic Cluster
175| Topic | Posts | Most Recent |
176|-------|-------|-------------|
177| Cloud Cost Optimization | 34 | 2026-02-20 |
178| ...
179 
180## Publishing Cadence
181- Average: 4.2 posts/month
182- Trend: Increasing (3.1 → 5.4 over last 6 months)
183- Most recent: 2026-02-20
184 
185## Full Catalog
186| # | Date | Type | Topic | Title | URL |
187|---|------|------|-------|-------|-----|
188| 1 | 2026-02-20 | blog-post | Cloud Cost | How to Reduce... | https://... |
189```
190 
191## Tips
192 
193- **Sitemap.xml is the best source.** Most well-maintained sites have one. If missing, it's itself an SEO signal (negative).
194- **RSS only shows recent content.** If you need the full catalog, sitemap is essential. RSS is supplementary.
195- **Deep analysis is optional but valuable.** Use it when feeding into brand-voice-extractor or when you need funnel stage mapping.
196- **JS-rendered sites** may need the Apify fallback. Signs: sitemap.xml returns HTML, or blog page returns mostly JavaScript.
197- **Combine with seo-domain-analyzer** to overlay traffic data on the content inventory — see which content actually performs.
198 
199## Dependencies
200 
201- Python 3.8+
202- `requests` library (`pip install requests`)
203- `APIFY_API_TOKEN` env var (only for Apify fallback mode)
204 
View all files on GitHub →

Details

Updated
Sep 21, 2026
License
MIT
Stars on the repo
★ 1,220
Checked
Source
gooseworks-ai/goose-skills ↗
Creator
gooseworks-ai · 206 listings
View creator

Made with site-content-catalog

Site content catalog — CleanShot 2026-07-13 at 20 16 54@2x (from the gooseworks-ai/goose-skills README)
Site content catalog — CleanShot 2026-07-13 at 20 16 54@2x (from the gooseworks-ai/goose-skills README)

by gooseworks-ai

Similar skills

See all →
SkillBuild and troubleshoot Cloudflare Basin analytics workflowscloudflare/skills · by cloudflareBuild and troubleshoot Cloudflare Basin analytics workflows with Basin Pipelines, Basin Catalog, and Basin SQL. Use for streaming data into R2 Iceberg tables, managing catalogs, or querying those tables; also use for requests using the former Data Platform, Pipelines, R2 Data Catalog, or R2 SQL names.★ 3k GitHub starsSkillBuild anything on ShopifyShopify/Shopify-AI-Toolkit · by ShopifyBuild anything on Shopify. One skill covering every Shopify developer surface: Use Shopify CLI, Admin API, ShopifyQL, Storefront GraphQL API, Partner API, Customer Account API, Payments Apps API, Shopify Functions, Polaris App Home, Polaris Admin Extensions, Polaris Checkout Extensions, Polaris Customer Account Extensions, POS UI, Hydrogen, Liquid, Custom Data, Shopify App Pricing, App Store Review, Developer Onboarding, Merchant Onboarding. Use it for any Shopify API, extension, theme, storefront, function, or CLI task — writing or explaining code, looking up operations, fields, components and valid values, validating generated code, and choosing which surface a request belongs to. Also use it when someone asks to make, build, open, or set up a store or shop that sells something, and when a prompt mentions or asks for any of: metafields or metaobjects, make me a store that sells pet supplies, mock.shop reference stores, build a storefront without an account — even without saying Shopify.★ 589 GitHub starsSkillBuild and customize Shopify storesTerminalSkills/skills · by TerminalSkillsBuild and customize Shopify stores — themes with Liquid, Storefront API, custom apps, and headless commerce with Hydrogen. Use when someone asks to build a Shopify store", "Shopify theme", "Liquid templates", "Shopify API", Shopify app", "headless Shopify", "Hydrogen storefront", "customize Shopify", Shopify product management", or "e-commerce with Shopify". Covers Liquid templating, theme development, Storefront/Admin APIs, custom apps, checkout extensions, and Hydrogen (React-based headless).★ 157 GitHub starsSkillBuilding or customizing a Shopify store across its threeShopify themes, apps & checkoutericrisco/rsc-harness · by ericriscoUse when building or customizing a Shopify store across its three code surfaces — themes (Liquid, Online Store 2.0 sections, blocks and JSON templates), apps (Remix with the versioned GraphQL Admin API and its query-cost model), and checkout (UI extensions, Functions, Web Pixels), plus the CLI flow and checkout-extensibility migration. NOT WooCommerce or PHP stores (that is `wordpress`), NOT the React layer of a headless storefront (that is `nextjs`), NOT non-Shopify payment integrations (that is `stripe`).★ 108 GitHub starsSkillGenerate, audit, optimizeSeerxo etsy SEOsemihbugrasezer/seerxo · by semihbugrasezerGenerate, audit, optimize, and research keywords for Etsy listings through the Seerxo remote MCP server or CLI. Use when a user wants an Etsy title, description, 13 tags, SEO score, listing rewrite, keyword ideas, quota help, or help connecting and testing Seerxo with Claude or ChatGPT.★ 28 GitHub starsMCPExpert China e-commerce operations specialist coveringChina E-Commerce Operatormsitarzewski/agency-agents · by msitarzewskiExpert China e-commerce operations specialist covering Taobao, Tmall, Pinduoduo, and JD ecosystems with deep expertise in product listing optimization, live commerce, store operations, 618/Double 11 campaigns, and cross-platform strategy.★ 154k GitHub stars

More from gooseworks-ai

SkillMine the highest-converting ad angles from customer reviewsAd angle minergooseworks-ai/goose-skills · by gooseworks-aiMine the highest-converting ad angles from customer reviews, Reddit complaints, support tickets, and competitor ads. Extracts actual pain language, competitor weaknesses, and outcome phrases that real buyers use. Outputs a ranked angle bank with proof quotes and recommended ad formats per angle.★ 1.2k GitHub starsSkillAnalyze ad campaign performance data to identify what'sAd campaign analyzergooseworks-ai/goose-skills · by gooseworks-aiAnalyze 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.★ 1.2k GitHub starsSkillFor paid lead-gen and participant-recruitment adsAd lead quality analyzergooseworks-ai/goose-skills · by gooseworks-aiFor 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.★ 1.2k GitHub starsSkillAnalyze the message match between your ads and landing pagesAd to landing page auditorgooseworks-ai/goose-skills · by gooseworks-aiAnalyze 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.★ 1.2k GitHub starsSkillCheck and improve your brand's visibility across AI searchAeogooseworks-ai/goose-skills · by gooseworks-aiCheck and improve your brand's visibility across AI search engines (ChatGPT, Perplexity, Gemini, Grok, Claude, DeepSeek). Set up tracking, run visibility analyses, audit your website for AI readability, and get actionable recommendations. Uses the npx goose-aeo@latest CLI.★ 1.2k GitHub starsSkillSearch Amazon products - find items, compare pricesAmazon Product Searchgooseworks-ai/goose-skills · by gooseworks-aiSearch Amazon products - find items, compare prices, read reviews★ 1.2k GitHub stars