# SEO Article Production Workflow — AI Workflow export
# https://invitationbuddy.com/workflows/seo-article-production-workflow
schema_version: "1.0"
exported_at: "2026-08-16T12:30:50+00:00"
source: "https://invitationbuddy.com/workflows/seo-article-production-workflow"
workflow:
  name: SEO Article Production Workflow
  slug: "seo-article-production-workflow"
  version: "1.0.0"
  tagline: "Rank-focused article production driven off a keyword calendar"
  summary: "A scheduled pipeline that takes a keyword from your calendar, analyses the SERP, produces an optimised article and queues it for editorial review."
  description: |-
    Production-line SEO content. Where the content marketing workflow starts from a topic, this one starts from a keyword row in a spreadsheet and runs on a schedule — which is what you need once you are publishing at volume.
    
    Every run produces an article plus the SERP analysis showing why it is structured the way it is, so an editor can challenge the reasoning rather than just the prose.
  category: SEO
  type: Multi Tool
  difficulty: intermediate
  automation_level: semi_automated
  pricing: paid
  language: en
  trigger:
    type: schedule
    detail: Weekly content calendar
  input_types:
    - text
    - csv
    - url
  output_types:
    - blog
    - report
  author: null
  company: null
  last_updated: "2026-07-05"
overview:
  purpose: |-
    Production-line SEO content. Where the content marketing workflow starts from a topic, this one starts from a keyword row in a spreadsheet and runs on a schedule — which is what you need once you are publishing at volume.
    
    Every run produces an article plus the SERP analysis showing why it is structured the way it is, so an editor can challenge the reasoning rather than just the prose.
  business_value: "Makes content output predictable and forecastable: a keyword calendar becomes a publishing schedule with a known cost per article."
  expected_outcome: "A queued, optimised draft per calendar row, each with its SERP analysis attached for the editor."
  problems_solved:
    - Keyword research and content production live in separate tools and separate heads
    - No audit trail for why an article was structured a given way
    - Volume publishing degrades quality without a fixed process
    - Refresh decisions are made on gut feel
  ideal_users:
    - "In-house SEO teams publishing weekly or more"
    - "Content agencies with keyword-led retainers"
    - Publishers running topical clusters
  benefits:
    - "Runs on a schedule — output becomes a forecast, not a hope"
    - Every article carries the SERP reasoning behind its structure
    - Cost per article is known before you commit
    - Refresh candidates surface automatically
  limitations:
    - Needs a paid SEO data source to be worth running
    - "Quality still gated by human review — this increases throughput, not autonomy"
    - Works poorly where the SERP rewards original research
    - A core update can invalidate the structural assumptions overnight
  success_metrics:
    - Articles published per week
    - Median position at 90 days
    - Cost per article including tool spend
    - Percentage of drafts accepted without restructuring
metrics:
  estimated_minutes: 120
  estimated_cost: 4.1
  cost_currency: USD
  estimated_tokens: 72000
  success_rate: 88
  automation_percent: 65
  human_review_percent: 35
industries:
  - SaaS
  - "E-commerce"
  - Media
  - Marketing
tags:
  - High ROI
  - Scheduled
  - Human Review
ai_skills:
  - Text Generation
  - Data Analysis
  - Summarization
tools:
  -
    name: ChatGPT
    role: primary
    required: true
    url: "https://invitationbuddy.com/ai-directory/chatgpt"
  -
    name: Claude
    role: supporting
    required: true
    url: "https://invitationbuddy.com/ai-directory/claude"
models: []
integrations:
  -
    name: OpenAI
    kind: ai_provider
    auth_type: api_key
    required: true
  -
    name: Google Sheets
    kind: productivity
    auth_type: oauth
    required: true
  -
    name: WordPress
    kind: marketing
    auth_type: api_key
    required: false
  -
    name: Zapier
    kind: automation
    auth_type: oauth
    required: false
prerequisites:
  -
    kind: api_key
    label: LLM API key
    detail: For the analysis and drafting steps.
    required: true
  -
    kind: account
    label: SEO data provider
    detail: "Semrush, Ahrefs or DataForSEO with API access."
    required: true
  -
    kind: account
    label: Google Sheets
    detail: Holds the keyword calendar that triggers each run.
    required: true
  -
    kind: account
    label: Automation platform
    detail: "Zapier, Make or n8n to run the schedule."
    required: true
steps:
  -
    number: 1
    title: Pull the next keyword from the calendar
    description: "The scheduled trigger reads the next unprocessed row: keyword, target slug, intent and owner."
    tool: Google Sheets
    input: Keyword calendar row
    output: Job payload
    expected_result: "A job with keyword, intent and owner attached."
    estimated_minutes: 2
    difficulty: intermediate
    automation: auto
    manual_review: false
  -
    number: 2
    title: SERP analysis
    description: "Fetch the current top ten and extract their structure, word count, entities covered and content format."
    tool: Semrush
    input: Primary keyword
    output: SERP structure report
    expected_result: A report showing what format and depth currently ranks.
    estimated_minutes: 12
    difficulty: intermediate
    automation: auto
    manual_review: false
    warnings:
      - "If the top ten are dominated by a format you cannot produce, stop and reassign the keyword"
  -
    number: 3
    title: Entity and gap extraction
    description: "Identify the entities every ranking page mentions, and the ones only some cover — the second list is the opportunity."
    model: "GPT-4o"
    prompt: |-
      From these top-ranking pages for "{{keyword}}", extract:
      
      1. Entities mentioned by ALL of them (mandatory coverage)
      2. Entities mentioned by SOME (differentiation opportunities)
      3. Entities mentioned by NONE that a domain expert would expect
      
      Pages:
      {{page_contents}}
      
      Return three lists. Be concrete — name the entity, not the theme.
    input: SERP report
    output: Entity coverage matrix
    estimated_minutes: 10
    difficulty: intermediate
    automation: auto
    manual_review: false
  -
    number: 4
    title: Structured outline
    description: Build the outline to cover every mandatory entity and at least three differentiators.
    model: Claude Sonnet
    input: Entity matrix + intent
    output: Outline with entity map
    expected_result: An outline where each section maps to named entities.
    estimated_minutes: 8
    difficulty: intermediate
    automation: auto
    manual_review: false
  -
    number: 5
    title: Draft and optimise
    description: "Draft section by section, then run the optimisation pass for keyword placement and readability."
    model: Claude Sonnet
    input: Outline
    output: Optimised draft
    estimated_minutes: 25
    difficulty: intermediate
    automation: auto
    manual_review: false
  -
    number: 6
    title: Editorial review
    description: "The assigned editor verifies claims, challenges the structure against the SERP analysis, and approves or returns it."
    input: Draft + SERP analysis
    output: Approved or returned
    estimated_minutes: 45
    difficulty: intermediate
    automation: manual
    manual_review: true
    warnings:
      - Every factual claim needs a source check before publication
  -
    number: 7
    title: Queue for publication
    description: Approved drafts land in the CMS as scheduled posts and the calendar row is marked done.
    tool: WordPress
    input: Approved draft
    output: Scheduled post
    estimated_minutes: 3
    difficulty: intermediate
    automation: auto
    manual_review: false
  -
    number: 8
    title: Performance review at 90 days
    description: Compare actual position against the forecast and flag refresh candidates back into the calendar.
    tool: Google Search Console
    input: Published URLs
    output: Refresh candidates
    expected_result: "Underperformers automatically re-enter the calendar."
    estimated_minutes: 15
    difficulty: intermediate
    automation: semi
    manual_review: false
prompts:
  -
    title: Entity and gap extraction
    kind: user
    body: |-
      From these top-ranking pages for "{{keyword}}", extract:
      
      1. Entities mentioned by ALL of them (mandatory coverage)
      2. Entities mentioned by SOME (differentiation opportunities)
      3. Entities mentioned by NONE that a domain expert would expect
      
      Pages:
      {{page_contents}}
      
      Return three lists. Be concrete — name the entity, not the theme.
    variables:
      - keyword
      - page_contents
    model_hint: "GPT-4o"
use_cases:
  -
    title: "Topical cluster build-out"
    description: "Publish a 20-article cluster on a schedule with consistent internal linking."
    industry: SaaS
    outcome: Cluster live in a quarter
  -
    title: Retainer delivery
    description: Hit a contracted article count per month with predictable cost.
    industry: Marketing
    outcome: Retainer met without overtime
  -
    title: Programmatic category pages
    description: Generate and optimise category descriptions at catalogue scale.
    industry: "E-commerce"
    outcome: Thin pages replaced
faq:
  -
    question: "How is this different from the Content Marketing workflow?"
    answer: "That one starts from a topic and runs on demand. This starts from a keyword calendar and runs on a schedule — built for volume and forecastability rather than one-off pieces."
  -
    question: "What happens when Google ships a core update?"
    answer: "Re-run step 2 on your main keywords. The SERP structure report is what tells you whether the format that used to rank still does."
  -
    question: "Can this run fully unattended?"
    answer: "The production side can. Publication should not — the editorial review exists because a confident, wrong article published under your domain costs more than the time it saves."
