Skip to content

Latest commit

 

History

History
305 lines (253 loc) · 7.47 KB

File metadata and controls

305 lines (253 loc) · 7.47 KB

Blog vs Keywords UI Comparison

Date: Dec 9, 2025
Purpose: Compare blog and keyword generation UI/data to identify gaps


📊 Data Structure Comparison

Keywords Output (Keyword interface)

interface Keyword {
  keyword: string
  intent: string
  score: number
  cluster: string
  source: string
  volume: number | null
  difficulty: number | null
  aeo_opportunity: number | null
  has_featured_snippet: boolean | null
  has_paa: boolean | null
  
  // ENHANCED DATA (newly added)
  research_data: {
    sources: Array<{
      platform: string
      url: string
      quote: string
      title: string
      // ... more fields
    }>
    total_sources_found: number
    platforms_searched: string[]
  } | null
  
  content_brief: {
    content_angle: string
    target_questions: string[]
    audience_pain_point: string
    sources: Array<{  // ← NEW: Source attribution
      platform: string
      url: string
      title: string
    }>
  } | null
  
  serp_data: {
    organic_results: Array<{
      position: number
      url: string
      title: string
      description: string
      meta_tags: object  // ← NEW: Meta tags
    }>
    featured_snippet: object | null
    paa_questions: Array<object>
  } | null
  
  trends_data: object | null
  autocomplete_data: object | null
  citations: Array<object>
}

Blogs Output (BlogResult interface)

interface BlogResult {
  title: string
  content: string  // Full Markdown content
  metadata: {
    keyword: string
    word_count: number
    generation_time: number
    company_name: string
    company_url: string
    aeo_score?: number
    job_id?: string
    slug?: string
  }
}

Verdict: Blogs return MUCH LESS data than keywords. Only basic metadata.


🎨 UI Display Comparison

Keywords UI (KeywordGenerator.tsx)

Results Table:

  • ✅ Basic columns: Keyword, Intent, Score, Cluster, Source, Volume, Difficulty, AEO Opp., Features
  • Expandable rows for enhanced data:
    • Research sources with clickable links
    • Content brief with sources
    • SERP data with meta tags
    • Google Trends data
    • Citations
  • CSV export with 12+ columns (all enhanced data)
  • Progress bar: 7-stage with substages (simulated, 4-5 min)

Example Enhanced Display:

📊 Research Data (3 sources)
  🔎 Reddit: "Users were looking for X" → [clickable URL]
  🔎 Quora: "Common pain point Y" → [clickable URL]

📝 Content Brief
  Content Angle: "Focus on Z"
  Target Questions: Q1, Q2, Q3
  Audience Pain Point: "Users struggle with..."
  Sources:
    🔎 Platform: Title → [clickable URL]

Blogs UI (BlogGenerator.tsx)

Results Display:

  • ✅ Basic info: Keyword, Title, Word Count, AEO Score, Status
  • NO expandable rows
  • NO enhanced data display
  • CSV export but only 5 columns: Keyword, Title, Word Count, AEO Score, Status
  • Progress bar: 6-stage (simulated, similar to keywords)
  • Download individual blog as Markdown

Example Display:

1. AI in healthcare
   "How AI is Transforming Healthcare in 2025"
   1,234 words • AEO: 78/100
   [Download]

Verdict: Blogs UI is MUCH SIMPLER than keywords. No enhanced data display.


🔍 What Data is Missing in Blogs UI?

Based on openblog pipeline, the following data is generated but NOT displayed in UI:

1. Citations (Stage 4)

  • Source URLs with validation
  • Citation format (APA/MLA/Chicago)
  • Keywords show: ✅ Citations in expandable row
  • Blogs show: ❌ Not displayed

2. Internal Links (Stage 5)

  • Links to other blogs
  • Anchor text suggestions
  • Keywords show: N/A (not applicable)
  • Blogs show: ❌ Not displayed (but generated)

3. Table of Contents (Stage 6)

  • Section headings
  • Jump links
  • Keywords show: N/A
  • Blogs show: ❌ Not displayed (but in content)

4. Metadata (Stage 7)

  • Meta title
  • Meta description
  • Open Graph tags
  • Keywords show: N/A
  • Blogs show: ❌ Not displayed

5. FAQ/PAA (Stage 8)

  • Questions extracted
  • Answers generated
  • Keywords show: ✅ PAA questions in SERP data
  • Blogs show: ❌ Not displayed (but in content)

6. Image Data (Stage 9)

  • Featured image URL
  • Alt text
  • Image prompt used
  • Keywords show: N/A
  • Blogs show: ❌ Not displayed

7. AEO Score Breakdown (Stage 10)

  • Individual component scores
  • Suggestions for improvement
  • Keywords show: ✅ AEO opportunity score
  • Blogs show: ⚠️ Only total score (78/100)

8. HTML Output (Stage 11)

  • Full HTML with proper structure
  • Semantic tags
  • Keywords show: N/A
  • Blogs show: ❌ Not displayed (only Markdown)

🎯 Recommendations

1. Add Expandable Rows to Blogs UI (like keywords)

Show enhanced data for each blog:

  • ✅ Citations (with clickable links)
  • ✅ Internal links generated
  • ✅ FAQ/PAA questions
  • ✅ Meta tags (title, description, OG)
  • ✅ Image data (URL, alt text, prompt)
  • ✅ AEO score breakdown

2. Enhance CSV Export (like keywords)

Add columns:

  • citations_count
  • internal_links_count
  • faq_count
  • meta_title
  • meta_description
  • image_url
  • aeo_score_breakdown

3. Update Blog Output Schema

Extend BlogResult interface to include:

interface BlogResult {
  title: string
  content: string
  html?: string  // Full HTML output
  metadata: {
    keyword: string
    word_count: number
    generation_time: number
    company_name: string
    company_url: string
    aeo_score?: number
    job_id?: string
    slug?: string
    
    // NEW: Enhanced metadata
    meta_title?: string
    meta_description?: string
    og_image?: string
  }
  
  // NEW: Enhanced data
  citations?: Array<{
    id: number
    type: string
    source: string
    url: string
    text: string
  }>
  
  internal_links?: Array<{
    anchor_text: string
    target_slug: string
    target_title: string
  }>
  
  faq?: Array<{
    question: string
    answer: string
  }>
  
  image?: {
    url: string
    alt_text: string
    prompt: string
  }
  
  aeo_breakdown?: {
    citations_score: number
    structure_score: number
    readability_score: number
    keyword_optimization_score: number
    total_score: number
  }
}

4. Sync with Latest OpenBlog

  • ✅ Replace blog-writer files with latest openblog
  • ✅ Update scripts/generate-blog.py to return enhanced data
  • ✅ Update BlogGenerator.tsx to display enhanced data
  • ✅ Add expandable rows (copy pattern from KeywordGenerator.tsx)

🚨 Critical Gaps

  1. Blog UI is outdated - Missing 2-7 days of openblog improvements
  2. No enhanced data display - Unlike keywords, blogs don't show rich data
  3. Limited CSV export - Only 5 columns vs 12+ for keywords
  4. No source attribution - Citations exist but not displayed
  5. No expandable rows - Can't see detailed blog metadata

📋 Action Plan

  1. Sync OpenBlog - Replace blog-writer with latest openblog (or convert to submodule)
  2. Update Bridge Script - Modify scripts/generate-blog.py to return all enhanced data
  3. Extend TypeScript Interfaces - Add enhanced fields to BlogResult
  4. Update UI Component - Add expandable rows to BlogGenerator.tsx (copy from keywords)
  5. Enhance CSV Export - Add 10+ new columns with enhanced data
  6. Test Integration - Verify all data flows from Python → API → UI

Recommendation: Achieve full parity with keywords UI by displaying all enhanced blog data.