DF Faceted SEO — Facettensuche und SEO für PrestaShop
Intelligente Indexierung facettierter URLs, SEO-Landingpages und eine Hochleistungs-Filter-Engine für PrestaShop 8 und 9.
DF Faceted SEO verwandelt die Facettensuche von PrestaShop in einen nachhaltigen SEO-Hebel und beschleunigt Ihre Kategorieseiten 10 bis 30 mal dank eines denormalisierten Index. Diese Dokumentation deckt Installation, Konfiguration der Indexierungsregeln, Erstellung von SEO-Landingpages und Auswertung der Statistiken beliebter Kombinationen ab.
Überblick
Das native ps_facetedsearch-Modul erzeugt mechanisch eine URL für jede mögliche Filterkombination. Bei einem Katalog mit einigen tausend Produkten und fünf Facetten sind das Millionen von URLs, die Google crawlt, was Ihr Crawl-Budget und Ihren PageRank zwischen nahezu identischen Seiten verdünnt.
DF Faceted SEO löst dieses Problem auf zwei parallelen Wegen:
- Intelligente Indexierung: Geschäftsregeln entscheiden, welche Kombinationen indexierbar sind, welche
noindex followerhalten und wohin das Canonical zeigt. - Dedizierte SEO-Landingpages: Für Kombinationen mit starkem kommerziellem Potenzial (z. B. „rote Schuhe Größe 42″) erstellen Sie Landingpages mit sauberer URL, eigenem H1, eigenen Meta-Tags und redaktionellen Inhalten pro Sprache.
Als Bonus ersetzt die Suchmaschine des Moduls die native Engine durch ein deutlich schnelleres System auf Basis eines denormalisierten Index und eines zweistufigen Caches.
Voraussetzungen
- PrestaShop 8.0 bis 9.x
- PHP 8.1 oder höher
- MySQL 5.7 oder MariaDB 10.3 minimum
- Sprechende URLs aktiviert (Einstellungen → SEO und URLs)
- Standard-MySQL-Berechtigungen zur Erstellung von Tabellen
Installation
- Laden Sie das ZIP-Archiv über Module → Modulmanager → Modul hochladen hoch.
- Klicken Sie auf Installieren. Das Modul erstellt automatisch 10
ps_dffacetedseo_*-Tabellen und 5 Tabs unter Verbessern. - Gehen Sie zu Verbessern → DF Faceted SEO → Dashboard.
- Klicken Sie auf Index neu aufbauen. Dieser Schritt ist beim ersten Mal verpflichtend: ohne Index hat die Suchmaschine keine Daten.
- Leeren Sie den PrestaShop-Cache: Erweiterte Parameter → Leistung → Cache leeren.
Bei einem 50.000-Produkte-Katalog dauert der Index-Neuaufbau typischerweise 2 bis 5 Minuten. Das Modul fügt Zeilen in Batches von 500 ein.
Erste Schritte — Dashboard
Das Dashboard (Verbessern → DF Faceted SEO) zeigt sechs Statistikkacheln:
- Aktive Regeln: Anzahl aktivierter Indexierungsregeln
- Landingpages: Anzahl erstellter SEO-Landingpages
- Produkte im Index: Anzahl indexierter Produkte (sollte nahe am Katalog-Total liegen)
- Zeilen im Index: Anzahl (Produkt, Filterwert)-Paare — die denormalisierte Tabelle
- Cache-Einträge: Anzahl gecachter Abfragen
- Beliebte Kombinationen: Anzahl beobachteter Filterkombinationen
Unter den Kacheln gibt es zwei Operations-Blöcke:
- Index neu aufbauen: nützlich nach einer großen Katalogänderung (Massenimport, Änderung der Attributstruktur)
- Cache leeren: nützlich nach einer Regel- oder Einstellungsänderung
Indexierungsregeln
Regeln entscheiden für jede besuchte Filterkombination, welches robots-Tag und welches canonical an den Browser und an Google gesendet werden. Eine Regel hat einen Scope (Geltungsbereich) und eine Policy (Entscheidung).
Verfügbare Scopes
- Global: gilt für alle facettierten Seiten des Katalogs
- Spezifische Kategorie: gilt nur für Seiten einer bestimmten Kategorie
- Attributgruppe: gilt für Kombinationen, die eine bestimmte Gruppe enthalten (z. B. alle Seiten, auf denen Farbe gefiltert ist)
- Merkmal: ebenso für ein Produktmerkmal
- Marke: ebenso für einen Hersteller
- Preisspanne: gilt für Seiten, die nach einer bestimmten Preisspanne gefiltert sind
Verfügbare Policies
- Index, follow: Seite indexierbar, Canonical auf sich selbst normalisiert
- Noindex, follow: Seite nicht indexiert, Links werden aber verfolgt (empfohlen für seltene Kombinationen)
- Canonical parent: Seite zugänglich, aber Canonical zeigt auf die Elternkategorie (SEO-Wert wird übertragen)
- Canonical self normalisiert: Canonical auf der Seite selbst mit sortierten und gruppierten Filtern (eliminiert URL-Duplikate für dieselbe Kombination)
Prioritätskette
Das Modul wertet Regeln vom spezifischsten zum generischsten aus. Konkret für eine Schuhe-Kategorieseite mit Farbfilter:
- Das Modul sucht zuerst eine
category-Regel auf Schuhe - Existiert sie und matcht, wird sie angewendet
- Sonst sucht es eine
attribute_group-Regel auf Farbe - Sonst fällt es zurück auf die globale Regel
- Matcht keine Regel, gilt die Standard-Policy aus dem Dashboard
Erweiterte Regelfelder
- Maximal indexierbare Filter: enthält die Kombination mehr Filter als dieses Limit, fällt die Policy automatisch auf
noindex follow. Beispiel: 2 Filter maximal bei Schuhen (Farbe + Größe indexierbar, aber nicht Farbe + Größe + Material + Saison). - Wert-Whitelist: erlaubte Wert-IDs (kommagetrennt). Eine Kombination, die nur Whitelist-Werte enthält, ist indexierbar. Beispiel: Whitelist der Farben Rot, Schwarz, Weiß, Blau — seltene Farben wie „Apfelgrün“ werden nicht indexiert.
- Wert-Blacklist: das Gegenteil. Jede Kombination, die einen Blacklist-Wert enthält, fällt automatisch auf
noindex. - Mindestproduktzahl: liefert die Kombination nicht mindestens diese Anzahl Produkte, geht sie auf
noindex. Verhindert die Indexierung fast leerer Seiten. - Priorität: Ganzzahl. Bei Konflikt zwischen zwei Regeln gleichen Scopes gewinnt die höhere Priorität.
Empfohlene Einstiegsstrategie: Erstellen Sie eine globale Regel mit Policy canonical parent und maximal 1 indexierbarem Filter, dann fügen Sie schrittweise spezifischere Regeln hinzu, um die Indexierung für Kombinationen mit hohem Potenzial zu öffnen.
SEO-Landingpages
Landingpages sind dedizierte Seiten für strategische Filterkombinationen. Sie haben ihre eigene saubere URL, ihr eigenes H1, ihre eigenen Meta-Tags und redaktionellen Inhalt pro Sprache.
Eine Landingpage erstellen
- Gehen Sie zu Verbessern → DF Faceted SEO → Landingpages
- Klicken Sie auf Hinzufügen
- Abschnitt Targeting: wählen Sie die Kategorie und optional die betroffene Marke
- Abschnitt Anzeige: Standardsortierung, Richtung, aktiv, indexierbar, Priorität
- Abschnitt Filterkombination: fügen Sie die Filter hinzu, die die Kombination bilden (Attributgruppe und Werte, Merkmal oder Marke). Beispiel: Farbe = Rot UND Größe = 42.
- Mehrsprachige Tabs: füllen Sie für jede Sprache den internen Namen, URL-Slug, H1, Meta-Title, Meta-Description, Intro- und Outro-Inhalt aus.
- Speichern
URL-Struktur
Eine Landingpage-URL folgt dem Schema:
https://ihre-domain.com/landing/ihr-slug
https://ihre-domain.com/en/landing/ihr-slug
https://ihre-domain.com/fr/landing/ihr-slug
Das Sprachpräfix wird automatisch vom PrestaShop-Router behandelt, sobald sprechende URLs aktiviert sind und mehrere Sprachen im Shop aktiv sind.
Erhalten Sie auf einer Landing-URL einen 404, prüfen Sie in dieser Reihenfolge: sprechende URLs aktiv, .htaccess neu generiert (Speichern-Button am Ende von SEO und URLs), Cache geleert, Landing im Formular aktiv, moduleRoutes-Hook korrekt an das Modul gebunden unter Module → Positionen.
Redaktioneller Inhalt
Pro Sprache haben Sie zwei reichhaltige HTML-Blöcke:
- Intro: oberhalb des Produktrasters angezeigt. Ideal für einen 150- bis 300-Wörter-SEO-Einleitungsabsatz mit Ihren Zielkeywords.
- Outro: unter dem Raster angezeigt. Ideal für Vertrauenselemente, Kaufratgeber, FAQs.
Automatisches JSON-LD
Jede Landingpage injiziert automatisch zwei JSON-LD-Blöcke in die Seite:
- BreadcrumbList: Startseite → Kategorie → Landing
- Product: ein Product-Block pro angezeigtem Produkt (Name, Preis, Bild, URL, Verfügbarkeit)
Sie erhalten automatisch Google Rich Snippets ohne weitere Konfiguration.
Statistiken beliebter Kombinationen
Das Modul protokolliert automatisch in der Tabelle ps_dffacetedseo_combination_log jede tatsächlich besuchte Filterkombination Ihrer Kunden: Signatur, Trefferzahl, zuletzt gesehen.
Statistiken nutzen
- Gehen Sie zu Verbessern → DF Faceted SEO → Statistiken
- Filtern Sie nach Kategorie, Mindesttreffer, Anzeigegrenze
- Sortieren Sie absteigend nach Treffern
- Identifizieren Sie Kombinationen mit mehr als 50 Treffern pro Woche
- Klicken Sie auf Befördern in der Aktionsspalte
- Das Landing-Formular öffnet sich vorausgefüllt mit der Filterkombination
- Sie müssen nur noch den redaktionellen Inhalt eintragen und speichern
Wartung
Am Fuß der Statistikseite gibt es einen Button Alte Daten löschen mit einem Feld „Tage zum Aufbewahren“. Empfehlung: alle 90 Tage löschen, um unbegrenztes Tabellenwachstum zu vermeiden.
Globale Einstellungen
Das Dashboard bietet 11 globale Einstellungen in 3 Abschnitten.
Indexierung
- Standard-Policy: angewendete Policy, wenn keine Regel matcht
- Maximal indexierbare Filter: globaler Wert (kann pro Regel überschrieben werden)
- Mindestprodukte pro Kombination: globaler Schwellenwert
Leistung
- Cache-TTL (Sekunden): Lebensdauer eines Cache-Eintrags. Standard: 3600 (1 Stunde). Erhöhen Sie auf 86400 (24 h) in stabiler Produktion.
- Leere Filter ausblenden: wenn aktiviert, werden Werte mit 0 Ergebnissen ausgeblendet
- Ergebnisgrenze pro Seite: Produkt-Paginierung
URLs
- URL-Präfix der Landings: Standard
landing. Das Routenschema ist immoduleRoutes-Hook fest definiert und verwendet dieses Präfix.
Intelligenter Canonical
Auf jeder facettierten Seite berechnet das Modul das optimale Canonical:
- Kombination, die einer existierenden Landing entspricht: Canonical = Pretty-URL der Landing
- Kombination laut Regeln indexierbar: Canonical = normalisiertes Self
- Kombination laut Regeln nicht indexierbar: Canonical = Elternkategorie
- Kategorieseite ohne Filter: Canonical = Standard-Self
Hochleistungs-Filter-Engine
Die Engine stützt sich auf die Tabelle ps_dffacetedseo_index: eine Zeile pro (Produkt, Filtertyp, Wert)-Tupel. Die Abfrage wird zu einem einfachen Mengenschnitt von Produkt-IDs.
Zweistufiger Cache
- Stufe 1: Speicher (In-Process). Verhindert dieselbe Abfrage zweimal auf derselben Seite.
- Stufe 2: Datenbank (Tabelle
ps_dffacetedseo_cache). Persistiert Ergebnisse zwischen Anfragen mit TTL.
Automatische Invalidierung
Das Modul lauscht auf die Hooks actionProductSave, actionProductDelete und actionCategoryUpdate. Jedes Mal, wenn ein Produkt gespeichert wird, wird sein Index-Eintrag neu erzeugt und alle damit verknüpften Cache-Einträge invalidiert.
AJAX und UX
Das Frontend-Filterpanel wird vollständig per AJAX gesteuert:
- 250 ms Debounce bei Filteränderungen
pushStatezur Aktualisierung der URL ohne Reload- Echtzeit-Update der Tags
canonicalundrobots - Sanftes Scrollen zum Produktraster nach Update
- Aktive Chips zum Entfernen einzelner Filter
- Preis-Slider mit Zahlenfeldern und Anwenden-Button
- Farb-Swatches bei Farbe-Attributen
Multishop und mehrsprachig
Das Modul ist nativ multishop- und mehrsprachfähig:
- Jede Landingpage hat Übersetzungen pro Sprache (Tabelle
ps_dffacetedseo_landing_page_lang) - Jede Landing kann auf einen oder mehrere Shops beschränkt werden (Tabelle
ps_dffacetedseo_landing_page_shop) - Indexierungsregeln gelten standardmäßig für alle Shops
- Der Index ist nach Shop partitioniert
- Interface-Übersetzungen sind in Französisch und Englisch enthalten (XLIFF in
translations/)
Technische Architektur
Verwendete Hooks
displayHeader: dynamisches Canonical und Meta-RobotsactionFrontControllerSetMedia: Frontend-CSS und JSmoduleRoutes: saubere Route für LandingpagesdisplayLeftColumn: Injektion des FilterpanelsdisplayBeforeBodyClosingTag: JSON-LD auf LandingsactionProductSearchProviderRunQuery: Integration mit der PS-EngineactionProductSaveundactionProductDelete: inkrementelle ReindexierungactionCategoryUpdate: Invalidierung des Kategorie-CachesdisplayBackOfficeHeader: Admin-CSS und JS
Erstellte Tabellen
| Tabelle | Rolle |
|---|---|
dffacetedseo_rule |
Indexierungsregeln nach Scope |
dffacetedseo_landing_page |
Landings (Geschäftsdaten) |
dffacetedseo_landing_page_lang |
Landing-Übersetzungen |
dffacetedseo_landing_page_shop |
Multishop-Links |
dffacetedseo_landing_filter |
An Landings angehängte Filter |
dffacetedseo_combination_log |
Besuchsstatistiken |
dffacetedseo_cache |
Ergebnis-Cache |
dffacetedseo_filter_template |
Wiederverwendbare Filter-Templates |
dffacetedseo_index |
Denormalisierter Index (Performance-Schlüssel) |
dffacetedseo_setting |
Interne Einstellungen |
Filter-URL-Konvention
?attribute_group__{id_group}=v1,v2&feature__{id_feature}=v3&manufacturer__0=5&price=10-50&s=needle
Eine stabile SHA-1-Signatur wird zum Vergleich von Kombinationen berechnet (Landing-Matching, Cache-Schlüssel, Log).
Erwartete Leistung
Messungen auf einem Referenzkatalog (50.000 Produkte, 8 aktive Facetten):
| Engine | Durchschnittliche Zeit |
|---|---|
ps_facetedsearch nativ |
800 ms bis 1,4 s pro Abfrage |
| DF Faceted SEO ohne Cache | 50 bis 120 ms |
| DF Faceted SEO mit Cache | weniger als 10 ms |
Typischer Gewinn: ×10 bis ×30
Technische FAQ
Muss ich ps_facetedsearch deinstallieren?
Nein, das Modul integriert sich über die offiziellen Hooks. Sie können es parallel testen. Nach Validierung deinstallieren Sie ps_facetedsearch, um eine Verdopplung des Filterpanels zu vermeiden.
Ist das Modul HTTPS-kompatibel und nutzt es absolute Canonical-URLs?
Ja. Das Modul nutzt Context::getContext()->link->getPageLink() und getModuleLink(), die die HTTPS-Konfiguration von PrestaShop respektieren.
Wie füge ich eine neue Sprache auf Modulseite hinzu?
Kopieren Sie die Datei translations/fr-FR.xlf nach translations/xx-XX.xlf und übersetzen Sie die trans-unit-Einträge. Keine weiteren Eingriffe nötig.
Unterstützt das Modul Kombinationsattribute?
Ja. Der denormalisierte Index indexiert Kombinationen über ihre Attribute. Die Suchmaschine filtert Produkte, bei denen mindestens eine Kombination allen aktiven Filtern entspricht.
Wie debugge ich eine Regel, die nicht greift?
Aktivieren Sie die PrestaShop-Logs (Erweiterte Parameter → Logs) und prüfen Sie den Abschnitt dffacetedseo.
Fehlerbehebung
Fatal error bei einem getBySlug-Aufruf
Symptom: Call to a member function getBySlug() on false. Ursache: alter get()-Helper, der false statt des Service-Objekts zurückgab. Behoben in v1.0.1. Aktualisieren Sie das Modul.
404 auf einer Landingpage-URL
Symptom: https://ihre-seite/en/landing/ihr-slug liefert 404. Typische Ursache: der moduleRoutes-Hook ist nicht registriert oder der PrestaShop-Route-Cache ist veraltet.
- Prüfen Sie, ob Einstellungen → SEO und URLs → Sprechende URLs aktivieren auf JA steht
- Speichern Sie diese Seite (erzeugt die
.htaccessneu) - Leeren Sie den PrestaShop-Cache zweimal
- Gehen Sie zu Module → Positionen, prüfen Sie, ob
dffacetedseoanmoduleRoutesgebunden ist - Test-Fallback:
https://ihre-seite/index.php?fc=module&module=dffacetedseo&controller=landing&slug=ihr-slug
Die Suchmaschine liefert keine Produkte
Der Index ist wahrscheinlich leer. Gehen Sie zum Dashboard und klicken Sie auf Index neu aufbauen.
Filter erscheinen nicht in der Spalte
Prüfen Sie unter Module → Positionen, ob dffacetedseo an den Hook displayLeftColumn gebunden ist.
Verschlechterte Leistung nach Massen-Produktimport
Die inkrementelle Invalidierung funktioniert gut bei einzelnen Änderungen. Nach einem Massenimport ist es schneller, den gesamten Index vom Dashboard neu aufzubauen und den Cache zu leeren.
Updates
Das Modul folgt der Versionierung MAJOR.MINOR.PATCH. Kritische Korrekturen werden als Patch geliefert; neue Funktionen lösen einen Minor-Bump aus. Jedes Update enthält ein Skript upgrade/upgrade-X.Y.Z.php, das automatisch ausgeführt wird.
Support
Für Fragen oder Bug-Reports kontaktieren Sie support@datafirefly.com mit Angabe der PrestaShop-, PHP-, Modulversion und der PHP/PrestaShop-Logs.