Zum Inhalt springen
Doctor SEO

SEO mit KI: KI als Arbeitswerkzeug

Welche KI für welche SEO-Aufgabe: die Entscheidungstabelle

Welche KI für welche SEO-Aufgabe: eine Entscheidungstabelle, in der jede Zeile eine benannte Quelle, ein Datum und eine belegte Grenze des Motors trägt — plus ein Prüfskript für die eigene Tabelle.

Aktualisiert am 9 Oktober 2026 26 Min. Lesezeit

Eine Zeile in einer Routing-Tabelle hält nur, wenn drei Dinge daneben stehen: eine benannte Quelle, ein Datum und eine Grenze, die dieser Motor belegbar hat. Fehlt eines, steht in der Zeile Werbung. Das Skript dieser Lektion prüft deshalb deine eigene Tabelle und nicht die Motoren.

Wer nach der besten KI für SEO sucht, bekommt hier keine Rangfolge, sondern eine Zuordnung. Der Befund, der die Lektion ordnet, ist eine Lücke in den Ratschlägen und nicht in den Produkten: Empfehlungen zur Motorwahl schreiben fast nie, woran ein Motor scheitert. Die dritte Spalte der Tabelle unten ist die, die Vergleichsartikel leer lassen.

Die Grenze dieser Seite ist eng: hier werden Claude, ChatGPT, Gemini, Perplexity und die übrigen Motoren als Werkzeug für SEO-Arbeit eingesetzt. Welchen Index welcher Assistent abfragt und wie du in KI-Suchmaschinen zitiert wirst, steht im Index von Level 4, GEO und AIO: SEO für KI-Suchmaschinen, und wird dort geführt statt hier wiederholt.

Die Produktgrenzen unten stammen aus Anbieterdokumentation, die Nachfragebefunde aus Autocomplete-Sonden vom 20. September 2026: datierte Beobachtungen, keine Dauerzustände. Das Inhaltsverzeichnis von Level 8 steht in SEO mit KI: KI als Arbeitswerkzeug.

Was du lernst

  • Warum die Vergleichsnachfrage, die die Branche unterstellt, in den Sonden vom 20. September 2026 nicht auftaucht.
  • Zwei Beweisgüten auseinanderhalten: eine Bedingung aus der Anbieterdokumentation und einen festgehaltenen Fehlschlag.
  • Eine Aufgabe nach belegter Grenze routen statt nach Markenname, mit Quelle und Datum in der Zeile.
  • Erkennen, welche Fragen keine Routing-Fragen sind und in Level 4 gehören.
  • routing_pruefen.py an vier Dateien der Modellbahn-Werkstatt Sternberg laufen lassen und seine sieben Rückgabewerte lesen.

Die Vergleichsnachfrage, die die Branche unterstellt, gibt es nicht

Drei Autocomplete-Sonden von Google vom 20. September 2026 tragen den Befund, auf dem diese Seite ihre Form begründet. chatgpt vs gemini for, is gemini better than chatgpt for und perplexity vs chatgpt for gaben zusammen 30 Vorschläge, und das Wort SEO kam darin kein einziges Mal vor: es kamen Programmierung, Recherche, Lernen, Innenarchitektur und Beziehungsratschläge. Separat geprüft, am selben Tag, gab is claude better than chatgpt for zehn Vorschläge, und SEO war auch darunter nicht.

Was Menschen tatsächlich eintippen, trägt keinen Markennamen: best ai for seo und ai for keyword research liefen am 20. September 2026 beide ihren vollen Baum von zehn themenbezogenen Vorschlägen. Gefragt wird nach der Auswahl aus allen Motoren, nicht nach einem Paarvergleich.

Diese Sonden messen Reihenfolge, nicht Menge. Google Autocomplete hält fest, ob ein Vorschlag existiert und wie tief ein Stamm trägt, bevor er in ein anderes Wortfeld kippt; wie viele Menschen ihn eintippen, sagt es nicht. Die Forschungsnotiz zu diesem Level schreibt diese Einschränkung ausdrücklich dazu: aus einer Sonde wird keine Mengenangabe, und eine leere Antwort heißt, dass nichts aufgetaucht ist. Darum steht hier auch keine Zahl zur Nachfrage nach einem Begriff — kein geprüfter Motor hält dazu einen Datensatz.

Vier Motoren, deren Suchstamm nach einem oder zwei Vorschlägen abbricht

Bei vier der sieben Motoren, die die Recherche zu diesem Level geprüft hat, bricht der Suchstamm — die Kette der Vorschläge, die Google zu einem Anfang anbietet — so schnell ab, dass er keine eigene Seite trägt. Am 20. September 2026 gab copilot for seo zwei Vorschläge im Thema und wechselte dann zu Fragen aus der Luftfahrt; local llm for seo gab einen und fiel in Studienprogramme für den Master of Laws; grok for seo gab zwei im Thema, der dritte Vorschlag war eine unverwandte HubSpot-Prüfungsfrage; deepseek for seo gab zwei und rutschte in Allgemeines dazu, wie lange SEO braucht; gemini gem for seo landete bei Edelsteinen zum Sternzeichen.

Auch die tragfähigen Stämme kippen: gemini for seo und perplexity for seo halten sechs von zehn Vorschlägen im Thema und wechseln dann zu Treffern über Seoul. Die Recherche zieht daraus den Schluss, dass Grok, Copilot, DeepSeek und lokal betriebene Modelle Zeilen einer Tabelle sind und keine eigenen Seiten. Ein abbrechender Stamm sagt dabei nichts darüber, ob ein Motor die Aufgabe kann — nur darüber, ob jemand danach fragt.

Veröffentlichte Routing-Ratschläge nennen fast nie einen Fehler

Die Lücke, die diese Seite füllt, liegt bei den Ratgebern und nicht bei den Anbietern der Motoren: fast jede Seite zur Frage, welche KI für SEO taugt, ist eine Empfehlungsliste, und fast keine schreibt, woran ein Motor scheitert. Ein Satz ist die Ausnahme: Lauren Busby hält fest, Gemini „struggles to generate schema markup reliably“, und empfiehlt für Code ChatGPT oder Claude. Search Engine Land lässt sich nicht abrufen; die Quelle steht deshalb mit Publikation, Autorin und Jahr, aber ohne Link.

Was eine Zelle dieser Tabelle füllen darf, hat zwei Güten, und die werden nicht gemischt. Die erste ist eine Bedingung aus der Anbieterdokumentation: ein Wissensstand mit Datum, eine Sprachbeschränkung, ein Leistungsumfang. Jede Leserin kann sie nachsehen, und sie gilt, bis der Anbieter sie ändert. Die zweite ist ein Fehlschlag, den jemand bei der Arbeit aufgeschrieben hat: er zeigt, dass der Fehler möglich ist, und nichts darüber, wie oft er auftritt. ContextBolt hielt am 23. Juni 2026 eine Woche eigener SEO-Arbeit fest, unter einer Autorenangabe, die nur „David“ lautet: eine Website, eine Woche, keine veröffentlichte Stichprobengröße — ein Fall und keine Häufigkeit.

Eine dritte Güte fehlt ganz, und das ist der Grund, warum unten keine Zeile sagt, welcher Motor den besseren Entwurf schreibt. Keine der für diese Lektion geprüften Produktseiten nennt eine Trefferquote, eine Fehlerrate oder ein Testset für irgendeine SEO-Aufgabe. Der Ahrefs-Konnektor für Claude, dessen Metadaten „Added January 2026“ zeigen, beschreibt, was er tut, und nicht, wie oft es stimmt; die Dokumentation des Semrush-MCP, zuletzt am 5. August 2026 aktualisiert, nennt Endpunkt und Authentifizierung und keine Genauigkeit.

Auf der Käuferseite steht dieselbe Lücke als häufigster Grund zu bremsen. Keyword.coms State of AI in SEO 2026 vom 1. Januar 2026, n = 97 nutzbare Antworten, führt „Quality not good enough“ als häufigsten Grund auf, eine Aufgabe eben nicht zu automatisieren: 57 % — bezogen auf die Teilgruppe, die bremst, nicht auf die 97 Befragten. Kleine, selbst ausgewählte Stichprobe: das ordnet Gründe und misst keinen Berufsstand.

Die Routing-Tabelle: Aufgabe, Motor, belegte Grenze, Prüfung

Die Routing-Tabelle unten wird andersherum gelesen als eine Werkzeugliste: zuerst steht die belegte Grenze, der Motor ergibt sich daraus. Die Datumsangaben der dritten Spalte sind die der jeweiligen Quelle; Produktgrenzen wurden am 20. September 2026 gelesen.

Aufgabe Motor, den du zuerst öffnest Belegte Grenze oder festgehaltener Fall Pflichtprüfung
Eine Kennzahl, die aus einem angebundenen Werkzeug kommen muss keiner, bis die Quelle angebunden ist Ein geprüfter Motor ohne angebundenes Werkzeug gibt die Kennzahl aus dem Modell, nicht aus einer Messung Die Datenquelle benennen, bevor die Zeile freigegeben wird
Ausgaben, die Code sind: JSON-LD, Weiterleitungen, reguläre Ausdrücke ChatGPT oder Claude Gemini erzeugt Schema-Markup nach Busbys Darstellung nicht zuverlässig (Search Engine Land, 2025, ohne Link) Jede Datei maschinell validieren, bevor sie ausgeht
Googles eigene Trefferliste zu einer Liste von Abfragen Gemini mit Grounding with Google Search Unter den geprüften Schnittstellen die einzige mit echten Google-Abfragen Dieselbe Abfrage von Hand gegenprüfen
Die Primärquelle hinter einer Zahl finden Perplexity Gemessene Nachfrage dieses Motors ist Recherche (Sonde vom 20. September 2026); kein geprüfter Motor prüft das Zitat nach, das er zurückgibt Jede zitierte URL öffnen und den Satz lesen
Was gerade auf X zu einem Update gesagt wird Grok mit eingeschalteter Web- und X-Suche Ohne diese Werkzeuge reicht Grok 4.6 nicht über den 1. Februar 2026 hinaus (xAI-Modelldokumentation, gelesen am 20. September 2026) Jede Aussage datieren; ein Gespräch ist keine Messung
Fragen an den eigenen Bestand in Bing Copilot in den Bing Webmaster Tools Seit 18. März 2025 für alle Nutzer, nur auf Englisch (Bing Webmaster Blog) Jede Antwort gegen den Bericht in Bing halten
Arbeiten mit den eigenen Search-Console-Daten jeder Motor mit angebundenem MCP-Server Keinen Konnektor aus erster Hand: Passionfruit führte Search Console am 28. März 2026 als Gemeinde- oder Eigenbetrieb Nur Leserechte erteilen
Kundendaten, die das Netz nicht verlassen dürfen ein lokal betriebenes offenes Modell Der Prompt verlässt das eigene Netz nicht; eine Websuche musst du selbst anbinden Nachweisen, dass kein Prompt das Netz verlässt

Für die eigenen Search-Console-Daten beschreibt Claude mit deinen eigenen Daten verbinden: Search Console und GA4 per MCP Einrichtung und Leserechte.

Welchen Index welcher Assistent liest, entscheidet Level 4

Eine Frage sieht nach Routing aus und ist keine: ob eine Seite in einem bestimmten KI-Assistenten überhaupt als Quelle auftauchen kann. Darüber entscheidet nicht, welchen Motor du öffnest, sondern welchen Index dieser Assistent abfragt. Diese Zuordnung steht mit ihren Erhebungen im Index von Level 4, GEO und AIO: SEO für KI-Suchmaschinen, und wird dort geführt statt hier wiederholt.

Für die Tabelle folgt daraus eine Arbeitsteilung. Die Aufgabenseite einer Zeile gehört hierher: welche Arbeit zu tun ist, welcher Motor sie zuerst bekommt, welche Prüfung danach fällig ist. Die Mechanikseite wird verlinkt. Eine Zeile, die prüfen soll, ob die eigene Montageanleitung in einem Assistenten als Quelle erscheint, ist keine Motorwahl, sondern ein Protokoll — und das setzt das Wissen über Indizes voraus. Die Trennung ist Kursorganisation und keine Position.

Drei Fähigkeiten, die es nur in einem Motor gibt

Die Recherche zu diesem Level teilt die Frage nach dem richtigen Motor nach der Fähigkeit und nicht nach dem Anbieter, weil eine Aufteilung nach Marke Seiten erzeugt, die dieselbe Einschränkung einräumen müssen. Drei Funktionen aus der Routing-Tabelle halten diese Prüfung aus — eine in den Bing Webmaster Tools, eine in Gemini, eine in Grok.

  • Die Bing Webmaster Tools beantworten mit Copilot Fragen zum eigenen Bestand dort. Für alle Nutzer verfügbar seit dem 18. März 2025 nach Angaben des Bing Webmaster Blog, und nur auf Englisch. Auf Google überträgt sich davon nichts.
  • Gemini führt mit Grounding with Google Search echte Google-Abfragen aus und gibt Googles eigene Trefferliste zurück. Unter den für diese Lektion geprüften Schnittstellen ist es die einzige, die das tut.
  • Grok durchsucht X in Echtzeit. Das ergibt den Puls einer Diskussion und keine Mengenangabe; ohne eingeschaltete Web- und X-Suche reicht Grok 4.6 nicht über den 1. Februar 2026 hinaus (xAI-Modelldokumentation, gelesen am 20. September 2026).

Was routing_pruefen.py an einer Zeile prüft

routing_pruefen.py liest eine Routing-Datei von der Platte und urteilt über jede Zeile darin, nicht über den Motor in der Zeile. Standardbibliothek, offline, Python 3. Eine Zeile besteht, wenn sie eine benannte Quelle trägt, eine Grenze dieses Motors, eine Prüfung, eine Stichprobe als Zahl, ein gültiges Datum der letzten Nachlese und die Bestätigung, dass nachgelesen wurde. Ruht sie allein auf einer Anbieterseite, fällt sie durch.

Das Format ist Text: Blöcke aus Zeilen der Form feld: wert, getrennt durch eine Leerzeile, Kommentare mit #. Neun Felder sind Pflicht, und datum trägt den Tag der letzten Nachlese, nicht das Erscheinungsdatum der Quelle, das im Feld quelle steht.

Drei Fallen stecken in der Prüfung und sind im Code benannt. Erstens erbt bool von int: weil derselbe Normalisierer ja in einen Wahrheitswert und Ziffernfolgen in Ganzzahlen verwandelt, bestünde ein stichprobe: ja eine Prüfung auf Ganzzahl, und ist_ganzzahl lehnt deshalb zuerst bool ab. Zweitens erbt UnicodeDecodeError von ValueError und nicht von OSError, also fängt ein except OSError allein keine falsch kodierte Datei. Drittens würde block.get(feld, "") ein fehlendes und ein leeres Feld gleich behandeln: die Regel gegen fehlende Nachlese vergleicht belegt mit False, und eine leere Zeichenkette ist nicht False. Deshalb trägt das Skript den Sentinel FEHLT.

Vier Dateien der Modellbahn-Werkstatt Sternberg stehen bereit. routing-sternberg.txt ist die saubere:

# routing-sternberg.txt - Routing-Tabelle der Modellbahn-Werkstatt Sternberg
# datum = Tag der letzten Nachlese gegen die Quelle, nicht Erscheinungsdatum

aufgabe: Die Primaerquelle hinter einer Zahl finden
motor: Perplexity
quellenart: eigene_messung
quelle: eigener Abgleich der Anbieterdokumentation
datum: 2026-09-20
fehler: Kein geprueftes Modell liest die Seite nach, die es zitiert
pruefung: Jede zitierte URL oeffnen und den Satz dort lesen
stichprobe: 0
belegt: ja

aufgabe: JSON-LD und andere Ausgaben, die Code sind
motor: ChatGPT oder Claude
quellenart: publikation
quelle: Lauren Busby, Search Engine Land, 2025
datum: 2026-09-02
fehler: Gemini erzeugt Schema-Markup nach dieser Darstellung nicht zuverlaessig
pruefung: Jede Datei maschinell validieren, bevor sie ausgeht
stichprobe: 0
belegt: ja

aufgabe: Fragen an den eigenen Bestand in Bing
motor: Copilot in den Bing Webmaster Tools
quellenart: dokumentation
quelle: Bing Webmaster Blog, 18. Maerz 2025
datum: 2026-08-14
fehler: nur Englisch, und auf Google uebertraegt sich davon nichts
pruefung: Jede Antwort gegen den Bericht in Bing halten
stichprobe: 0
belegt: ja

aufgabe: Was gerade auf X zu einem Update gesagt wird
motor: Grok mit eingeschalteter Web- und X-Suche
quellenart: dokumentation
quelle: xAI, Modelldokumentation, ohne Erscheinungsdatum
datum: 2026-09-20
fehler: Ohne diese Werkzeuge reicht Grok 4.6 nicht ueber den 1. Februar 2026 hinaus
pruefung: Jede Aussage datieren, ein Gespraech ist keine Messung
stichprobe: 0
belegt: ja

In routing-sternberg-anbieter.txt ruht die zweite Zeile auf einer Anbieterseite und nennt dazu keine Grenze des Motors:

# routing-sternberg-anbieter.txt - zweiter Entwurf der Werkstatt Sternberg

aufgabe: Die Primaerquelle hinter einer Zahl finden
motor: Perplexity
quellenart: eigene_messung
quelle: eigener Abgleich der Anbieterdokumentation
datum: 2026-09-20
fehler: Kein geprueftes Modell liest die Seite nach, die es zitiert
pruefung: Jede zitierte URL oeffnen und den Satz dort lesen
stichprobe: 0
belegt: ja

aufgabe: Monatsbericht des Werkstattladens zusammenfassen
motor: der Anbieter aus dem Vergleichsartikel
quellenart: anbieterseite
quelle: Produktseite des Anbieters
datum: 2026-09-29
fehler:
pruefung: Stichprobe lesen
stichprobe: 0
belegt: ja

routing-sternberg-datum.txt trägt drei Zeilen mit belegtem Inhalt und fehlerhafter Form: ein unmögliches Datum, eine nie nachgelesene Zeile, eine Stichprobe, die keine Zahl ist:

# routing-sternberg-datum.txt - dritter Entwurf der Werkstatt Sternberg

aufgabe: JSON-LD und andere Ausgaben, die Code sind
motor: ChatGPT oder Claude
quellenart: publikation
quelle: Lauren Busby, Search Engine Land, 2025
datum: 2026-13-02
fehler: Gemini erzeugt Schema-Markup nach dieser Darstellung nicht zuverlaessig
pruefung: Jede Datei maschinell validieren, bevor sie ausgeht
stichprobe: 0
belegt: ja

aufgabe: Fragen an den eigenen Bestand in Bing
motor: Copilot in den Bing Webmaster Tools
quellenart: dokumentation
quelle: Bing Webmaster Blog, 18. Maerz 2025
datum: 2026-08-14
fehler: nur Englisch, und auf Google uebertraegt sich davon nichts
pruefung: Jede Antwort gegen den Bericht in Bing halten
stichprobe: 0
belegt: nein

aufgabe: Was gerade auf X zu einem Update gesagt wird
motor: Grok mit eingeschalteter Web- und X-Suche
quellenart: dokumentation
quelle: xAI, Modelldokumentation, ohne Erscheinungsdatum
datum: 2026-09-20
fehler: Ohne diese Werkzeuge reicht Grok 4.6 nicht ueber den 1. Februar 2026 hinaus
pruefung: Jede Aussage datieren, ein Gespraech ist keine Messung
stichprobe: ja
belegt: ja

routing-sternberg-kaputt.txt ist ein Export ohne die Spalte belegt — die gefährlichste der vier, weil jede Zeile vollständig aussieht:

# routing-sternberg-kaputt.txt - Export der Werkstatt Sternberg, eine Spalte fehlt

aufgabe: Die Primaerquelle hinter einer Zahl finden
motor: Perplexity
quellenart: eigene_messung
quelle: eigener Abgleich der Anbieterdokumentation
datum: 2026-09-20
fehler: Kein geprueftes Modell liest die Seite nach, die es zitiert
pruefung: Jede zitierte URL oeffnen und den Satz dort lesen
stichprobe: 0

aufgabe: Was gerade auf X zu einem Update gesagt wird
motor: Grok mit eingeschalteter Web- und X-Suche
quellenart: dokumentation
quelle: xAI, Modelldokumentation, ohne Erscheinungsdatum
datum: 2026-09-20
fehler: Ohne diese Werkzeuge reicht Grok 4.6 nicht ueber den 1. Februar 2026 hinaus
pruefung: Jede Aussage datieren, ein Gespraech ist keine Messung
stichprobe: 0

Das Skript wartet auf nichts und ruft nichts ab; es liest eine Datei und schreibt einen Bericht.

#!/usr/bin/env python3
# routing_pruefen.py - prueft eine eigene Routing-Tabelle, nicht die Motoren.
# doctor-seo.net, Level 8, Lektion 12. Standardbibliothek, offline, liest nur von der Platte.
# Aufruf: python3 routing_pruefen.py <datei>
# Format: Bloecke aus Zeilen "feld: wert", getrennt durch eine Leerzeile.
#         Zeilen, die mit # beginnen, sind Kommentar.
#         datum = Tag der letzten Nachlese gegen die Quelle, nicht Erscheinungsdatum.
# Rueckgabewerte: 0 jede Zeile belegt, 2 Fuellungsmangel, 3 keine Nachlese,
#                 4 Zeile ruht nur auf einer Anbieterseite, 6 Datei unlesbar,
#                 7 kein vollstaendiger Block, 9 interner Fehler.
#                 Vorrang: 6, dann 7, dann 4, dann 3, dann 2.
#                 Die 1, die 5 und die 8 sind nicht belegt.

import sys

FELDER = ("aufgabe", "motor", "quellenart", "quelle", "datum", "fehler",
          "pruefung", "stichprobe", "belegt")

QUELLENARTEN = ("dokumentation", "publikation", "eigene_messung", "anbieterseite")

# Sentinel. Ein fehlendes Feld ist nicht dasselbe wie ein leeres Feld, und
# block.get(feld, "") wuerde beide gleich behandeln.
FEHLT = object()

MONATSLAENGE = (31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)

WERBUNG = "WERBUNG"
NACHLESE = "NACHLESE"
FUELLUNG = "FUELLUNG"

# Je Beanstandungsklasse ein eigener Rueckgabewert, in dieser Reihenfolge.
KLASSEN = (WERBUNG, NACHLESE, FUELLUNG)
CODES = {WERBUNG: 4, NACHLESE: 3, FUELLUNG: 2}


class FormatFehler(Exception):
    """Die Datei laesst sich nicht in Bloecke zerlegen."""


def normalisiere(wert):
    """ja/nein werden zu bool, reine Ziffernfolgen zu int, alles andere bleibt Text."""
    if wert.lower() in ("ja", "nein"):
        return wert.lower() == "ja"
    if wert.isdigit():
        return int(wert)
    return wert


def lies_bloecke(pfad):
    """Liest die Datei und gibt eine Liste von Feld-Wert-Abbildungen zurueck."""
    with open(pfad, encoding="utf-8") as fh:
        rohtext = fh.read()
    bloecke, aktuell = [], {}
    for nr, zeile in enumerate(rohtext.splitlines(), start=1):
        text = zeile.strip()
        if text.startswith("#"):
            continue
        if not text:
            if aktuell:
                bloecke.append(aktuell)
                aktuell = {}
            continue
        if ":" not in text:
            raise FormatFehler("Zeile %d ist kein Feld: %s" % (nr, text))
        feld, _, wert = text.partition(":")
        aktuell[feld.strip().lower()] = normalisiere(wert.strip())
    if aktuell:
        bloecke.append(aktuell)
    return bloecke


def ist_ganzzahl(wert):
    """True nur fuer echte Ganzzahlen ab 0. bool erbt von int, daher die erste Zeile."""
    if isinstance(wert, bool):
        return False
    return isinstance(wert, int) and wert >= 0


def datum_fehler(wert):
    """Gibt den Grund zurueck, warum das Datum nicht taugt, sonst None."""
    if not isinstance(wert, str) or not wert:
        return "Datum der Nachlese fehlt"
    teile = wert.split("-")
    if len(teile) != 3 or not all(t.isdigit() for t in teile):
        return "Datum nicht im Format JJJJ-MM-TT: %s" % wert
    jahr, monat, tag = (int(t) for t in teile)
    if jahr < 2015:
        return "Jahr vor 2015, fuer diesen Gegenstand unplausibel: %s" % wert
    if not 1 <= monat <= 12:
        return "Monat ausserhalb 1 bis 12: %s" % wert
    if not 1 <= tag <= MONATSLAENGE[monat - 1]:
        return "Tag ausserhalb des Monats: %s" % wert
    return None


def bewerte(block):
    """Gibt {Klasse: [Gruende]} und die Liste fehlender Felder zurueck."""
    luecken = [f for f in FELDER if block.get(f, FEHLT) is FEHLT]
    if luecken:
        return {}, luecken

    befunde = {WERBUNG: [], NACHLESE: [], FUELLUNG: []}

    art = block["quellenart"]
    if art == "anbieterseite":
        befunde[WERBUNG].append("Grundlage ist eine Anbieterseite, also Werbung")
    elif art not in QUELLENARTEN:
        befunde[WERBUNG].append("quellenart '%s' belegt nichts" % art)

    if block["belegt"] is False:
        befunde[NACHLESE].append("nicht gegen die Quelle nachgelesen")
    grund = datum_fehler(block["datum"])
    if grund:
        befunde[NACHLESE].append(grund)

    if not str(block["quelle"]).strip():
        befunde[FUELLUNG].append("keine benannte Quelle")
    if not str(block["fehler"]).strip():
        befunde[FUELLUNG].append("keine benannte Grenze dieses Motors")
    if not str(block["pruefung"]).strip():
        befunde[FUELLUNG].append("keine Pruefung eingetragen")
    if not ist_ganzzahl(block["stichprobe"]):
        befunde[FUELLUNG].append("stichprobe ist keine Ganzzahl: %r"
                                 % (block["stichprobe"],))

    return {k: v for k, v in befunde.items() if v}, []


def bericht(pfad, bloecke):
    vollstaendig = 0
    zaehler = {WERBUNG: 0, NACHLESE: 0, FUELLUNG: 0}
    print("Routing-Pruefung: %s" % pfad)
    for nr, block in enumerate(bloecke, start=1):
        befunde, luecken = bewerte(block)
        aufgabe = block.get("aufgabe", FEHLT)
        print("[%d] %s" % (nr, aufgabe if isinstance(aufgabe, str)
                           else "(ohne Aufgabe)"))
        if luecken:
            print("    UNVOLLSTAENDIG: %s" % ", ".join(luecken))
            continue
        vollstaendig += 1
        urteil = "BELEGT"
        for klasse in KLASSEN:
            if klasse in befunde:
                urteil = klasse
                zaehler[klasse] += 1
                break
        print("    %s -> %s" % (urteil, block["motor"]))
        for klasse in KLASSEN:
            for grund in befunde.get(klasse, []):
                print("    - %s" % grund)
    print("--")
    print("%d Bloecke, %d vollstaendig, %d mit Werbung, %d ohne Nachlese, "
          "%d mit Fuellungsmangel"
          % (len(bloecke), vollstaendig, zaehler[WERBUNG],
             zaehler[NACHLESE], zaehler[FUELLUNG]))
    if vollstaendig == 0:
        sys.stdout.flush()
        print("Nichts geprueft: keiner der Bloecke traegt alle neun Felder.",
              file=sys.stderr)
        return 7
    for klasse in KLASSEN:
        if zaehler[klasse]:
            return CODES[klasse]
    return 0


def main(argv):
    if len(argv) != 2:
        print("Aufruf: python3 routing_pruefen.py <datei>", file=sys.stderr)
        return 6
    pfad = argv[1]
    try:
        bloecke = lies_bloecke(pfad)
    except UnicodeDecodeError as err:
        # UnicodeDecodeError erbt von ValueError, nicht von OSError.
        print("%s ist nicht UTF-8: %s" % (pfad, err), file=sys.stderr)
        return 6
    except OSError as err:
        print("%s nicht lesbar: %s" % (pfad, err), file=sys.stderr)
        return 6
    except FormatFehler as err:
        print("%s nicht zerlegbar: %s" % (pfad, err), file=sys.stderr)
        return 6
    if not bloecke:
        print("%s enthaelt keinen Block." % pfad, file=sys.stderr)
        return 7
    return bericht(pfad, bloecke)


if __name__ == "__main__":
    try:
        sys.exit(main(sys.argv))
    except Exception as err:
        print("Interner Fehler, nichts geprueft: %r" % err, file=sys.stderr)
        sys.exit(9)

Sieben Rückgabewerte sind belegt, mit festgelegtem Vorrang: 6 vor 7, 7 vor 4, 4 vor 3, 3 vor 2. Ein Dateifehler schlägt also jede Beanstandung an einer einzelnen Zeile.

Wert Wofür er steht Aufruf unten, der ihn zurückgibt
0 Jede Zeile belegt routing-sternberg.txt
2 Füllungsmangel: Zeile ohne Quelle, Grenze oder Prüfung, oder Stichprobe ohne Zahl keiner der fünf unten
3 Keine Nachlese: Datum fehlt oder ist unmöglich, oder belegt steht auf nein routing-sternberg-datum.txt
4 Eine Zeile ruht nur auf einer Anbieterseite routing-sternberg-anbieter.txt
6 Datei nicht lesbar, nicht UTF-8 oder nicht zerlegbar ein Name ohne Datei
7 Kein Block trägt alle neun Felder routing-sternberg-kaputt.txt
9 Interner Fehler, nichts geprüft keiner, und das ist der Zweck

Die 1, die 5 und die 8 bleiben unbelegt. Die 1 vergibt Python selbst, wenn eine Ausnahme bis nach oben durchfällt, und ein Befund soll nicht aussehen wie ein Absturz des Prüfers. Fünf Aufrufe folgen, einer je Datei und ein fünfter auf einen Namen ohne Datei:

$ python3 routing_pruefen.py routing-sternberg.txt
Routing-Pruefung: routing-sternberg.txt
[1] Die Primaerquelle hinter einer Zahl finden
    BELEGT -> Perplexity
[2] JSON-LD und andere Ausgaben, die Code sind
    BELEGT -> ChatGPT oder Claude
[3] Fragen an den eigenen Bestand in Bing
    BELEGT -> Copilot in den Bing Webmaster Tools
[4] Was gerade auf X zu einem Update gesagt wird
    BELEGT -> Grok mit eingeschalteter Web- und X-Suche
--
4 Bloecke, 4 vollstaendig, 0 mit Werbung, 0 ohne Nachlese, 0 mit Fuellungsmangel

$ python3 routing_pruefen.py routing-sternberg-anbieter.txt
Routing-Pruefung: routing-sternberg-anbieter.txt
[1] Die Primaerquelle hinter einer Zahl finden
    BELEGT -> Perplexity
[2] Monatsbericht des Werkstattladens zusammenfassen
    WERBUNG -> der Anbieter aus dem Vergleichsartikel
    - Grundlage ist eine Anbieterseite, also Werbung
    - keine benannte Grenze dieses Motors
--
2 Bloecke, 2 vollstaendig, 1 mit Werbung, 0 ohne Nachlese, 0 mit Fuellungsmangel

$ python3 routing_pruefen.py routing-sternberg-datum.txt
Routing-Pruefung: routing-sternberg-datum.txt
[1] JSON-LD und andere Ausgaben, die Code sind
    NACHLESE -> ChatGPT oder Claude
    - Monat ausserhalb 1 bis 12: 2026-13-02
[2] Fragen an den eigenen Bestand in Bing
    NACHLESE -> Copilot in den Bing Webmaster Tools
    - nicht gegen die Quelle nachgelesen
[3] Was gerade auf X zu einem Update gesagt wird
    FUELLUNG -> Grok mit eingeschalteter Web- und X-Suche
    - stichprobe ist keine Ganzzahl: True
--
3 Bloecke, 3 vollstaendig, 0 mit Werbung, 2 ohne Nachlese, 1 mit Fuellungsmangel

$ python3 routing_pruefen.py routing-sternberg-kaputt.txt
Routing-Pruefung: routing-sternberg-kaputt.txt
[1] Die Primaerquelle hinter einer Zahl finden
    UNVOLLSTAENDIG: belegt
[2] Was gerade auf X zu einem Update gesagt wird
    UNVOLLSTAENDIG: belegt
--
2 Bloecke, 0 vollstaendig, 0 mit Werbung, 0 ohne Nachlese, 0 mit Fuellungsmangel
Nichts geprueft: keiner der Bloecke traegt alle neun Felder.

$ python3 routing_pruefen.py routing-sternberg-2025.txt
routing-sternberg-2025.txt nicht lesbar: [Errno 2] No such file or directory: 'routing-sternberg-2025.txt'

Der vierte Aufruf ist der, auf den es ankommt: der Export wird gelesen, beide Blöcke werden gezählt, jede Aufgabe steht da — und keine Zeile besteht, weil belegt in beiden fehlt. Mit block.get(feld, "") an derselben Stelle liefert dieselbe Datei den Wert 0. Die bool-Abfrage hängt am dritten Aufruf: ohne sie erscheint dort die Grok-Zeile als belegt.

Worüber die Branche streitet und was diese Seite offenlässt

Zwei Streitfragen berührt diese Lektion, und keine von beiden entscheidet sie. Die erste: ob die Arbeit an der Zitierbarkeit in KI-Suchmaschinen eine eigene Disziplin ist oder Suchmaschinenoptimierung unter neuem Namen. Das eine Lager hält sie für eine Erfindung der Werkzeuganbieter und stützt sich auf die Belege zu einer Antwortfläche, auf der die Zitate weitgehend mit den organischen Treffern zusammenfallen; das andere verkauft sie als neue Spezialisierung und stützt sich auf die Belege zu einem Motor mit eigenem Index. Beide Lesarten ruhen auf Erhebungen zu je einer Oberfläche, und eine Messung, die die Lager trennt, leistet keine der gelesenen Erhebungen.

Die zweite Streitfrage ist, ob eine Vorlage, einmal je Motor ausgefüllt, unter Googles Richtlinie zu Inhalten in Menge fällt. Der geltende Text, zuletzt am 28. August 2026 aktualisiert, beschreibt Seiten, die „for the primary purpose of manipulating search rankings and not helping users“ erzeugt werden, und hängt daran „no matter how it’s created“. Das eine Lager liest die Vorlage selbst als diesen Fall, weil die Unterscheidung zwischen den Seiten dann im Produktnamen liegt. Das andere liest den Text als zwei Bedingungen, die zusammen erfüllt sein müssen, und hält fest, dass Google zu keiner von beiden einen Schwellenwert veröffentlicht. Welche Lesart zutrifft, entscheidet keine Untersuchung in diesen Quellen.

Eine dritte Sache ist nicht umstritten, aber ungeklärt. In Keyword.coms Befragung vom 1. Januar 2026 (n = 97) nennen 38 % technische SEO-Audits als Aufgabe, für die sie KI einsetzen. Ebenfalls dort nennen 40 % technisches SEO als Aufgabe, die sie bewusst nicht automatisieren — bezogen auf die 79 % der Befragten, die angaben, es gäbe Aufgaben, die sie automatisieren könnten und bei denen sie es nicht tun, nicht auf die 97 Befragten. Dieselbe Aufgabenfamilie steht auf beiden Seiten, und die Zahlen sagen nicht, ob dahinter dieselben Personen stehen. Welche Arbeit gemeint ist, steht in Technisches SEO: Crawling, Indexierung, Ladezeit; qualitativ gibt die Erhebung her, dass Linkaufbau und Texten am häufigsten beim Menschen bleiben.

Ob die Aufgabe überhaupt an ein Modell gehen soll, ist eine andere Frage mit einem anderen Verfahren, und dieses Level behandelt sie in einer eigenen Lektion. Wie weit ein einzelner Motor trägt, arbeitet Was Claude im SEO leisten kann – und was nicht Aufgabe für Aufgabe durch; den Rahmen setzt dieselbe Befragung mit 1 %, das einen Arbeitsablauf als vollständig automatisiert beschreibt, eine von 97 Antworten. Diese Tabelle sagt, welches Werkzeug du zuerst öffnest; das Nachsehen danach nimmt sie dir nicht ab.

Häufige Fehler

  • Den Motor nach einem Vergleichsartikel wählen. Der einzige Aufgabenvergleich mit Datum, der für diese Lektion geprüft wurde, führt vier Aufgaben aus und nennt weder Bewertungsraster noch Stichprobe (SE Ranking, Yulia Deda, 7. Juli 2025, aktualisiert am 24. Juni 2026). Der Ausweg: als datierte Beobachtung lesen und nach belegter Grenze entscheiden.
  • Das Erscheinungsdatum der Quelle als Datum der Nachlese eintragen. Dann altert die Zeile unsichtbar: niemand sieht, dass seit zwei Produktversionen keiner nachgesehen hat. Der Ausweg: das Erscheinungsdatum in das Feld quelle, den Tag der Nachlese in datum.
  • Einen einzelnen festgehaltenen Fall zur Häufigkeit machen. Eine Website, eine Woche und eine Autorenangabe, die nur „David“ lautet, zeigen, dass etwas vorkommen kann (ContextBolt, 23. Juni 2026). Der Ausweg: auf einer Testumgebung nachstellen, nicht als Quote zitieren.
  • Dem eigenen Abonnement jede Aufgabe geben. Wer für einen Motor zahlt, schickt ihm auch, was er nicht kann. Der Ausweg: erst die Zeile ausfüllen; ohne eintragbare Grenze ist die Wahl eine Preisfrage.

Kurzfassung

  • Veröffentlichte Ratschläge zur Motorwahl nennen fast nie, woran ein Motor scheitert; in der Recherche zu diesem Level ist Lauren Busbys Satz zu Gemini und Schema-Markup die Ausnahme (Search Engine Land, 2025, ohne Link). Das ist der Grund für die dritte Spalte der Tabelle.
  • Drei Vergleichssonden vom 20. September 2026 gaben zusammen 30 Vorschläge ohne ein einziges Vorkommen von SEO, während best ai for seo und ai for keyword research ihren vollen Baum von zehn liefen. Bei vier der sieben geprüften Motoren bricht der Stamm nach einem oder zwei Vorschlägen ab.
  • Jede Zelle trägt eine von zwei Beweisgüten, die nicht gemischt werden: eine nachprüfbare Bedingung aus der Anbieterdokumentation oder einen einmal festgehaltenen Fall mit seinem Nenner. Nur drei Fähigkeiten gibt es jeweils nur in einem Motor: Copilot in den Bing Webmaster Tools, Grounding with Google Search in Gemini und die Live-Suche in X bei Grok.
  • routing_pruefen.py prüft die eigene Tabelle statt der Motoren und gibt 0, 2, 3, 4, 6, 7 oder 9 zurück; die 1 bleibt frei, und ein Export mit fehlender Spalte liefert 7 statt 0.
  • Offen bleiben zwei Fragen: ob Zitierbarkeit eine eigene Disziplin ist und wo Googles Grenze für Inhalte in Menge liegt. Zu beiden fehlt die trennende Messung.

Häufige Fragen

Warum steht hier keine Rangfolge, wenn so viele nach der besten KI für SEO suchen?

Weil es dafür keine öffentliche Grundlage gibt: keine der für diese Lektion geprüften Produktseiten nennt eine Trefferquote, eine Fehlerrate oder ein Testset für irgendeine SEO-Aufgabe. Eine Rangfolge wäre eine Meinung in Tabellenform. Belegen lässt sich die Zuordnung: welche Aufgabe zu welchem Motor geht, welche Grenze dieser Motor nachweisbar hat, welche Prüfung danach fällig ist.

Was gehört in die Prüfspalte, wenn die Aufgabe keine Datei erzeugt?

Dorthin gehört die Handlung, die eine falsche Antwort auffallen lässt: bei einer Rechercheaufgabe das Öffnen jeder zitierten URL und das Lesen des Satzes, auf den sie zeigt; bei einer Aussage über eine laufende Diskussion ein Datum daneben; bei einer Zusammenfassung eine Stichprobe gegen die Rohdaten. Leer bleibt das Feld nicht, weil eine Zeile ohne Prüfung keine Entscheidung dokumentiert, sondern eine Absicht.

Reicht ein Datum pro Zeile, oder brauche ich zwei?

Zwei, in verschiedenen Feldern einer Routing-Zeile. Das Erscheinungsdatum der Quelle gehört in das Feld quelle, weil es sich nicht ändert. Der Tag der letzten Nachlese gehört in datum, weil nur er zeigt, ob jemand die Grenze noch geprüft hat, seit der Anbieter sein Produkt geändert hat. Veröffentlicht eine Quelle kein Datum, bleibt quelle ohne eines — eine Angabe über die Quelle und keine Lücke in deiner Tabelle.

Quellen

  • Keyword.com, State of AI in SEO 2026: Survey Data on Automation, Tools & Time Saved, 1. Januar 2026, n = 97 nutzbare Antworten, kleine und selbst ausgewählte Stichprobe (keyword.com). Daraus: 57 % für „Quality not good enough“ als Grund zu bremsen, bezogen auf die Teilgruppe, die bremst; 38 % für technische SEO-Audits als Einsatzgebiet; 40 % für technisches SEO als bewusst nicht automatisierte Aufgabe, bezogen auf die 79 %, die solche Aufgaben nennen; 1 % vollständig automatisiert, eine von 97.
  • Google Autocomplete, Sonden vom 20. September 2026: drei Vergleichsstämme mit 30 Vorschlägen und keinem Vorkommen von SEO; is claude better than chatgpt for separat mit zehn und ebenfalls keinem; best ai for seo und ai for keyword research mit je zehn im Thema; vier Motorstämme, die nach einem oder zwei Vorschlägen im Thema das Wortfeld wechseln. Belegt wird die Existenz eines Vorschlags, nicht seine Menge.
  • SE Ranking, Yulia Deda, Claude AI vs. ChatGPT: Which AI Tool is Better for SEO?, 7. Juli 2025, aktualisiert am 24. Juni 2026 (seranking.com): vier Aufgaben, kein Bewertungsraster, keine Stichprobe. ContextBolt, Claude SEO Experiment, 23. Juni 2026 (contextbolt.com): eine Website, eine Woche, Autorenangabe nur „David“. Ohne Genauigkeitsangabe: Ahrefs-Konnektor für Claude, „Added January 2026“ (claude.com); Semrush-MCP, 5. August 2026 (developer.semrush.com); Passionfruit, Dewang Mishra, 28. März 2026 (getpassionfruit.com), der Search Console als Konnektor aus der Gemeinde oder im Eigenbetrieb führt.
  • Benannt und datiert, aber ohne Link: Lauren Busby, Search Engine Land, 2025, zu Gemini und Schema-Markup — Search Engine Land lässt sich nicht abrufen; die Quelle steht deshalb mit Publikation, Autorin und Jahr, aber ohne Link. Ebenso ohne Link: Copilot in Bing Webmaster Tools is Now Available to All Users, Bing Webmaster Blog, 18. März 2025; die xAI-Modelldokumentation zu Grok 4.6, ohne Erscheinungsdatum, gelesen am 20. September 2026; Google Search Central, Spam policies for Google web search, 28. August 2026, ohne Schwellenwert für die Seitenzahl.

Weiter im Kurs

Eine vorherige Lektion steht hier nicht, weil die Seite davor noch nicht veröffentlicht ist. Welche Seiten schon online sind, zeigt SEO mit KI: KI als Arbeitswerkzeug, und den gesamten Aufbau listet Kostenloser SEO-Kurs: 100 Lektionen von den Grundlagen bis Black Hat.