πŸ€– AEO Structuring Agent

BaC Principle

β€œAI models don’t rank pages β€” they cite passages. If your content isn’t structured so an LLM can extract a clean, attributable answer, it doesn’t exist in AI search.” β€” Business as Code Manifesto

Stage: S5 β€” AEO Structuring Type: AUTO (~90% automated) Trigger: After S4 produces optimized_content_batch Output feeds: 07-Technical-SEO-Agent, 09-Human-Review-Gates (Content Review)

See Map of Content for full vault navigation.


🎯 Objective

Take SEO-optimized content and restructure it specifically for AI citation. This agent applies the six AEO principles that determine whether an LLM will reference your content in its responses: answer-first structure, FAQ density, entity clarity, schema markup, citation-readiness, and factual conciseness.

Why AEO is a separate stage

SEO optimization (SurferSEO scores, keyword density, heading hierarchy) and AEO optimization (LLM citation patterns, schema markup, answer granularity) are different skill sets with partially overlapping but distinct requirements. A page can score 90 on SurferSEO and 30 on AEO β€” and vice versa. They require separate passes.


πŸ› οΈ Tools & Integrations

tools:
  - name: Claude API
    used_for: >
      Restructuring content sections, generating FAQ Q&A pairs,
      writing concise "answer-first" paragraph openings,
      disambiguating entity definitions, AEO readiness scoring
    api: Messages API
 
  - name: Schema.org validator (validator.schema.org)
    used_for: Validate generated JSON-LD markup
    api: REST API
 
  - name: Google Rich Results Test
    used_for: Confirm FAQ / HowTo / Article schema eligible for rich results
    api: REST API (unofficial) or manual check
 
  - name: LLM Citation Probe
    used_for: >
      Query ChatGPT / Perplexity / Claude with target queries before and after
      AEO pass to measure citation improvement
    api: OpenAI API, Perplexity API, Claude API

πŸ“ The 6 AEO Principles

These principles are applied to every page in the batch:

aeo_principles:
  P1_answer_first:
    rule: >
      Every major section must open with a 1–2 sentence direct answer to the
      implicit question its H2 heading poses. The answer must stand alone as
      a quotable fact β€” no preamble, no "In this section we will..."
    example:
      bad: "In this section, we'll explore what Business as Code means and why it matters."
      good: "Business as Code is a methodology for defining business processes as machine-readable, AI-executable specifications that can be versioned, tested, and self-improved."
 
  P2_faq_density:
    rule: >
      Every page must have a dedicated FAQ section with β‰₯ 5 questions drawn
      from People Also Ask data and AEO query variants identified in S2.
      Questions must be phrased exactly as users ask them β€” not as headings.
    schema: FAQPage + Question + Answer
 
  P3_entity_disambiguation:
    rule: >
      Every key concept, brand name, or technical term introduced in the page
      must have an explicit definition on first use. LLMs use entity definitions
      to anchor their knowledge graphs. Ambiguous entities don't get cited.
    example: >
      "Business as Code (BaC) β€” a methodology for making business processes
      machine-readable and AI-executable..." β†’ LLMs can reliably reference this.
 
  P4_schema_markup:
    rule: >
      Inject JSON-LD schema for each applicable type. At minimum: Article.
      For how-to content: HowTo. For FAQ sections: FAQPage. For guides with
      steps: HowTo + Steps. For comparison content: Table markup.
    priority_schemas:
      - FAQPage        # highest AEO impact β€” directly surfaces in AI Overviews
      - HowTo          # high impact β€” how-to queries are major LLM traffic
      - Article        # baseline β€” authorship, date, publisher
      - BreadcrumbList # navigation context for LLMs
 
  P5_structured_citations:
    rule: >
      Every factual claim must be attributed β€” either to a primary source
      (linked) or to the site's own research/methodology (explicitly stated).
      LLMs prefer citing content that itself cites sources; it signals reliability.
    example: >
      "According to Ahrefs (2024), 96.5% of pages get zero organic traffic..."
      β†’ This claim, with citation, is more likely to be referenced by LLMs
      than the same claim without attribution.
 
  P6_concise_quotable_paragraphs:
    rule: >
      Target 2–3 sentences per paragraph (40–80 words). Each paragraph should
      contain exactly one idea. Long paragraphs dilute the signal-to-noise ratio
      for LLM extraction β€” the model cannot cleanly extract a single answer.
    target_paragraph_length: "40–80 words"
    max_paragraph_length: "100 words"

⚑ Execution Steps

flowchart TD
    A["Receive optimized_content_batch<br/>from S4"]
    B["Score current AEO readiness<br/>per page (0-100)"]
    C["Apply P1: Rewrite section openers<br/>Answer-first structure"]
    D["Apply P2: Generate FAQ section<br/>From PAA + AEO query variants"]
    E["Apply P3: Add entity definitions<br/>First-use disambiguation"]
    F["Apply P4: Generate JSON-LD schema<br/>FAQPage + HowTo + Article"]
    G["Apply P5: Add source citations<br/>Flag unsourced claims"]
    H["Apply P6: Paragraph restructuring<br/>Split long paragraphs"]
    I["Validate schema markup<br/>Schema.org validator"]
    J["Score AEO readiness (post-pass)<br/>Target β‰₯ 75/100"]
    K["Output: aeo_ready_content"]

    A --> B --> C --> D --> E --> F --> G --> H --> I --> J --> K

πŸ“€ Output Schema

{
  "aeo_batch_id": "aeo_2026-04-02",
  "processed_at": "2026-04-02T20:00:00Z",
  "pages_processed": 8,
  "pages": [
    {
      "page_id": "page_C001",
      "url": "/what-is-business-as-code",
      "aeo_score_before": 32,
      "aeo_score_after": 81,
      "principles_applied": ["P1", "P2", "P3", "P4", "P5", "P6"],
      "faq_questions_added": 7,
      "schema_injected": ["Article", "FAQPage"],
      "schema_valid": true,
      "citations_added": 3,
      "unsourced_claims_flagged": 1,
      "content_markdown_with_schema": "[full markdown + JSON-LD]",
      "aeo_notes": "Entity definition for 'AI agent' added. 3 paragraphs split for conciseness. FAQ schema validated successfully."
    }
  ],
  "batch_summary": {
    "avg_aeo_score_before": 38,
    "avg_aeo_score_after": 77,
    "pages_meeting_target": 7,
    "pages_needing_review": 1,
    "total_faq_items_added": 48,
    "schema_validation_pass_rate": 1.0
  }
}

πŸ§ͺ AEO Readiness Scoring (0–100)

aeo_scoring:
  answer_first_structure:
    weight: 20
    check: "β‰₯70% of H2 sections open with direct answer sentence"
    score_full: 20   # all sections
    score_partial: 10  # β‰₯50% of sections
    score_none: 0
 
  faq_section:
    weight: 25
    check: "FAQPage schema present + β‰₯5 questions"
    score_full: 25   # schema + β‰₯5 questions
    score_partial: 12  # questions present, no schema
    score_none: 0
 
  entity_definitions:
    weight: 15
    check: "All key terms defined on first use"
    score_full: 15
    score_partial: 8   # β‰₯50% of terms defined
    score_none: 0
 
  schema_markup:
    weight: 20
    check: "Article schema + at least one content-type schema (FAQPage/HowTo)"
    score_full: 20
    score_partial: 10  # Article only
    score_none: 0
 
  source_citations:
    weight: 10
    check: "All factual claims attributed"
    score_full: 10
    score_partial: 5   # β‰₯50% of claims cited
    score_none: 0
 
  paragraph_conciseness:
    weight: 10
    check: "β‰₯80% of paragraphs are ≀100 words"
    score_full: 10
    score_partial: 5
    score_none: 0
 
thresholds:
  aeo_ready:    "β‰₯ 75 β†’ passes to Technical SEO + Content Review"
  needs_work:   "50–74 β†’ flag for additional AEO pass"
  not_ready:    "< 50 β†’ flag for human copywriter review at Gate #2"

πŸ“Š KPIs

MetricTargetAlert Condition
Avg AEO score (post-pass)β‰₯ 75/100< 60 β†’ review agent prompts
Pages meeting AEO targetβ‰₯ 85%< 70% β†’ flag batch
Schema validation pass rate100%Any fail β†’ fix before publish
FAQ questions added per pageβ‰₯ 5< 3 β†’ supplement from PAA data
Unsourced claims flaggedAll flagged0 (on pages with factual claims) β†’ suspicious

⚠️ Error Handling

error_rules:
  - condition: Schema.org validator returns errors
    action: Fix JSON-LD syntax automatically; re-validate
    fallback: Remove invalid schema block; flag page for manual schema injection
 
  - condition: AEO score after pass is still < 50
    action: Flag page as "needs_human_review" in batch output
    fallback: Include in Gate #2 mandatory review (not 10% sample)
 
  - condition: FAQ generation produces duplicate questions
    action: Deduplicate using semantic similarity check (Claude API)
    fallback: Keep first unique occurrence; discard duplicates
 
  - condition: Entity definition generation creates circular definitions
    action: Re-run with explicit "do not define term using the term itself" constraint
    fallback: Flag for human edit