Topical map builder
Skill siddiqss/semantic-seo-suite/skills/topical-map-builder
Grounded semantic SEO, GEO & off-page as Claude Code skills — with a fabrication guard that refuses to invent numbers. Free & MIT.
npx -y skills add siddiqss/semantic-seo-suite --skill topical-map-builderAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 6 stars6 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Build or extend a full topical map — a pillar/cluster/supporting content architecture grounded in entity-based semantic SEO — for a brand. Use whenever the user asks for a topical map, a content plan or content strategy, keyword clustering into topics, "what should we write about", niche coverage, or how to build topical authority — even if they only mention keywords or blog ideas. Produces topical-map.json plus a readable tree and a prioritised content calendar. If the brand has no entity-profile.json, run seo-brand-foundation first. Triggers on content-planning intent broadly, not just the literal phrase "topical map".
SKILL.md
4.5 KB, as published. Nobody here has run it
topical-map-builder
Turn a brand's foundation into an executable content architecture: a processed topical map of pillars → clusters → supporting pages, each with an intent and a query network, split into core (monetizing) and outer (authority-feeding) sections.
Read these first: ../../framework/topical-map-theory.md,
../../framework/eav-modeling.md, ../../framework/query-semantics.md. (And
00-overview.md for provenance rules if not already this session.)
Preconditions
- Read
brands/<slug>/config.yaml(tier). - Require
brands/<slug>/entity-profile.json. If absent, run seo-brand-foundation first — do not build a map without a foundation.
Workflow
-
Decompose the central entity (raw map). Using the entity profile's attribute inventory + eav-modeling.md, over-generate: every attribute → candidate topics; values/comparisons/how-tos → sub-topics; questions/edge-cases → supporting topics; neighbouring entities → outer topics. Completeness first; don't filter yet.
-
Apply the core/outer split from the entity profile's boundary rule. Tag each candidate
coreorouter. Drop anything failing the "right to cover" test (source-context.md) — respect the will-not-cover list. -
Expand query networks per node (query-semantics.md), at the configured tier:
- T0: reason out the network + validate a few via
web_search; intentasserted. - T1:
../../scripts/fetch_autocomplete.py(real variants,measured), optional../../scripts/fetch_trends.py(relative demand), and../../scripts/serp_intent_classifier.pyto upgrade intent tomeasured. - T2:
../../scripts/dataforseo_client.pyfor volume/difficulty/PAA (measured). Never invent search volumes.
- T0: reason out the network + validate a few via
-
Process the map: assign
tier(pillar/cluster/supporting),parent, and oneintentper node. Merge near-duplicates:- T1+:
../../scripts/cluster_keywords.pyon query networks → flag & merge sibling pairs abovecannibalization_threshold. - T0: merge by judgement (one URL, one intent).
- T1+:
-
Attach demand + priority. Set
volume/difficultyonly if grounded (tagged). Computepriority ≈ business_value × demand_signal × feasibility(topical-map-theory.md). At T0, demand is qualitative — priority_score may beassertedor left null with an ordering rationale. -
Wire internal links (skeleton): each node's
up(to parent),down(to children), and candidatelateral(siblings sharing an attribute; justify by embedding distance at T1). Full plan islinking-and-schema's job later — here just seed structure. -
Emit artifacts.
brands/<slug>/topical-map.json— must validate against../../templates/topical-map.schema.json.- A readable Markdown tree (write to
brands/<slug>/topical-map.md). - Prioritised
brands/<slug>/calendar.mdfrom../../templates/calendar.template.md. - T1+: render the coverage heatmap via
../../scripts/map_heatmap.py.
Definition of done (gate for P1-18)
- ≥1 pillar per defining/unique attribute of the central entity.
- Every node has tier, section, parent (except top pillars), target query, query network, and intent (with provenance).
- No sibling pair above the cannibalization threshold.
- Every outer node has a link path into the core.
- Priority order + seeded calendar exist.
- The map passes an expert sniff test: no generic filler, core/outer reflects the actual business. If it reads generic, the fix is usually in the framework docs or the entity profile, not in prompt wording.
Grounding ladder
- T0: structure + query networks by reasoning; intents/volumes
asserted/absent. - T1: autocomplete-grounded query networks, SERP-verified intents, embedding-based dedupe + lateral-link justification, relative demand.
- T2: absolute volume/difficulty + PAA from DataForSEO.