# Content pipeline audit

**Last Updated:** 2026-03-23  
**Purpose:** Baseline sample of **data → outline → body** alignment and SERP doc hygiene. Informs skyscraper enforcement and retrofit backlog.

## Method

- **Sample:** Six lexikon posts (two newest + mixed depth): `personaldisposition`, `urlaubskonto`, `fehlzeitenmanagement`, `arbeitszeitkonto`, `bundesurlaubsgesetz`, `urlaubsanspruch`.
- **Tools:** `compare-content-to-competitors.php`, `validate-content-completeness.php`; `SERP_ANALYSIS.md` scanned for unchecked `- [ ]` placeholders (none found in sampled posts).

## Summary table

| Slug | Words / target (compare) | Ratio | compare result | Completeness notes |
|------|---------------------------|-------|----------------|-------------------|
| personaldisposition | 1664 / 1500 | 111% | Recommendations (H2 vs competitor max) | PAA 14/14, table, lists |
| urlaubskonto | 2261 / 1500 | 151% | PASS | PAA 15/15 |
| fehlzeitenmanagement | 1632 / 1900 | 86% | WARN (~268 words) | PAA 15/15; words flagged |
| arbeitszeitkonto | 1482 / 1500 | 99% | PASS | EXPAND warning width vs depth |
| bundesurlaubsgesetz | 1646 / 3000 | 55% | WARN (~1354 words) | PAA 15/15; strong retrofit candidate |
| urlaubsanspruch | 1258 / 2500 | 50% | PASS (structure recs) | Table missing; retrofit candidate |

**Insights**

1. **PAA coverage** can show COMPLETE while **word ratio** is far below competitive-depth target (`bundesurlaubsgesetz`, `urlaubsanspruch`) — PAA alone is not sufficient for skyscraper depth.
2. **Competitor H2 count** often exceeds ours; not every competitor H2 deserves a merge, but gaps should be triaged in `CONTENT_OUTLINE.md` using `data/outline-scaffold.generated.md` from `synthesize-outline-scaffold.php`.
3. **Outline target** should default to **100%** of `Recommended Target` in `competitive-depth-analysis.md` (validation floor 80% remains `validate-new-post.php --strict`).

## SERP documentation spot-check

For `personaldisposition`, `urlaubskonto`, `bundesurlaubsgesetz`: no unchecked markdown task items in `SERP_ANALYSIS.md` (template placeholders absent). **Live SERP verification** should still follow [SERP_REVIEW_CHECKLIST.md](SERP_REVIEW_CHECKLIST.md) in browser when publishing competitive terms.

## Pilot: validator chain (post-implementation)

Run for regression after workflow changes:

```bash
make blog-post-validate POST=personaldisposition CAT=lexikon
make blog-post-validate POST=urlaubskonto CAT=lexikon
```

**Executed 2026-03-23 (exit 0 both runs)**

| Post | Role | compare-content | section-depth | completeness | geo-citability | aeo-capsules | validate-new-post --strict |
|------|------|-----------------|---------------|--------------|----------------|--------------|----------------------------|
| urlaubskonto | New / recent | PASS (2261/1500) | PASS | COMPLETE | PASS | PASS | OK (WARN: 0 H3s) |
| personaldisposition | Established / revision-style | PASS (1664/1500) | PASS | COMPLETE | PASS | REVIEW (one question H2: first paragraph under 80 chars) | OK |

**Outline scaffold smoke test:** `php v2/scripts/blog/synthesize-outline-scaffold.php --post=urlaubskonto --category=lexikon` wrote `data/outline-scaffold.generated.md`.

**Retrofit note:** `make blog-post-validate` does **not** pass `compare-content-to-competitors --strict`; use `--strict` manually before publish when enforcing no WARN / 80% floor on ratio.

## Retrofit backlog (priority)

| Priority | Slug | Issue |
|----------|------|--------|
| P1 | bundesurlaubsgesetz | ~55% of 3000-word recommended target |
| P1 | urlaubsanspruch | ~50% of target; competitor H2 depth |
| P2 | fehlzeitenmanagement | 86% of target; WARN from compare-content |
| P2 | arbeitszeitkonto | Width vs depth warning |

Expand using `compare-content-to-competitors.php` gap lines and `SKYSCRAPER_CONTENT_QUALITY_ENFORCEMENT.md` — no filler.

## Related deliverables (same initiative)

- [EXTERNAL_CONTENT_SEO_RESEARCH_LOG.md](EXTERNAL_CONTENT_SEO_RESEARCH_LOG.md)
- [CONTENT_SYSTEM_INDEX.md](CONTENT_SYSTEM_INDEX.md)
- Scripts: `synthesize-outline-scaffold.php`, `validate-aeo-capsules.php`, `validate-geo-citability.php`, `compare-content-to-competitors.php --strict`, `validate-content-outline-quality.php --strict-evidence`
- `Makefile`: `blog-outline-gate`, `blog-post-validate`
