DAS DATENMODELL

Wie ich das Schema für eine Verzeichnis-Website im sechsstelligen Umfang entwerfe. Entitäten, Attribute, Slugs, Indizes und die damit verbundenen Designentscheidungen.

DAS DATENMODELL
Verzeichnisse & Programmatic SEO Guide 3 Min. Lesezeit geprüft 3. Mai 2026

← Alle Guides Alle Guides zu diesem Thema

Auf dieser Seite
  1. Die Schemaentscheidungen, die sich summieren
  2. Entitäten, Attribute, Verknüpfungen
  3. Schnecken sind für immer
  4. Indizierbarkeit auf Zeilenebene
  5. Wichtige Indizes

Die Schemaentscheidungen, die sich summieren

Der Erfolg oder Misserfolg einer Verzeichnis-Website mit 28.000 Zeilen (HostList.io) oder 137.000 Zeilen (Not Another Sunday) hängt von den Schema-Entscheidungen ab, die in der ersten Woche getroffen werden. Die wichtigsten Entscheidungen sind: Wie werden Entitäten normalisiert, wie werden Attribute gespeichert, wie werden Slugs generiert und was wird indiziert?

Jede dieser Maßnahmen ist im kleinen Maßstab rückgängig zu machen, im sechsstelligen Maßstab ist ihre Behebung jedoch unerschwinglich teuer. Man sollte sie daher frühzeitig richtig umsetzen.

Entitäten, Attribute, Verknüpfungen

Eine Entitätstabelle mit einer Stammsatzzeile pro Unternehmen, Ort oder Produkt. Stabiler UUID-Primärschlüssel, eine Spalte pro intrinsischem Attribut (Name, Gründungsjahr, Hauptmarkt). Vermeiden Sie es, Attribute auf dieser Ebene in JSON-Spalten zu packen; sie sollten als vollwertige Spalten abfragbar sein.

Eine Attributtabelle pro orthogonaler Achse. Kategorien (jede Zeile entspricht einer Kategorie), Regionen (jede Zeile entspricht einer Region), Preisstufen (jede Zeile entspricht einer Preisstufe). Dies sind die Dimensionen, nach denen die Entitäten gruppiert werden.

Viele-zu-viele-Beziehungen über Verknüpfungstabellen: entity_categories, entity_regions, entity_features. Speichern Sie niemals durch Kommas getrennte Kategorielisten in der Entitätstabelle; die Verknüpfungstabellen sorgen dafür, dass das Filtern, Auflisten und Zählen schnell erfolgt.

Schnecken sind für immer

Sobald eine Verzeichnisseite von Google indexiert wurde, sollte sich der Slug nicht mehr ändern. Verwenden Sie eine deterministische Slug-Generierung aus dem Entitätsnamen mit Kollisionsbehandlung durch numerische Suffixe: nginx-hosting, nginx-hosting-2, falls eine Kollision auftritt.

Führen Sie eine separate Tabelle „slug_history“, in der alle historischen Slugs den aktuellen kanonischen Slugs zugeordnet sind. Wenn der Name einer Entität geändert werden muss (Korrektur, Rebranding), wird der neue kanonische Slug generiert, der alte Slug wird in die Verlaufstabelle aufgenommen und automatisch eine permanente 301-Weiterleitung eingerichtet.

Die Folgen einer fehlerhaften Slug-Stabilität auf einer Website mit 28.000 Zeilen sind katastrophal: Jede von Ihnen erstellte Weiterleitungskette führt zu einem leichten Ranking-Verlust, und es gibt keine guten nachträglichen Abhilfemaßnahmen.

Indizierbarkeit auf Zeilenebene

Fügen Sie der Entitätstabelle eine indizierbare boolesche Spalte hinzu, deren Standardwert „true“ ist, mit einer Logik, die den Wert auf „false“ setzt, wenn die Entität die Qualitätsschwellenwerte nicht erfüllt (unzureichender einzigartiger Inhalt, fehlende erforderliche Attribute, keine eingehenden internen Links).

Die Sitemap-Abfrage filtert nach „indexable = true“. Der Seiten-Renderer fügt das „noindex“-Meta-Tag hinzu, wenn „indexable = false“ ist. Da beide Werte aus derselben Spalte abgeleitet werden, bleiben sie atomar synchronisiert.

Auf HostList.io sind zu jedem Zeitpunkt etwa 18.000 der 28.000 Entitäten indexierbar. Die übrigen 10.000 sind zwar crawlbar, aber nicht indexierbar, wodurch die indexierte Fläche übersichtlich bleibt und die übrigen indexierten Seiten an Relevanz gewinnen.

Wichtige Indizes

Index auf „slug“ für die Seitendarstellung. Index auf (indexable, last_updated_at) für die Sitemap-Abfrage. Index auf (category_id, indexable) in der Verknüpfungstabelle für Kategorielistenseiten. Index auf (region_id, indexable) für regionale Seiten.

Im sechsstelligen Bereich dauert eine Abfrage zum Rendern einer Seite ohne Indizes mehrere Sekunden. Mit geeigneten Indizes dauert sie nur Millisekunden. Die Auswirkungen auf die Erstellungszeit summieren sich: 28.000 Seitenrenderings à 100 ms dauern 47 Minuten; bei 10 ms pro Rendering sind es 5 Minuten.

Führen Sie „EXPLAIN ANALYZE“ in großem Maßstab für jede Abfrage zur Seitenrendering durch. Der Standard-Abfrageplaner liefert bei Verzeichnis-artigen Verknüpfungen häufiger falsche Ergebnisse, als man erwarten würde.

WENN SIE SPRECHEN MÖCHTEN