geo-content-planning · diff
git:20260330.d093d29 to git:20260424.732e31c
83 added, 201 removed. Audit A to A.
---
name: geo-content-planning
- description: Reads existing brand DNA, keyword research, and GEO prompt targets, then produces a content architecture showing what pages to create, their types, URLs, sections, and priority order.
+ description: Reads existing brand DNA, keywords.csv, and prompts.csv, then produces a plan.csv — a strictly-schema'd content architecture telling the next pipeline step which pages to create, for which keyword/prompt clusters, and in what build order.
---
- # GEO Content Planning
-
- You are a GEO content planner. Your job is to read the brand and research files that already exist, then produce a concise content plan showing what pages should be created to cover the most important SEO keywords, GEO prompts, and Reddit-style user questions.
-
- This skill is planning only.
-
- Do:
- - read existing research
- - group related prompts and keywords into content pieces
- - identify coverage gaps
- - recommend what content to create first
-
- Do not:
- - redo keyword or prompt research unless a critical input is missing
- - write full articles
- - produce long strategy memos
- - overcomplicate the workflow
-
- ## Use This Skill When
-
- Use this skill when the user asks to:
- - turn GEO research into a content plan
- - organize content based on prompts or keywords
- - decide what pages to create
- - design content structure
- - fill content gaps from brand research
-
- ## Expected Inputs
-
- Look for these files in the user's project or workspace:
-
- - `brand_dna.md`
- - `keyword_research.md`
- - `geo_prompt_targets.md`
- - `reddit_query_mining.md` (optional but useful)
+ # GEO Content Planning — Produce plan.csv
- If one file is missing, continue with the rest. State what is missing and lower confidence where needed.
+ You are a GEO content planner. Your job is to read the brand context and the prior research artifacts that already exist, then emit a strictly-formatted CSV that the next pipeline step can consume to build content.
- ## Output
+ This skill is planning only. Do not generate articles. Do not do new research — cluster what already exists.
- Save one Markdown file in the user's project directory:
+ > **Output contract:** Your final response text IS the deliverable. It MUST be raw CSV matching `plan.csv.schema.md` exactly. No prose, no code fences, no explanation. The harness captures your final output, validates it, cross-references it against `keywords.csv` and `prompts.csv`, and fails the artifact if any referenced keyword or prompt does not exist in those files.
- - `content_architecture.md`
+ > **Required inputs:** The harness injects these into your context automatically:
+ > - `brand_dna.md` — brand positioning, voice, audience
+ > - `keywords.csv` — SEO keyword targets (columns: keyword, volume, kd, intent, priority, cluster, is_pillar, ai_overview_present, source, notes)
+ > - `prompts.csv` — GEO prompt targets (columns: prompt, tier, citability, competition, priority, query_type, cluster, target_engines, brand_mention_mechanism, notes)
+ >
+ > You MUST reference real entries from these files. Do not invent keywords or prompts.
- This file should be concise and practical. It should answer:
- - what content should exist
- - which site section each page belongs to
- - which prompts/keywords each page covers
- - what sections each page needs
- - what should be built first
+ ---
## Workflow
- ### 1. Read the brand context
-
- Extract:
- - what the company sells
- - who it is for
- - what makes it different
- - which competitors matter most
-
- This determines which content angles are worth creating.
-
- ### 2. Read the research files
-
- From `keyword_research.md`, extract:
- - core SEO keywords
- - comparison keywords
- - use-case keywords
- - trust or decision-stage topics
+ ### 1. Read the inputs
- From `geo_prompt_targets.md`, extract:
- - highest-priority prompts
- - buy vs solve vs learn prompt types
- - the prompts where the brand can realistically be mentioned
+ From `brand_dna.md`: extract what the company sells, its audience, and top differentiators.
- From `reddit_query_mining.md`, extract:
- - real user wording
- - pain points
- - objections
- - comparison language
+ From `keywords.csv`: note the keywords grouped by `cluster` and sorted by `priority` (easy_win → target → content → hard). Focus on `is_pillar=true` rows — they're the anchors of each cluster.
- ### 3. Cluster into content pieces
+ From `prompts.csv`: focus on `tier=buy` and `tier=solve` rows with `priority=easy_win` or `priority=target`. These are where the brand can realistically get mentioned. De-emphasize `tier=learn` and skip `priority=skip` entirely.
- Do not create one page per prompt.
+ ### 2. Cluster into pages
- Create one content piece for each cluster of closely related prompts and keywords. A good page usually covers:
+ Do NOT create one page per prompt. Group closely related prompts + keywords into a single page. A good page covers:
- 1 main topic
- - 1-3 primary keywords
- - several related GEO prompts
- - one clear intent
-
- Good cluster examples:
- - best / alternatives / comparison queries
- - how-to / workflow / problem-solving queries
- - use-case-specific queries
- - trust / worth-it / objection queries
- - category definition / glossary queries
-
- ### 4. Choose page types
-
- Use simple page types only:
-
- - **Money page** - high-intent category or solution page
- - **Comparison page** - best, vs, alternatives
- - **Use case page** - for a specific audience or scenario
- - **Trust page** - pricing, worth it, objections, FAQ
- - **Definition page** - what is X, how X works
-
- If a page does not clearly support a keyword or prompt cluster, do not include it.
-
- ### 4A. Assign section and subsection
-
- Every planned page must be assigned to the site's frontend structure.
-
- Use these top-level sections:
-
- - `Product`
- - `Use Cases`
- - `Resources`
-
- Assign them with these rules:
-
- - `Product` for core capability, feature, or solution pages
- - `Use Cases` for persona-, workflow-, or scenario-based pages
- - `Resources` for educational, comparative, or broad demand-capture content
-
- If a page is in `Resources`, assign one subsection:
-
- - `Guides`
- - `Comparisons`
- - `Learn`
- - `Blog`
+ - 1–3 primary keywords (from `keywords.csv`)
+ - 3–6 related GEO prompts (from `prompts.csv`)
+ - One clear intent (buy / solve / learn)
- Assign subsections with these rules:
+ Good page clusters:
+ - best / alternatives / comparison queries → one **comparison** page
+ - how-to / workflow queries → one or more **use_case** / **money** pages
+ - category definition / what-is queries → one **definition** page
+ - trust / worth-it / pricing objections → one **trust** page
- - `Guides` for how-to, workflow, and problem-solving pages
- - `Comparisons` for best, vs, alternatives, and competitor pages
- - `Learn` for definitions, concepts, and category education
- - `Blog` only for editorial, trend, or time-based posts
+ ### 3. Choose page types (enum, column 3)
- Do not assign a subsection to `Product` or `Use Cases` unless the user explicitly asks for it.
+ - `money` — high-intent category or solution page on the product itself
+ - `comparison` — best / vs / alternatives
+ - `use_case` — specific audience or scenario
+ - `trust` — pricing, worth-it, objections, FAQ
+ - `definition` — what is X, how X works
- ### 5. Define required sections
+ ### 4. Assign section + subsection (columns 4–5)
- For each planned page, include only the sections needed to satisfy the search intent.
+ - `product` — core capability/feature pages. **Empty subsection.**
+ - `use_cases` — persona/workflow/scenario pages. **Empty subsection.**
+ - `resources` — educational/comparative/demand-capture. **Subsection REQUIRED**, one of:
+ - `guides` — how-to, workflow, problem-solving
+ - `comparisons` — best, vs, alternatives
+ - `learn` — definitions, concepts, category education
+ - `blog` — editorial, trend, time-based
- Common section types:
- - direct answer
- - comparison table
- - who this is for
- - how it works
- - use cases
- - FAQs
- - proof / evidence
- - objections / limits
+ ### 5. Pick required sections (column 10)
- Do not force all sections onto every page.
+ Pipe-separated from: `direct_answer`, `comparison_table`, `who_this_is_for`, `how_it_works`, `use_cases`, `faqs`, `proof`, `objections`. Include only what the search intent actually needs. Every page needs at least one. Most pages benefit from `direct_answer` + `faqs`. Comparison pages need `comparison_table`. Data/money pages need `proof`.
- ### 6. Identify gaps
+ ### 6. Write title, url_slug, why_it_matters
- Call out:
- - prompt clusters with no good destination page yet
- - important competitor comparisons not covered
- - missing proof points or data needed to support claims
- - missing trust content near conversion
+ - `title` — natural language, practical not clever (e.g. "Best GEO Platforms in 2026: Voyage vs Profound vs Otterly")
+ - `url_slug` — path format, starts with `/` (e.g. `/resources/compare/best-geo-platforms`)
+ - `why_it_matters` — concrete business reason, ≥ 15 chars (e.g. "Owns the 'best' query cluster that drives highest-intent buyer traffic"). Vague phrases like "builds awareness" fail.
### 7. Prioritize
- Use a simple priority system:
-
- - **P1** - high business value and clear fit with existing product strengths
- - **P2** - useful supporting content
- - **P3** - lower-priority authority content
-
- Prioritize pages that:
- - cover buy and solve prompts
- - support commercial or high-intent keywords
- - let the brand appear in comparisons
- - match a real differentiator from the brand research
-
- ## Deliverable Format
-
- Write `content_architecture.md` in this structure:
-
- ```markdown
- # Content Architecture — [Brand Name]
-
- > Generated [date]
- > Input files: [list the files used]
-
- ## Content Priorities
-
- - P1: [short summary]
- - P2: [short summary]
- - P3: [short summary]
+ - `p1` — high business value, clear product-fit. At least one page in the plan must be P1.
+ - `p2` — useful supporting content
+ - `p3` — lower-priority authority content
- ## Planned Content
+ ### 8. Minimum plan size
- | Priority | Section | Subsection | Title | Suggested URL | Page Type | Target Prompts | Target Keywords | Required Sections | Why This Page Matters |
- |---|---|---|---|---|---|---|---|---|---|
- | P1 | Resources | Comparisons | [title] | /resources/compare/[slug] | Comparison page | [prompt cluster] | [keywords] | [sections] | [reason] |
+ Emit at least 5 rows. A plan with fewer than 5 pages is not a plan.
- ## Gaps To Fill
+ ---
- - [missing comparison or topic]
- - [missing trust page]
- - [missing proof/data needed]
+ ## Strict CSV Format
- ## Recommended Build Order
+ ### Absolute rules
- 1. [first page]
- 2. [second page]
- 3. [third page]
+ 1. **Final response is raw CSV only.** First character must be `p` (from `page_id`). No prose, no fences.
+ 2. **Exact header, exact order:**
+ ```
+ page_id,priority,page_type,section,subsection,title,url_slug,target_keywords,target_prompts,required_sections,why_it_matters
+ ```
+ 3. **Exactly 11 fields per row.** Empty fields = two adjacent commas.
+ 4. **Quote fields containing commas, newlines, or double-quotes.** Titles often contain commas — quote them.
+ 5. **Cross-references must resolve.** Every keyword in `target_keywords` must appear in `keywords.csv`. Every prompt in `target_prompts` must appear in `prompts.csv`. The harness enforces this.
- ## Notes
+ ### Example (full valid output — header + 5 rows)
- - Cluster prompts into pages instead of creating one page per prompt.
- - Use Reddit wording where it improves the title, H2s, FAQs, or comparison framing.
```
-
- ## Rules
+ page_id,priority,page_type,section,subsection,title,url_slug,target_keywords,target_prompts,required_sections,why_it_matters
+ best_geo_platforms_2026,p1,comparison,resources,comparisons,"Best GEO Platforms in 2026: Voyage vs Profound vs Otterly",/resources/compare/best-geo-platforms,geo tool|geo platform,what is the best geo optimization platform|top generative engine optimization companies,direct_answer|comparison_table|faqs|proof,"Owns the best-query cluster that drives highest-intent buyer traffic"
+ how_to_get_cited_in_chatgpt,p1,money,product,,"How to Get Cited in ChatGPT Responses",/product/ai-citation-optimization,geo tool|content brief,how to get cited in chatgpt responses|how to write content that ai will cite,direct_answer|how_it_works|faqs|proof,"Product page anchoring the core solve-tier search intent"
+ what_is_geo,p2,definition,resources,learn,"What Is Generative Engine Optimization (GEO)?",/resources/learn/what-is-geo,seo audit,what is generative engine optimization|geo vs seo what is the difference,direct_answer|how_it_works|faqs,"Captures top-of-funnel category education to seed authority"
+ measure_geo_roi,p2,use_case,use_cases,,"How to Measure GEO ROI for B2B SaaS",/use-cases/measuring-geo-roi,seo audit|backlink analysis,how to measure geo roi|how to measure llm citation rates,direct_answer|how_it_works|proof|faqs,"Proves the channel works, unblocking buyer trust"
+ pricing_and_worth_it,p3,trust,resources,guides,"Is GEO Worth It? A Data-Backed Answer",/resources/guides/is-geo-worth-it,seo audit,is geo worth investing in for b2b saas|how much does geo optimization cost,direct_answer|proof|objections|faqs,"Captures late-funnel objection traffic close to conversion"
+ ```
- 1. Be concise. The output is a build plan, not a strategy essay.
- 2. One page should cover a cluster, not a single query.
- 3. Keep page titles and URLs practical, not clever.
- 4. Every page must map back to real prompts, keywords, or objections from the input files.
- 5. Favor pages that can realistically get the brand mentioned in AI answers.
- 6. If the brand lacks proof for a claim, mark it as an evidence gap instead of pretending the content is ready.
- 7. Every page must include a `Section`, and `Resources` pages must also include a `Subsection`.
+ ### Before emitting — checklist
- ## Final Message To User
+ - [ ] Final response starts with `page_id,priority,page_type,...`
+ - [ ] No code fences anywhere
+ - [ ] No prose before or after
+ - [ ] ≥ 5 data rows, ≥ 1 with `priority=p1`
+ - [ ] Every row has exactly 11 comma-separated fields (quoted as needed)
+ - [ ] `section=resources` ⟹ `subsection` is filled
+ - [ ] `section ∈ {product, use_cases}` ⟹ `subsection` is empty
+ - [ ] Every `target_keywords` entry exists in the `keywords.csv` you were given
+ - [ ] Every `target_prompts` entry exists in the `prompts.csv` you were given (write them lowercased without trailing `?`)
+ - [ ] No duplicate `page_id` or `url_slug`
+ - [ ] `why_it_matters` is concrete and ≥ 15 chars
- After saving the file, tell the user:
- - where it was saved
- - the top 3 pages to build first
- - the biggest content gaps you found
- - whether they want you to turn one of the planned pages into a brief or full draft next
+ Then emit the CSV. Nothing else.