# Lexikon Post Creation To-Do Template

**Last Updated:** 2026-03-23

Step-by-step checklist for new lexikon posts. **DO NOT SKIP** any item. Copy and adapt for each post.

**Jump:** [Pre-Scaffold](#pre-scaffold) · [Scaffold & pipeline](#scaffold-pipeline) · [SERP & outline](#serp-outline) · [Content](#content-creation) · [Post-write validation](#post-write-validation) · [Image & finalization](#image-linking-finalization) · [Hub](../../CONTENT_SYSTEM_INDEX.md)

<a id="pre-scaffold"></a>

## Pre-Scaffold (DO NOT SKIP)

- [ ] Run `python3 scripts/blog/backup-blog-content.py --manual`
- [ ] Verify backup created
- [ ] Verify 2026 legal values (if topic has year-dependent figures)
- [ ] Identify primary cluster (Zeiterfassung/Dienstplan/Both/Supporting)
- [ ] Identify relevant tools, templates, downloads, ratgeber posts

<a id="scaffold-pipeline"></a>

## Scaffold & Pipeline (DO NOT SKIP)

- [ ] `php v2/scripts/blog/create-new-blog-post.php --topic="X" [--title="X"] --category=lexikon`
- [ ] Edit `data/target-keywords.json` (primary + secondary)
- [ ] `php v2/scripts/blog/run-new-post-pipeline.php --post=slug --category=lexikon`
- [ ] **Verify pipeline output:** competitor-analysis.json, competitive-depth-analysis.md, content-depth-report.md
- [ ] **If competitor-analysis has 0 URLs:** Run SISTRIX failure fallback (Serper MCP for top URLs, Firecrawl remediate). See SISTRIX_FAILURE_FALLBACKS.md
- [ ] **If PAA off-topic or empty:** Create `data/paa-questions-manual.json`; run `collect-faq-research-data.php`

<a id="serp-outline"></a>

## SERP & Outline (DO NOT SKIP)

- [ ] `php v2/scripts/blog/validate-blog-competitor-data-completeness.php --post=slug --category=lexikon --top=5 [--remediate]`
- [ ] **30 min browser SERP review** per SERP_REVIEW_CHECKLIST.md
- [ ] Fill SERP_ANALYSIS.md – no placeholders (`*Min 30 min browser review*`, `- [ ]`, empty Recommendations)
- [ ] Create CONTENT_OUTLINE.md (8–12 H2s, **target 100% of competitive-depth recommended**, Unique Value ≥1 checked). See SKYSCRAPER_CONTENT_QUALITY_ENFORCEMENT.md
- [ ] **Outline scaffold (default):** When `data/competitive-depth-analysis.md` exists, run `php v2/scripts/blog/synthesize-outline-scaffold.php --post=slug --category=lexikon` → merge `data/outline-scaffold.generated.md` into CONTENT_OUTLINE.md (competitor H2 frequency, PAA, gaps). **Skip only** for narrow/errata posts or missing depth file—note exception in `CREATION_NOTES.md`.
- [ ] `php v2/scripts/blog/generate-section-briefs.php`
- [ ] **Outline gate:** `make blog-outline-gate POST=slug CAT=lexikon` (or run `validate-serp-outline-ready`, `validate-content-outline-quality` with `--target-ratio=1.0`, `check-outline-h2-overlap` separately)
- [ ] **Strict evidence (recommended new posts):** `validate-content-outline-quality.php ... --strict-evidence` so every H2 has substantive **Evidence:**
- [ ] `php v2/scripts/blog/check-outline-h2-overlap.php --post=slug --category=lexikon` (if not already in make target)

<a id="content-creation"></a>

## Content Creation (DO NOT SKIP)

- [ ] **Before each H2:** Read `data/section-briefs.md` for that section
- [ ] Write content section-by-section; apply via `update-post-content.php` when complete
- [ ] `php v2/scripts/blog/compare-content-to-competitors.php --post=slug --category=lexikon` – **address all gaps substantively** (Rechtsfragen, Anwendungsfelder, depth per section); never add filler to reach word count. See SKYSCRAPER_CONTENT_QUALITY_ENFORCEMENT.md. Use `--strict` to fail on WARN / low ratio.
- [ ] Run CONTENT_QUALITY_PRE_PUBLISH_CHECKLIST.md before apply

<a id="post-write-validation"></a>

## Post-Write Validation (DO NOT SKIP – ALL MUST PASS)

- [ ] **One command (recommended):** `make blog-post-validate POST=slug CAT=lexikon`
- [ ] **Pre-publish / merge:** `make blog-post-validate-strict POST=slug CAT=lexikon` (compare --strict, internal links, content-flow). **FAQ-only session:** `make blog-post-validate-faq POST=slug CAT=lexikon`; if body also changed, still run strict. See [BLOG_WORKFLOW_EFFICIENCY.md](../../BLOG_WORKFLOW_EFFICIENCY.md).
- [ ] Or individually: `validate-section-depth`, `validate-content-completeness`, `validate-geo-citability.php`, `validate-aeo-capsules.php`, `validate-faq-quality`, `check-h2-faq-overlap`, `validate-new-post.php --strict`
- [ ] `php v2/scripts/blog/validate-new-post.php --post=slug --category=lexikon --strict` – **word count below 80% = ERROR**

**If any validator fails:** Address gaps, re-apply content, re-run. Do not publish until all pass.

<a id="image-linking-finalization"></a>

## Image, Linking, Finalization

- [ ] **Title format:** Uses `: ` (colon) separator; descriptor is specific (not only Definition/Überblick). See BLOG_SEO_TITLE_STANDARDS.md.
- [ ] Create IMAGE_PROMPT.md; run `audit-blog-image-scene-types.py --report-adjacent=3`
- [ ] Generate featured image; set SEO meta; sync-meta-to-posts
- [ ] suggest-related-posts, add-new-post-to-related-carousels; **if scores empty/low or clusters sparse:** add `set-{slug}-related-posts.php` with curated pillars + sibling posts (see `set-3-schicht-system-related-posts.php`)
- [ ] generate-lead-capture-copy.php --write
- [ ] sync-blog-posts-to-llms.php --add
- [ ] Create CREATION_NOTES.md

## References

- [BLOG_WORKFLOW_EFFICIENCY.md](../../BLOG_WORKFLOW_EFFICIENCY.md)
- [CONTENT_SYSTEM_INDEX.md](../../CONTENT_SYSTEM_INDEX.md)
- [LEXIKON_NEW_POST_CHECKLIST.md](../../lexikon-inventory/LEXIKON_NEW_POST_CHECKLIST.md)
- [SISTRIX_FAILURE_FALLBACKS.md](../../SISTRIX_FAILURE_FALLBACKS.md)
- [SKYSCRAPER_CONTENT_QUALITY_ENFORCEMENT.md](../../SKYSCRAPER_CONTENT_QUALITY_ENFORCEMENT.md)
- [blog-content-creation-gate.mdc](../../../../.cursor/rules/blog-content-creation-gate.mdc)
