Phase 3b: Generate content briefs for high-priority articles by scraping Top 5 SERP competitors, identifying unique content gaps, and producing validated outlines. Requires priority.json from ta-7.
Analysiere die Top-5-Konkurrenzseiten für das primary_keyword jedes High-Priority-Artikels. Extrahiere Heading-Strukturen, beantwortete Fragen und Entitäten. Identifiziere Unique Content Gaps (Fragen die niemand beantwortet) und generiere ein validiertes Outline das ta-9/ta-10 direkt konsumieren.
/ta-8-content-brief-generate
/ta-8-content-brief-generate kleinbetriebe
/ta-8-content-brief-generate kleinbetriebe kleinbetriebe-a1
Read data/project-config.json and extract:
domain (für Ausschluss eigener Seiten aus Konkurrenzanalyse)language_code (e.g. "de")location_name (e.g. "Germany")If project-config.json doesn't exist, abort: "Bitte zuerst data/project-config.json anlegen."
Lade data/content-plans/priority.json.
Wenn keine Argumente:
score >= 70 (High Priority) aus allen Clusterncontent_brief Objekt im Content-Plan habenX High-Priority-Artikel ohne Content Brief gefunden:
| # | Cluster | Artikel | Score | Keyword |
|---|---------|---------|-------|---------|
| 1 | kleinbetriebe | Ist Zeiterfassung Pflicht? | 82 | zeiterfassung pflicht kleinbetriebe |
| 2 | kleinbetriebe | Welche Strafen drohen? | 71 | zeiterfassung strafen |
Alle verarbeiten? (ja | Nummern z.B. "1,2" | cluster-id | cluster-id article-id)
Wenn {cluster-id} angegeben:
Wenn {cluster-id} {article-id} angegeben:
Pillar-Artikel:
Skip-Logik: Überspringe Artikel die bereits ein content_brief Objekt im Content-Plan haben. Zeige:
Übersprungen: [Titel] (Brief vom [Datum] vorhanden. --force zum Überschreiben)
data/content-plans/{cluster-id}.json
primary_keyword, secondary_keywords, questions[], article_type, primary_entities[]data/qa-database/{cluster-id}.json
questions Array des Artikels referenziert sindai_answer, entities, info_gain_score pro Fragedata/topical-authority/topical-map.json
questions[] des Clusters (PAA-Fragen als Unique-Gap-Kandidaten)entities[] des Clustersserp_features für das primary_keywordcontent_gaps[] des ClustersRufe DataForSEO auf für das primary_keyword des Artikels:
mcp__dataforseo__serp_organic_live_advanced
- keyword: {primary_keyword}
- language_code: {config.language_code}
- location_name: {config.location_name}
- depth: 10
- people_also_ask_click_depth: 4
Aus den Ergebnissen:
config.domain) ausschließen/tag/, /category/, /author/, /page/, Social-Media-Domains (reddit.com, quora.com, youtube.com)Wähle Top 5 URLs aus den verbleibenden organischen Ergebnissen (Rang 1-5).
Für jede der Top-5-URLs, verwende WebFetch:
WebFetch(url, "Extract the following from this page:
1. All H2 and H3 headings in order
2. All questions answered in the content (explicit questions in headings or implicit questions the text answers)
3. Named entities: people, organizations, laws, dates, statistics, tools mentioned
4. Approximate word count
5. The main topic/angle of the article
Return as structured data.")
Fehlerbehandlung pro URL:
"scrape_failed", weiter mit nächster URL. Minimum 3 von 5 URLs müssen erfolgreich sein.Thin-Content-Filter: Seiten mit geschätzter Wortanzahl < 300 als "thin_content" markieren und aus der Analyse ausschließen. Wenn dadurch weniger als 3 Seiten übrig: nächste URLs aus Rang 6-10 nachladen.
Für jede erfolgreich gescrapte Seite, strukturiere die Daten:
{
"url": "https://example.com/article",
"rank": 1,
"word_count": 2400,
"scrape_status": "success",
"headings": [
{ "level": "h2", "text": "Ist Zeiterfassung Pflicht?" },
{ "level": "h3", "text": "BAG-Urteil 2022" }
],
"questions_answered": [
"Ist Zeiterfassung für Kleinbetriebe Pflicht?",
"Welche Strafen drohen bei Verstößen?"
],
"entities_mentioned": [
{ "name": "BAG-Urteil 2022", "type": "legal_reference" },
{ "name": "§ 3 ArbSchG", "type": "legal_reference" }
],
"main_angle": "Rechtliche Pflicht der Zeiterfassung mit Fokus auf Ausnahmen"
}
Erstelle eine Matrix: Welche Themen/Fragen werden von wie vielen Konkurrenten abgedeckt?
| Thema/Frage | Comp. 1 | Comp. 2 | Comp. 3 | Comp. 4 | Comp. 5 | Coverage |
|-------------|:---:|:---:|:---:|:---:|:---:|---------|
| BAG-Urteil Pflicht | x | x | x | x | x | 5/5 |
| Bußgelder/Strafen | x | x | x | - | x | 4/5 |
| Ausnahmen Kleinbetriebe | x | - | x | - | - | 2/5 |
| Digitale vs. manuelle Erfassung | - | - | - | - | - | 0/5 |
Klassifiziere jedes Thema:
Sammle Unique-Gap-Kandidaten aus drei Quellen:
PAA-Fragen die kein Konkurrent beantwortet:
questions_answered aller KonkurrentenQ&A-Datenbank-Fragen die kein Konkurrent beantwortet:
questions[] des Artikels mit Konkurrenz-Coverageinfo_gain_score >= 0.6Themen aus content_gaps[] der Topical Map:
our_coverage: false die auch kein Konkurrent abdecktFür jeden Unique Gap:
{
"question": "Gilt die Zeiterfassungspflicht auch für Minijobber?",
"source": "paa",
"competitors_covering": 0,
"confidence": 0.85,
"reasoning": "PAA-Frage bei Google, keiner der Top 5 beantwortet sie. Hohe Relevanz für Kleinbetriebe mit Minijobbern.",
"recommended_placement": "Eigene H2-Sektion nach 'Ausnahmen'",
"estimated_info_gain": "high"
}
Confidence Score (0-1) Berechnung:
Vergleiche Entitäten:
primary_entities[])entities_mentioned)Identifiziere:
Basierend auf der Analyse, erstelle ein empfohlenes Outline:
Sortierlogik:
Für jede Outline-Sektion:
{
"order": 1,
"heading": "Ist Zeiterfassung für Kleinbetriebe Pflicht?",
"heading_level": "h2",
"category": "must_have",
"coverage_count": 5,
"source_question_ids": ["kleinbetriebe-q1", "kleinbetriebe-q3"],
"key_entities": ["BAG-Urteil 2022", "§ 3 ArbSchG"],
"competitors_covering": ["example.com", "competitor2.de", "competitor3.de", "competitor4.de", "competitor5.de"],
"recommended_subsections": [
{
"heading": "Seit wann gilt die Pflicht?",
"heading_level": "h3",
"category": "must_have"
}
],
"content_guidance": "BAG-Urteil zitieren, § 3 ArbSchG nennen, Geltungsbereich für Kleinbetriebe explizit klarstellen.",
"confidence": 0.95
}
Für Unique Gap Sektionen zusätzlich:
{
"order": 5,
"heading": "Gilt die Zeiterfassungspflicht auch für Minijobber?",
"heading_level": "h2",
"category": "unique_gap",
"coverage_count": 0,
"source_question_ids": [],
"gap_source": "paa",
"key_entities": ["Minijob-Zentrale", "§ 17 MiLoG"],
"content_guidance": "Einzigartiger Content — kein Konkurrent beantwortet diese Frage. Recherche zu Minijob-Sonderregelungen nötig. Info Gain Potenzial: hoch.",
"confidence": 0.85,
"requires_additional_research": true
}
Prüfe das generierte Brief auf Vollständigkeit:
| Kriterium | Minimum | Aktion bei Abweichung |
|---|---|---|
| Must-Have-Themen abgedeckt | 100% der 4-5/5 Themen | Fehler: "Must-Have-Thema '[X]' fehlt im Outline." |
| Unique Gaps identifiziert | >= 1 | Warnung: "Keine Unique Gaps gefunden. Brief bietet keinen Content-Gap-Vorteil." |
| Outline-Sektionen | >= 3 H2 | Warnung: "Outline hat nur X H2-Sektionen. Artikel könnte dünn werden." |
| Entities im Outline | >= 60% der Konkurrenz-Entitäten | Warnung: "Nur X% der Konkurrenz-Entitäten eingeplant." |
| Confidence Scores | Alle >= 0.5 | Info: "X Sektionen mit niedrigem Confidence Score (< 0.5)." |
| Konkurrenz-Wortanzahl | Median ermitteln | Info: "Konkurrenz-Median: X Wörter. Empfehlung: mindestens X Wörter." |
Wenn ein Pillar-Artikel verarbeitet wird, zusätzlich:
Schreibe content_brief Objekt in den Content-Plan data/content-plans/{cluster-id}.json — am jeweiligen Artikel-Objekt:
Für Cluster-Artikel: im articles[] Array am passenden Artikel
Für Pillar: am pillar Objekt
{
"content_brief": {
"generated_date": "2026-02-24",
"primary_keyword": "zeiterfassung pflicht kleinbetriebe",
"serp_analysis": {
"competitors_analyzed": 5,
"competitors_failed": 0,
"competitors_thin_content": 0,
"competitor_details": [
{
"url": "https://competitor1.de/zeiterfassung-pflicht/",
"rank": 1,
"word_count": 2400,
"scrape_status": "success"
},
{
"url": "https://competitor2.de/arbeitszeiterfassung/",
"rank": 2,
"word_count": 1800,
"scrape_status": "success"
},
{
"url": "https://competitor3.de/zeiterfassung/",
"rank": 4,
"word_count": 180,
"scrape_status": "thin_content"
},
{
"url": "https://competitor4.de/zeiterfassung-gesetz/",
"rank": 5,
"word_count": null,
"scrape_status": "scrape_failed",
"failure_reason": "timeout"
}
],
"paa_questions": [
"Ist Zeiterfassung für Kleinbetriebe Pflicht?",
"Welche Strafen drohen bei fehlender Zeiterfassung?",
"Gilt die Zeiterfassungspflicht auch für Minijobber?",
"Ab wie vielen Mitarbeitern muss Zeiterfassung geführt werden?"
],
"serp_features_detected": {
"featured_snippet": true,
"people_also_ask": true,
"ai_overview": false
},
"competitor_word_count_median": 2100
},
"coverage_matrix": [
{
"topic": "BAG-Urteil und Pflicht",
"coverage_count": 5,
"category": "must_have",
"covered_by": ["competitor1.de", "competitor2.de", "competitor3.de", "competitor4.de", "competitor5.de"]
},
{
"topic": "Bußgelder und Strafen",
"coverage_count": 4,
"category": "must_have",
"covered_by": ["competitor1.de", "competitor2.de", "competitor3.de", "competitor5.de"]
},
{
"topic": "Ausnahmen für Kleinbetriebe",
"coverage_count": 2,
"category": "should_have",
"covered_by": ["competitor1.de", "competitor3.de"]
},
{
"topic": "Minijobber-Regelung",
"coverage_count": 0,
"category": "unique_gap",
"covered_by": []
}
],
"unique_gaps": [
{
"question": "Gilt die Zeiterfassungspflicht auch für Minijobber?",
"source": "paa",
"competitors_covering": 0,
"confidence": 0.85,
"reasoning": "PAA-Frage bei Google, keiner der Top 5 beantwortet sie.",
"recommended_placement": "Eigene H2-Sektion nach 'Ausnahmen'",
"estimated_info_gain": "high"
},
{
"question": "Welche kostenlosen Tools gibt es für die Zeiterfassung im Kleinbetrieb?",
"source": "qa_db",
"source_question_id": "kleinbetriebe-q8",
"competitors_covering": 0,
"confidence": 0.78,
"reasoning": "Q&A-DB hat Antwort mit info_gain 0.7. Kein Konkurrent behandelt kostenlose Tools spezifisch.",
"recommended_placement": "H2-Sektion im How-To-Block",
"estimated_info_gain": "high"
}
],
"entity_analysis": {
"shared_entities": [
{ "name": "BAG-Urteil 2022", "our_coverage": true, "competitor_count": 5 },
{ "name": "§ 3 ArbSchG", "our_coverage": true, "competitor_count": 4 }
],
"entity_gaps": [
{ "name": "EU-Arbeitszeitrichtlinie 2003/88/EG", "competitor_count": 3, "recommendation": "In Sektion 'Rechtlicher Hintergrund' einbauen" }
],
"entity_advantages": [
{ "name": "Minijob-Zentrale", "our_coverage": true, "competitor_count": 0 }
]
},
"recommended_outline": [
{
"order": 1,
"heading": "Ist Zeiterfassung für Kleinbetriebe Pflicht?",
"heading_level": "h2",
"category": "must_have",
"coverage_count": 5,
"source_question_ids": ["kleinbetriebe-q1", "kleinbetriebe-q3"],
"key_entities": ["BAG-Urteil 2022", "§ 3 ArbSchG"],
"recommended_subsections": [
{ "heading": "Seit wann gilt die Pflicht?", "heading_level": "h3", "category": "must_have" },
{ "heading": "Rechtlicher Hintergrund: EU-Richtlinie und deutsches Recht", "heading_level": "h3", "category": "should_have" }
],
"content_guidance": "BAG-Urteil zitieren, § 3 ArbSchG nennen, EU-Arbeitszeitrichtlinie als Entity Gap einbauen.",
"confidence": 0.95
},
{
"order": 4,
"heading": "Gilt die Zeiterfassungspflicht auch für Minijobber?",
"heading_level": "h2",
"category": "unique_gap",
"coverage_count": 0,
"source_question_ids": [],
"gap_source": "paa",
"key_entities": ["Minijob-Zentrale", "§ 17 MiLoG"],
"content_guidance": "Einzigartiger Content — kein Konkurrent beantwortet diese Frage. Recherche zu Minijob-Sonderregelungen nötig.",
"confidence": 0.85,
"requires_additional_research": true
}
],
"recommended_word_count": 2520,
"validation": {
"must_have_covered": true,
"must_have_total": 3,
"unique_gaps_found": 2,
"outline_sections": 6,
"entity_coverage_pct": 80,
"low_confidence_sections": 1
}
}
}
Aktualisiere last_updated des Content-Plans.
=== Content Brief: [Titel] ===
Keyword: [primary_keyword]
Konkurrenz analysiert: [X] von 5 Seiten (Y fehlgeschlagen, Z thin content)
Konkurrenz-Wortanzahl: Median [X], Range [Min]-[Max]
Themen-Coverage:
- Must-Have (4-5/5): X Themen
- Should-Have (2-3/5): X Themen
- Differentiator (1/5): X Themen
- Unique Gaps (0/5): X Themen <-- HÖCHSTE PRIORITÄT
Top Unique Gaps:
1. "[Frage]" (Confidence: 0.85, Quelle: PAA)
2. "[Frage]" (Confidence: 0.78, Quelle: Q&A-DB, info_gain: 0.7)
Entity-Analyse:
- Gemeinsame Entitäten: [X]
- Entity Gaps (Konkurrenz hat, wir nicht): [Y]
- Entity Advantages (wir haben, Konkurrenz nicht): [Z]
Recommended Outline ([X] H2-Sektionen):
1. [H2] (must_have, 5/5, Confidence: 0.95)
- [H3]
- [H3]
2. [H2] (must_have, 4/5, Confidence: 0.90)
3. [H2] (should_have, 3/5, Confidence: 0.80)
4. [H2] *** UNIQUE GAP *** (0/5, Confidence: 0.85)
5. [H2] (differentiator, 1/5, Confidence: 0.70)
Empfohlene Mindest-Wortanzahl: [X] (Median der Konkurrenz + 20%)
Brief gespeichert in: data/content-plans/[cluster].json -> [article-id].content_brief
--- Brief Validation ---
[OK] Must-Have-Themen: 5 von 5 abgedeckt
[OK] Unique Gaps: 2 identifiziert
[OK] Outline-Sektionen: 5 H2
[OK] Entity-Coverage: 80% der Konkurrenz-Entitäten
[INFO] 1 Sektion mit Confidence < 0.7
[INFO] Empfohlene Wortanzahl: 1.800
---
Nächster Schritt:
- /ta-9-content-create-article [cluster] [article-id] -> Artikel mit Content Brief erstellen
Bei Batch-Verarbeitung zusätzlich am Ende:
=== Zusammenfassung ===
[X] Content Briefs generiert
[Y] Artikel übersprungen (Brief vorhanden)
[Z] Artikel fehlgeschlagen (zu wenige Konkurrenzseiten)
Unique Gaps insgesamt: [N]
Top 3 Unique Gaps über alle Artikel:
1. [Cluster/Artikel]: "[Frage]" (Confidence: 0.85)
2. [Cluster/Artikel]: "[Frage]" (Confidence: 0.82)
3. [Cluster/Artikel]: "[Frage]" (Confidence: 0.78)
content_brief Objekt im Content-Plan haben, werden übersprungen (Meldung: "Brief vom [Datum] vorhanden")--force Flag: Bestehendes Brief wird überschrieben, vorherige Daten gehen verloren--force wird eine Warnung angezeigt mit Zusammenfassung der Änderungen: neue/entfernte Unique Gaps, geänderte Coverage-Werte, aktualisierte Outline-Sektionen| Fehler | Aktion |
|---|---|
| project-config.json fehlt | Abbruch: "Bitte zuerst data/project-config.json anlegen." |
| priority.json fehlt | Abbruch: "Keine Prioritätsdaten. Bitte zuerst /ta-7-content-plan-prioritize ausführen." |
| Content-Plan für Cluster fehlt | Abbruch: "Content-Plan für '{cluster-id}' nicht gefunden." |
| Artikel-ID nicht im Plan | Verfügbare Artikel auflisten: "Artikel '{id}' nicht gefunden. Verfügbare Artikel: ..." |
| Q&A-Datenbank fehlt für Cluster | Warnung: "Q&A-Daten für '{cluster-id}' fehlen. Brief wird ohne Q&A-Vergleich generiert." |
| topical-map.json fehlt | Warnung: "Topical Map nicht gefunden. PAA- und Entity-Daten nicht verfügbar." |
| DataForSEO API Fehler | Abbruch für diesen Artikel: "SERP-Daten nicht abrufbar für '[keyword]'." |
| WebFetch fehlgeschlagen für URL | Log + weiter: "Seite [URL] nicht analysierbar ([Grund]). Überspringe." |
| Weniger als 3 Konkurrenzseiten analysierbar | Warnung + trotzdem Brief generieren mit reduziertem Confidence |
| Weniger als 2 Konkurrenzseiten analysierbar | Abbruch für diesen Artikel: "Zu wenige Konkurrenzseiten analysierbar." |
| Alle Top-10 sind eigene Domain | Info: "Alle Top-10-Ergebnisse gehören zu {config.domain}. Kein Konkurrenz-Brief nötig." |
| Content Brief bereits vorhanden | Überspringe (außer --force Argument) |
| Artikel hat score < 70 (Batch-Modus) | Überspringe im Batch. Kann per expliziter ID trotzdem generiert werden. |
content_brief Objekt ist valides JSON und folgt dem definierten Schema