Entity-first content planning for GEO: building an entity coverage map
Entity-first content planning replaces a keyword list with a graph of entities, their relations, and the canonical questions that exercise them.
TL;DR
Keyword-first plans are obsolete for AI search because LLMs reason in entities and relations, not strings. An entity-first plan starts from a small set of seed entities, expands them into a typed graph, scores current coverage on three axes. Converts the gaps into a ranked backlog. The deliverable is a living entity coverage map: a sheet or graph where every entity has an owner, a coverage score, the canonical questions it must answer, and the URL that owns it.
Why entity-first beats keyword-first for GEO
Google and the major AI engines now build answers from entities and the relations between them, not from string-level keyword matches. Search Engine Land and AI search practitioner guides converge on the same point: entity clarity, not keyword density, determines whether content is recognized as the right answer in AI Overviews and chat-style results.
Keyword plans break in three ways under AI search:
- Synonyms and paraphrase — the same entity surfaces under dozens of strings; tracking strings undercounts coverage.
- Relational answers — AI engines pull citations that explain how entities relate, not pages that mention a keyword.
- Disambiguation — "Apple" the company versus the fruit is an entity decision; keywords cannot make it.
An entity-first plan fixes these by treating entities as the atomic planning unit and using keywords only as discovery hints.
What an entity coverage map is
An entity coverage map is a structured artifact (sheet, database, or graph) that lists:
- The entities your brand needs to own.
- The relations between those entities.
- The canonical questions each entity must answer.
- The URL on your site that owns each entity (or a gap if none).
- A coverage score per entity on three axes.
- An owner and next action for every gap.
It is the editorial source of truth for GEO. Every new article slots into a coverage gap on the map; every existing article maps to one entity it owns and several it supports.
The framework: six steps
Step 1 — Choose seed entities
Start with 15-30 seed entities that define your category. Pull them from three places:
- Your offer — the products, methods, and outcomes you sell.
- Customer language — the entities customers and prospects name in support tickets, sales calls, and reviews.
- AI engine output — prompt ChatGPT, Perplexity, Claude, and Gemini with five to ten core questions in your category and extract every entity they cite.
Reject seeds that are pure adjectives or marketing slogans. A valid seed is a thing an AI engine could plausibly resolve to a Knowledge Graph node: a concept, technique, product, standard, person, or organization.
Step 2 — Expand into a typed graph
For each seed entity, add three categories of neighbors:
- Parents — the broader category the seed belongs to.
- Siblings — directly comparable entities (used for comparison content).
- Children — sub-techniques, sub-types, components, or instances.
Also add lateral relations that AI engines reward:
- is_a, part_of, used_for, compared_to, measured_by, requires, produced_by.
Use a graph tool, a spreadsheet with a relation column, or a Notion database with a relation property. The output is a typed edge list, not a flat keyword list.
A practical target for a single category vertical: 15-30 seeds expanding to 150-400 total entities in the first pass. Cap depth at three hops from any seed to keep the graph actionable.
Step 3 — Attach canonical questions to every entity
For each entity, write the 3-7 canonical questions an AI engine would ask of that entity. Patterns:
- What is X?
- How does X work?
- X vs Y — when to use which?
- How do I implement X?
- What are common mistakes with X?
- How do I measure X?
Mine real questions from People Also Ask, Reddit, Quora, and the AI engines themselves ("give me 10 questions a user might ask about X"). Canonical questions become the explicit query targets your content must answer.
Step 4 — Score current coverage
For every entity, score three axes 0-3:
- Depth — do you have a dedicated, in-depth page for this entity?
- 3 = pillar page exists, fully covers the canonical questions.
- 2 = covered as part of a broader page; not the primary topic.
- 1 = mentioned in passing.
- 0 = not mentioned.
- Breadth (relational coverage) — how many neighboring entities does the page actually link to and explain?
- 3 = links to and contextualizes ≥5 neighbors.
- 2 = 3-4 neighbors.
- 1 = 1-2 neighbors.
- 0 = isolated.
- Citability — is the page structured so an AI engine can extract a self-contained passage to cite?
- 3 = clear definition + answer-first paragraphs + FAQ + schema.
- 2 = mostly answer-first; minor structural issues.
- 1 = buried in long-form prose; hard to extract.
- 0 = no answerable structure.
Compute an Entity Coverage Score (ECS) per entity:
ECS = (Depth * 0.40) + (Breadth * 0.30) + (Citability * 0.30)Report ECS as a 0-3 mean across the graph and as the share of entities with ECS >= 2.0. The share is your portfolio-level KPI.
Step 5 — Identify gaps and prioritize
Filter the entity table to gaps where ECS < 2.0 and prioritize using four signals:
- Search and prompt demand — query and prompt volume on the entity’s canonical questions.
- Strategic value — does the entity sit on a buying-intent path or only on awareness?
- Competitive citation gap — are competitors already cited by AI engines for this entity?
- Effort — net-new article vs. expansion of an existing page.
Assign a priority of P0-P3. P0 = high demand, high strategic value, you have nothing. Convert each P0/P1 to a backlog item with a writer, a due date, and a target ECS.
Step 6 — Maintain the map
The map is a living artifact. Operational rules:
- Recompute ECS quarterly (or on every major content release).
- When AI engines start citing a competitor for an entity you own, drop the entity’s ECS by 1 until you respond.
- Add new seeds whenever a new product, standard, or technique enters your category.
- Retire entities that no longer match your category; do not waste backlog on them.
Reference template
| Field | Type | Purpose |
|---|---|---|
| entity_id | slug | Stable canonical id (kebab-case) |
| entity_name | string | Display name |
| aliases | list | Alternate strings AI engines may use |
| entity_type | enum | concept, product, person, organization, technique, standard, metric |
| parents | list | Broader entities |
| siblings | list | Comparable entities |
| children | list | Sub-entities |
| relations | list | relation:target pairs |
| canonical_questions | list | 3-7 target questions |
| owning_url | url | Page that owns this entity (or null = gap) |
| depth_score | 0-3 | |
| breadth_score | 0-3 | |
| citability_score | 0-3 | |
| ecs | float | Computed |
| priority | enum | P0-P3 |
| owner | person | Editorial owner |
| next_action | string | New article, refresh, schema only, etc. |
| last_reviewed_at | date |
The table fits in a Notion database, a Google Sheet, or a graph tool such as Neo4j or Obsidian. Pick the simplest tool your team will actually update.
Worked example (abbreviated)
Category: GEO and AEO consultancy.
- Seed entity: generative-engine-optimization (parent: ai-search-optimization).
- Children: entity-optimization, answer-grounding, ai-citable-claims, llms.txt, schema-for-ai.
- Sibling of seed: answer-engine-optimization.
- Canonical questions on the seed: What is GEO? GEO vs SEO? How do I measure GEO? How do I get cited by ChatGPT?
- Coverage scan: GEO pillar page exists (Depth 3), links to 4 children + sibling (Breadth 3), schema and FAQ present (Citability 3). ECS = 3.0.
- Gap example: entity-optimization exists only as a section inside the GEO page (Depth 1, Breadth 1, Citability 1, ECS = 1.0). Action: net-new pillar at P0, target ECS 3.0 within one cycle.
Repeat across all entities; the gap list becomes your roadmap.
Common mistakes
- Treating the map as a one-time artifact. Without quarterly refresh it goes stale within a release cycle.
- Mixing strings and entities. "AI search" the string and ai-search the entity collapse into the same row; that hides disambiguation work.
- Skipping relations. A list of entities without typed edges is just a glossary. The relations are what AI engines reward.
- Optimizing depth alone. A 3,000-word page that links to nothing is depth without breadth; ECS will be capped at ≤2.1.
- Ignoring citability. Long, dense pages can rank for SEO and still be unciteable by AI; add answer-first structure and schema.
- No owner per entity. Without a named owner, gaps stay gaps.
Reporting and KPIs
- Portfolio ECS — mean ECS across all entities; report monthly.
- Entities at ECS ≥ 2 — share of entities with adequate coverage.
- Citation share — share of AI-engine citations on canonical questions that point to your URLs (sample 50 prompts per platform).
- Time-to-cover — days from a new entity entering the map to a published page owning it.
Pair ECS with the AI search KPIs dashboard so coverage gains can be tied to citation lift.
FAQ
Q: How many seed entities should I start with?
Fifteen to thirty for a single category. Fewer than fifteen and the graph is too narrow to expose real gaps; more than thirty and the first-pass map becomes unwieldy. You can split very large brands into multiple sub-graphs (one per product line or vertical) rather than inflating the seed count.
Q: Do I need a graph database to do this?
No. A spreadsheet or a Notion database with a relation property is enough for the first two cycles. Move to a graph tool only when you have more than ~500 entities or when you need to compute centrality / shortest-path metrics across the graph.
Q: How is this different from a content cluster?
A cluster groups articles around a pillar topic. An entity coverage map is finer-grained: every cluster typically owns one to several pillar entities, and each entity carries its own canonical questions and coverage score. Clusters are the output of an entity map, not a substitute for it.
Q: Can I generate the entity graph with an LLM?
Yes, as a starting draft. Prompt a strong model with your category, your seed entities, and the relation types you care about, and have it propose neighbors. Always have a human editor verify entities exist as recognized concepts, fix hallucinated entries, and prune marketing-only nouns. Treat the LLM as a faster brainstorm, not a source of truth.
Q: How does this connect to AI citation tracking?
The canonical questions on each entity are the queries you should sample when measuring citation share. Track which URLs AI engines cite for those questions; when a competitor is cited and you are not, the entity’s priority moves up in the next backlog grooming.
Related Articles
How to write AI-citable claims: evidence patterns that get cited
A practical guide to writing claims AI engines actually cite: evidence patterns, sentence structures, and grounding tactics that boost citation-readiness in ChatGPT, Perplexity, and Google AI Overviews.
AI Citation Crisis Response Checklist: 20 Steps When ChatGPT or AI Overviews Stop Citing Your Brand
20-step crisis response checklist for diagnosing and reversing sudden AI citation drops in ChatGPT, Perplexity, and AI Overviews within 30 days.
AI Citation Forecasting Framework: Modeling Citation Lift Before You Publish
AI citation forecasting framework predicts how new content will lift LLM citations using entity coverage, intent fit, and competitor source overlap.