Processing...
Processing...

How the Topical Map Generator and Editor work — in plain English

The Topical Map Generator runs a seven-stage AI pipeline — from a seed keyword to a fully structured, entity-enriched content authority graph. The Visual Editor lets you load, edit, classify, and export that graph interactively. This page explains every stage: how topics are discovered, canonicalized, classified, structured, and linked, and what the final output contains.

What you get
  • Generator — 3 maps/month (beta, free account)
  • Seven-stage AI pipeline — auto-classification
  • Macro → Seed → Topic → Subtopic hierarchy
  • Hub / Section / FAQ / Standalone classification
  • URL architecture auto-generated
  • Internal linking plan with anchor text
  • Entity + alias enrichment on every node
  • Editor — free, no account required

What is a topical map?

A topical map is a structured blueprint of every content entity your site needs to establish authority on a subject. It is not a keyword list or a sitemap. It is a graph — a set of nodes (pages, sections, FAQs) and edges (links and relationships) that defines:

What to build
Every topic, subtopic, FAQ, and comparison that establishes coverage of the seed within the macro category.
How to structure it
Which pages get their own URL, which are sections within a parent page, and which pages act as hubs.
How to connect it
The full internal linking plan — every parent-child link, related-topic link, and FAQ attachment, with anchor text and placement guidance.
What entities matter
Named entities (organisations, concepts, tools, people) and alias phrases (keyword variants and search intents) for every node.
The result is a machine-readable data model that can power a content plan, URL architecture, site navigation, internal linking recommendations, and graph database import — all from a single macro + seed input.

Node types

Every entity in the map is one of six node types. Each type has a fixed position in the hierarchy, its own colour in the editor, and a default URL role.

Type Tier Colour Default URL role Purpose
Macro 0 Amber Standalone + Hub The broad category the seed belongs to
Seed 1 Purple Standalone + Hub The primary topic the entire map is built around
Topic 2 Cyan Standalone (Hub if children > 2) Main pillar area under the seed
Subtopic 3+ Green Standalone or Section Supporting content under a topic
FAQ 2–4 Orange Section (rarely Standalone) Question-based content attached to a parent page
Comparison 2–3 Pink Standalone Versus or comparison content

URL roles — page vs section vs hub

Every node is classified with a URL role that determines whether it gets its own page in the site architecture.

Standalone (urlRole = 1)
Has its own canonical URL. Appears in sitemaps. Gets its own page template. Shown in full colour in the editor.
/golden-retriever/health/
Section Only (urlRole = 0)
No URL. Rendered as a heading + content block on a parent page. Shown with dashed border and muted colour in the editor.
Hub (hubRole = 1)
A standalone page that also acts as a navigation centre for its children. Contains a summary section for each child. Shown with a gold ring in the editor.
Section + Standalone at the same time: A node can be classified as both. This means the topic appears as a summary section on its parent hub page and also has its own standalone page. The summary section links to the full standalone page. This is the standard hub-and-spoke pattern.

Edge types

Edges are the relationships between nodes. Every edge carries metadata that drives the internal linking plan.

Parent-Child (type 1)
Hierarchy link from a parent page to a child page. The most common edge. Always required.
FAQ Attachment (type 3)
Connects a FAQ node to its parent page. Shown as orange dashed in the editor.
Related (type 4)
Optional sibling link between related topic pages. Shown as purple in the editor.

Every edge also carries: recommended anchor text, alternate anchor phrases, placement hint (body / hub section / FAQ block), weight (0–1), and required vs optional status.

1 Normalize the seed

The pipeline begins by normalizing the macro and seed inputs into a consistent internal format before any topic discovery begins.

What it does
  • Creates a deterministic node ID from the seed label
  • Generates a URL-safe slug
  • Records the macro and seed context for all downstream nodes
  • Sets the site URL base for URL generation later
Example
Macro: "Dog Breeds"
Seed: "Golden Retriever"

id: "seed-golden-retriever"
slug: "golden-retriever"

2 Discover candidate topics

The core discovery stage. The pipeline expands the seed into a broad set of candidate topics using multiple data sources.

AI topic expansion
The seed keyword is expanded into potential subtopics using a language model prompted with the macro context. This produces the initial candidate set.
SERP validation
Real search results are fetched for the seed and key subtopics. Titles, headings, and People Also Ask questions are extracted to validate and enrich the candidate set.
Entity extraction
Named entities are extracted from SERP content — organisations, people, concepts, tools, standards. These become the entity lists on each node.
Competitor structure analysis
Top-ranking pages are scanned for heading structures to surface subtopics and FAQ candidates that high-authority competitors cover.
The output of Stage 2 is a raw candidate list — undeduped, unclassified, potentially noisy. That is resolved in Stage 3.

3 Canonicalize topics

The raw candidate list from Stage 2 contains duplicates, near-duplicates, and wording variants. Canonicalization resolves them into a clean, non-redundant topic set.

Deduplication
Exact duplicates and near-duplicates (e.g., "Golden Retriever Training Tips" and "Training Tips for Golden Retrievers") are merged into a single canonical topic node.
Concept vs variant separation
True topical concepts become nodes. Wording variants of the same concept become aliases on the canonical node. This keeps the map clean without losing keyword coverage.
Candidate: "Hip Dysplasia in Golden Retrievers"
Candidate: "Golden Retriever Hip Problems"
Candidate: "CHD in Golden Retrievers"

Canonical node: "Golden Retriever Hip Dysplasia"
Aliases: ["hip dysplasia in golden retrievers", "golden retriever hip problems", "CHD golden retriever"]

4 Classify each topic

Each canonical topic is classified into one or more content roles. Classification determines whether the topic becomes a full page, a section within a parent, a hub, or an FAQ.

Classification rules
Standalone page
Topic has sufficient search demand, distinct intent, and enough potential depth for its own page (1,000+ words). Gets its own canonical URL.
Section only
Topic is too thin for its own page but is important enough to be covered as a heading + section on its parent page. No URL generated.
Hub page
Topic has two or more child pages that it should navigate. Always Standalone. Contains summary sections for each child that link out to the full child pages.
FAQ
Question-format topics from People Also Ask or competitor FAQ sections. Classified as FAQ nodes and attached to the most relevant parent page.
Section + Standalone simultaneously: A topic can be both. This is the standard hub-and-spoke pattern — the topic appears as a summary section on the parent hub page and also has its own full standalone page. The architectureType field in the JSON encodes this (e.g., 5 = StandaloneAndHub).

5 Assign hierarchy and generate URLs

Each classified node is placed in the hierarchy and assigned a tier. Canonical URLs are then generated for all Standalone nodes.

Hierarchy rules
Tier 0 — Macro (category hub)
Tier 1 — Seed (primary topic)
Tier 2 — Topics (main pillars under seed)
Tier 3 — Subtopics (supporting pages under topics)
Tier 4+ — Deep subtopics (thin coverage, often Section only)
URL generation rules
Standalone nodes
parent_url + slug + "/"

/dog-breeds/
/dog-breeds/golden-retriever/
/dog-breeds/golden-retriever/health/
/dog-breeds/golden-retriever/health/hip-dysplasia/
Section-only nodes
No canonical URL is generated. The canonicalUrl field is empty string. The parentUrl field points to the parent page where the section lives.

6 Generate internal linking

The internal linking stage creates all edges in the graph. Every edge represents a real internal link that should exist on the published site.

Required edges
  • Every parent → child link (hierarchy)
  • Every hub summary section → child page
  • Every FAQ → its parent page
Optional edges
  • Related sibling topic links
  • Comparison page cross-links
  • Contextual body links between close topics
What each edge carries
Field Example value Purpose
anchorText "Golden Retriever Hip Dysplasia" Primary anchor text recommendation
alternateAnchors ["hip dysplasia", "CHD in goldens"] Variant anchor phrases
placementHint "health hub page subtopic section" Where to place the link on the source page
weight 0.95 Strength of the relationship (0–1)
isRequired true Whether the link is mandatory or optional
edgeType 1 (Parent-Child) / 3 (FAQ) / 4 (Related) Relationship type for graph rendering

7 Assemble the final graph

All nodes and edges are assembled into the final graph output. The structure is designed to be graph-ready — directly importable into Neo4j, D3.js, or any graph database.

{
  "Metadata": { "macro": "...", "seed": "...", ... },
  "Nodes": [ { "Id": "...", "Label": "...", ... } ],
  "Edges": [ { "Id": "...", "SourceId": "...", ... } ]
}
What the output enables
  • Load into the visual editor immediately
  • Export PNG/SVG for client presentations
  • Export CSV for content calendar spreadsheets
  • Import into Neo4j for graph database analysis
  • Feed into CMS automation or internal linking tools
JSON compatibility
Both PascalCase (pipeline output) and camelCase (editor export) are supported on import. The editor normalizes both formats at load time.

Graph layouts

The editor renders the node-edge graph in four layouts. All four show the same data from a different perspective. Manual node drag positions are preserved when switching layouts. Press F after switching to any tree layout to re-centre the map in the viewport.

⬡ Force Graph
Physics simulation. Nodes repel, edges pull connected nodes together. Clusters emerge naturally. Best for exploring overall structure and spotting disconnected nodes. Drag nodes freely — the simulation restarts gently.
⟶ Horizontal Tree
Left-to-right hierarchy. Tier level maps to column position — depth = URL depth. Best for reviewing parent-child relationships and URL structure. Uses horizontal cubic bezier edges.
⬇ Vertical Tree
Top-to-bottom hierarchy. Tier level maps to row position. Siblings spread horizontally across the canvas. Best for org-chart style review and wide maps with many siblings at the same tier. Uses vertical cubic bezier edges.
◎ Radial Tree
Concentric rings per tier. Seed at centre, Topics on the first ring, Subtopics on the second. Faint dashed guide circles mark each tier. Best for client presentations and full-map exports.

Vertical Tree layout — how it works

The Vertical Tree is a top-to-bottom tree layout that mirrors the classic org-chart structure. The root node (Macro or Seed) sits at the top and child nodes expand downward. Siblings at the same tier spread horizontally.

Axis mapping
Vertical axis (y) — tier depth
Each tier row is separated by a fixed vertical slot. Tier 0 (Macro) is at the top. Each successive tier adds one row below. The row spacing is larger for rectangular nodes than circle nodes to accommodate label height.
Tier 0 (Macro) ← top row
Tier 1 (Seed) ← second row
Tier 2 (Topics) ← third row
Tier 3 (Subtopics) ← fourth row
Horizontal axis (x) — sibling spread
Siblings at the same tier are distributed horizontally. D3's nodeSize assigns a fixed horizontal slot per node. The separation callback adds extra horizontal space between nodes from different parent groups so clusters are visually distinct.
Compared to Horizontal Tree
Property Horizontal Tree Vertical Tree
Root position Left edge Top edge
Tier axis Horizontal — x = depth Vertical — y = depth
Spread axis Vertical — siblings spread up/down Horizontal — siblings spread left/right
Edge shape Left-to-right cubic bezier Top-to-bottom cubic bezier
Best for URL depth review, tall maps Org-chart style, wide maps
Handles many siblings? Moderate — map gets very tall Better — siblings spread horizontally
Spacing controls
Horizontal slot (xSlot)
The fixed horizontal space allocated per node. Increase to add more left-right space between sibling nodes on the same row. Larger for rectangular nodes (wider labels) than circle nodes.
Vertical slot (ySlot)
The fixed vertical space between tier rows. Increase to add more top-bottom distance between parent and child nodes. Larger for rectangular nodes to accommodate multi-line label height.
When to use Vertical Tree vs Horizontal Tree:
  • Use Vertical Tree when your map has a small number of Topics (2–5) but many Subtopics under each — the horizontal spread accommodates wide rows naturally.
  • Use Horizontal Tree when your map has many Topics (6+) and you want to review URL depth — the vertical spread keeps the depth columns readable.
  • For both tree layouts, press F immediately after switching to re-centre the map. Large maps may render off-screen before Fit View is applied.

Node data model

Every node in the editor carries a full SEO data profile. All fields are editable through the Node Properties panel.

Field Type Description
id string Unique node identifier
label string Display name shown in the graph
slug string URL-safe version of the label
nodeType 0–5 Macro / Seed / Topic / Subtopic / FAQ / Comparison
tier 0–n Hierarchy depth (0 = Macro)
urlRole 0 or 1 0 = Section Only, 1 = Standalone page
hubRole 0 or 1 1 = Hub page (gold ring in editor)
canonicalUrl string Full canonical URL (auto-generated or manual)
parentId string ID of the parent node
confidence 0.0–1.0 AI pipeline confidence that this topic belongs
entities string[] Named entities associated with this topic
aliases string[] Keyword variants and search intent phrases

Editing and re-parenting

Node editing — in-place updates
Click any node to open the Properties panel. Edit any field and click Apply. Most edits update the node visuals in place — the graph does not redraw and node positions are fully preserved. Only re-parenting triggers a full layout redraw.
Re-parenting — full redraw
Change the Parent Node dropdown and click Apply. The old parent→child edge is removed, a new edge is created, and the URL is regenerated from the new parent. Because the tree structure changes, a full layout redraw is triggered. The node is re-selected automatically.
Adding nodes
Select a node and click Add Child Node. The child type is inferred from the parent (Topic → Subtopic, Seed → Topic, etc.). In Vertical Tree the new node spawns below its parent. In Horizontal Tree it spawns to the right. In Force Graph it spawns at a random nearby position.
URL auto-generation
When the Canonical URL field is empty, typing a label auto-builds the URL from parent URL + slug. Changing URL Role to Section clears the URL field automatically. Changing the parent regenerates the URL if the field is still empty.
What triggers a full redraw vs in-place update:
Edit type Behaviour Positions preserved?
Label, slug, URL, confidence, entities, aliases In-place visual patch ✓ Yes
URL Role (Standalone ↔ Section) In-place visual patch — colour and border update ✓ Yes
Hub Role (Hub ↔ Not Hub) In-place visual patch — gold ring added or removed ✓ Yes
Node Type In-place visual patch — colour and icon update ✓ Yes
Parent Node (re-parenting) Full layout redraw — tree structure changed ✗ Reset

Export formats

The editor supports five export formats. All image exports account for node width and label overhang so nothing is clipped at the edges. Press F to fit the full map in view before exporting.

PNG — Viewport
Exports exactly what is currently visible on screen. Rendered at 4× screen resolution for sharpness. Best for sharing a specific area or zoom level.
File: topical-map-viewport.png
PNG — Full Map
Captures the entire graph regardless of zoom level. Minimum 4800px on the longer side, scaled by node count (60px per node minimum). Node widths and label overhang are accounted for — nothing is clipped at the edges, including circle node labels that extend to the right of the circle.
The status bar shows the output pixel dimensions and megapixels after export completes.
File: topical-map-full.png
Best results: Switch to Radial Tree layout and press F before exporting. The radial layout produces the most balanced full-map image. For Vertical Tree, press F first so the full horizontal width is captured.
SVG — Viewport
Exports the current viewport as a vector SVG with all styles, colours, and arrow markers inlined. Scalable to any size without loss of quality.
  • Open in Inkscape, Figma, or Illustrator
  • Embed directly in web pages
  • Print at any size without pixelation
File: topical-map-viewport.svg
SVG — Full Map
Exports the entire graph as a vector SVG. Uses the same bounding box calculation as the Full Map PNG so node widths and label overhang are correctly captured. Ideal for print-quality deliverables.
  • Best format for print and large-format display
  • Fully editable in vector tools
  • Same content as Full Map PNG — vector not raster
File: topical-map-full.svg
CSV — Node Export
Exports all nodes as a spreadsheet — one row per node. Built entirely in the browser with no server round-trip. Best for content calendar and brief handoffs to writers or editors.
Columns exported:
Id Label Slug Node Type Tier URL Role Hub Role Canonical URL Parent URL Parent Id Architecture Type Confidence Entities Aliases
File: topical-map-nodes.csv
JSON — Copy or Save
Exports the full graph — nodes and edges — as formatted JSON. Copy JSON writes to your clipboard. Save posts to the server and downloads a local copy simultaneously.
The JSON structure is graph-ready and compatible with:
  • Reload into the editor at any time via File → Load JSON
  • Import into Neo4j as a node/edge graph
  • Feed into D3.js for custom visualisations
  • Pipe into your CMS or internal linking automation
  • Archive alongside published content for future re-editing
Both PascalCase (pipeline output) and camelCase (editor export) are accepted on import. The editor normalises both at load time.
File: topical-map-edit.json
Which format for which purpose
Goal Layout Format Notes
Client presentation image Radial Tree → F PNG — Full Map Most visually distinctive output
Org-chart style image Vertical Tree → F PNG — Full Map Classic top-to-bottom hierarchy
URL depth review image Horizontal Tree → F PNG — Full Map Column = URL depth
Print-quality deliverable Any → F SVG — Full Map Scalable vector, no pixelation
Figma or Illustrator editing Any SVG — Full Map Fully editable in vector tools
Content calendar handoff Any CSV One row per node, all fields included
Content brief for writers Any CSV URL, parent URL, node type, entities already filled
Reload or continue editing Any JSON — Save Full fidelity reload via File → Load JSON
Neo4j or D3.js import Any JSON — Copy Nodes + edges structure, graph-ready
CMS or pipeline automation Any JSON — Save Server saves a copy + local download triggered

What the finished map contains

A complete topical map for a seed like Golden Retriever contains:

Full node inventory

Every Macro, Seed, Topic, Subtopic, FAQ, and Comparison as a structured node with ID, label, slug, tier, entities, aliases, and confidence score.

URL architecture

Canonical URL for every Standalone page, derived from the parent-child hierarchy. Section-only nodes have no URL.

Internal linking plan

Every required and optional link as a graph edge with anchor text, placement hint, weight, and required status.

Graph-ready JSON

nodes + edges structure compatible with Neo4j, D3.js, and any graph database or visualisation tool.

Ready to build your map?
Open the editor to start from scratch or load a starter map. Or use the Generator to have the AI pipeline build the map from your macro and seed.

What this is — and isn't

  • Not a keyword rank tracker: the map defines architecture and intent — it does not track daily SERP positions.
  • Not content writing: the generator produces a structural blueprint. You brief and write the actual content.
  • AI classification is probabilistic: topic classification (Standalone vs Section, hub detection) is based on language model inference. Review and override classifications in the editor before briefing content.
  • Confidence scores are relative: scores below 0.70 are a signal to review — not an absolute quality threshold. Context matters.
  • URL patterns are suggestions: the generated URLs follow a logical hierarchy but may need to be adjusted for your CMS, existing site structure, or URL conventions.
  • 3 maps per month (beta): the Generator is limited to 3 maps per month per account during the beta. The visual editor has no generation limits.
  • No Google ranking guarantees: building a topical map does not guarantee rankings. It provides a structured foundation — execution, content quality, and authority still determine outcomes.
Open the Editor Free · No account required