Im PHP-Fehlerprotokoll taucht Unknown column 'seo_title_score' in 'field list' auf, während die WordPress-Website scheinbar normal läuft? Dann passt möglicherweise die tatsächliche Struktur von yoast_indexable nicht zum installierten Yoast SEO. Auch meta_description_score kann fehlen.

Eine mögliche Ursache ist eine zuvor fehlgeschlagene Tabellenänderung mit der Meldung Row size too large. Die Diagnose muss deshalb sowohl die fehlenden Spalten als auch den zugrunde liegenden SQL-Fehler berücksichtigen.

Stand: 26. Oktober 2026. Die folgenden Codeangaben beziehen sich auf das offizielle Paket von Yoast SEO 28.7. Beim aktuellen Quellenabgleich führt der offizielle Changelog weiterhin 28.7 vom 13. Oktober 2026 als neuesten Eintrag. Daraus folgt nicht, dass der Fehler erstmals mit dieser Version entstanden ist. Vor einer späteren Reparatur oder Veröffentlichung müssen Versionsstand und Dateien erneut abgeglichen werden.

Kurzlösung

  1. Erstelle ein vollständiges, überprüftes Datenbank-Backup.
  2. Vergleiche reales Schema, Zeilenformat und gespeicherten Migrationsstatus.
  3. Liegt das bestätigte COMPACT-Zeilenformat-Problem vor, stelle ausschließlich die betroffene yoast_indexable-Tabelle auf DYNAMIC um.
  4. Vervollständige anschließend die zur installierten Version gehörende Migration mit zuverlässiger Fehlerprüfung und Berücksichtigung bereits vorhandener Spalten.
  5. Prüfe beide Spaltendefinitionen direkt in der Datenbank und teste anschließend die betroffenen Schreibvorgänge sowie neue Logeinträge.

Zur schrittweisen Reparatur

Was die Fehlermeldung bedeutet

Terminal
Unknown column 'seo_title_score' in 'field list'

Die SQL-Abfrage verweist auf eine Spalte, die in der angesprochenen Tabelle nicht vorhanden ist. Hier geht es um <Tabellenpräfix>yoast_indexable. Das Präfix muss nicht wp_ heißen.

Eine erreichbare Startseite widerlegt den Fehler nicht: Eine lesende Anfrage oder eine gecachte Ausgabe muss nicht denselben Datenbankzugriff auslösen wie das Speichern oder Aktualisieren eines Indexable-Datensatzes. Deshalb gehört zur Kontrolle ein passender Schreibvorgang.

Wenn eine Tabellenänderung an der zulässigen InnoDB-Zeilenstruktur scheitert, kann beispielsweise diese Meldung erscheinen:

Terminal
Row size too large.
The maximum row size for the used table type,
not counting BLOBs, is 8126.

Warum zwei kleine Integer-Spalten die Änderung scheitern lassen

Die Migration heißt 20260709144332_AddSeoTitleAndMetaDescriptionScores.php und liegt im geprüften Paket unter src/config/migrations/. Sie ergänzt seo_title_score und meta_description_score als nullable Integer-Spalten. „Nullable“ bedeutet: Der Datenbankwert NULL ist zulässig.

Die geringe Dateigröße der PHP-Migration ist dafür unerheblich. Eine Tabellenänderung kann eine Prüfung der gesamten zulässigen Zeilenstruktur auslösen. Auch eine kleine zusätzliche Spalte kann dabei der Anlass sein, einen bereits problematischen Tabellenaufbau abzulehnen. Die MariaDB-Dokumentation zur Zeilengröße beschreibt solche Fehler bei DDL-Anweisungen wie ALTER TABLE.

Die 8126 beziehen sich in diesem Beispiel auf die gemeldete lokale Zeilengrößengrenze der InnoDB-Konstellation. Das ist weder die maximale Länge eines Blogbeitrags noch ein pauschales Limit für die Größe der gesamten Tabelle.

DYNAMIC kann gegenüber COMPACT mehr variable Spalteninhalte auf Überlaufseiten auslagern. Dadurch kann sich der Platzbedarf innerhalb der Datenseite reduzieren. Die Umstellung ist keine Änderung der SEO-Texte und kein Komprimieren der Beiträge. Sie garantiert allerdings nicht, dass jede beliebige Tabellenstruktur künftig in alle Grenzen passt.

Was limit => 3 hier tatsächlich heißt

Der Abgleich von Originalmigration und Adapter im offiziellen 28.7-Paket zeigt: integer mit limit => 3 wird zu INT(3). Das ist keine Beschränkung auf dreistellige Zahlen, kein Drei-Byte-Integer und kein Auftrag, stattdessen MEDIUMINT anzulegen. Die Zahl in INT(3) ist eine Darstellungsbreite; den Wertebereich bestimmt der Integer-Typ. Die Grundlagen erklärt die MariaDB-Referenz zu INT.

Warum Migrationsstatus und Schema voneinander abweichen können

Im Code von Yoast SEO 28.7 ruft der Migrationsrunner zunächst up() auf und speichert danach über add_version() die Migrationskennung. Für den Abbruch ist der Ausnahmeweg entscheidend. In diesem SQL-Pfad liefert der Adapter bei einer fehlgeschlagenen Abfrage jedoch false zurück. Die Originalmigration prüft diesen Rückgabewert der Spaltenergänzung nicht.

So kann der Ablauf die Versionsspeicherung erreichen, obwohl das Datenbankschema unvollständig geblieben ist. Diese Erklärung bezieht sich auf den beschriebenen Codepfad; sie bedeutet nicht, dass jede Yoast-Migration fehlerhaft arbeitet.

Für die Nachprüfung sind Migrationsrunner, Adapter mit SQL-Ausführung und Versionsspeicherung sowie Migration_Status relevant. Die einzelnen Migrationskennungen in der Migrationstabelle sind außerdem von der allgemeinen Statusoption für den Pluginzweig zu unterscheiden. Ein „erledigt“ ersetzt in beiden Fällen keine Schemaprüfung.

Ein vollständiges Backup erstellen und prüfen

Sichere vor jeder schreibenden Reparatur die gesamte betroffene WordPress-Datenbank einschließlich der vorhandenen Yoast-Tabellen. Ein WordPress-Inhaltsexport reicht dafür nicht. Verwende den etablierten Sicherungsweg deines Hostings oder ein korrekt konfiguriertes Datenbankwerkzeug wie mariadb-dump.

Prüfe, ob der Export fehlerfrei abgeschlossen wurde und Struktur sowie Daten enthält. Ein Prüfsummenvergleich hilft bei Übertragungsfehlern; belastbarer ist zusätzlich ein erfolgreicher Wiederherstellungstest in einer getrennten Umgebung. Nur eine vorhandene Dateigröße beweist keine wiederherstellbare Sicherung.

Plane ein Wartungsfenster und verhindere parallele Schemaänderungen oder Migrationsläufe. Halte außerdem die bisherige Tabellenstruktur mit SHOW CREATE TABLE fest. So kannst du später auch die bestehenden Spaltendefinitionen vergleichen.

Tabellenänderungen sind kein kostenloser Hintergrundschritt

Je nach Tabellenumfang und Ausführungsweg können sie Speicherplatz, I/O und Zeit benötigen und Sperren verursachen. MariaDB dokumentiert auch mögliche Wartezeiten auf Metadaten-Sperren. Die Befehle gehören in die richtige Datenbank und müssen einzeln mit Ergebniskontrolle ausgeführt werden.

Präfix, Schema, Zeilenformat und Status kontrollieren

Ermittle das tatsächliche Präfix der betroffenen Site. Mit installiertem WP-CLI kannst du im richtigen WordPress-Verzeichnis den dokumentierten Lesebefehl verwenden:

Terminal
wp db prefix

Bei Multisite muss auch der Zielsite-Kontext stimmen. WP-CLI dokumentiert dafür unter anderem den Parameter –url. Alle folgenden SQL-Beispiele verwenden wp_ nur als Beispiel: Ersetze es überall durch das ermittelte Site-Präfix und wähle zuerst die richtige Datenbank aus.

Terminal
SELECT DATABASE() AS aktuelle_datenbank,
       VERSION() AS datenbank_version,
       @@innodb_page_size AS seitengroesse_bytes,
       @@SESSION.innodb_strict_mode AS innodb_strict_mode;

SELECT TABLE_NAME, ENGINE, ROW_FORMAT
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = DATABASE()
  AND TABLE_NAME = 'wp_yoast_indexable';

SHOW CREATE TABLE `wp_yoast_indexable`;

Kontrolliere anschließend die beiden Spalten. Die Abfrage liest nur das Schema:

Terminal
SELECT COLUMN_NAME, DATA_TYPE, COLUMN_TYPE,
       IS_NULLABLE, COLUMN_DEFAULT
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
  AND TABLE_NAME = 'wp_yoast_indexable'
  AND COLUMN_NAME IN ('seo_title_score', 'meta_description_score')
ORDER BY COLUMN_NAME;

Kein Treffer bedeutet bei bestätigter Datenbank und Tabelle, dass beide Spalten fehlen. Ein Treffer bedeutet eine Teilmigration; zwei Treffer müssen noch anhand ihrer Definitionen beurteilt werden.

Im geprüften Yoast-Code wird die Tabelle für die einzelnen Kennungen als <Präfix>yoast_migrations gebildet. Prüfe nach Bestätigung dieses Namens den Eintrag zur betreffenden Migration:

Terminal
SELECT version
FROM `wp_yoast_migrations`
WHERE version = '20260709144332';

Zusätzlich kannst du den allgemeinen Status yoast_migrations_free lesend in der passenden Options-Tabelle prüfen. Lösche oder ändere diese Markierungen nicht als vermeintliche Reparatur. Dokumentiere den Widerspruch zwischen Status und Schema.

Bereits DYNAMIC? Trotzdem weiterprüfen

Auch bei einer Tabelle mit DYNAMIC können Spalten fehlen, wenn eine frühere Migration nicht vollständig ausgeführt wurde. Eine spätere Änderung des Zeilenformats trägt diese Spalten nicht automatisch nach. Prüfe deshalb das tatsächliche Schema und gegebenenfalls ältere Fehlermeldungen.

Bei bestätigtem COMPACT-Problem nur diese Tabelle umstellen

Wenn Untersuchung und Fehlerprotokoll das COMPACT-Zeilenformat-Problem bestätigen, stelle ausschließlich die betroffene Yoast-Tabelle um:

Terminal
ALTER TABLE `wp_yoast_indexable`
ROW_FORMAT=DYNAMIC;

Prüfe unmittelbar das Ergebnis und bei Bedarf die SQL-Diagnose mit SHOW WARNINGS;. Lies danach das Zeilenformat erneut aus. Schlägt die Änderung fehl, brich den Reparaturlauf ab und untersuche die konkrete Meldung. Die Datenbank ist kein Ort für optimistisches Weiterklicken.

Ändere nicht pauschal alle WordPress-Tabellen. Setze auch nicht einfach den globalen Standard um: Ein neuer Standardwert ist kein Nachweis, dass eine bestehende Tabelle konvertiert wurde. Die hier verwendete Tabellenänderung ist in der MariaDB-Dokumentation zu DYNAMIC beschrieben.

Ist die Tabelle bereits DYNAMIC, ist diese Umstellung kein obligatorischer Reparaturschritt. Fehlen dennoch Spalten, müssen Fehlerursache und aktueller Tabellenaufbau bewertet und die fehlenden Änderungen kontrolliert vervollständigt werden.

Die versionsgenaue Originalmigration kontrolliert nachholen

Verwende die zur tatsächlich installierten Yoast-Version gehörende Originaldatei. Für Yoast SEO 28.7 ist das src/config/migrations/20260709144332_AddSeoTitleAndMetaDescriptionScores.php. Prüfe auch den zugehörigen Adapter, statt nur eine aktuelle Datei aus dem Entwicklungszweig zu übernehmen.

Bei einer automatisierten Ausführung muss ein überprüfender Adapter fehlgeschlagene SQL-Abfragen als Fehler weitergeben und bereits korrekt vorhandene Spalten berücksichtigen. Ein erneutes Scheitern darf nicht unbemerkt als Erfolg durchlaufen.

Für einen solchen Reparaturweg müssen mindestens diese Bedingungen erfüllt sein:

  • Vor jedem Hinzufügen wird geprüft, ob die Spalte fehlt oder bereits korrekt existiert.
  • Eine existierende Spalte mit abweichender Definition führt zur Untersuchung statt zu einem automatischen Überschreiben.
  • SQL-Fehler beenden den Lauf mit einer aussagekräftigen Meldung.
  • Nach der Ausführung wird das reale Schema unabhängig vom Rückgabestatus geprüft.
  • Bereits gespeicherte Migrationsmarkierungen werden nicht pauschal zurückgesetzt.

Für die beschriebene gezielte Reparatur wird hier kein offizieller Yoast-WP-CLI-Migrationsbefehl vorausgesetzt. Ein dafür erstellter Adapter wäre individuelle Reparaturlogik und müsste gegen die installierte Version geprüft werden.

SQL-Alternative für MariaDB

Wer statt einer Adapter-Ausführung direkt SQL verwendet, muss die Anweisungen gegen die installierte Migration prüfen. Der Abgleich des offiziellen 28.7-Pakets ergibt für beide neuen Felder INT(3), vorzeichenbehaftet und nullable, ohne einen abweichenden expliziten Standardwert.

Die folgende MariaDB-Alternative ergänzt nur fehlende Spalten und berücksichtigt damit auch eine Teilmigration. Voraussetzung sind das geprüfte Backup, ein geeigneter Tabellenaufbau und die Vorabkontrolle vorhandener Spalten. Für andere Yoast-Versionen nicht ungeprüft übernehmen:

Terminal
ALTER TABLE `wp_yoast_indexable`
  ADD COLUMN IF NOT EXISTS `seo_title_score` INT(3) NULL,
  ADD COLUMN IF NOT EXISTS `meta_description_score` INT(3) NULL;

IF NOT EXISTS überspringt bereits vorhandene Spalten; es korrigiert deren Definition nicht. Entsprechende Warnungen sind möglich. Kontrolliere die Diagnose direkt nach dem Befehl und danach beide Definitionen. Die MariaDB-Referenz zu ALTER TABLE dokumentiert diese Syntax. Sie ist nicht unverändert auf jede MySQL-Version übertragbar.

Diese SQL-Alternative ersetzt gezielt die beiden Spaltenergänzungen. Sie führt nicht den gesamten Yoast-Migrationsrunner aus und aktualisiert keinen allgemeinen Migrationsstatus. Im Fall der bereits als ausgeführt gespeicherten Originalmigration muss keine neue Erfolgsmarkierung erfunden werden.

Verlasse dich außerdem nicht auf ein einfaches ROLLBACK für Tabellenänderungen. ALTER TABLE verursacht bei MariaDB einen impliziten Commit. Das erklärt auch, warum ein Reparaturlauf nach einem Teilfehler den vorhandenen Zustand erneut prüfen muss.

Beide Spalten und die bisherigen Definitionen vergleichen

Führe nach der Reparatur erneut die Schemaabfrage aus. Erwartet werden zwei passende Spalten, nicht nur ein Erfolgstext des Skripts:

Terminal
SELECT COLUMN_NAME, DATA_TYPE, COLUMN_TYPE,
       IS_NULLABLE, COLUMN_DEFAULT
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
  AND TABLE_NAME = 'wp_yoast_indexable'
  AND COLUMN_NAME IN ('seo_title_score', 'meta_description_score')
ORDER BY COLUMN_NAME;
SpalteErwarteter DatentypNULL zulässig
seo_title_scoreINT, vorzeichenbehaftet; im geprüften Adapter INT(3)YES
meta_description_scoreINT, vorzeichenbehaftet; im geprüften Adapter INT(3)YES

Die Metadatenfelder DATA_TYPE, COLUMN_TYPE, IS_NULLABLE und COLUMN_DEFAULT sind in information_schema.COLUMNS dokumentiert. Vergleiche die Ausgabe mit der Originalmigration und dem vorher gesicherten Schema.

Prüfe auch die bisherigen Spaltendefinitionen: Datentypen, NULL-Eigenschaften, Standardwerte sowie gegebenenfalls Zeichensatz und Kollation sollen nicht unbeabsichtigt verändert worden sein. Ein Unterschied bei der Tabellenoption ROW_FORMAT ist bei der beabsichtigten Umstellung erwartbar.

Die gezeigten SQL-Anweisungen ergänzen Spalten beziehungsweise ändern das Zeilenformat. Sie enthalten keine Anweisung zum Löschen von Beiträgen, Seiten oder SEO-Einstellungen. Das Backup und der anschließende Strukturvergleich bleiben trotzdem erforderlich.

Schreibvorgänge testen und neue Logs kontrollieren

Prüfe nach der Schemaänderung Website und Administrationszugang. Wiederhole außerdem einen kontrollierten Vorgang, der den ursprünglichen Fehler ausgelöst hatte. Falls beispielsweise ein Speichern oder Aktualisieren eines Indexable-Datensatzes betroffen war, muss genau dieser Ablauf erneut beobachtet werden.

Notiere den Beginn des Nachtests und beurteile neue Logeinträge ab diesem Zeitpunkt. Ein alter Eintrag wird durch die Reparatur nicht aus der Logdatei gelöscht. Umgekehrt ist ein leerer kurzer Logausschnitt ohne passenden Test kein Beweis für eine vollständige Reparatur.

Für Agenturen empfiehlt sich pro Site ein kleines Prüfprotokoll: Yoast-Version, Datenbankversion, Präfix, Tabellenformat vorher und nachher, Spaltendefinitionen, Migrationskennung, ausgeführte Änderung und Ergebnis des Schreibtests.

Warum der Fehler nicht bei jedem Aufruf sichtbar wird

Unterschiedliche Tabellenstrukturen und unterschiedliche Schreibvorgänge sind eine mögliche Erklärung dafür, dass Fehler nur in bestimmten Situationen protokolliert werden. Das Fehlen auffälliger Frontend-Probleme genügt deshalb nicht, um ein Schema als vollständig einzustufen.

Aus der Betrachtung des Codes von Yoast SEO 28.7 ergibt sich kein allgemeines Einführungsdatum des Fehlers. Auch geht nicht jede Meldung „Unknown column“ auf COMPACT zurück. Entscheidend sind die angesprochene Tabelle, die installierten Dateien und der tatsächliche SQL-Fehler.

Welche vermeintlichen Schnelllösungen du vermeiden solltest

  • Yoast-Tabellen pauschal löschen oder Yoast zurücksetzen: Das ist für die hier beschriebene gezielte Spaltenergänzung nicht erforderlich.
  • Migrationsmarkierungen blind entfernen: Das kann weitere Migrationen erneut anstoßen, ohne die Ursache zu beheben.
  • Strict Mode abschalten: Eine unterdrückte Strukturprüfung stellt die fehlenden Spalten nicht zuverlässig und korrekt her.
  • Vorhandene Spalten automatisch überschreiben: Erst Definition und Ursache einer Abweichung untersuchen.
  • Nur auf DYNAMIC oder eine erreichbare Startseite vertrauen: Beides ersetzt die Schema- und Schreibprüfung nicht.

So erkennst du eine erfolgreiche Reparatur

Beide Score-Spalten sind mit den zur installierten Yoast-Version passenden Definitionen vorhanden. Website und Administrationszugang funktionieren; beim erneuten Ausführen des zuvor betroffenen Schreibvorgangs erscheinen keine neuen entsprechenden Spaltenfehler.

Diese Prüfung beschreibt das Ziel der Reparatur und ersetzt keine Kontrolle auf weitere Fehler. Maßgeblich bleibt der Abgleich von Originalmigration, realem Datenbankschema und dem zuvor betroffenen Schreibvorgang.

Primärquellen und Versionsbezug

Für den Codeabgleich wurde das offizielle Yoast-SEO-Paket 28.7 herangezogen. Die folgenden GitHub-Links zeigen den veränderlichen Entwicklungszweig trunk. Prüfe für konkrete Eingriffe immer zusätzlich die Dateien der tatsächlich installierten Version.