Überblick
Das Problem
Eine gepflegte Contao-Website hat fünfzig, hundert oder zweihundert Seiten. Ob eine einzelne davon für Suchmaschinen taugt, steht nirgendwo im Backend: Sie öffnen die Seite, klicken auf den Reiter „Metadaten“, sehen ein leeres Feld — und wissen erst dann, dass hier etwas fehlt. Für die nächste Seite beginnt das von vorn.
- Metadaten bleiben leer, weil sie Handarbeit sind. Seitentitel und Beschreibung muss jemand für jede Seite einzeln formulieren. In der Praxis passiert das für die Startseite und die drei wichtigsten Unterseiten — der Rest geht ohne in den Index.
- Die Seitenstruktur verrät nicht, wo es hakt. Der Seitenbaum zeigt Titel und Veröffentlichungsstatus. Welche Seite zwei H1-Überschriften hat, welche aus achtzig Wörtern besteht, welche dieselbe Beschreibung trägt wie drei andere — das sieht man erst beim Öffnen.
- Eine neue Leserschaft wurde nie eingeplant. ChatGPT, Perplexity,
Claude und die KI-Antworten von Google lesen Websites und zitieren sie. Ob die eigene
robots.txtdiesen Crawlern den Zugriff überhaupt erlaubt, weiß im Zweifel niemand im Haus — und wenn sie ausgesperrt sind, fällt das nie auf, weil nichts kaputt aussieht. - Maschinenlesbare Zusatzangaben kosten Entwicklerzeit. Strukturierte
Daten (JSON-LD), Open-Graph-Angaben für geteilte Links,
lastmodin der Sitemap — alles davon ist Template-Arbeit und landet deshalb auf der „später“-Liste. - Was Antwort-Maschinen am liebsten zitieren, existiert nicht. Frage-Antwort-Blöcke und knappe Begriffsdefinitionen lassen sich sauber aus einer Seite herausschneiden. Genau deshalb werden sie zitiert — und genau deshalb müsste sie jemand schreiben.
- Das Wissen sitzt außerhalb der Redaktion. Ob ein Absatz zu lang, zu verschachtelt oder zu spät auf den Punkt kommt, beurteilt eine Agentur im Quartalsbericht — nicht die Person, die den Absatz gerade tippt.
Am härtesten trifft das die kleine Redaktion ohne eigene SEO-Rolle: jemand pflegt Inhalte nebenher, will es richtig machen, bekommt aber vom System keinerlei Rückmeldung darüber, ob es richtig war.
Die Lösung
Das Grundprinzip in einem Satz: AI SEO Studio bringt Bewertung und Korrektur an genau die Stelle, an der ohnehin gearbeitet wird — an die Seite, an das Inhaltselement und in eine eigene Menügruppe im Contao-Backend.
Statt eines externen Berichts, den jemand liest und danach von Hand umsetzt, erscheint
die Bewertung dort, wo die Änderung stattfindet: eine Punktzahl neben jeder Seite im
Seitenbaum, eine Checkliste im Seitenformular, ein Prüf- und Umschreibe-Knopf unter jeder
Überschrift und jedem Textblock. Für maschinenlesbare Ausgaben — JSON-LD, Open Graph,
lastmod, llms.txt — genügt ein Häkchen in den Einstellungen;
Template-Arbeit fällt keine an.
| Aufgabe | Bisher | Mit AI SEO Studio |
|---|---|---|
| Titel und Beschreibung für 40 Seiten | 40 × Seite öffnen, formulieren, speichern | Massenlauf füllt ausschließlich leere Felder, 10 Seiten je Durchlauf |
| Schwache Seiten finden | Jede Seite einzeln öffnen und beurteilen | Farbige Punktzahl direkt an jeder Zeile im Seitenbaum |
| Einen Textblock verbessern | Bauchgefühl, oder Rückfrage bei der Agentur | „SEO-Check“ und „Mit KI optimieren“ am Inhaltselement selbst |
| Strukturierte Daten ausliefern | JSON-LD im Template pflegen | Firmenname eintragen, drei Häkchen setzen |
| KI-Crawler-Zugriff prüfen | robots.txt von Hand lesen und interpretieren |
Audit pro Domain mit Korrektur-Vorschlag zum Kopieren |
| Zitierfähige Inhalte erzeugen | FAQ und Glossar selbst schreiben | KI erzeugt Entwürfe aus echten Seiteninhalten, Sie geben frei |
| Geteilte Links kontrollieren | Open-Graph-Tags im Layout ergänzen | Felder pro Seite plus Live-Vorschaukarte im Formular |
Jedes der oben genannten Probleme hat hier eine benannte Entsprechung:
- Leere Metadaten → Meta-Generierung mit Massenlauf und optionalem Cron.
- Unsichtbare Schwachstellen → SEO-Bewertung pro Seite mit Ampel im Seitenbaum und Checkliste im Formular.
- Ausgesperrte KI-Leser → KI-Crawler-Audit über sechs benannte Crawler.
- Fehlende Maschinenangaben → Strukturierte Daten, Social-Media-Vorschau, Aktualität und llms.txt.
- Fehlende Zitierbausteine → FAQ und Glossar, jeweils mit Frontend-Modul und Schema.org-Auszeichnung.
- Fehlendes Textwissen → Text-Optimierung und Struktur-Audit.
Wann das Paket passt
| Situation | Einschätzung |
|---|---|
| Contao 5.3 oder neuer, deutschsprachige Website, eigene Redaktion | Passt. Das ist der Regelfall, für den das Paket gebaut ist. |
| Viele Seiten ohne Titel und Beschreibung | Passt besonders gut. Der Massenlauf ist genau dafür da und fasst gefüllte Felder nie an. |
| Sichtbarkeit in ChatGPT, Perplexity und KI-Antworten ist ein Ziel | Passt. Crawler-Audit, FAQ, Glossar, llms.txt und
der GEO/AEO-Anteil des Scores zielen darauf. |
| Überwiegend fremdsprachige Inhalte | Nur eingeschränkt. Die Lesbarkeitsanalyse (Flesch-Amstad, Übergangswörter, Passiv- und Füllworterkennung) folgt deutschen Sprachregeln und wird unabhängig von der Seitensprache angewandt. Alle übrigen Prüfungen sind sprachunabhängig. |
| Kein Budget für einen KI-Anbieter | Teilweise. Audits, Score, Duplikate, Bilder, Schema, Social und
llms.txt arbeiten ohne KI. Alles Erzeugende (Meta, FAQ, Glossar,
Umschreiben) braucht einen eigenen API-Schlüssel und verursacht dort Kosten. |
| Server ohne ausgehende HTTPS-Verbindungen | Nicht dieses Paket. Ohne Verbindung zum Lizenzdienst lässt sich die Lizenz nicht aktivieren — und ohne Lizenz ist keine einzige Funktion erreichbar. |
| Gesucht wird ein Dienst, der unbeaufsichtigt Texte veröffentlicht | Nicht dieses Paket. Es schlägt vor, Sie übernehmen. Erzeugte FAQ- und Glossar-Einträge sind immer zuerst Entwurf. |
Teil 1 — Einrichtung
Der Weg von der leeren Installation bis zur ersten erzeugten Beschreibung besteht aus diesen Schritten:
- Voraussetzungen prüfen
- Vor der Installation: Backup, Domainname, Entscheidungen
- Installation über den Contao Manager — oder über Composer
- Installation überprüfen
- Lizenz aktivieren — erst danach erscheint das Menü
- KI-Anbieter verbinden
- Funktionen und Verhalten einstellen
- Erste Nutzung: die Übersicht
Voraussetzungen
| Anforderung | Version / Wert | Anmerkung |
|---|---|---|
| Contao | ^5.3 |
Contao 5.3 und neuer innerhalb von 5.x. |
| PHP | ^8.2 |
PHP 8.2 oder neuer. |
PHP-Erweiterung sodium |
erforderlich | Prüfung der Signatur des Lizenzdatensatzes. |
PHP-Erweiterung json |
erforderlich | Datenaustausch und Konfigurationsspeicher. |
PHP-Erweiterung curl |
empfohlen | Wird für die serverseitigen Nutzungssignale verwendet. |
PHP-Erweiterung intl |
empfohlen | Nötig, um eine Lizenz auf einem internationalisierten Domainnamen zu aktivieren. |
| Composer-Abhängigkeiten | symfony/http-client, symfony/http-foundation (jeweils
^6.4 || ^7.0), defuse/php-encryption ^2.4 |
Werden bei der Installation automatisch mitgeladen. |
| Lizenz | Paket pro |
Einzige gültige Stufe. Ohne sie ist keine Funktion erreichbar. |
| Ausgehende HTTPS-Verbindungen | erforderlich | Vom Server aus (nicht aus dem Browser) zum Lizenzdienst und — nur für KI-Funktionen — zum gewählten KI-Anbieter. |
Das Paket legt eigene Laufzeitdaten unterhalb von Contaos var/-Verzeichnis
ab. Diese Pfade müssen für den Webserver-Prozess beschreibbar sein:
| Pfad | Inhalt | Rechte |
|---|---|---|
var/seostudio/provisioning/ |
record.json und record.seal — der signierte
Lizenzdatensatz |
Verzeichnis 0700, Dateien 0600 |
var/seostudio/secret.key |
Verschlüsselungsschlüssel, wird beim ersten Speichern eines API-Schlüssels erzeugt | 0600 |
var/seostudio/secrets.json |
Der verschlüsselte KI-API-Schlüssel (nie im Klartext, nie in der Datenbank) | 0600 |
Vor der Installation
- Datenbank sichern. Die Installation legt sechs neue Tabellen an und
ergänzt
tl_pageum vier Spalten. - Domainnamen am Startpunkt eintragen. Öffnen Sie
Seitenstruktur → Startpunkt → Feld „Domainname“. Die Lizenz wird an die hier
konfigurierten Hostnamen gebunden, und zwar exakt und ohne Platzhalter:
example.com,www.example.comundshop.example.comsind drei verschiedene Identitäten. Ohne eingetragene Domain bietet der Lizenzbereich überhaupt keine Schaltfläche an, sondern nur den Hinweis: „Für diese Installation ist keine Domain konfiguriert. Bitte die Domain am Startpunkt eintragen (Seitenstruktur → Startpunkt → „Domainname“) und diese Seite neu laden.“ - Testumgebung einplanen. Weil die Lizenz an den Hostnamen hängt, entlastet eine Staging-Domain die Produktivinstallation nicht automatisch — sie braucht eine eigene Freigabe für ihren Hostnamen.
- KI-Anbieter entscheiden. Unterstützt werden Anthropic (Claude), OpenAI sowie jede OpenAI-kompatible Schnittstelle mit eigener Basis-URL. Sie benötigen dort ein eigenes Konto und einen eigenen API-Schlüssel; die Kosten der Modellaufrufe entstehen bei diesem Anbieter, nicht beim Paket.
- Klären, ob externe Aufrufe erlaubt sind. Soll der Server grundsätzlich keine KI-Anbieter kontaktieren, lässt sich das später mit einem Schalter erzwingen — die deterministischen Prüfungen laufen dann weiter.
Installation über den Contao Manager
- Contao Manager öffnen und anmelden.
- Bereich Entdecken öffnen. Neue Pakete werden immer dort gesucht und hinzugefügt; der Bereich Pakete daneben zeigt unter Installierte Pakete nur, was bereits vorhanden ist. Entdecken ist zugleich die Startansicht des Managers.
- Über Pakete suchen nach
vtinnovations/seo-studiosuchen und beim Treffer Paket hinzufügen wählen. - Änderungen anwenden. Der Contao Manager installiert das Paket und aktualisiert den Autoloader.
- Bereich Systemwartung → Datenbank-Migrationen und -Backups → Datenbank prüfen; die angezeigten Datenbank-Änderungen bestätigen.
- Unter Systemwartung den Anwendungs-Cache leeren (in der Navigation auch als Cache erneuern zu finden).
Der Contao Manager spricht Sie in seinen eigenen Texten mit „du“ an, etwa: „Dieses Paket wird installiert, wenn du die Änderungen anwendest.“ Das ist die Beschriftung des Managers, nicht die dieser Dokumentation.
Installation über Composer
Der alternative Weg auf der Kommandozeile im Projektverzeichnis:
composer require vtinnovations/seo-studio
vendor/bin/contao-console contao:migrate
vendor/bin/contao-console cache:clear
Bei einer Managed Edition gehört zusätzlich der Setup-Schritt dazu, damit die
öffentlichen Bundle-Dateien (Backend-Stylesheet und die Panel-Skripte) unter
public/bundles/vtinnovationsseostudio/ bereitgestellt werden:
vendor/bin/contao-console contao:setup
Für ein späteres Update:
composer update vtinnovations/seo-studio
vendor/bin/contao-console contao:migrate
vendor/bin/contao-console cache:clear
Das Paket nie als entpacktes ZIP über ein bestehendes Verzeichnis kopieren. Entfernte Dateien einer älteren Version bleiben dabei liegen und werden weiter geladen. Verwenden Sie Composer oder den Contao Manager, damit alte Stände sauber verschwinden.
Installation überprüfen
Dass das Bundle registriert ist, zeigt am schnellsten die Routenliste — die Routen werden unabhängig vom Lizenzstand registriert:
vendor/bin/contao-console debug:router | grep seo_studio
Erwartet werden neun Einträge, darunter seo_studio.meta_generate,
seo_studio.optimize, seo_studio.llms_txt und
seo_studio.provisioning_callback. Die vollständige Liste steht unter
Routen und Endpunkte.
Im Backend prüfen Sie zwei Dinge:
- Unter Einstellungen erscheint ganz oben der Abschnitt V-T.ONE Licence management mit der Überschrift AI SEO Studio. Dieser Abschnitt ist immer vorhanden — auch ohne Lizenz.
- Eine Menügruppe SEO Studio erscheint dagegen noch nicht. Das ist kein Fehler, sondern der beabsichtigte Zustand: ohne gültige Lizenz verhält sich die Installation exakt so, als wäre das Bundle nicht vorhanden.
Fehlt auch der Lizenzabschnitt unter Einstellungen, wurde entweder die Datenbankmigration nicht ausgeführt oder der Cache nicht geleert. Beides nachholen und die Seite neu laden.
Lizenz aktivieren
AI SEO Studio ist ein Produkt mit genau einer Lizenzstufe. Es gibt keine kostenlose Variante, keine Testphase und nach Ablauf keinen Rückfall in einen eingeschränkten Modus. Die Verwaltung liegt unter Contao → Einstellungen im Abschnitt V-T.ONE Licence management → AI SEO Studio. Ein zweiter Lizenzbildschirm existiert nicht.
So aktivieren Sie die Lizenz
- Stellen Sie sicher, dass am Startpunkt ein Domainname eingetragen ist (siehe Vor der Installation). Ohne ihn zeigt der Abschnitt nur einen Hinweis und keine Schaltflächen.
- Melden Sie sich als Administrator an. Die Aktionen prüfen serverseitig die Administratorrolle; einem anderen Backend-Benutzer antwortet der Bereich mit „Sie dürfen die Lizenz nicht verwalten.“
- Öffnen Sie Einstellungen. Der Abschnitt zeigt als Statusbox „Keine Lizenz hinterlegt. Bitte den Lizenzschlüssel eingeben, um AI SEO Studio zu aktivieren.“ sowie eine Faktenzeile mit Produkt und Konfigurierte Domains.
- Tragen Sie den Schlüssel in das Feld Lizenzschlüssel ein
(Platzhalter
XXXXX-XXXXX-XXXXX-XXXXX, maximal 191 Zeichen). - Klicken Sie Lizenz prüfen und aktivieren. Der Server — nicht Ihr Browser — kontaktiert daraufhin den Lizenzdienst. Der Vorgang läuft innerhalb des Seitenaufrufs ab; lassen Sie den Reiter geöffnet, bis die Seite neu geladen ist.
- Bei Erfolg erscheint „Die Lizenz wurde aktiviert. AI SEO Studio ist aktiv.“ und die Statusbox wechselt auf „Pro-Lizenz aktiv. Alle Funktionen freigeschaltet.“
- Leeren Sie den Cache. Die Menügruppe SEO Studio wird beim Aufbau der Backend-Navigation registriert, erscheint also erst danach zuverlässig.
Die Faktenzeile unter der Statusüberschrift zeigt bei hinterlegter Lizenz genau fünf Angaben: Schlüssel (maskiert, vier Zeichen vorn und hinten, dazwischen eine feste Anzahl Punkte), Paket, Gültig ab, Gültig bis und Zuletzt geprüft. Solange etwas nicht stimmt, kommt Konfigurierte Domains hinzu — denn dann ist das meist die Ursache.
Aktualisieren und entfernen
| Schaltfläche | Wirkung |
|---|---|
| Lizenz prüfen und aktivieren | Prüft den eingegebenen Schlüssel beim Lizenzdienst und hinterlegt ihn. |
| Lizenz aktualisieren | Fragt den aktuellen Stand erneut ab, etwa nach einer Verlängerung. Das Schlüsselfeld darf dabei leer bleiben: „Für die Aktivierung erforderlich. Beim Aktualisieren einer bereits hinterlegten Lizenz leer lassen.“ Meldung bei Erfolg: „Die Lizenz wurde aktualisiert.“ |
| Lizenz entfernen | Erscheint nur, wenn etwas hinterlegt ist. Fragt zuerst nach: „Die hinterlegte Lizenz entfernen? Alle Funktionen von AI SEO Studio werden sofort deaktiviert.“ Danach: „Die Lizenz wurde entfernt. AI SEO Studio ist inaktiv.“ |
Das Entfernen löscht keine Inhalte. Seiten, FAQ- und Glossar-Einträge
bleiben unverändert in der Datenbank; sie werden lediglich nicht mehr verarbeitet oder
ausgegeben. Sobald wieder eine gültige Lizenz vorliegt, ist alles unverändert da.
Gleichzeitig gilt: Solange keine Lizenz aktiv ist, verschwinden auch die
Frontend-Ausgaben — strukturierte Daten, Open-Graph-Tags, llms.txt sowie die
FAQ- und Glossar-Module bleiben stumm.
Die Lizenzzustände im Klartext
Die Statusbox zeigt für jeden Zustand einen eigenen Satz. Diese Sätze sind die verlässlichste Fehlerdiagnose:
| Angezeigter Text | Bedeutung |
|---|---|
| „Pro-Lizenz aktiv. Alle Funktionen freigeschaltet.“ | Alles in Ordnung. |
| „Keine Lizenz hinterlegt. Bitte den Lizenzschlüssel eingeben, um AI SEO Studio zu aktivieren.“ | Frischinstallation oder Lizenz entfernt. |
| „Lizenz abgelaufen. AI SEO Studio ist inaktiv, bis eine gültige Lizenz vorliegt.“ | Laufzeit überschritten. Es gibt keine Übergangsfrist. |
| „Die Lizenz ist noch nicht gültig.“ | Der Gültigkeitsbeginn liegt in der Zukunft. |
| „Die hinterlegte Lizenz gilt für keine auf dieser Installation konfigurierte Domain.“ | Häufigster Fall nach einem Umzug oder beim Klonen auf eine Staging-Domain. |
| „Die hinterlegte Lizenz gilt nicht für dieses Produkt.“ | Schlüssel eines anderen V-T.ONE-Pakets eingetragen. |
| „Die hinterlegte Lizenz stammt aus einem älteren Lizenzformat. Bitte „Lizenz aktualisieren“ verwenden.“ | Einmalig auf Lizenz aktualisieren klicken. |
| „Die hinterlegte Lizenz konnte nicht geprüft werden.“ | Der gespeicherte Datensatz besteht die kryptografische Prüfung nicht. |
Schlägt die Anfrage an den Lizenzdienst selbst fehl, meldet der Bereich „Der Lizenzserver war nicht erreichbar. Der aktuelle Lizenzstatus bleibt unverändert.“ — der bisherige Stand wird also nicht verworfen und nicht stillschweigend herabgestuft.
KI-Anbieter verbinden
Zu finden unter SEO Studio → Einstellungen, Reiter KI-Einstellungen. Ohne Schlüssel arbeiten alle deterministischen Prüfungen weiter; die Übersicht weist dann oben darauf hin: „KI noch nicht verbunden. Die Prüfungen (Crawler, Struktur, Bilder) laufen bereits; für Text- und Meta-Generierung unter Einstellungen einen KI-Anbieter + Schlüssel eintragen.“
So verbinden Sie einen Anbieter
- Öffnen Sie SEO Studio → Einstellungen, Reiter KI-Einstellungen.
- Wählen Sie unter KI-Anbieter einen der drei Einträge: Anthropic (Claude), OpenAI oder OpenAI-kompatibel (eigene URL).
- Lassen Sie Modell (leer = Standard) zunächst leer. Das Feld ist nur nötig, wenn Sie bewusst ein anderes Modell einsetzen wollen.
- Tragen Sie den API-Schlüssel ein. Solange nichts gespeichert ist, steht im Feld „noch kein Schlüssel gespeichert“.
- Nur bei OpenAI-kompatibel: tragen Sie zusätzlich die
Basis-URL (nur für „kompatibel“) ein. Erlaubt sind ausschließlich
http- undhttps-Adressen mit Hostnamen, sonst lautet die Antwort „Ungültige Basis-URL. Nur http(s) mit Hostname erlaubt.“ - Setzen Sie optional ein Monatliches Token-Budget (0 = unbegrenzt).
- Klicken Sie Speichern.
- Klicken Sie Verbindung testen. Bei Erfolg erscheint eine Bestätigung der Form „Verbindung ok (Anbieter / Modell, 412 ms).“, sonst „Verbindung fehlgeschlagen: …“. Der Test sendet einen einzigen Ein-Wort-Prompt und niemals Inhalte Ihrer Website.
| Feld | Verhalten | Standard |
|---|---|---|
| KI-Anbieter | Anthropic (Claude), OpenAI oder OpenAI-kompatibel (eigene URL). | Anthropic |
| Modell (leer = Standard) | Leer bedeutet: das Standardmodell des Anbieters. Das ist
claude-haiku-4-5 bei Anthropic, gpt-4o-mini bei OpenAI und
gpt-3.5-turbo bei einer kompatiblen Schnittstelle. |
leer |
| API-Schlüssel | Wird verschlüsselt außerhalb der Datenbank abgelegt. Ist bereits einer gespeichert,
steht im Feld „gespeichert — leer lassen zum Behalten, "!delete" zum
Löschen“. Ein leeres Feld behält also den bisherigen Schlüssel; der Text
!delete löscht ihn. |
leer |
| Basis-URL (nur für „kompatibel“) | Endpunkt der OpenAI-kompatiblen Schnittstelle. | leer |
| Monatliches Token-Budget (0 = unbegrenzt) | Harte Grenze. Vor jedem Modellaufruf wird geprüft, danach der Verbrauch gebucht. Ab 80 % zeigt die Seite eine Warnung, bei 100 % bricht jeder weitere Aufruf ab mit „Monatliches Token-Budget (…) ist aufgebraucht. KI-Funktionen sind bis Monatsende pausiert.“ | 0 |
| Keine externen Aufrufe (KI komplett deaktivieren) | Not-Aus für ausgehende Verbindungen zum KI-Anbieter. Aktionen antworten dann mit „Externe Aufrufe sind deaktiviert („Keine externen Aufrufe“). Bitte erst in den Einstellungen freigeben.“, der Verbindungstest mit „Test nicht ausgeführt: „Keine externen Aufrufe“ ist aktiv. Zum Testen erst freigeben.“ | aus |
Oberhalb der Felder steht, sobald Verbrauch angefallen ist, eine Statuszeile: „Token-Verbrauch diesen Monat: 12.400 von 100.000 (12 %)“ — oder ohne Grenze „Token-Verbrauch diesen Monat: 12.400 (kein Limit gesetzt)“.
Der Verbindungstest wird nicht auf das Token-Budget angerechnet. Er verursacht aber trotzdem echte Kosten beim Anbieter und benötigt einen gültigen Schlüssel.
Funktionen und Verhalten einstellen
Im Reiter Funktionen steht je Funktion ein Kontrollkästchen. Der einleitende Satz beschreibt die Wirkung korrekt: „Deaktivierte Funktionen verschwinden komplett aus dem Backend (Menüpunkte, Buttons, Panels).“ Eine abgeschaltete Funktion hinterlässt keine Schaltfläche, kein leeres Panel und keinen Hinweis.
Alle vierzehn Funktionen sind ab Werk eingeschaltet:
| Beschriftung im Formular | Abschnitt in dieser Dokumentation |
|---|---|
| Meta-Generierung (Seitentitel + Beschreibung) | Meta-Generierung |
| SEO-Bewertung pro Seite (Fokus-Keyword, Checkliste, Ampel in der Seitenliste) | SEO-Bewertung pro Seite |
| Text-Optimierung (Überschriften + Textblöcke: Check/Umschreiben/Generieren) | Text-Optimierung |
| Inline-Check: Alt-Texte (Vision) | Inline-Checks |
| Inline-Check: Linktexte | Inline-Checks |
| FAQ-Generierung + FAQPage-Schema (Frontend-Modul) | FAQ |
| KI-Glossar (Begriffe + Definitionen, Frontend-Modul, Schema) | Glossar |
| Social-Media-Vorschau (Open Graph + Twitter/X Cards, Bild + Live-Vorschau) | Social-Media-Vorschau |
| Strukturierte Daten (JSON-LD: Organization, Breadcrumb, Article) | Strukturierte Daten |
| llms.txt (maschinenlesbare Website-Übersicht für KI-Agenten) | llms.txt |
| Audits (robots.txt KI-Crawler, Struktur) | KI-Crawler-Audit, Struktur-Audit, Duplikate |
| SEO/GEO/AEO-Score (Sichtbarkeits-Reifegrad pro Seite) | SEO/GEO/AEO-Score |
| Freshness (dateModified im Schema + Sitemap lastmod) | Aktualitäts-Monitor |
| Bild-Audit + Optimierungs-Assistent | Bild-Audit |
Der Reiter Verhalten enthält vier Felder:
| Feld | Verhalten | Standard |
|---|---|---|
| Schreibmodus | Auswahl zwischen Vorschlagen → Vorschau → Übernehmen und Nur leere Felder automatisch füllen. Diese Auswahl wird gespeichert, steuert in Version 1.0.0 aber nichts: keine Funktion des Pakets liest den Wert aus. Das tatsächliche Verhalten ist fest verdrahtet und entspricht beiden Angaben zugleich — Panels schlagen immer vor und füllen nur das Formular, Massenläufe und der Cron ändern immer ausschließlich leere Felder. | Vorschlagen → Vorschau → Übernehmen |
| Cron-Batchgröße | Anzahl Seiten je Cron-Durchlauf. Werte außerhalb von 1 bis 50 werden auf diesen Bereich begrenzt. Betrifft ausschließlich den Cron, nicht die Massenläufe im Backend. | 5 |
| Sprach-Override (leer = Sprache der Startseite) | Bestimmt die Ausgabesprache der KI. Leer bedeutet: die Sprache des Startpunkts, zu dem die jeweilige Seite gehört. | leer |
| Cron: leere Titel/Beschreibungen automatisch füllen (verbraucht Tokens) | Schaltet den stündlichen Meta-Cron ein. Bewusst standardmäßig aus, weil hier unbeaufsichtigt Kosten entstehen. | aus |
Der Reiter Strukturierte Daten (Schema.org) ist unter Strukturierte Daten beschrieben.
Erste Nutzung: die Übersicht
Nach der Aktivierung erscheint die Menügruppe SEO Studio mit sechs Einträgen, in der Reihenfolge des Arbeitsablaufs:
| Menüpunkt | Beschreibung im Backend |
|---|---|
| Übersicht | Was SEO Studio macht, Status und Erklärungen |
| Inhalte & Meta | Titel/Beschreibungen und Glossar-Definitionen per KI erzeugen |
| Analyse | Crawler, Struktur, Duplikate, GEO-Score, Aktualität, Bilder |
| FAQ | KI-generierte FAQ kuratieren und veröffentlichen |
| Glossar | KI-generierte Glossar-Begriffe kuratieren und veröffentlichen |
| Einstellungen | AI SEO Studio konfigurieren: KI-Anbieter, Funktionen, Verhalten |
So kommen Sie zum ersten Ergebnis
- Öffnen Sie SEO Studio → Übersicht. Der Ring oben zeigt zunächst einen geschätzten Wert mit der Erläuterung „geschätzt aus Abdeckung — für den vollen SEO/GEO/AEO-Score einmal „SEO·GEO·AEO-Score berechnen“ (Analyse) laufen lassen“.
- Arbeiten Sie die Liste Zu erledigen von oben nach unten ab. Jeder Eintrag benennt eine Zahl und führt über einen Link direkt auf den Bildschirm, auf dem sich das beheben lässt.
- Beginnen Sie mit „Crawler-Zugang noch nicht geprüft“ → Jetzt prüfen (Analyse). Das kostet keine Tokens und beantwortet die wichtigste Frage zuerst (siehe KI-Crawler-Audit).
- Tragen Sie danach unter Einstellungen → Strukturierte Daten den Firmennamen ein. Das ist ein Feld, wirkt auf allen Seiten und ist im Dashboard als eigene Aufgabe ausgewiesen.
- Lassen Sie dann unter Analyse → SEO/GEO/AEO-Score die Scores berechnen, damit der Ring und die Aufgabenlisten echte Werte statt Schätzungen zeigen.
- Klappen Sie bei Bedarf den Kasten „Was macht AI SEO Studio? & warum erscheinen Titel „von allein“?“ auf. Er erklärt unter anderem, dass ein Frontend-Titel in der Form „Seite - Websitename“ von Contao selbst stammt und nicht von diesem Paket.
Teil 2 — Funktionen im Detail
Alle folgenden Funktionen setzen eine aktive Pro-Lizenz voraus — eine Abstufung innerhalb der Lizenz gibt es nicht. Jede lässt sich einzeln unter SEO Studio → Einstellungen → Funktionen abschalten.
Alle Schaltflächen in den Backend-Modulen arbeiten synchron. Ein Klick auf „Jetzt generieren“, „Scores berechnen“, „Seite prüfen“, „Jetzt prüfen“ oder „Automatisch zuweisen“ führt die gesamte Arbeit innerhalb dieses einen Seitenaufrufs aus. Es gibt keine Warteschlange und keinen Fortschrittsbalken: Der Reiter muss geöffnet bleiben, bis die Seite neu geladen ist. Deshalb sind die Mengen je Durchlauf bewusst klein gehalten (10 Seiten bei Meta und Score, bis zu 8 Fragen bei FAQ).
Übersicht (Dashboard)
Unter SEO Studio → Übersicht. Reine Leseansicht — hier wird nichts verändert. Sie besteht aus vier Blöcken: dem Ring SEO · GEO · AEO Score mit der Aufschlüsselung nach den drei Ebenen, den Balken unter Abdeckung, der Liste Zu erledigen und dem aufklappbaren Erklärkasten.
So lesen Sie die Übersicht
- Steht die Installation auf mehreren Startpunkten, wählen Sie zuerst oben unter Startpunkt die gewünschte Website. Bei nur einem Startpunkt erscheint dieses Auswahlfeld nicht.
- Lesen Sie den großen Ring. Sind noch keine Scores berechnet, ist der Wert aus der Abdeckung geschätzt — der Text unter dem Ring sagt das ausdrücklich.
- Prüfen Sie darunter die drei Ebenen: SEO (Klassische Suche), GEO (Generative Suche) und AEO (Antwort-Engines). Ist noch nichts berechnet, steht dort: „SEO-/GEO-/AEO-Aufteilung erscheint, sobald der Score berechnet ist (Analyse → „Scores berechnen“).“
- Unter jeder Ebene stehen bis zu vier benannte Aufgaben in der Form „Seitentitel“ — Seitentitel und Beschreibung ausfüllen (+8), jeweils mit der zu erwartenden Punktzahl und einem Link auf den passenden Bildschirm. Sortiert ist nach dem größten Gewinn zuerst.
- Klappen Sie bei einer Aufgabe Beispiel ansehen auf. Dort steht ein vollständig ausformuliertes Vorher/Nachher-Beispiel — statisch hinterlegt, sofort verfügbar und ohne KI-Aufruf.
- Die Balken unter Abdeckung zeigen Titel & Beschreibungen, Aktualität (≤ 14 Tage) — nur zur Info, Bilder mit Bildgröße und KI-Crawler erlaubt.
- Arbeiten Sie Zu erledigen ab. Ist nichts offen, steht dort „Alles im grünen Bereich — keine offenen Punkte.“
Die Aktualität ist absichtlich keine Bewertung. Sie erscheint als neutraler Balken und als Hinweiszeile „Zur Info: … Seite(n) seit über 14 Tagen unverändert (zählt nicht in den Score)“. Eine fertige Seite wird nicht dadurch schlechter, dass sie ruht.
Ebenso unterscheidet das Dashboard zwischen „schlecht“ und „nie gemessen“. Wurde der KI-Check auf einer Seite nie ausgeführt, erscheint „Hinweis: Auf … Seite(n) lief der KI-Check nie — diese Punkte fehlen nicht, sie wurden nie gemessen.“, und diese Seiten ziehen ihre Ebene nicht nach unten.
Meta-Generierung
Erzeugt Seitentitel und Beschreibung — die Felder im Reiter „Metadaten“ einer Seite. Es gibt zwei Einstiege: einzeln am Seitenformular und als Massenlauf unter SEO Studio → Inhalte & Meta, Reiter Seitentitel & Meta. Zusätzlich kann ein optionaler Cron diese Arbeit übernehmen.
So erzeugen Sie Titel und Beschreibung für eine einzelne Seite
- Öffnen Sie die Seite in der Seitenstruktur zum Bearbeiten.
- Scrollen Sie zum Feld Beschreibung. Direkt darunter steht der Block SEO Studio.
- Klicken Sie Titel & Beschreibung mit KI vorschlagen.
- Warten Sie die Rückmeldung ab. Das Ergebnis erscheint als zwei Zeilen — Titel: und Beschreibung: — jeweils mit der Zeichenanzahl.
- Sind Sie einverstanden, klicken Sie In Felder übernehmen. Andernfalls Verwerfen.
- Beachten Sie den Hinweis unter den Schaltflächen: „Übernahme füllt nur die Formularfelder — gespeichert wird erst mit „Speichern“.“
- Klicken Sie Speichern. Erst damit steht der Text in der Datenbank.
So füllen Sie viele Seiten auf einmal
- Öffnen Sie SEO Studio → Inhalte & Meta, Reiter Seitentitel & Meta.
- Lesen Sie die Zustandszeile. Entweder „Alle veröffentlichten Seiten haben Titel und Beschreibung.“ — dann ist nichts zu tun — oder „… Seite(n) mit leerem Titel oder leerer Beschreibung.“
- Wählen Sie im Auswahlfeld einen Startpunkt oder Alle Startpunkte. Hinter jedem Startpunkt steht, wie viele Seiten dort offen sind.
- Klicken Sie Jetzt generieren (nur leere Felder). Der Lauf blockiert die Anfrage; lassen Sie den Reiter offen.
- Lesen Sie die Meldung. Sind noch Seiten offen, steht dort sinngemäß: „10 Seite(n) befüllt — 23 verbleiben. Erneut klicken oder den Cron übernehmen lassen.“ Andernfalls: „… Seite(n) befüllt. Alle Titel und Beschreibungen sind jetzt gesetzt.“
- Wiederholen Sie den Klick, bis nichts mehr offen ist — oder aktivieren Sie den Cron (nächster Absatz).
So übernimmt der Cron die Arbeit
- Öffnen Sie SEO Studio → Einstellungen, Reiter Verhalten.
- Setzen Sie das Häkchen bei Cron: leere Titel/Beschreibungen automatisch füllen (verbraucht Tokens).
- Stellen Sie die Cron-Batchgröße ein (1 bis 50, Standard 5). Das ist die Anzahl Seiten je Stunde.
- Speichern. Der Cron läuft stündlich über Contaos Cron-Mechanismus und bearbeitet ausschließlich veröffentlichte Seiten vom Typ regular mit leerem Titel oder leerer Beschreibung.
- Prüfen Sie den Fortschritt nach ein bis zwei Stunden über die Zustandszeile unter Inhalte & Meta.
Massenlauf und Cron fassen ausschließlich leere Felder an. Ein bereits redaktionell gepflegter Titel wird nie überschrieben. Umgekehrt gilt: Der Cron verursacht unbeaufsichtigt Kosten beim KI-Anbieter — deshalb ist er ab Werk abgeschaltet. Setzen Sie vorher ein Token-Budget. Läuft das Budget während eines Cron-Durchlaufs voll, stoppt der gesamte Durchlauf sauber und schreibt einen Protokolleintrag, statt weiterzumachen.
SEO-Bewertung pro Seite
Diese Funktion arbeitet an zwei Stellen gleichzeitig: als farbige Punktzahl an jeder Zeile im Seitenbaum (nur bei den Seitentypen regular und forward) und als Checkliste im Seitenformular, unterhalb des Feldes Beschreibung. Die Bewertung ist deterministisch — sie kostet keine Tokens. Nur die beiden Schaltflächen im Panel rufen die KI auf.
So verbessern Sie eine Seite anhand der Checkliste
- Öffnen Sie die Seitenstruktur. Vor jedem Seitentitel steht nun eine Zahl von 0 bis 100 in Grün, Orange oder Rot. Der Mauszeiger über der Zahl zeigt zusätzlich die Anzahl der Probleme.
- Öffnen Sie die Seite mit der niedrigsten Zahl zum Bearbeiten.
- Scrollen Sie zum Panel SEO-Bewertung dieser Seite. Links steht die Punktzahl, rechts daneben eine Zusammenfassung wie „3 Problem(e), 2 Hinweis(e)“ oder „alles im grünen Bereich“, dazu der Stand: nach dem letzten Speichern.
- Ist noch kein Fokus-Keyword gesetzt, steht hier: „Tipp: Trage oben ein Fokus-Keyword ein (oder lass es dir per KI vorschlagen) — dann prüft SEO Studio zusätzlich, ob es an den richtigen Stellen vorkommt.“ Tragen Sie es in das Feld Fokus-Keyword ein oder klicken Sie KI: Fokus-Keyword vorschlagen.
- Fehlen Titel oder Beschreibung, klicken Sie KI: Titel & Beschreibung erzeugen. Auch hier werden nur die Formularfelder gefüllt.
- Arbeiten Sie die drei Gruppen ab: Grundlagen, Fokus-Keyword und Lesbarkeit. Jeder Eintrag trägt ein Zeichen — ✓ erledigt, ⚠ Hinweis, ✗ Problem — und einen erklärenden Zusatz.
- Klicken Sie Speichern. Die Punktzahl wird beim nächsten Aufbau der Ansicht neu berechnet; der Hinweis im Panel sagt das ausdrücklich: „Nach dem Speichern aktualisiert sich die Bewertung.“
Ausgewählte Prüfungen und ihre Schwellenwerte, wie sie im Backend beschriftet sind:
| Gruppe | Prüfung | Kriterium laut Hinweistext |
|---|---|---|
| Grundlagen | Seitentitel-Länge | „… Zeichen — ideal sind 30–60.“ |
| Grundlagen | Beschreibungs-Länge | „… Zeichen — ideal sind 120–155.“ |
| Grundlagen | Meta-Beschreibung fehlt | „Suchmaschinen zeigen sonst zufälligen Text.“ |
| Grundlagen | Keine H1 im Inhalt | „OK, wenn das Layout den Seitentitel als H1 rendert.“ |
| Grundlagen | … H1-Überschriften | „Genau eine H1 pro Seite verwenden.“ |
| Grundlagen | Keine Zwischenüberschriften | „Zwischenüberschriften verbessern Lesbarkeit und AEO.“ |
| Grundlagen | Wenig Text | „… Wörter — mehr Inhalt hilft dem Ranking.“ |
| Grundlagen | … Bild(er) ohne Alt-Text | „Alt-Texte sind wichtig für Bild-SEO und Barrierefreiheit.“ |
| Fokus-Keyword | Keyword im Seitentitel / in der Beschreibung / in der URL / in der H1 / im ersten Absatz / in einer Zwischenüberschrift | Je eine eigene Prüfung mit eigenem Hinweis. |
| Fokus-Keyword | Keyword-Dichte | „… % — wirkt schnell wie Spam (ideal 0,5–2,5 %).“ |
| Lesbarkeit | Satzlänge | „Ø … Wörter/Satz — kürzere Sätze lesen sich leichter.“ |
| Lesbarkeit | Verständlichkeit | „Lesbarkeit …/100 — einfacher formulieren.“ |
| Lesbarkeit | Übergangswörter | „… % — Verbindungen wie „außerdem“, „daher“ führen den Leser.“ |
| Lesbarkeit | Satzanfänge | „… Sätze in Folge beginnen gleich — für Abwechslung sorgen.“ |
Das Feld Fokus-Keyword trägt im Backend den Hilfetext: „Der wichtigste Suchbegriff für diese Seite. SEO Studio prüft, ob er an den richtigen Stellen (Titel, Beschreibung, URL, Überschrift, Text) vorkommt. Leer lassen ist erlaubt.“
Die Lesbarkeitsgruppe folgt deutschen Sprachregeln (Flesch-Amstad, deutsche Übergangswörter, deutsche Passiv- und Füllworterkennung) und wird unabhängig von der tatsächlichen Sprache der Seite angewandt. Auf fremdsprachigen Seiten ist dieser Teil der Bewertung nicht aussagekräftig; alle anderen Prüfungen sind es sehr wohl.
Text-Optimierung
Diese Funktion hängt sich an jedes überschriften- und textartige Feld in
den redaktionellen Tabellen: tl_content (also auch Elemente aus
Seitenbaukasten-Erweiterungen, sofern sie dort speichern), tl_news,
tl_calendar_events sowie die eigenen FAQ- und Glossar-Tabellen. Unter dem Feld
erscheint ein Block mit zwei Schaltflächen. Zusätzlich trägt jede Zeile in der
Elementliste eine Punktzahl.
So optimieren Sie einen Textblock
- Öffnen Sie den Artikel einer Seite. In der Elementliste steht vor jedem redaktionellen Element eine farbige Zahl. Der Mauszeiger darüber erklärt sie: „SEO-Formcheck: …/100 — Element öffnen für die vollständige Prüfung inklusive Inhalt“.
- Öffnen Sie das schwächste Element zum Bearbeiten.
- Unter dem Feld Überschrift beziehungsweise Text steht der Block mit SEO-Check (Überschrift) oder SEO-Check (Text) und Mit KI optimieren.
- Klicken Sie zuerst SEO-Check. Sie erhalten eine Bewertung, eine Begründung und eine Liste der geprüften Kriterien — das macht sichtbar, was für 100/100 nötig wäre.
- Klicken Sie Mit KI optimieren. Der Vorschlag erscheint unter „Vorschlag:“ als Vorschau.
- Übernehmen Sie ihn mit In Feld übernehmen oder lehnen Sie ihn mit Verwerfen ab.
- Klicken Sie Speichern. Auch hier schreibt der Server nichts von sich aus: Die Schaltfläche füllt nur das Formularfeld.
Der Endpunkt kennt drei Betriebsarten: score (bewerten), rewrite (umschreiben) und generate (aus dem Kontext erzeugen). Die Bewertung in der Listenansicht ist bewusst rein deterministisch und ohne KI — eine Liste kann Dutzende Zeilen haben, und ein Modellaufruf pro Zeile wäre langsam und teuer. Die inhaltlichen Kriterien kommen erst beim Öffnen eines Elements hinzu.
Nicht angefasst werden die Felder alias, cssID,
guests, jumpTo, metaTitle und
metaDescription — Letztere haben ihr eigenes Panel.
Inline-Checks: Alt-Text und Linktext
Zwei spezialisierte Panels an tl_content, getrennt schaltbar:
- Inline-Check: Alt-Texte (Vision) — sitzt im Unterbereich Metadaten überschreiben direkt hinter dem Feld Alternativer Text. Nutzt ein bildverstehendes Modell.
- Inline-Check: Linktexte — sitzt hinter dem Feld Linktitel und arbeitet deterministisch.
So prüfen Sie einen Alt-Text
- Öffnen Sie ein Inhaltselement mit Bild zum Bearbeiten.
- Aktivieren Sie Metadaten überschreiben, damit das Feld Alternativer Text erscheint — ohne diesen Unterbereich gibt es kein Feld und folglich auch kein Panel.
- Unter dem Feld steht das SEO-Studio-Panel. Lösen Sie die Prüfung aus.
- Übernehmen Sie den Vorschlag in das Feld oder verwerfen Sie ihn.
- Klicken Sie Speichern.
Für den Linktext gilt derselbe Ablauf am Feld Linktitel. Ergebnisse werden anhand eines Inhalts-Prüfwerts zwischengespeichert, damit dieselbe unveränderte Passage nicht mehrfach abgerechnet wird.
FAQ
Drei Bausteine: die Erzeugung (zentral unter Inhalte & Meta oder je Seite im
Seitenformular), die Kuratierung unter SEO Studio → FAQ und die Ausgabe über das
Frontend-Modul FAQ (SEO Studio) mit FAQPage-Auszeichnung.
So erzeugen und veröffentlichen Sie FAQ
- Öffnen Sie SEO Studio → Inhalte & Meta, Reiter FAQ.
- Wählen Sie im ersten Auswahlfeld die Seite, aus deren Inhalt die Fragen entstehen sollen. Angeboten werden veröffentlichte Seiten vom Typ regular.
- Wählen Sie im zweiten Auswahlfeld 3 Fragen, 5 Fragen (Vorauswahl) oder 8 Fragen.
- Klicken Sie FAQ-Entwürfe erstellen. Der Lauf blockiert die Anfrage. Die Bestätigung lautet sinngemäß: „5 FAQ-Entwürfe erstellt (unveröffentlicht). Kuratieren unter SEO Studio → FAQ.“
- Wechseln Sie zu SEO Studio → FAQ. Jeder Eintrag zeigt die Frage und dahinter in Grau die zugehörige Seite.
- Öffnen Sie einen Eintrag. Er hat die Abschnitte Frage & Antwort (Felder Seite, Frage, Antwort) und Veröffentlichung.
- Prüfen und korrigieren Sie den Text. Die Hilfetexte nennen das Kriterium: die Frage „So formuliert, wie Nutzer wirklich fragen.“, die Antwort „Erste Aussage beantwortet die Frage direkt.“
- Setzen Sie Veröffentlicht — oder nutzen Sie das Sichtbarkeitssymbol direkt in der Liste. Der Hilfetext ist eindeutig: „Nur veröffentlichte FAQ erscheinen im Frontend-Modul.“
So bringen Sie die FAQ ins Frontend
- Legen Sie unter Layout → Module ein neues Modul vom Typ FAQ (SEO Studio) an (Kategorie Verschiedenes). Die Beschreibung lautet: „Veröffentlichte FAQ der aktuellen Seite als Akkordeon mit FAQPage-Schema“.
- Vergeben Sie einen Namen; weitere Pflichtfelder gibt es nicht.
- Platzieren Sie das Modul auf der Seite — als Inhaltselement Modul im Artikel oder über das Seitenlayout.
- Rufen Sie die Seite im Frontend auf. Es erscheinen ausschließlich die
veröffentlichten FAQ dieser Seite, samt
FAQPage-Auszeichnung im Quelltext.
Das Modul rendert bewusst gar nichts — kein leerer Kasten, keine Überschrift — wenn die Seite keine veröffentlichten FAQ hat, die Funktion abgeschaltet ist oder keine Lizenz aktiv ist. Eine „leere“ Ausgabe ist daher fast immer ein Kuratierungsstand, kein Fehler.
Denselben Erzeugungsknopf finden Sie auch direkt im Seitenformular im Block SEO Studio unter dem Feld Beschreibung.
Glossar
Wie die FAQ dreiteilig: Erzeugung unter Inhalte & Meta, Kuratierung unter
SEO Studio → Glossar, Ausgabe über das Frontend-Modul Glossar (SEO
Studio). Das Modul liefert eine A-Z-Liste mit DefinedTermSet und
Detailseiten je Begriff mit DefinedTerm.
So bauen Sie ein Glossar auf
- Öffnen Sie SEO Studio → Inhalte & Meta, Reiter Glossar.
- Wissen Sie noch nicht, welche Begriffe sinnvoll sind, klicken Sie Begriffe aus Website vorschlagen. Die Vorschläge erscheinen als Hinweiszeile mit der Anweisung, sie in das Textfeld zu kopieren.
- Tragen Sie die gewünschten Begriffe in das Feld Begriffe (einer pro Zeile) ein.
- Klicken Sie Definitionen generieren (Entwürfe). Der Lauf blockiert die Anfrage. Die Meldung nennt die Zahl der erzeugten Definitionen und, falls zutreffend, wie viele bereits vorhandene Begriffe übersprungen wurden.
- Wechseln Sie zu SEO Studio → Glossar. Die Liste ist alphabetisch nach Anfangsbuchstaben gruppiert.
- Öffnen Sie einen Eintrag. Abschnitt Begriff & Definition: Begriff, Alias („Eindeutiger URL-Alias (leer = automatisch).“) und Definition („Erster Satz definiert den Begriff direkt (Antwort-zuerst).“).
- Im Abschnitt SEO können Sie SEO-Titel („Eigener Seitentitel der Detailseite (leer = Begriff).“) und Meta-Description („Beschreibung der Detailseite (leer = Anfang der Definition).“) setzen — oder darunter SEO-Titel & -Beschreibung mit KI vorschlagen klicken und das Ergebnis übernehmen.
- Setzen Sie Veröffentlicht. Auch hier: „Nur veröffentlichte Begriffe erscheinen im Frontend-Modul.“
- Legen Sie unter Layout → Module ein Modul vom Typ Glossar (SEO
Studio) an und platzieren Sie es auf einer Seite. Die Detailansicht eines Begriffs
läuft über
auto_itemund setzt Titel, Beschreibung und kanonische URL der Seite auf die Werte des Begriffs.
Bestehendes Glossar übernehmen
Ist das ältere Glossar-Bundle installiert, erscheint im selben Reiter eine zusätzliche Schaltfläche Aus Glossar-Bundle importieren (…) mit der Anzahl in Klammern. Der Klick fragt zuerst: „… Einträge aus dem alten Glossar-Bundle importieren? Bestehende Begriffe werden übersprungen, Alt-Daten bleiben unverändert.“ Danach meldet er, wie viele Einträge importiert und wie viele übersprungen wurden, mit dem Hinweis: „Das alte Glossar-Bundle kann deinstalliert werden.“
Der Import ist die einzige Ausnahme vom Entwurfsprinzip. Alles, was die KI erzeugt, ist zuerst Entwurf. Der Import dagegen übernimmt den Veröffentlichungsstatus der Altdaten unverändert — bereits veröffentlichte Altbestände sind unmittelbar nach dem Import im Frontend sichtbar. Prüfen Sie die importierten Texte deshalb zeitnah.
Social-Media-Vorschau
Ergänzt das Seitenformular um drei Felder und eine Vorschaukarte und gibt im Frontend Open-Graph- sowie Twitter/X-Card-Angaben aus.
So richten Sie die Vorschau für eine Seite ein
- Öffnen Sie die Seite zum Bearbeiten und scrollen Sie unter das Feld Beschreibung.
- Füllen Sie bei Bedarf Social-Titel (optional) aus. Hilfetext: „Überschreibt den Titel beim Teilen auf Facebook, LinkedIn und X. Leer = Seitentitel wird genutzt.“ Maximal 90 Zeichen.
- Füllen Sie bei Bedarf Social-Beschreibung (optional) aus: „Überschreibt die Beschreibung beim Teilen. Leer = Meta-Beschreibung wird genutzt.“ Maximal 200 Zeichen.
- Wählen Sie unter Vorschaubild (Open Graph) eine Datei aus der
Dateiverwaltung. Zulässig sind
jpg,jpeg,png,webpundgif. Hilfetext: „Das Bild, das beim Teilen der Seite in sozialen Netzwerken angezeigt wird. Ideal 1200×630 px.“ - Klicken Sie Speichern. Erst danach zeigt die Karte Social-Vorschau das Bild — der Hinweis im Panel sagt es: „So erscheint die Seite geteilt auf Facebook, LinkedIn & X. Leere Felder greifen auf Seitentitel/Beschreibung zurück. Bild-Vorschau nach dem Speichern.“ Bei einer noch nie gespeicherten Seite steht dort „Seite noch nicht gespeichert.“
- Prüfen Sie die Ausgabe im Frontend-Quelltext auf
og:titleundog:description.
Gibt Ihr Seitentemplate oder eine andere Erweiterung bereits ein
og:title-Element aus, hält sich SEO Studio vollständig zurück und schreibt
nichts dazu. Das verhindert doppelte Angaben — erklärt aber auch, warum die Felder in einem
solchen Layout wirkungslos erscheinen können.
Strukturierte Daten (JSON-LD)
Schreibt maschinenlesbare Datenblöcke unmittelbar vor </head> in jede
Frontend-Seite — bewusst nicht über TL_HEAD, weil eigene Seitentemplates dieses
Element oft nicht ausgeben. Konfiguriert wird alles unter SEO Studio → Einstellungen,
Reiter Strukturierte Daten (Schema.org).
So hinterlegen Sie die Organisationsdaten
- Öffnen Sie SEO Studio → Einstellungen, Reiter Strukturierte Daten (Schema.org). Oben steht der Einleitungstext mit dem Kernsatz: „Wenn du nur eine Sache machst: trag den Firmennamen ein.“
- Tragen Sie unter Organisation: Name den offiziellen Firmen- oder Websitenamen ein. Der Hilfetext beziffert den Effekt: „Solange dieses Feld leer ist, fehlen dir 3 GEO-Punkte pro Seite.“ Bleibt das Feld leer, wird ersatzweise der Titel des Startpunkts verwendet.
- Tragen Sie optional unter Organisation: Logo-URL die vollständige
Adresse Ihres Logos ein, beginnend mit
https://. - Tragen Sie optional unter Organisation: Profile (sameAs, eine URL pro Zeile) Ihre Profile ein — eine vollständige URL je Zeile.
- Belassen Sie die drei Häkchen darunter im Zweifel aktiviert. Der Hinweis dazu: „Im Zweifel alle drei angehakt lassen — sie schaden nie und greifen nur, wo sie passen.“
- Klicken Sie Speichern.
- Rufen Sie eine Frontend-Seite auf und suchen Sie im Quelltext nach
application/ld+json.
| Datenblock | Hilfetext im Formular | Standard |
|---|---|---|
| Organization | „Die Firmenangaben von oben. Grundlage für den Info-Kasten rechts neben den Google-Treffern.“ | an |
| BreadcrumbList | „Der Pfad der Seite im Seitenbaum. Google zeigt dann „Start › Leistungen › Beratung“ statt einer nackten URL.“ | an |
| Article (News) | „Nur für Nachrichten-Beiträge: Autor und Datum werden mitgeliefert. Ohne News-Modul wirkungslos.“ | an |
| WebPage | Kein eigenes Häkchen. Dieser Block wird ausgeliefert, sobald die Funktion
Freshness aktiv ist, und trägt dateModified. |
an über Freshness |
Ein Breadcrumb mit nur einem Eintrag wird nicht ausgegeben — eine einstufige Spur ist kein Pfad, sondern Rauschen. Auf Seiten direkt unter dem Startpunkt fehlt der Block deshalb erwartungsgemäß.
llms.txt
Stellt unter /llms.txt eine maschinenlesbare Kurzübersicht der Website
bereit — nach der Konvention von llmstxt.org: Überschrift mit dem Websitenamen, optional ein
Kurztext als Zitatblock, danach die indexierbaren Seiten als Linkliste, gruppiert je
Startpunkt. Der Hilfetext im Backend erklärt es so: „wie eine robots.txt, nur für Inhalt
statt Zugriff“.
So richten Sie llms.txt ein
- Stellen Sie sicher, dass die Funktion llms.txt (maschinenlesbare Website-Übersicht für KI-Agenten) unter Einstellungen → Funktionen aktiviert ist.
- Öffnen Sie den Reiter Strukturierte Daten (Schema.org). Ganz unten steht der Abschnitt llms.txt: Kurzbeschreibung der Website.
- Ist noch kein Text hinterlegt, steht dort „noch keine — per KI erzeugen oder leer lassen“.
- Klicken Sie Mit KI erzeugen. Der Text wird einmalig aus Ihren echten Seiten erzeugt und gespeichert — nicht bei jedem Abruf. Die Bestätigung zeigt das Ergebnis im Wortlaut an.
- Rufen Sie
https://ihre-domain.de/llms.txtauf. Die Antwort wird alstext/markdownausgeliefert.
In die Liste kommen ausschließlich veröffentlichte Seiten vom Typ regular, die
nicht im Menü versteckt sind und deren Robots-Einstellung mit index beginnt oder
leer ist. Der Websitename stammt aus Organisation: Name, ersatzweise aus dem Titel
des Startpunkts.
Das Ergebnis wird eine Stunde zwischengespeichert, da die Route öffentlich ist. Eine frisch veröffentlichte Seite erscheint deshalb unter Umständen erst mit Verzögerung.
Ohne gültige Lizenz oder bei abgeschalteter Funktion antwortet die Route mit 404 — genau so, als gäbe es sie nicht.
KI-Crawler-Audit
Unter SEO Studio → Analyse, Reiter KI-Crawler. Prüft je
konfigurierter Domain die robots.txt Ihrer eigenen Website — nicht die eines
Drittanbieters — und beantwortet die Frage, ob KI-Crawler überhaupt lesen dürfen. Die
Einleitung im Backend benennt die Konsequenz: „Blockierte Crawler bedeuten: die Website
kann in KI-Antworten nicht zitiert werden.“
So prüfen Sie den Crawler-Zugang
- Öffnen Sie SEO Studio → Analyse, Reiter KI-Crawler.
- Beim ersten Mal steht dort „Noch keine Prüfung durchgeführt — „Jetzt prüfen“ klicken.“
- Klicken Sie Jetzt prüfen. Der Abruf erfolgt innerhalb der Anfrage; lassen Sie den Reiter offen. Danach meldet die Seite: „Crawler-Prüfung abgeschlossen: … Domain(s).“
- Lesen Sie je Domain die Tabelle mit den Spalten Crawler, Zweck und Status. Der Status ist erlaubt, erlaubt (implizit) — also nicht ausdrücklich geregelt — oder blockiert.
- Prüfen Sie die Zeile darunter zur Sitemap. Fehlt sie, lautet die Empfehlung:
„Keine Sitemap-Zeile in der robots.txt. Empfehlung:
Sitemap: https://…/sitemap.xmlergänzen.“ - Ist etwas blockiert, erscheint der Abschnitt Korrektur-Vorschlag mit einem fertigen Textblock und der Anweisung: „Diesen Block in den Startpunkt der Website (Seitenstruktur → Root-Seite → Feld „Eigene robots.txt-Einträge“) einfügen“.
- Kopieren Sie den Block dorthin, speichern Sie und klicken Sie erneut Jetzt prüfen.
Geprüft werden sechs Crawler:
| Crawler | Zweck laut Backend |
|---|---|
| GPTBot (OpenAI) | Training von OpenAI-Modellen (ChatGPT-Wissen) |
| OAI-SearchBot (OpenAI) | ChatGPT-Suche — Zitierungen und Quellenlinks |
| ClaudeBot (Anthropic) | Training/Index für Claude |
| PerplexityBot | Perplexity-Antworten mit Quellenangabe |
| Google-Extended | Gemini-Training (nicht die Google-Suche!) |
| Bingbot (Microsoft) | Bing-Index — Grundlage für ChatGPT-Websuche und Copilot |
Fehlt eine robots.txt ganz, meldet die Prüfung: „Keine robots.txt
gefunden — damit dürfen alle Crawler zugreifen, aber es wird keine Sitemap
angekündigt.“ Das ist also kein Zugriffsproblem, sondern eine verpasste
Gelegenheit.
Struktur-Audit
Unter SEO Studio → Analyse, Reiter Struktur. Prüft eine einzelne Seite auf zwei Dinge: die Überschriften-Hierarchie (deterministisch) und den Einstiegsabsatz (per KI). Es gibt bewusst keinen Massenlauf für diese Prüfung.
So prüfen Sie die Struktur einer Seite
- Öffnen Sie SEO Studio → Analyse, Reiter Struktur.
- Haben Sie mehrere Startpunkte, grenzen Sie zuvor oben über Startpunkt ein. Das Auswahlfeld der Seiten folgt dieser Eingrenzung.
- Wählen Sie die Seite aus. Zuletzt geprüfte Seiten sind vorausgewählt.
- Klicken Sie Seite prüfen. Die KI-Prüfung des Einstiegsabsatzes läuft innerhalb dieser Anfrage. Danach erscheint „Struktur-Audit abgeschlossen.“
- Lesen Sie unter Ergebnis die Befunde zur Überschriften-Hierarchie. Mögliche Meldungen sind unter anderem „Überschriften-Struktur in Ordnung.“, „Keine H1 im Seiteninhalt. OK, wenn das Layout den Seitentitel als H1 rendert — sonst eine Überschrift auf H1 stellen.“ und „… H1-Überschriften im Inhalt („…“ …) — genau eine H1 pro Seite.“
- Lesen Sie darunter Antwort-zuerst-Einstieg mit einer Bewertung von 0 bis 100, einer Begründung und gegebenenfalls konkreten Formulierungsvorschlägen, jeweils mit „Vorschlag:“ eingeleitet.
- Setzen Sie die Befunde am Inhaltselement um — die Überschriftenebene stellen Sie im Feld neben der Überschrift ein (h1–h6).
- Klicken Sie erneut Seite prüfen. Das Ergebnis wird gespeichert und bleibt bis zur nächsten Prüfung sichtbar.
Ist kein API-Schlüssel gesetzt oder scheitert der Aufruf, läuft der deterministische Teil trotzdem durch und der andere Teil meldet „Antwort-zuerst-Check übersprungen: …“. Die Prüfung fällt also nie komplett aus.
Duplikate
Unter SEO Studio → Analyse, Reiter Duplikate. Findet identische Seitentitel und identische Beschreibungen über die gesamte Installation. Diese Ansicht hat keine Schaltfläche — sie wird beim Öffnen des Reiters berechnet.
So räumen Sie Duplikate auf
- Öffnen Sie SEO Studio → Analyse, Reiter Duplikate.
- Ist alles in Ordnung, steht dort „Keine doppelten Seitentitel oder Beschreibungen gefunden.“
- Andernfalls nennt jede Zeile das betroffene Feld (Seitentitel oder Beschreibung), den Wert und alle betroffenen Seiten mit ihrer ID.
- Öffnen Sie die zweite und jede weitere Seite einer Gruppe und formulieren Sie den Wert neu — oder lassen Sie ihn über Meta-Generierung erzeugen.
- Laden Sie den Reiter neu, um den Stand zu prüfen.
Unabhängig von dieser Ansicht meldet das Backend beim Speichern einer Seite einen neu entstandenen Konflikt direkt: „SEO Studio: Seitentitel ist identisch mit Seite „…“ (ID …) — Duplikate schwächen beide Seiten im Ranking.“
SEO/GEO/AEO-Score
Unter SEO Studio → Analyse, Reiter SEO/GEO/AEO-Score. Bewertet je Seite den Reifegrad von 0 bis 100 aus sieben Bestandteilen: Meta, Überschriften, Antwort-zuerst-Einstieg, strukturierte Formate, FAQ, Aktualität und Schema. Dies ist neben dem Bild-Assistenten eine der beiden schreibenden Aktionen im Analysebereich — geschrieben werden dabei ausschließlich die Bewertungen selbst, keine Inhalte.
So berechnen Sie die Scores
- Öffnen Sie SEO Studio → Analyse, Reiter SEO/GEO/AEO-Score.
- Beim ersten Mal steht dort „Noch keine Scores — „Scores berechnen“ klicken.“
- Wählen Sie eine der beiden Schaltflächen: Scores berechnen (ohne KI) kostet keine Tokens, lässt aber den Antwort-zuerst-Anteil ungemessen. Scores berechnen (mit KI-Check) misst auch diesen Anteil.
- Der Lauf blockiert die Anfrage und bearbeitet 10 Seiten je Durchlauf. Die Meldung lautet danach „… Seite(n) bewertet (mit KI-Check).“ beziehungsweise „… (deterministisch).“
- Wiederholen Sie den Klick, bis alle Seiten erfasst sind.
- Lesen Sie die Tabelle mit den Spalten Seite, Score, Schwachstellen und Stand. Die Farbe richtet sich nach dem Wert: ab 80 grün, ab 50 orange, darunter rot.
- Wechseln Sie zur Übersicht. Dort ist derselbe Wert nach SEO, GEO und AEO aufgeschlüsselt, jeweils mit benannten Aufgaben und Beispielen.
| Bestandteil | Zugeordnete Ebene |
|---|---|
| Meta (Titel und Beschreibung) | SEO — Klassische Suche |
| Überschriften | SEO — Klassische Suche |
| Strukturierte Formate (Listen, Tabellen) | GEO — Generative Suche |
| Schema (Organisationsdaten) | GEO — Generative Suche |
| Antwort-zuerst-Einstieg | AEO — Antwort-Engines |
| FAQ | AEO — Antwort-Engines |
| Aktualität | keiner — reine Information, zählt nicht in die Ebenen |
Ein Bestandteil, der nie gemessen wurde, zieht seine Ebene nicht nach unten. Wer nur ohne KI rechnet, sieht deshalb für AEO nicht fälschlich eine schlechte Note, sondern den Hinweis, dass dieser Anteil nie gemessen wurde.
Aktualitäts-Monitor
Zwei Wirkungen aus einer Funktion: eine Liste unter SEO Studio → Analyse, Reiter
Aktualität, sowie zwei Frontend-Effekte — dateModified im
WebPage-Datenblock und <lastmod> in Contaos Sitemap. Contao
gibt von Haus aus nur <loc> aus; Crawler nutzen
lastmod jedoch zur Priorisierung.
So nutzen Sie die Aktualitätsliste
- Öffnen Sie SEO Studio → Analyse, Reiter Aktualität.
- Sind alle Seiten frisch, steht dort „Alle veröffentlichten Seiten wurden in den letzten 14 Tagen aktualisiert.“
- Andernfalls erscheint die Liste, älteste zuerst, mit Titel, ID und der Angabe „vor … Tagen geändert“. Es werden maximal 200 Seiten gelistet.
- Nehmen Sie sich die Seiten vor, bei denen Aktualität sachlich zählt — Preise, Öffnungszeiten, Nachrichten. Eine unveränderte Seite ist kein Fehler.
- Für die Frontend-Wirkung ist nichts weiter zu tun:
lastmodunddateModifiedwerden automatisch aus dem Änderungszeitpunkt der Seite und ihrer neuesten veröffentlichten Artikel gebildet.
Bild-Audit und Größen-Assistent
Unter SEO Studio → Analyse, Reiter Bilder. Prüft drei Dinge: Bild-Elemente ohne Bildgrößen-Zuweisung, übergroße Originaldateien und ob ein modernes Bildformat konfiguriert ist. Die Zuweisung ist die zweite schreibende Aktion im Analysebereich.
So weisen Sie fehlende Bildgrößen zu
- Öffnen Sie SEO Studio → Analyse, Reiter Bilder.
- Ist alles zugewiesen, steht dort „Alle Bild-Elemente haben eine Bildgrößen-Zuweisung.“ und es gibt keine Schaltfläche.
- Andernfalls: „… Bild-Element(e) ohne Bildgrößen-Zuweisung — Originale werden unskaliert ausgeliefert.“
- Klicken Sie Automatisch zuweisen. Die Rückfrage benennt genau, was passiert: „Bildgröße „SEO Studio Responsiv“ (1200px, proportional, Lazy-Loading) anlegen und … Element(en) zuweisen?“
- Bestätigen Sie. Danach meldet die Seite: „Bildgröße „SEO Studio Responsiv“ (ID …) … Element(en) zugewiesen.“
- Prüfen Sie die neue Bildgröße bei Bedarf unter Theme-Manager → Bildgrößen und passen Sie sie an Ihr Layout an.
- Lesen Sie die beiden übrigen Abschnitte: Übergroße Originale listet
Dateien mit Abmessungen und Größe, mit der Empfehlung, Originale vor dem Hochladen auf
maximal 2560 px zu verkleinern. WebP nicht aktiviert zeigt einen fertigen
Konfigurationsblock zum Einfügen in
config/config.yaml.
Die Zuweisung ändert Inhaltselemente in der Datenbank und hat keine eingebaute Rücknahme. Elemente mit einer ausdrücklichen Zuweisung werden dabei nie angefasst — nur solche ohne. Legen Sie vorher ein Datenbank-Backup an.
Existiert noch kein Theme, bricht die Aktion ab mit „Kein Theme vorhanden — Bildgrößen brauchen ein Theme.“
Den empfohlenen WebP-Block schreibt das Paket bewusst niemals selbst in Ihre Konfigurationsdatei — das Einfügen bleibt Ihre Entscheidung.
Teil 3 — Für Entwickler
Paketname vtinnovations/seo-studio, Namensraum
VTinnovations\SeoStudio\, Bundle-Typ contao-bundle, Code-Lizenz
LGPL-3.0-or-later. Die Registrierung erfolgt über den Contao-Manager-Plugin-
Einstiegspunkt; das Bundle wird nach dem Contao-Core geladen.
Das Paket bringt keine Konsolenbefehle mit. Es gibt keinen
#[AsCommand] im gesamten Quellcode: Jede Aktion wird im Backend ausgelöst oder
läuft über den Contao-Cron. Ein Skript, das die Meta-Generierung aus einem Deployment
heraus anstoßen soll, findet dafür keinen Einstiegspunkt.
Tabellen und Verzeichnisse
Sechs eigene Tabellen. Nur zwei davon haben eine Backend-Oberfläche:
| Tabelle | Inhalt | Im Backend |
|---|---|---|
tl_seo_studio_faq |
Kuratierte FAQ je Seite, mit Versionierung | Ja — SEO Studio → FAQ |
tl_seo_studio_glossary |
Glossar-Begriffe mit Alias, Definition und SEO-Feldern, mit Versionierung | Ja — SEO Studio → Glossar |
tl_seo_studio_config |
Schlüssel/Wert-Speicher für alle Einstellungen (JSON-kodiert) sowie die
Monats-Tokenzähler tokenUsage:JJJJ-MM |
Nein — geschlossen, nicht editierbar |
tl_seo_studio_score |
Bewertung je Seite samt Bestandteilen | Nein — wird vom Dashboard und vom Analyse-Modul gerendert |
tl_seo_studio_verdict |
Zwischenspeicher für Modell-Urteile der Inline-Panels, nach Inhalts-Prüfwert | Nein |
tl_seo_studio_exchange |
Wiedereinspielungs-Journal für herstellerseitige Lizenz-Aktualisierungen. Speichert ausschließlich Prüfwerte, nie Schlüssel oder Nutzdaten | Nein |
An tl_page kommen vier Spalten hinzu — sie entstehen über die DCA-Definition
und damit über die reguläre Datenbankmigration:
| Spalte | Typ | Gehört zu |
|---|---|---|
seoFocusKeyword |
varchar(128) |
SEO-Bewertung pro Seite |
seoSocialTitle |
varchar(255) |
Social-Media-Vorschau |
seoSocialDescription |
varchar(255) |
Social-Media-Vorschau |
seoOgImage |
binary(16) |
Social-Media-Vorschau |
Diese Spalten werden nur registriert, solange die zugehörige Funktion aktiviert und eine Lizenz aktiv ist. Wird nach dem Abschalten einer Funktion eine Datenbankprüfung ausgeführt, meldet Contao die zugehörige Spalte folgerichtig als überflüssig. Schalten Sie die Funktion vor der Migration wieder ein, wenn die Daten erhalten bleiben sollen.
Laufzeitverzeichnisse unterhalb von var/ — nie über HTTP erreichbar, nicht
Teil des versionierten Quellcodes, aber Teil der Instanzdaten und damit sicherungswürdig:
var/seostudio/provisioning/record.json signierter Lizenzdatensatz 0600
var/seostudio/provisioning/record.seal zugehöriger Umschlag 0600
var/seostudio/secret.key Verschlüsselungsschlüssel 0600
var/seostudio/secrets.json verschlüsselter API-Schlüssel 0600
Schreibvorgänge auf das Lizenzverzeichnis laufen unter einer exklusiven Sperre und transaktional: schreiben, synchronisieren, erneut einlesen und prüfen, erst dann tauschen, danach nochmals prüfen — bei jedem Fehlschlag wird der vorherige Stand zurückgerollt.
Routen und Endpunkte
| Routenname | Pfad | Methode | Bereich |
|---|---|---|---|
seo_studio.meta_generate |
/contao/seostudio/meta/generate |
POST | Backend, Token erforderlich |
seo_studio.panel_suggest |
/contao/seostudio/panel/suggest |
POST | Backend, Token erforderlich |
seo_studio.page_suggest_keyword |
/contao/seostudio/page/suggest-keyword |
POST | Backend, Token erforderlich |
seo_studio.list_scores |
/contao/seostudio/list-scores |
POST | Backend, Token erforderlich |
seo_studio.optimize |
/contao/seostudio/optimize |
POST | Backend, Token erforderlich |
seo_studio.glossary_meta |
/contao/seostudio/glossary/meta |
POST | Backend, Token erforderlich |
seo_studio.faq_generate |
/contao/seostudio/faq/generate |
POST | Backend, Token erforderlich |
seo_studio.llms_txt |
/llms.txt |
GET | Frontend, öffentlich |
seo_studio.provisioning_callback |
/rest/api/v1/seo-studio-license-updater |
POST (GET/HEAD nur für 405) | Öffentlich, per Signatur authentifiziert |
Die sieben Backend-Endpunkte antworten einheitlich mit JSON und diesen Statuscodes:
| Status | Bedeutung | Beispieltext |
|---|---|---|
| 403 | Nicht angemeldet, keine Lizenz oder Funktion abgeschaltet | „Nicht angemeldet.“ / „Keine gültige Lizenz.“ / „Funktion ist deaktiviert.“ |
| 400 | Fehlerhafte Anfrageparameter | „Ungültige Seiten-ID.“ / „Ungültige Eintrags-ID.“ / „Ungültige Anfrage.“ |
| 422 | Budget erschöpft oder Vorbedingung verletzt | „Monatliches Token-Budget (…) ist aufgebraucht …“ / „Kein API-Schlüssel hinterlegt …“ |
| 502 | Der KI-Anbieter hat nicht verwertbar geantwortet | „… lieferte einen 200 mit nicht-JSON-Body.“ |
Die Route /rest/api/v1/seo-studio-license-updater ist notwendigerweise
öffentlich: Sie wird von einem anderen Server aufgerufen und hat keine Browser-Sitzung. Statt
eines Sitzungs-Tokens verlangt sie eine gültige Signatur des Herstellers. Sie beantwortet
einen falschen Methodentyp bewusst mit 405 und dem Kopf Allow:
POST statt mit 404, und einen falschen Medientyp mit 415. Antworten
sind absichtlich allgemein gehalten: Ein Aufrufer erfährt, ob es geklappt hat, aber nie,
welche Prüfung gescheitert ist.
Hooks, Listener, Erweiterungspunkte
| Einhängepunkt | Klasse | Wirkung |
|---|---|---|
loadDataContainer |
Feature\Meta\PageDcaListener |
Meta- und FAQ-Panel in tl_page, hinter description |
loadDataContainer |
Feature\PageScore\PageScoreDcaListener |
Fokus-Keyword, Checkliste und die Punktzahl im Seitenbaum |
loadDataContainer |
Feature\Social\SocialDcaListener |
Social-Felder und Vorschaukarte in tl_page |
loadDataContainer |
Feature\Optimize\OptimizePanelListener |
Optimierungs-Panel unter jedem Überschriften- und Textfeld |
loadDataContainer (Priorität −32) |
Feature\Optimize\ContentScoreDcaListener |
Punktzahl je Zeile in Listenansichten. Die Priorität ist notwendig: Contao registriert seine eigenen Listen-Callbacks bei −16, dieser Listener läuft später und umhüllt den vorhandenen Callback, statt ihn zu ersetzen |
loadDataContainer |
Feature\InlinePanel\PanelDcaListener |
Alt-Text- und Linktext-Panel in tl_content |
loadDataContainer |
Feature\Glossary\GlossaryDcaListener |
Meta-Panel im Glossar-Formular |
tl_page · config.onsubmit |
Feature\Audit\PageSaveListener |
Duplikatwarnung beim Speichern einer Seite |
tl_settings · config.onsubmit |
Core\Config\InstanceSettingsListener |
Verarbeitet die drei Lizenzaktionen |
kernel.response (Priorität −768) |
Feature\Schema\SchemaListener |
JSON-LD vor </head> |
kernel.response (Priorität −768) |
Feature\Social\SocialListener |
Open-Graph- und Twitter/X-Angaben vor </head> |
ContaoCoreEvents::SITEMAP (Priorität −100) |
Feature\Freshness\SitemapLastmodListener |
Ergänzt <lastmod> je URL |
kernel.terminate (Priorität −128) |
Core\Job\UsageSignalListener |
Sendet die Nutzungssignale nach der Auslieferung der Antwort |
#[AsCronJob('hourly')] |
Cron\MetaCron |
Stündlicher Meta-Batch |
#[AsFrontendModule] |
seo_studio_faq, seo_studio_glossary |
Die beiden Frontend-Module, Kategorie Verschiedenes |
Echte Erweiterungspunkte — jeweils ein Interface plus automatisch vergebener Service-Tag:
| Interface | Tag | Vertrag |
|---|---|---|
Core\Config\FeatureInterface |
seo_studio.feature |
getId() liefert das Kürzel. Daraus entstehen der Konfigurationsschlüssel
feature<Id> und automatisch ein Kontrollkästchen in den
Einstellungen, beschriftet aus
TL_LANG.SEO_STUDIO.features.<id>. |
Core\Ai\AiClientInterface |
seo_studio.ai_client |
Ein weiterer Anbieter ist „implementieren und taggen“ — an der Factory ist nichts zu
ändern. getProviderName() und defaultModel() sind Teil des
Vertrags. |
Feature\InlinePanel\AdapterInterface |
seo_studio.panel_adapter |
Weitere Inline-Panels. Vorhanden sind die Adapter altText und
linkText. |
Überschreibbar sind außerdem die beiden Twig-Templates
seo_studio_faq.html.twig und seo_studio_glossary.html.twig sowie
sämtliche Sprachdateien. Eine weitere Sprache entsteht, indem
contao/languages/de/ in ein neues Sprachverzeichnis kopiert und übersetzt wird;
am Code ist dafür nichts zu ändern.
Ausdrücklich keine Erweiterungspunkte — dafür gibt es keine öffentliche Schnittstelle und keine Zusage auf Stabilität:
- Die Bewertungslogik. Weder die Gewichtung der Checkliste noch die Bestandteile des SEO/GEO/AEO-Scores lassen sich von außen ergänzen oder umgewichten.
- Der Crawler-Katalog. Die sechs geprüften Crawler stehen fest und ändern sich mit einer Paketversion.
- Die Prompt-Texte an das Sprachmodell. Sie sind absichtlich nicht übersetzbar und nicht konfigurierbar, weil ihr Wortlaut Teil der Anweisung ist, nicht der Oberfläche.
- Die Liste der Tabellen, an die sich das Optimierungs-Panel hängt
(
tl_content,tl_news,tl_calendar_eventssowie die beiden eigenen Tabellen). - Es gibt keine eigenen Hooks und keine eigenen Events, in die sich andere Erweiterungen einhängen könnten.
Cron und Hintergrundverarbeitung
Der einzige Hintergrundprozess ist der stündliche Meta-Cron. Er prüft der Reihe nach vier Bedingungen und bricht bei jeder ab, die nicht erfüllt ist:
- Es liegt eine gültige Lizenz vor. Diese Prüfung erfolgt eigenständig — der Cron läuft
ohne Sitzung und stützt sich auf den gespeicherten, geprüften Hostnamen, nicht auf einen
Host-Kopf aus einer Anfrage. - Die Funktion Meta-Generierung ist aktiviert.
- Der Schalter Cron: leere Titel/Beschreibungen automatisch füllen ist gesetzt.
- Eine Datenbanksperre
meta_cronmit 1800 Sekunden Laufzeit lässt sich belegen. Überlappende Läufe sind damit ausgeschlossen.
Bearbeitet werden veröffentlichte Seiten vom Typ regular mit leerem
pageTitle oder leerer description, aufsteigend nach ID, begrenzt
auf die eingestellte Batchgröße (1 bis 50). Wird dabei das Token-Budget erreicht, endet der
gesamte Durchlauf geordnet mit einer Protokollwarnung. Der Fehler einer einzelnen Seite
überspringt nur diese Seite und wird protokolliert.
Protokollierung und externe Aufrufe
Das Paket richtet keinen eigenen Monolog-Kanal und keine eigene Logdatei ein. Es schreibt über den Standard-Logger der Anwendung; die Einträge landen dort, wo auch Contao und Symfony protokollieren. Geschrieben werden unter anderem:
SEO Studio AI callmit Zweck, Anbieter, Modell, Tokenzahl und Dauer — niemals mit dem Inhalt von Anfrage oder Antwort.SEO Studio meta cron stopped: …, wenn das Budget erreicht wurde.SEO Studio meta cron: page … failed: …bei einer einzelnen fehlgeschlagenen Seite.- Ein fehlgeschlagener Verbindungstest wird nur mit seiner Fehlerkategorie vermerkt, ohne Schlüssel und ohne Antworttext.
Ausgehende Verbindungen — sämtlich serverseitig über HTTPS, nie aus dem Browser:
| Zweck | Ziel | Ausgelöst durch |
|---|---|---|
| KI-Generierung (Meta, Text, FAQ, Glossar, Alt-Text, Fokus-Keyword) | Der konfigurierte KI-Anbieter | Klick auf eine KI-Aktion oder der optionale Meta-Cron |
| Verbindungstest | Der konfigurierte KI-Anbieter | Klick auf Verbindung testen |
robots.txt-Prüfung |
Die eigene Website, je konfigurierter Domain | Klick auf Jetzt prüfen im Crawler-Audit |
| Lizenzaktivierung, -aktualisierung, -entfernung | Lizenzdienst unter www.v-t.one |
Administrator-Klick im Lizenzbereich |
| Nutzungssignal | Lizenzdienst unter www.v-t.one |
Aufruf einer Backend-Seite — gesendet erst nach Auslieferung der Antwort und ohne Einfluss auf die Darstellung |
Die Lizenz-Ziele sind im Code fest zusammengesetzte Konstanten. Weder Konfiguration noch Datenbankinhalt, Anfrageparameter, DNS-Alias oder Weiterleitung können sie umlenken; der erwartete Hostname wird zusätzlich beim Verbindungsaufbau festgenagelt. Der Schalter Keine externen Aufrufe unterbindet die ersten beiden Zeilen; die deterministischen Funktionen laufen unverändert weiter.
Deployment und Cache
Es gibt keinen Build-Schritt und keine JavaScript-Abhängigkeiten, die installiert werden müssten. Die Panel-Skripte und das Backend-Stylesheet werden als fertige Dateien ausgeliefert.
# Installation und Update
composer require vtinnovations/seo-studio
vendor/bin/contao-console contao:migrate
# Managed Edition: öffentliche Bundle-Dateien bereitstellen
vendor/bin/contao-console contao:setup
# Cache
vendor/bin/contao-console cache:clear
Den Cache sollten Sie insbesondere nach diesen drei Ereignissen leeren, weil die Backend-Navigation sonst den alten Stand zeigt: nach dem Aktivieren einer Lizenz, nach dem Entfernen einer Lizenz und nach dem Ein- oder Ausschalten einer Funktion.
Zum Testen bringt das Paket eine PHPUnit-Suite sowie ein eigenständiges Prüfwerkzeug mit:
composer install
vendor/bin/phpunit
php tools/release-guard.php # oder: composer run release-guard
vendor/bin/phpstan analyse # Stufe 8, konfiguriert in phpstan.neon
tools/release-guard.php ist ein interner Release-Sicherheitscheck; er prüft
unter anderem die vollständige Übersetzungsparität zwischen Deutsch und Englisch und schlägt
fehl, sobald ein Oberflächentext im Code fest verdrahtet wird.
Fehlerbehebung
| Symptom | Ursache und Prüfung |
|---|---|
| Die Menügruppe SEO Studio fehlt vollständig | Keine gültige Lizenz. Das ist der beabsichtigte Zustand, kein Fehler. Prüfen Sie die Statusbox unter Einstellungen → V-T.ONE Licence management → AI SEO Studio; siehe Lizenz aktivieren. |
| Die Menügruppe erscheint nach der Aktivierung nicht sofort | Backend-Cache. Der Menüaufbau liest den Lizenzstand beim Laden der Konfiguration. Cache leeren und neu anmelden. |
| Der Lizenzbereich zeigt keine Schaltflächen, nur einen Hinweis | Am Startpunkt fehlt der Domainname: „Für diese Installation ist keine Domain konfiguriert. Bitte die Domain am Startpunkt eintragen …“ Seitenstruktur → Startpunkt → „Domainname“ ausfüllen und neu laden. |
| „Die hinterlegte Lizenz gilt für keine auf dieser Installation konfigurierte Domain.“ | Die Bindung ist exakt und ohne Platzhalter. example.com und
www.example.com sind zwei Identitäten. Vergleichen Sie die Angabe
Konfigurierte Domains in der Faktenzeile mit dem lizenzierten Hostnamen. |
| „Die hinterlegte Lizenz stammt aus einem älteren Lizenzformat.“ | Der Datensatz wurde vor einer Formaterweiterung ausgestellt. Einmalig Lizenz aktualisieren klicken. |
| „Sie dürfen die Lizenz nicht verwalten.“ | Der angemeldete Benutzer ist kein Contao-Administrator. Die Prüfung erfolgt serverseitig und lässt sich nicht über Rechte am Menü umgehen. |
| „Der Lizenzserver war nicht erreichbar. Der aktuelle Lizenzstatus bleibt unverändert.“ | Ausgehende HTTPS-Verbindungen zum Lizenzdienst sind blockiert (Firewall, Proxy). Der gespeicherte Stand wurde nicht verworfen — nach Behebung erneut versuchen. |
| „Kein API-Schlüssel hinterlegt. Bitte in den Einstellungen setzen.“ | Unter Einstellungen → KI-Einstellungen Schlüssel eintragen, speichern und mit Verbindung testen prüfen. |
| „Externe Aufrufe sind deaktiviert („Keine externen Aufrufe“).“ | Der Not-Aus ist gesetzt. Im Reiter KI-Einstellungen das Häkchen entfernen. Deterministische Prüfungen laufen davon unbeeinflusst weiter. |
| „Monatliches Token-Budget (…) ist aufgebraucht. KI-Funktionen sind bis Monatsende pausiert.“ | Budget erhöhen oder auf den Monatswechsel warten. Bereits erzeugte Entwürfe bleiben
erhalten. Der Zähler liegt in tl_seo_studio_config unter
tokenUsage:JJJJ-MM. |
| „Funktion ist deaktiviert.“ beim Klick auf eine Schaltfläche | Die zugehörige Funktion wurde unter Einstellungen → Funktionen abgeschaltet, während der Bildschirm noch offen war. Seite neu laden. |
| „Ungültige Basis-URL. Nur http(s) mit Hostname erlaubt.“ | Nur bei Anbieter OpenAI-kompatibel. Die Adresse braucht Schema und Hostnamen. |
| Das Feld Fokus-Keyword oder eine andere neue Spalte fehlt | Die Datenbankmigration wurde nach der Aktivierung nicht erneut ausgeführt. Die Spalten entstehen nur, solange Lizenz und zugehörige Funktion aktiv sind. Datenbank prüfen erneut ausführen. |
| Ein Panel erscheint nicht am Seitenformular | Die Panels werden nur in Paletten eingehängt, die das Feld description
enthalten — also bei den Seitentypen regular und forward
(das Meta-Panel zusätzlich bei redirect). Bei anderen Seitentypen ist das
erwartungsgemäß. |
| Das Alt-Text-Panel fehlt am Bildelement | Es sitzt im Unterbereich Metadaten überschreiben. Ohne dieses Häkchen gibt es kein Feld Alternativer Text und folglich kein Panel. |
| Die Schaltflächen und Panels sind unformatiert | Die öffentlichen Bundle-Dateien fehlen unter
public/bundles/vtinnovationsseostudio/. Bei einer Managed Edition
contao:setup ausführen. |
| Das FAQ- oder Glossar-Modul zeigt im Frontend nichts | Drei mögliche Gründe, in dieser Reihenfolge prüfen: keine Lizenz, Funktion abgeschaltet, oder keine veröffentlichten Einträge. Das Modul rendert in allen drei Fällen bewusst gar nichts. |
/llms.txt antwortet mit 404 |
Keine Lizenz oder die Funktion llms.txt ist abgeschaltet. Beides beabsichtigt. |
/llms.txt zeigt eine veraltete Liste |
Das Ergebnis wird eine Stunde zwischengespeichert. Abwarten oder den Cache leeren. |
| Die Open-Graph-Felder bleiben im Frontend wirkungslos | Das Layout gibt bereits ein og:title aus. In diesem Fall hält sich SEO
Studio zurück, um keine doppelten Angaben zu erzeugen. Quelltext prüfen. |
| Kein Breadcrumb-Datenblock im Quelltext | Ein Breadcrumb mit weniger als zwei Einträgen wird bewusst nicht ausgegeben. Bei Seiten direkt unter dem Startpunkt ist das der Normalfall. |
| „Kein Theme vorhanden — Bildgrößen brauchen ein Theme.“ | Der Bild-Assistent legt seine Bildgröße innerhalb eines Themes an. Zuerst ein Theme anlegen. |
| Die KI antwortet in der falschen Sprache | Die Ausgabesprache folgt der Sprache des Startpunkts. Entweder dort korrigieren oder unter Einstellungen → Verhalten den Sprach-Override setzen. |
| Die Umstellung des Schreibmodus ändert nichts | Korrekt: Die Auswahl wird gespeichert, aber von keiner Funktion ausgewertet. Siehe Funktionen und Verhalten einstellen. |
| Ein Frontend-Titel lautet „Seite - Websitename“, obwohl das Feld anders lautet | Das stammt von Contao selbst: Der Startpunktname wird angehängt, und bei leerem Seitentitel greift der Navigationstitel. Dieses Verhalten hat nichts mit SEO Studio zu tun. |
Bekannte Einschränkungen
- Die Lesbarkeitsanalyse ist deutschsprachig. Flesch-Amstad, Übergangswörter sowie die Passiv- und Füllworterkennung folgen deutschen Sprachregeln und werden unabhängig von der tatsächlichen Sprache der Seite angewandt. Alle übrigen Prüfungen sind sprachunabhängig.
- Ein einziges Lizenzmodell. Es gibt keine kostenlose Stufe, keine Testphase und keine Übergangsfrist nach Ablauf. Eine abgelaufene Lizenz schaltet alle Funktionen sofort ab — Inhalte bleiben dabei unangetastet.
- Kein Konsolenbefehl. Alle Aktionen laufen über das Backend oder den Cron. Eine Anbindung an ein Deployment-Skript ist nicht vorgesehen.
- Alle Backend-Aktionen sind synchron. Es gibt keine Warteschlange und keinen Fortschrittsbalken. Deshalb bearbeitet ein Durchlauf höchstens 10 Seiten (Meta, Score) beziehungsweise 8 Fragen (FAQ), und der Reiter muss geöffnet bleiben.
- Der Schreibmodus ist wirkungslos. Die Auswahl unter Verhalten → Schreibmodus wird gespeichert, von keiner Funktion aber ausgewertet. Das tatsächliche Verhalten ist fest: Panels schlagen vor, Massenläufe füllen nur leere Felder.
- Der Glossar-Import ist die Ausnahme vom Entwurfsprinzip. Er übernimmt den Veröffentlichungsstatus der Altdaten unverändert, statt alles auf Entwurf zu zwingen.
- Der Verbindungstest zählt nicht gegen das Token-Budget, verursacht aber reale Kosten beim Anbieter und benötigt einen gültigen Schlüssel.
- Das Struktur-Audit prüft immer nur eine Seite. Einen Massenlauf für diese Prüfung gibt es nicht.
- Die Aktualitätsliste ist auf 200 Seiten begrenzt und arbeitet mit einer festen Schwelle von 14 Tagen. Beides ist nicht einstellbar.
- Open-Graph-Ausgabe steht bei Konflikt zurück. Gibt das Layout bereits
ein
og:titleaus, schreibt SEO Studio nichts dazu. /llms.txtwird eine Stunde zwischengespeichert. Diese Dauer ist nicht konfigurierbar.- Der Bild-Assistent hat keine Rücknahme. Die Zuweisung der Bildgröße ändert Inhaltselemente unmittelbar in der Datenbank.
- Die Bewertungslogik ist nicht erweiterbar. Gewichtungen, Prüfkriterien und der Crawler-Katalog ändern sich nur mit einer neuen Paketversion.
Deinstallation
Wollen Sie das Paket nur vorübergehend stilllegen, genügt es, die Lizenz zu entfernen: Die Installation verhält sich danach exakt so, als wäre das Bundle nicht vorhanden, und sämtliche Daten bleiben erhalten.
So entfernen Sie das Paket vollständig
- Datenbank sichern. Die folgenden Schritte sind nicht umkehrbar.
- Inhalte sichern, die Sie behalten wollen. FAQ- und Glossar-Einträge leben ausschließlich in den Tabellen dieses Pakets. Exportieren Sie sie vorher, wenn sie erhalten bleiben sollen.
- Frontend-Module entfernen. Löschen Sie unter Layout → Module alle Module vom Typ FAQ (SEO Studio) und Glossar (SEO Studio) und entfernen Sie deren Einbindungen aus Artikeln und Layouts.
- Lizenz entfernen. Unter Einstellungen → V-T.ONE Licence management → AI SEO Studio auf Lizenz entfernen klicken und bestätigen. Damit wird der Platz auf dem Lizenzserver für diese Installation wieder frei.
- Paket entfernen — im Contao Manager unter Pakete →
Installierte Pakete, oder auf der Kommandozeile:
composer remove vtinnovations/seo-studio. - Datenbank aufräumen. Führen Sie Systemwartung →
Datenbank-Migrationen und -Backups → Datenbank prüfen aus. Contao meldet nun die sechs
Tabellen
tl_seo_studio_*und die vier Spalten intl_pageals überflüssig. Bestätigen Sie das Entfernen erst, nachdem Schritt 2 erledigt ist. - Laufzeitdaten löschen. Entfernen Sie das Verzeichnis
var/seostudio/. Es enthält den Lizenzdatensatz sowie den verschlüsselten API-Schlüssel und wird von Composer nicht mit entfernt. - Cache leeren und das Backend neu laden.
Widerrufen Sie den API-Schlüssel zusätzlich beim KI-Anbieter selbst. Das Löschen von
var/seostudio/ entfernt ihn aus dieser Installation, macht ihn aber nicht
ungültig.
