# Rüstkosten — creation notes

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

## Summary

Lexikon post **ruestkosten** (Supporting / Zeiterfassung + Dienstplan secondary): betriebswirtschaftlicher **Kostenbegriff** (Rüsten, Losgröße, Verrechnung, Personalkostenanteil); klare Abgrenzung zu **Rüstzeit** (Zeit/ArbZG) — bidirektional verlinkt.

## Backup

- `python3 scripts/blog/backup-blog-content.py --manual` → `docs/backups/blog-snapshots/2026-03-23-145248/` (validated).

## Pipeline & research

- Scaffold: `create-new-blog-post.php` — ASCII slug **`ruestkosten`** (Unicode slug per `.htaccess` 301).
- SISTRIX + `run-new-post-pipeline.php`; **sparse** competitor URLs (Haufe, PDF) — dokumentiert in `SERP_ANALYSIS.md`.
- **PAA:** größtenteils accounting-noise → `data/paa-questions-manual.json` + `collect-faq-research-data.php`.

## Content & FAQs

- Outline: `CONTENT_OUTLINE.md`, `generate-section-briefs.php`; SERP/outline gates mit erwartbaren WARNs.
- Body: `content-draft.html` → **`update-post-content.php`** only.
- FAQs: `generate-faq-answers-optimized` + manuelle QA in `data/faq-answers-optimized.json` → `add-faqs-to-post.php` (**15** FAQs). FAQ #1 auf **≥40 Wörter** erweitert (Schema-Validator).

## Related, carousels, cross-links

- `set-ruestkosten-related-posts.php` (Pillars + kuratierte Lexikon-Liste).
- `add-new-post-to-related-carousels.php --write` → u. a. ruestzeit, projektzeiterfassung, schichtarbeit, personalkostenplanung, arbeitszeit, arbeitszeiterfassungsgesetz, stempeluhr, lohnabrechnung.
- **Bidirectional:** `ruestzeit` — Absatz **Kostenfolge** → `/insights/lexikon/ruestkosten/` (Inhalt in `ruestzeit.json`; bei künftigen Body-Änderungen wieder `update-post-content.php` bevorzugen).

## SEO, lead, mapping

- `v2/data/blog/seo-meta.json` + `docs/.../data/seo-meta.json` key **`lexikon/ruestkosten`**; `sync-meta-to-posts.php`.
- **Product mapping:** `ruestkosten` in `docs/data/blog-product-feature-mapping.json` und `v2/data/blog/blog-product-feature-mapping.json` → `/payroll`, `/arbeitszeiterfassung`, `/schichtplan`.
- **Lead:** `_slugToBenefit` + `_slugToHeadline` **`ruestkosten`** in `generate-lead-capture-copy.php` → `generate-lead-capture-copy.php --post=ruestkosten --category=lexikon --write`.

## Image

- `IMAGE_PROMPT.md` — Szene **DESK/costing** (abstrakte Charts), **nicht** Werkstatt-CNC wie **ruestzeit**.
- `python3 v2/scripts/blog/audit-blog-image-scene-types.py --category=lexikon --report-adjacent=3` (gegen **ruestzeit** prüfen).
- `python3 v2/scripts/blog/generate-blog-featured-image.py --post=ruestkosten --category=lexikon` (benötigt Gemini-Key; sonst Platzhalter bis Nachlauf).

## LLM & inventory

- `php v2/scripts/llms/sync-blog-posts-to-llms.php --add` und ggf. `--update-counts`.
- **`merged.json`:** `ruestkosten` → `ordio_covered: true`, `ordio_slug: ruestkosten`.
- **`LEXIKON_CONTENT_GAPS.md`:** Zeile `ruestkosten` entfernt.

## Follow-up (2026-03-23)

- **Tool-Link (blog-tool-mapping):** Im Fließtext unter „Schnittstelle zur Lohnbuchhaltung“ Link zum **`/tools/brutto-netto-rechner`** ergänzt (neben Arbeitszeitrechner/Stundenlohnrechner) — `validate-new-post.php --strict` ohne WARN zu „lohnabrechnung“/Tool.
- **SISTRIX:** Voller Keyword-Lauf siehe `KEYWORD_DECISION.md` (2026-03-23).
- **Sparse competitors:** `validate-blog-competitor-data-completeness.php --remediate` (API) lieferte keine Daten; **Firecrawl MCP** (`firecrawl_scrape`): Haufe-Artikel + PDF (`parsers: pdf`) — manuelle Anpassung von `word_count`/`headings` in `data/competitor-analysis.json` für Positionen 3 und 5, sodass Validator **OK** meldet.
- **Lead-Capture-Detector:** `lead-capture-copy-detector.php` Quick-Lookup für `/insights/lexikon/ruestkosten/` → `blog_ruestkosten` (und `ruestzeit` → `blog_ruestzeit` ergänzt).

## Validators (post-scoped)

- `validate-section-depth`, `validate-content-completeness`, `validate-content-flow`, `validate-new-post.php --strict`, `validate-internal-links-exist.php --strict`, `validate-faq-quality.php`, `validate-faq-schema.php`, `compare-content-to-competitors.php` nach Bedarf.
- Repo-weit: `make validate` kann an **PHPStan** scheitern — nicht post-spezifisch.

## Rule / doc touch

- `.cursor/rules/blog-new-post-creation.mdc` — Bullet **Rüstkosten / Rüstzeit** (Kosten vs. Zeit).
