# Manual Review Resume Runbook

**Last Updated:** 2026-02-11  
**Purpose:** Single entry point for resuming one-by-one manual review of blog posts. Use when user says "Review post X" or when picking up the manual review process.

## Overview

This runbook provides a streamlined workflow for reviewing and improving blog posts one at a time. It consolidates preparation, data collection, analysis, content creation, and validation into a single reference.

## Pre-Review Checklist (Per Post)

Complete before starting each post review:

- [ ] **Backup created:** `python3 scripts/blog/backup-blog-content.py --manual`
- [ ] **Data validated:** `php v2/scripts/blog/validate-data-collection.php --post=$POST_SLUG --category=$CATEGORY`
- [ ] **Stale data refreshed:** If validation reports stale data, run data collection chain (see Phase 1.2 in [BLOG_POST_IMPROVEMENT_PROCESS.md](BLOG_POST_IMPROVEMENT_PROCESS.md))
- [ ] **Documentation exists:** POST_ANALYSIS.md, SEO_REPORT.md, INTERNAL_LINKS.md, IMPROVEMENT_PLAN.md in `docs/content/blog/posts/{category}/{slug}/`
- [ ] **Manual review checklist generated:** `php v2/scripts/blog/generate-manual-review-checklist.php --post=$POST_SLUG --category=$CATEGORY`
- [ ] **Pre-content checklist generated:** `php v2/scripts/blog/generate-pre-content-checklist.php --post=$POST_SLUG --category=$CATEGORY`

**If Quality \< 60 or Word Count \< 80% target:** Full rework mandatory. Do not patch. Complete Phases 1–3, then rewrite from scratch.

## Before Starting (Per Post)

### Step 1: Set Variables

```bash
POST_SLUG="your-post-slug"
CATEGORY="ratgeber"  # or "lexikon" or "inside-ordio"
```

### Step 2: Run Preparation Commands

```bash
# Backup (always run before changes)
python3 scripts/blog/backup-blog-content.py --manual

# Validate data freshness
php v2/scripts/blog/validate-data-collection.php --post=$POST_SLUG --category=$CATEGORY

# If stale, run data collection (see data collection section below)

# Generate personalized checklist
php v2/scripts/blog/generate-manual-review-checklist.php --post=$POST_SLUG --category=$CATEGORY
```

### Step 0: Keyword Derivation (Before Data Collection)

**CRITICAL:** Run keyword derivation before SISTRIX/FAQ/SERP collectors. Wrong `primary_keyword` in post JSON causes all downstream data (SISTRIX, FAQ research, SERP features) to be irrelevant.

```bash
# 1. GA4 and GSC first (URL-based, parallel)
php v2/scripts/blog/run-parallel-collection.php --post=$POST_SLUG --category=$CATEGORY

# 2. Derive target keywords from GSC top queries
php v2/scripts/blog/derive-target-keywords.php --post=$POST_SLUG --category=$CATEGORY [--update-post]

# 3. Verify target-keywords.json; override if needed:
#    docs/content/blog/posts/{category}/{slug}/data/target-keywords.json

# 4. If --update-post: post JSON updated. Otherwise collectors use target-keywords.json.
```

### Step 3: Data Collection (If Stale)

If validation reports stale data (> 7 days for GA4/GSC, > 30 days for SISTRIX):

```bash
# Order: GA4+GSC (parallel) → derive → keywords → PAA (before FAQ) → FAQ research → SERP
php v2/scripts/blog/run-parallel-collection.php --post=$POST_SLUG --category=$CATEGORY
php v2/scripts/blog/derive-target-keywords.php --post=$POST_SLUG --category=$CATEGORY --update-post
php v2/scripts/blog/collect-post-keywords-sistrix.php --post=$POST_SLUG --category=$CATEGORY
php v2/scripts/blog/collect-post-paa-questions.php --post=$POST_SLUG --category=$CATEGORY
php v2/scripts/blog/collect-faq-research-data.php --post=$POST_SLUG --category=$CATEGORY
php v2/scripts/blog/collect-post-serp-features.php --post=$POST_SLUG --category=$CATEGORY
php v2/scripts/blog/collect-post-competitor-analysis.php --post=$POST_SLUG --category=$CATEGORY
php v2/scripts/blog/collect-post-search-intent.php --post=$POST_SLUG --category=$CATEGORY
php v2/scripts/blog/collect-post-competition-levels.php --post=$POST_SLUG --category=$CATEGORY
```

**Output:** `data/competitor-analysis.json` (top 5 ranking URLs with headings, word count, FAQs). See [DATA_COLLECTION_SCRIPTS_INVENTORY.md](DATA_COLLECTION_SCRIPTS_INVENTORY.md). Use `--keywords=primary-only` to save credits (~1 vs ~3).

**Estimated time:** 15-30 minutes | **Estimated credits:** 31-53 SISTRIX credits (incl. competitor 1-3)

### Step 4: Generate/Regenerate Documentation

```bash
# Run analyses (parallel)
php v2/scripts/blog/run-parallel-analyze.php --post=$POST_SLUG --category=$CATEGORY
php v2/scripts/blog/analyze-competitor-content-depth.php --post=$POST_SLUG --category=$CATEGORY --output=$(pwd)/docs/content/blog/posts/$CATEGORY/$POST_SLUG/data/competitive-depth-analysis.md

# Generate documentation (safe regeneration preserves manual edits)
php v2/scripts/blog/safe-regenerate-documentation.php --post=$POST_SLUG --category=$CATEGORY --backup

# Generate SERP skeleton and pre-content checklist
php v2/scripts/blog/generate-serp-analysis-skeleton.php --post=$POST_SLUG --category=$CATEGORY
php v2/scripts/blog/generate-pre-content-checklist.php --post=$POST_SLUG --category=$CATEGORY
```

### Step 0.5: Validate Improvement Readiness (Phase Gate)

**Before editing content:** Run `validate-improvement-readiness.php`. If it fails, complete the missing steps (SERP analysis, CONTENT_OUTLINE.md) before Phase 4.

```bash
php v2/scripts/blog/validate-improvement-readiness.php --post=$POST_SLUG --category=$CATEGORY
```

Exit 0 = ready for content creation. Exit 1 = complete Phases 1–3 first.

## Review Workflow

### Step 1: Read Documentation

Navigate to `docs/content/blog/posts/{category}/{slug}/` and review:

1. **PRE_CONTENT_CHECKLIST.md** – Atomic checklist; complete before Phase 4
2. **MANUAL_REVIEW_CHECKLIST.md** – Personalized checklist
3. **POST_ANALYSIS.md** – Content analysis and quality
4. **SEO_REPORT.md** – SEO performance and keywords
5. **INTERNAL_LINKS.md** – Link analysis and opportunities
6. **IMPROVEMENT_PLAN.md** – Actionable improvements (Ratgeber/Lexikon only)

### Step 2: Conduct SERP Analysis

**Time: Minimum 30 minutes.** Before content creation:

- [ ] Run `collect-post-competitor-analysis.php` if not in pipeline (output: `data/competitor-analysis.json`)
- [ ] Review `data/competitor-analysis.json` (headings, topics, word counts of top 5)
- [ ] Complete browser SERP review per [SERP_REVIEW_CHECKLIST.md](posts/_templates/SERP_REVIEW_CHECKLIST.md)
- [ ] Open browser in incognito mode
- [ ] Search primary keyword in Google; document top 5 URLs, headings, FAQ count, word count
- [ ] Search 2 secondary keywords; same documentation
- [ ] For each search: note competitor URLs, H2/H3 structure, PAA questions
- [ ] Fill `SERP_ANALYSIS.md` manual sections (run `generate-serp-analysis-skeleton.php` first if missing)
- [ ] Use for skyscraper technique: outline covers everything + more + better format

**Reference:** [SERP_ANALYSIS_WORKFLOW.md](SERP_ANALYSIS_WORKFLOW.md)

### Step 3: Create/Update Content

- **Full rework:** Content can be completely rewritten. Headers, structure, FAQs, internal links—all reconsidered. Keep only calculators, videos, essential images. Do not patch incrementally.
- Treat as new from scratch; preserve calculators, videos, images
- Follow content quality standards (see [CONTENT_QUALITY_STANDARDS_2026.md](CONTENT_QUALITY_STANDARDS_2026.md))
- **Avoid AI content tells:** See [AI_CONTENT_AVOIDANCE_GUIDE.md](../AI_CONTENT_AVOIDANCE_GUIDE.md)
- **Section depth:** No thin sections—each H2 must have 2+ paragraphs or 1 paragraph + structured content (list/table). See [CONTENT_DEPTH_GUIDELINES.md](CONTENT_DEPTH_GUIDELINES.md) "Section Depth Standards" for details.
- **Tipps/Checkliste sections:** Use H3 sub-headings per tip (not just bold lead-ins in paragraphs). Each tip needs 2–3 sentences. See CONTENT_DEPTH_GUIDELINES "Tipps/Checkliste Sections" for formatting. *Note: H3s are optional elsewhere; H2+paragraphs is valid for many sections. When H3s are used: Optional intro paragraph between H2 and first H3 for smoother flow. Content-driven; avoid cheesy transitions. See [CONTENT_WRITING_GUIDELINES.md](CONTENT_WRITING_GUIDELINES.md).*
- Definition within first 20% of content
- Natural du tone, varied sentence structures

**Reference:** [BLOG_POST_IMPROVEMENT_PROCESS.md](BLOG_POST_IMPROVEMENT_PROCESS.md) Phase 4

### Step 4: Create/Update FAQs

- 10-15 FAQs optimal
- Sources: PAA questions (run collect-post-paa-questions before FAQ research), GSC top queries
- **Before add-faqs-to-post:** Run `check-h2-faq-overlap.php` – overlap similarity < 0.65; remove or rephrase overlapping FAQs
- Answer length: 40-80 words
- Primary keyword in 3-5 FAQs (natural)
- 2-3 internal links total across all FAQs

**Reference:** [FAQ_MANUAL_REVIEW_SEO_CHECKLIST.md](FAQ_MANUAL_REVIEW_SEO_CHECKLIST.md)

### Step 5: Internal Linking

- 10-15 internal links per post
- Include pillar pages (see [TIER1_PILLAR_MAPPING.md](TIER1_PILLAR_MAPPING.md))
- Add tools, templates, related posts
- Natural anchor text (not "click here")

**Reference:** [INTERNAL_LINKING_IMPROVEMENT_GUIDE.md](INTERNAL_LINKING_IMPROVEMENT_GUIDE.md)

### Step 6: SEO/GEO/AEO Optimization

- Meta title (50-60 chars), meta description (150-160 chars)
- Schema: Article, FAQPage, BreadcrumbList
- Answer-first structure for AI search
- E-E-A-T signals throughout

**Reference:** [SEO_GEO_AEO_CHECKLIST.md](SEO_GEO_AEO_CHECKLIST.md)

### Step 7: Validation

```bash
php v2/scripts/blog/seo-validation-tier1.php --post=$POST_SLUG --category=$CATEGORY
php v2/scripts/blog/validate-faq-schema.php --post=$POST_SLUG --category=$CATEGORY
php v2/scripts/blog/validate-content-flow.php --post=$POST_SLUG --category=$CATEGORY
php v2/scripts/blog/validate-pillar-links.php --post=$POST_SLUG --category=$CATEGORY
php v2/scripts/blog/validate-documentation-quality.php --post=$POST_SLUG --category=$CATEGORY
```

## Todo List Structure (When Improving a Post)

When agent starts "improve post X", create a todo list from this structure. Do not start "Edit content.html" until validate-improvement-readiness passes.

- **Phase 1: Data Collection**
  - [ ] Backup
  - [ ] GA4, GSC
  - [ ] Derive keywords
  - [ ] SISTRIX, FAQ, SERP features
- **Phase 2: Analysis & Docs**
  - [ ] Run analyses
  - [ ] Regenerate docs
  - [ ] Read all reports
- **Phase 3: Research**
  - [ ] SERP analysis (30 min browser)
  - [ ] Create SERP_ANALYSIS.md
  - [ ] Create CONTENT_OUTLINE.md (skyscraper)
- **Phase 4: Validation Gate**
  - [ ] validate-improvement-readiness.php passes
- **Phase 5: Content Creation**
  - [ ] Rewrite content from scratch
  - [ ] Create/update FAQs
  - [ ] Internal linking
  - [ ] Tool links
- **Phase 6: Validation**
  - [ ] All validation scripts pass

## Key References

| Document | Purpose |
|----------|---------|
| [BLOG_POST_IMPROVEMENT_PROCESS.md](BLOG_POST_IMPROVEMENT_PROCESS.md) | Complete 7-phase workflow |
| [QUICK_START_IMPROVEMENT.md](QUICK_START_IMPROVEMENT.md) | Quick reference commands |
| [AI_CONTENT_AVOIDANCE_GUIDE.md](../AI_CONTENT_AVOIDANCE_GUIDE.md) | Avoid AI content tells |
| [FAQ_MANUAL_REVIEW_SEO_CHECKLIST.md](FAQ_MANUAL_REVIEW_SEO_CHECKLIST.md) | FAQ quality standards |
| [CONTENT_QUALITY_STANDARDS_2026.md](CONTENT_QUALITY_STANDARDS_2026.md) | Word count, structure, quality |
| [REVIEW_PROGRESS_TRACKER.md](REVIEW_PROGRESS_TRACKER.md) | Current progress |
| [REVIEW_PRIORITY_LIST.md](REVIEW_PRIORITY_LIST.md) | Prioritized posts |

## Progress Tracking

After completing a post:

```bash
php v2/scripts/blog/generate-review-progress-tracker.php
```

## Troubleshooting

- **Missing data:** Run `validate-data-collection.php`; if missing, run collection scripts
- **Stale data:** Run `check-data-freshness.php --tier=1 --max-age=7 --auto-refresh` for Tier 1 posts
- **Manual sections lost:** Use `safe-regenerate-documentation.php` (never `generate-post-documentation.php` directly)
- **Placeholders not populating:** Check data files exist in `data/` subdirectory; run `auto-fill-placeholders.php`

**See:** [TROUBLESHOOTING_GUIDE.md](guides/TROUBLESHOOTING_GUIDE.md)

### Related Documentation

- [MANUAL_REVIEW_WORKFLOW.md](guides/MANUAL_REVIEW_WORKFLOW.md)
- [DATA_COLLECTION_SCRIPTS_INVENTORY.md](DATA_COLLECTION_SCRIPTS_INVENTORY.md)
- [QUALITY_ASSURANCE_CHECKLIST.md](QUALITY_ASSURANCE_CHECKLIST.md)
