Skip to main content

Content Research Workflow

The research folder is the synthesis layer between keyword discovery, NeuronWriter analysis, and content writing. Research can be performed by a human, AI, or both, but every content item uses the same artifact contract.

Ownership Rules

keyword-research.csv
owns Keyword ID (KW-######)

content-inventory.csv
owns content PID (PREFIX-######)

research/<PID>/
owns the research synthesis for that content item

Keyword research may exist without ever becoming content. Its Target Post PID stays empty until an opportunity is selected. Once an idea is created, the selected keyword row points to the content PID.

Directory Layout

research/
└── DEV-000008/
├── research.md
├── serp-analysis.md
├── brief.md
└── sources/

The directory is created automatically by scripts/new-idea.py. The command also copies reusable SERP-analysis and content-brief templates into the PID directory. Do not manually assign a PID or create a research directory for a keyword opportunity before the content idea exists.

Create an Idea

cd /home/rezriz/github/seo-content/web-project/id86.net
python3 scripts/new-idea.py \
--title "Grep Cheatsheet" \
--category devops \
--keyword "grep" \
--keyword-id KW-000001 \
--type cheatsheet \
--researcher ai

The command creates the idea row, assigns the next content PID, sets Research Path, links KW-000001 through Target Post PID, and creates research.md, serp-analysis.md, brief.md, and sources/ in one operation. The keyword ID is optional; when supplied, the keyword text must match and an already-linked opportunity is rejected.

For existing manually edited rows, reconcile expected directories with:

python3 scripts/ensure-research-folders.py --dry-run
python3 scripts/ensure-research-folders.py

Research Contract

---
pid: DEV-000008
researcher: human # human | ai | mixed
status: draft # draft | complete
keyword: grep
---

Required research sections:

  • Keyword summary
  • Searcher and intent
  • Audience and sophistication
  • What the page must answer
  • Differentiation / unique angle
  • Verified facts and sources
  • Cannibalization check
  • Recommended outline
  • Internal-link targets
  • Conversion goal / CTA
  • Editorial notes

serp-analysis.md records ranking URLs, SERP features, People Also Ask questions, competitor gaps, and the differentiation angle. brief.md turns that analysis into the writing specification: primary and secondary keywords, outline, entities, examples, links, sources, and schema.

The research file should cite the relevant keyword row and NeuronWriter brief rather than copying their full data. It becomes complete only after source and overlap checks are finished.

Workflow

Keyword discovery
-> select opportunity
-> create content idea and PID
-> create research/<PID>/
-> human or AI research
-> NeuronWriter SERP analysis
-> complete research.md
-> write content Markdown
-> NeuronWriter evaluation
-> fact check and human approval
-> schedule and publish

NeuronWriter provides topical and SERP guidance. It does not replace fact checking, audience definition, differentiation, internal linking, or editorial judgment.

AI Automation Boundaries

The workflow is designed for a topic-agnostic AI agent, but the agent must not invent missing keyword data or publish unreviewed high-risk claims. Automation is divided into three levels:

LevelAgent may doHuman gate
AutomaticImport and normalize exports, assign KW-######, detect duplicates, validate registers, create research files, run link/frontmatter checksSupply the source export and credentials
AI with reviewCluster keywords, classify intent, recommend priority/content type, analyze SERPs, create briefs, draft Markdown, suggest links and metadataApprove keyword selection, mapping, claims, and final draft
Approval requiredSchedule or publish new content, change URLs, archive content, handle legal/medical/financial/security-sensitive claimsExplicit human approval before first publication

The recommended trigger is:

source CSV supplied
-> agent imports and validates
-> agent proposes keyword/PID mapping
-> human approves selected opportunities
-> agent creates research, SERP analysis, and brief
-> agent drafts and runs QA
-> human approves the article
-> scheduled publish automation runs

needs_source is a holding status for a retained opportunity whose exact keyword or intent is unavailable. The agent may report it, but must not infer the missing value. A keyword row alone never creates a content PID.

Publishing, WordPress Post ID recording, and GSC performance collection are integration steps and require their respective scripts, APIs, credentials, or scheduled jobs to be configured. The research workflow itself does not claim that an AI agent can force Google to index a regular page.

Validation

validate-inventory.py checks that populated Research Path values point inside research/, that the PID directory and research.md exist, and that the research frontmatter PID, researcher, and status are valid.

keyword-research.csv is validated separately for exact keywords, controlled search intent, content type, unique Keyword ID values, duplicate keyword/topic/category combinations, and valid Target Post PID links. needs_source is allowed for retained rows whose exact keyword or intent is still being recovered; the validator reports those rows as warnings. Use import-keywords.py for any compatible keyword export, assign-keyword-ids.py for missing IDs, and validate-keyword-research.py before linking opportunities.