Zum Inhalt springen
CASOON

Content Pipelines mit Gemini aufbauen

Von der Keyword-Recherche zur fertigen Gliederung bis zum Artikel – skalierbar und mit konsistenter Qualität

Aktualisiert 3. April 2026
12 Minuten
Content Pipelines mit Gemini aufbauen
#Content Pipeline #Gemini #Content-Strategie #Automatisierung

Eine skalierbare Content-Pipeline bedeutet: Keyword rein, strukturierter Artikel raus – mit konsistenter Qualität, ohne jeden Schritt manuell zu wiederholen. Dieser Artikel zeigt, wie man mit Gemini eine mehrstufige Pipeline baut: von der Keyword-Recherche über die automatische Gliederung bis zur finalen Content-Generierung mit einheitlichem Ton. Besonders für Affiliate- und Nischenprojekte, bei denen hunderte Seiten entstehen sollen, ist diese Art der Automatisierung der entscheidende Hebel.

Was eine Content Pipeline ist (und was nicht)

Eine Content Pipeline ist kein Massentext-Generator. Wer denkt, dass man Gemini einfach hundert Keywords hinwirft und hundert fertige Artikel bekommt, wird schnell mit Qualitätsproblemen und Google-Abstrafungen konfrontiert.

Eine Pipeline ist ein strukturierter, mehrstufiger Prozess, bei dem jede Stufe einen definierten Input hat und einen definierten Output liefert. Qualität entsteht durch Struktur – nicht durch Volumen.

Wann eine Content Pipeline Sinn macht:

  • Affiliate-Projekte mit mehreren hundert Produktkategorien
  • Nischenseiten mit klaren, wiederholbaren Seitentypen
  • Lokale Landingpages für viele Städte oder Regionen
  • FAQ-Seiten auf Basis strukturierter Datensätze

Wann sie keinen Sinn macht:

  • Meinungsartikel, Fallstudien, persönliche Erfahrungsberichte
  • YMYL-Themen (Gesundheit, Finanzen, Recht) ohne Expertenprüfung
  • Themen, die einzigartige Recherche oder Primärquellen erfordern
  • Kleine Projekte mit unter 20 Seiten

Die drei Stufen der Pipeline

Jede robuste Content Pipeline besteht aus mindestens drei Stufen. Jede Stufe hat einen eigenen, spezialisierten Prompt.

1
Keyword-Analyse Input: Keyword + Zielgruppe. Output: Search Intent, verwandte Keywords, Konkurrenzeinschätzung, Potenzial-Score
2
Gliederung generieren Input: Keyword + Intent aus Stufe 1. Output: H2/H3-Struktur, die alle Aspekte des Suchintents abdeckt
3
Content-Generierung Input: Gliederung aus Stufe 2. Output: Abschnitt für Abschnitt generierter Content, Stil-konsistent durch System Instruction
4
Qualitätsprüfung Automatischer Check auf Mindestlänge, Keyword-Präsenz, Duplikate, formale Vollständigkeit

Der wichtigste Grundsatz: Jede Stufe ist unabhängig. Das bedeutet auch, dass man zwischen den Stufen eingreifen kann – die Gliederung anpassen, bevor der Content generiert wird, zum Beispiel.

Stufe 1: Keyword-Analyse automatisieren

Die Keyword-Analyse ist die Stufe, die den größten Einfluss auf die Qualität hat. Ein falscher Search Intent führt zu einer falschen Gliederung und letztlich zu Content, der nicht rankt.

Prompt-Template für die Keyword-Analyse:

Analysiere das folgende Keyword für mein Nischenprojekt.

Keyword: {{keyword}}
Zielgruppe: {{target_audience}}
Domain-Thema: {{domain_topic}}

Antworte als JSON:
{
  "keyword": "",
  "search_intent": "informational | navigational | transactional | commercial",
  "intent_description": "Was sucht die Person konkret?",
  "related_keywords": ["keyword1", "keyword2", "keyword3"],
  "content_type": "Artikel | Vergleich | Anleitung | Produktseite | FAQ",
  "competition_estimate": "niedrig | mittel | hoch",
  "recommended_word_count": 0,
  "key_questions": ["Frage 1", "Frage 2", "Frage 3"]
}

Python-Skript für die automatische Keyword-Analyse:

import google.generativeai as genai
import json
import csv

genai.configure(api_key="DEIN_API_KEY")

model = genai.GenerativeModel(
    model_name="gemini-2.5-pro",
    generation_config=genai.GenerationConfig(
        response_mime_type="application/json"
    ),
    system_instruction="""Du bist ein SEO-Analyst.
    Analysiere Keywords und liefere strukturierte JSON-Daten.
    Nur gültiges JSON, keine Erklärungen."""
)

def analyze_keyword(keyword, target_audience, domain_topic):
    prompt = f"""
    Keyword: {keyword}
    Zielgruppe: {target_audience}
    Domain-Thema: {domain_topic}

    Analysiere und antworte als JSON mit den Feldern:
    search_intent, intent_description, related_keywords,
    content_type, competition_estimate, recommended_word_count, key_questions
    """
    response = model.generate_content(prompt)
    return json.loads(response.text)

# Keywords aus CSV einlesen
with open("keywords.csv", "r") as f:
    reader = csv.DictReader(f)
    for row in reader:
        result = analyze_keyword(
            keyword=row["keyword"],
            target_audience="Hobby-Gärtner",
            domain_topic="Gartenratgeber"
        )
        print(json.dumps(result, ensure_ascii=False, indent=2))

Stufe 2: Automatische Gliederung

Aus dem Intent der Keyword-Analyse entsteht die Gliederung. Das ist der Schritt, der am stärksten die Qualität des späteren Contents bestimmt.

Prompt-Template für die Gliederung:

Erstelle eine SEO-optimierte Gliederung für folgenden Artikel.

Keyword: {{keyword}}
Search Intent: {{search_intent}}
Content-Typ: {{content_type}}
Zu beantwortende Fragen: {{key_questions}}
Zielwortanzahl: {{recommended_word_count}}

Regeln für die Gliederung:
- H2 für Hauptabschnitte (3 bis 6 Stück)
- H3 für Unterabschnitte wo sinnvoll
- Keyword muss in mindestens zwei H2-Überschriften vorkommen
- Kein generisches "Einleitung" oder "Fazit" als H2
- Jeder Abschnitt hat eine kurze Beschreibung (1 Satz), was er abdeckt

Antworte als JSON:
{
  "title": "SEO-optimierter Seitentitel",
  "meta_description": "Meta-Description mit Keyword",
  "sections": [
    {
      "h2": "Überschrift",
      "description": "Was dieser Abschnitt abdeckt",
      "subsections": [{"h3": "Unterüberschrift", "description": ""}]
    }
  ]
}

Beispiel-Output für “Tomaten düngen”:

{
  "title": "Tomaten düngen: Wann, wie oft und womit für beste Ergebnisse",
  "meta_description": "Tomaten richtig düngen – Tipps zum richtigen Zeitpunkt, Dünger-Vergleich und häufige Fehler vermeiden.",
  "sections": [
    {
      "h2": "Wann Tomaten düngen: die wichtigsten Zeitpunkte",
      "description": "Ab wann mit dem Düngen beginnen, wie oft im Sommer und ab wann aufhören",
      "subsections": []
    },
    {
      "h2": "Welcher Dünger für Tomaten ist der beste?",
      "description": "Organisch vs. mineralisch, Flüssig- vs. Langzeitdünger im Vergleich",
      "subsections": [
        { "h3": "Organische Dünger: Kompost, Hornspäne, Brennnesseljauche", "description": "" },
        { "h3": "Mineralische Dünger: schnell verfügbar, aber Vorsicht", "description": "" }
      ]
    }
  ]
}

Stufe 3: Content-Generierung Abschnitt für Abschnitt

Hier machen die meisten den entscheidenden Fehler: Sie bitten Gemini, den kompletten Artikel auf einmal zu generieren.

Das funktioniert schlechter als Abschnitt für Abschnitt – aus zwei Gründen. Erstens verliert das Modell bei langen Outputs die Konsistenz in Ton und Tiefe. Zweitens hat man bei einem kompakten Fehler (schlechte H2-Sektion) keine Möglichkeit, gezielt nachzubessern.

Python-Skript für die abschnittsweise Generierung:

import google.generativeai as genai
import json

genai.configure(api_key="DEIN_API_KEY")

STYLE_SAMPLE = """
Hier ist ein Beispiel für den gewünschten Schreibstil:

Tomaten brauchen regelmäßige Wasserzufuhr – aber kein Staunass. Gieße lieber einmal täglich
gründlich als mehrmals oberflächlich. Der Boden sollte in 5 cm Tiefe noch leicht feucht sein,
nicht nass. Zu viel Wasser fördert Staunässe und damit Wurzelfäule.
"""

def create_writer_model():
    return genai.GenerativeModel(
        model_name="gemini-2.5-pro",
        system_instruction=f"""Du bist ein erfahrener Ratgeber-Texter.
        Schreibe präzise, praxisorientierte Texte ohne Marketing-Sprache.
        Konkrete Zahlen und Fakten statt vage Formulierungen.
        Kurze Sätze. Direkte Ansprache.

        Schreibstil-Referenz:
        {STYLE_SAMPLE}

        Schreibe NUR den Abschnittsinhalt als Markdown.
        Keine Wiederholung der Überschrift. Keine Einleitung für den Abschnitt."""
    )

def generate_section(model, section, keyword, context):
    prompt = f"""
    Haupt-Keyword: {keyword}
    Abschnitt: {section['h2']}
    Beschreibung: {section['description']}
    Bisheriger Kontext: {context}

    Schreibe den vollständigen Abschnittsinhalt (ca. 200-350 Wörter).
    """
    response = model.generate_content(prompt)
    return response.text

def generate_article(outline_json, keyword):
    model = create_writer_model()
    outline = json.loads(outline_json)
    article_parts = []
    context = ""

    for section in outline["sections"]:
        content = generate_section(model, section, keyword, context)
        article_parts.append(f"## {section['h2']}\n\n{content}")
        # Kontext für den nächsten Abschnitt mitgeben
        context = content[:300] + "..."

    return "\n\n".join(article_parts)

Der context-Parameter ist wichtig: Er gibt dem Modell die letzten 300 Zeichen des vorherigen Abschnitts mit. Das verhindert inhaltliche Sprünge und hält den Ton konsistent.

Ton und Stimme konsistent halten

Bei 50 Artikeln aus derselben Pipeline müssen alle konsistent klingen. Ohne aktive Maßnahmen driftet der Stil – besonders bei langen Projekten.

Drei Maßnahmen für konsistenten Stil:

1. System Instruction mit Stil-Regeln

Schreibe im Stil eines erfahrenen Praktikers, der Wissen kompakt weitergibt.
- Kurze Sätze (maximal 20 Wörter)
- Keine Adjektive ohne Substanz ("einfach", "schnell", "effizient" nur mit Belegen)
- Konkrete Zahlen statt vage Formulierungen
- Direkte Ansprache ("du" oder unpersönlich, nie wechseln)
- Keine Floskeln: keine Einleitungen à la "In diesem Artikel erfahren Sie..."

2. Stil-Sample mitgeben

Zwei bis drei Absätze aus einem bereits genehmigten Artikel direkt in die System Instruction einbauen. Das Modell orientiert sich am Beispiel stärker als an verbalen Beschreibungen.

3. Temperatur niedrig halten

Für Content-Pipelines ist eine Temperatur zwischen 0.3 und 0.5 besser als die Standardeinstellung. Genug Variation für natürliche Texte – aber keine stilistischen Ausreißer.

Qualitätssicherung einbauen

Automatisierung ohne Qualitätssicherung produziert nur schneller schlechte Inhalte.

Einfacher Python-Check für generierten Content:

import re

def quality_check(content, keyword, min_words=400):
    results = {
        "passed": True,
        "issues": []
    }

    # Mindestlänge prüfen
    word_count = len(content.split())
    if word_count < min_words:
        results["passed"] = False
        results["issues"].append(f"Zu kurz: {word_count} Wörter (Minimum: {min_words})")

    # Keyword-Präsenz prüfen
    keyword_count = content.lower().count(keyword.lower())
    if keyword_count < 2:
        results["passed"] = False
        results["issues"].append(f"Keyword '{keyword}' nur {keyword_count}x gefunden (Minimum: 2)")

    # Wiederholte Sätze prüfen (einfache Heuristik)
    sentences = re.split(r'[.!?]', content)
    unique_sentences = set(s.strip().lower() for s in sentences if len(s.strip()) > 20)
    if len(unique_sentences) < len([s for s in sentences if len(s.strip()) > 20]) * 0.9:
        results["issues"].append("Mögliche Wiederholungen gefunden")

    # Formale Vollständigkeit
    if not re.search(r'^## ', content, re.MULTILINE):
        results["passed"] = False
        results["issues"].append("Keine H2-Überschriften gefunden")

    return results

# Verwendung
check = quality_check(generated_content, "tomaten düngen")
if not check["passed"]:
    print("Qualitätsprüfung fehlgeschlagen:", check["issues"])

Grenzen dieser Ansatzes

Content Pipelines sind kein universelles Werkzeug. Und wer sie falsch einsetzt, schadet seiner Domain mehr als er nützt.

Was Google mit E-E-A-T meint:

Google bewertet Content zunehmend danach, ob er nachweislich von Experten mit echter Erfahrung stammt. Bei einem Garten-Ratgeber ist das leichter zu simulieren als bei einem Artikel über Steuertipps oder medizinische Diagnosen.

Wann menschliche Überarbeitung Pflicht ist:

  • YMYL-Themen (Your Money or Your Life): Gesundheit, Finanzen, Recht, Sicherheit
  • Artikel mit konkreten Handlungsempfehlungen, die bei Fehlern Schaden anrichten können
  • Themen, bei denen Primärrecherche erforderlich ist (Interviews, aktuelle Ereignisse)
  • Alles, was öffentlich mit dem eigenen Namen verknüpft wird
Use CasePipeline sinnvollMenschliche Überarbeitung
Lokale Landingpages (100 Städte)JaStichproben
Produktbeschreibungen E-CommerceJaPflicht bei komplexen Produkten
Ratgeber-Artikel ohne YMYLJaEmpfohlen
Medizinische InformationenNeinImmer Pflicht
FinanzberatungNeinImmer Pflicht
Persönliche ErfahrungsberichteNeinNicht sinnvoll

Qualitätsgates zwischen den Stufen

Der häufigste Denkfehler bei Content Pipelines ist, sie als reine Kette zu bauen: Keyword rein, Gliederung raus, Text raus, fertig. In der Praxis braucht jede Stufe ein eigenes Qualitätsgate. Sonst wandert ein schwacher Output einfach weiter nach unten und vervielfacht den Schaden.

Sinnvolle Gates sind zum Beispiel:

  • Nach Stufe 1: Passt das Keyword überhaupt zum Projekt und zur Suchintention?
  • Nach Stufe 2: Deckt die Gliederung die Suchintention ab oder nur generische Unterpunkte?
  • Nach Stufe 3: Ist der Text nur flüssig oder auch konkret, differenziert und belastbar?

Der Punkt ist simpel: Nicht jeder Output darf automatisch in die nächste Stufe. Gute Pipelines arbeiten nicht nur mit Generierung, sondern mit Aussortieren, Nachschärfen und Wiederholen. Genau daraus entsteht später der Übergang zu Programmatic SEO mit Gemini: erst ein stabiler Prozess, dann skalierte Seitentypen.

Einordnung

Eine Content Pipeline mit Gemini ist kein Set-and-forget-System. Sie ist ein Werkzeug, das die Produktionsgeschwindigkeit erhöht – aber nur dann, wenn der Prozess sauber aufgebaut ist.

Der größte Hebel liegt nicht in der Generierungs-Stufe, sondern in der Keyword- und Intent-Analyse am Anfang. Wer dort präzise arbeitet, bekommt am Ende Artikel, die ranken. Wer dort schlampt, bekommt schnell viel schlechten Content.

Der nächste Artikel in dieser Serie geht einen Schritt weiter: Programmatic SEO mit Gemini, Astro und Next.js – wie strukturierte Daten und Templates zu automatisch generierten Seiten werden, die trotzdem ranken.