# Blog Cluster > Motor de clusters temáticos semánticos: investiga keywords desde el SERP, agrupa por intención y solapamiento, construye una arquitectura hub-and-spoke, genera un mapa SVG y ejecuta el cluster llamando a blog-write. Fuente: https://skillsagentes.com/skills/agricidaniel/claude-blog/blog-cluster Markdown: https://skillsagentes.com/skills/agricidaniel/claude-blog/blog-cluster.md Repositorio: https://github.com/AgriciDaniel/claude-blog Autor: AgriciDaniel Licencia: MIT Actualizado: hace 19 días Coste de contexto: 167 tok instalada, 4.9k tok al activarse, 11.7k tok con todos los archivos del bundle Bundle: 4 archivos, 46 KB Permisos que pide: ninguno declarado ## Instalación Un skill son archivos markdown: los mismos archivos valen para cualquier agente y lo único que cambia es el directorio de destino, es decir la bandera `--agent`. Añade `-g` para instalarlo en todos los proyectos de la máquina. ```bash # Claude Code npx -y skills add AgriciDaniel/claude-blog --skill blog-cluster --agent claude-code # Cursor npx -y skills add AgriciDaniel/claude-blog --skill blog-cluster --agent cursor # Codex npx -y skills add AgriciDaniel/claude-blog --skill blog-cluster --agent codex # Gemini CLI npx -y skills add AgriciDaniel/claude-blog --skill blog-cluster --agent gemini # Windsurf npx -y skills add AgriciDaniel/claude-blog --skill blog-cluster --agent windsurf # Cline npx -y skills add AgriciDaniel/claude-blog --skill blog-cluster --agent cline ``` ## Qué hace - Fase plan: expande la keyword semilla a un universo de 30-50 frases y agrupa usando el solapamiento de resultados del top 10 como señal principal - Diseña el hub-and-spoke: un pilar de 2.500-4.000 palabras y de 5 a 15 spokes de 1.200-1.800, cada uno con keyword principal única - Genera `cluster-plan.json` y un `cluster-map.html` estático sin JavaScript, con todas las etiquetas escapadas - Fase execute: llama a blog-write post a post con un bloque de contexto de cluster e inyecta los enlaces internos hacia atrás - Cierra con `cluster-scorecard.md`: estado por post, nota media, cohesión, auditoría de enlaces y chequeo de canibalización ## Cuándo usarla - El usuario dice "blog cluster", "topic cluster", "cluster plan", "pillar content" o "hub and spoke" ## Cuándo no - Solo quieres detectar solapamiento en contenido ya publicado: eso es blog-cannibalization - Solo quieres programar fechas de publicación alrededor de los clusters: eso es blog-calendar ## Qué la activa - "Planifica un cluster a partir de la keyword email marketing" - "Ejecuta el plan de cluster y escribe todos los posts" ## Antes de instalar - Requiere Claude Code y claude-blog instalado, porque delega la escritura de cada post en blog-write. ## Archivos - SKILL.md — 19 KB - references/cluster-architecture.md — 8 KB - references/execution-workflow.md — 11 KB - references/semantic-clustering.md — 8 KB ## SKILL.md Reproducido tal cual desde AgriciDaniel/claude-blog bajo MIT. Esta sección es el documento original y está en inglés. # Blog Cluster (Semantic Topic Cluster Engine) Plans and executes entire interlinked content ecosystems from a single seed keyword. Three layers: Semantic Clustering (the brain), Cluster Architecture (the structure), and Execution Engine (the machine). > Adapted from the **semantic-cluster-engine** submission by Lutfiya Miller > (winner, AI Marketing Hub Pro Challenge, March 2026, 95/100 Exemplary). > Original repository: https://github.com/Drfiya/semantic-cluster-engine > This port keeps the Plan + Execute architecture and the cluster context > innovation, removes brand-specific (ScienceExperts.ai) styling and image > prompts, and routes through claude-blog's existing sub-skills. ## Commands | Command | What it does | |---------|--------------| | `/blog cluster` | Interactive. Asks whether to plan or execute. | | `/blog cluster plan ` | SERP-based semantic analysis. Outputs cluster plan + map. | | `/blog cluster plan --from strategy [path]` | Imports existing `blog-strategy` cluster build plan and validates against SERP data. | | `/blog cluster execute [path-to-plan]` | Sequential `blog-write` calls with cluster context and auto-interlinks. | ## Key references (load on demand) - `references/semantic-clustering.md` (SERP overlap analysis, intent classification, keyword universe expansion) - `references/cluster-architecture.md` (hub-and-spoke specs, schema strategy, link-density rules) - `references/execution-workflow.md` (execution order, context injection, scorecard, failure handling) ## Cross-references to existing claude-blog skills | Skill | When this skill calls it | |-------|--------------------------| | `/blog strategy` | Upstream planning. `plan --from strategy` consumes its Cluster Build Plan tables. | | `/blog write` | Per-post execution. Each spoke and the pillar are produced by `blog-write` with a prepended cluster-context block. | | `/blog chart` | Invoked internally by `blog-write` for inline SVG charts. No direct call from this skill. | | `/blog image` | Optional hero image generation per post. Model selection is delegated to `blog-image`; prefer current Gemini image models when available. | | `/blog seo-check` | Recommended after execution for per-post on-page validation. | | `/blog cannibalization` | Recommended after execution to confirm zero keyword overlap across the cluster. | | `/blog schema` | Recommended after execution to add `BreadcrumbList`, `ItemList`, and `Article` schema. | This skill never modifies files belonging to other skills. It calls them via the Task tool or as orchestrated sub-skills. ## Command Routing 1. Parse the user's command to determine the sub-command. 2. If the user typed only `/blog cluster`, ask: "Would you like to **plan** a new cluster or **execute** an existing plan?" 3. Route: - `plan ` to the Plan Phase (below) - `plan --from strategy [path]` to the Strategy Import flow (below) - `execute [path]`, `build`, or `run` to the Execute Phase (below) --- ## Plan Phase: `/blog cluster plan ` Reference: `references/semantic-clustering.md` ### Step 1. Seed keyword expansion Use WebSearch to expand the seed into a keyword universe of 30 to 50 phrases: 1. Direct search of `` to capture related searches and "People also ask". 2. Long-tail expansion: ` guide`, ` tips`, ` tools`, ` examples`, ` vs`, `best `, `how to `. 3. Question mining: `what is `, `how does work`, `why `, ` for beginners`. 4. Intent variants: add commercial modifiers (best, top, review, comparison, pricing), informational modifiers (guide, tutorial, explained, examples), and transactional modifiers (buy, download, tool, software, service). 5. Year freshness: ` 2026`. ### Step 2. Semantic clustering Group the expanded keywords using the priority rules in `references/semantic-clustering.md`: 1. **SERP Overlap Analysis** is the primary signal. Two keywords with 4 or more shared top-10 results usually target the same intent and should be considered for one post. 2. **Intent Classification** assigns each keyword to informational, commercial, transactional, or navigational. 3. **Entity Mapping** identifies the people, products, frameworks, and organizations Google associates with the topic. 4. **Grouping** combines keywords that share intent and topical proximity. Each group becomes one branch of the hub and spoke. ### Step 3. Cluster architecture design Reference: `references/cluster-architecture.md` Build the hub and spoke: - **Pillar (hub)**: targets the broadest keyword. Word count 2,500 to 4,000. Template `pillar-page`. Links down to every spoke. - **Spokes**: each targets a long-tail cluster. Word count 1,200 to 1,800. Template auto-selected by intent. Links up to the pillar and across to siblings. Cluster formation rules: - Normal mode: 2 to 5 clusters per pillar, 2 to 4 spokes per cluster, total 1 pillar plus 5 to 15 spokes. - Small-cluster mode: for narrow seeds, allow 1 pillar plus 2 to 4 spokes only after warning the user and asking for confirmation. - Every spoke targets a unique primary keyword (zero cannibalization). ### Step 4. Internal link matrix For each spoke `S`: - `S` to Pillar (always; anchor text uses the pillar's primary keyword). - Pillar to `S` (always; anchor text uses `S`'s primary keyword). - `S` to other spokes in the same cluster (2 to 3 links each, contextual anchors). - `S` to spokes in adjacent clusters (0 to 1 links, only when semantically relevant). Verify every spoke has at least 2 incoming links. Count total planned interlinks. ### Step 5. Generate output files All plan and execute artifacts go into a single subdirectory of the current working directory. Canonicalize the output directory, refuse symlinks, and reject writes outside the cluster directory. Slugs must match lowercase letters, numbers, and hyphens only; reject absolute paths, `..`, path separators inside slugs, and hidden control characters. ``` / └── cluster-/ ├── cluster-plan.json ├── cluster-map.html ├── pillar-.md (Execute Phase) ├── .md (Execute Phase, one per spoke) └── cluster-scorecard.md (Execute Phase) ``` #### `cluster-plan.json` schema ```json { "seed_keyword": "", "generated_at": "YYYY-MM-DDTHH:MM:SSZ", "pillar": { "id": "P", "title": "Title of the pillar", "primary_keyword": "broadest keyword", "secondary_keywords": ["..."], "search_volume_estimate": "high|medium|low", "template": "pillar-page", "word_count_target": 3000, "cluster": "pillar" }, "clusters": [ { "name": "Cluster A: Theme", "intent": "informational|commercial|transactional", "color": "#2563eb", "posts": [ { "id": "A1", "title": "Post title", "primary_keyword": "long-tail keyword", "secondary_keywords": ["..."], "search_volume_estimate": "high|medium|low", "template": "how-to-guide", "word_count_target": 1500, "links_to": ["P", "A2"], "links_from": ["P", "A2"] } ] } ], "total_posts": 9, "total_interlinks": 23, "estimated_total_words": 18000 } ``` Note: volume estimates are relative indicators (high, medium, low) derived from SERP signals, not absolute search volumes. For precise data, the user should consult Ahrefs, SEMrush, or DataForSEO (claude-blog provides the `seo-dataforseo` companion sibling). #### `cluster-map.html` (XSS-safe) A static, self-contained HTML file with an embedded SVG visualization. Hard rules for the writer: - No inline `