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:
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.
Edge types
Edges are the relationships between nodes. Every edge carries metadata that drives the internal linking plan.
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.
- 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
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.
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.
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
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 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
/dog-breeds/
/dog-breeds/golden-retriever/
/dog-breeds/golden-retriever/health/
/dog-breeds/golden-retriever/health/hip-dysplasia/
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.
- Every parent → child link (hierarchy)
- Every hub summary section → child page
- Every FAQ → its parent page
- 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": "...", ... } ]
}
- 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
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.
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
Tier 1 (Seed) ← second row
Tier 2 (Topics) ← third row
Tier 3 (Subtopics) ← fourth row
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
- 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
| 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.
- Open in Inkscape, Figma, or Illustrator
- Embed directly in web pages
- Print at any size without pixelation
- Best format for print and large-format display
- Fully editable in vector tools
- Same content as Full Map PNG — vector not raster
- 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
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.
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.