PS PrestaShop Mittel

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.

Aktualisiert Modulversion 1.0.2

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 follow erhalten 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

  1. Laden Sie das ZIP-Archiv über Module → Modulmanager → Modul hochladen hoch.
  2. Klicken Sie auf Installieren. Das Modul erstellt automatisch 10 ps_dffacetedseo_*-Tabellen und 5 Tabs unter Verbessern.
  3. Gehen Sie zu Verbessern → DF Faceted SEO → Dashboard.
  4. Klicken Sie auf Index neu aufbauen. Dieser Schritt ist beim ersten Mal verpflichtend: ohne Index hat die Suchmaschine keine Daten.
  5. 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:

  1. Das Modul sucht zuerst eine category-Regel auf Schuhe
  2. Existiert sie und matcht, wird sie angewendet
  3. Sonst sucht es eine attribute_group-Regel auf Farbe
  4. Sonst fällt es zurück auf die globale Regel
  5. 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

  1. Gehen Sie zu Verbessern → DF Faceted SEO → Landingpages
  2. Klicken Sie auf Hinzufügen
  3. Abschnitt Targeting: wählen Sie die Kategorie und optional die betroffene Marke
  4. Abschnitt Anzeige: Standardsortierung, Richtung, aktiv, indexierbar, Priorität
  5. 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.
  6. Mehrsprachige Tabs: füllen Sie für jede Sprache den internen Namen, URL-Slug, H1, Meta-Title, Meta-Description, Intro- und Outro-Inhalt aus.
  7. 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

  1. Gehen Sie zu Verbessern → DF Faceted SEO → Statistiken
  2. Filtern Sie nach Kategorie, Mindesttreffer, Anzeigegrenze
  3. Sortieren Sie absteigend nach Treffern
  4. Identifizieren Sie Kombinationen mit mehr als 50 Treffern pro Woche
  5. Klicken Sie auf Befördern in der Aktionsspalte
  6. Das Landing-Formular öffnet sich vorausgefüllt mit der Filterkombination
  7. 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 im moduleRoutes-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
  • pushState zur Aktualisierung der URL ohne Reload
  • Echtzeit-Update der Tags canonical und robots
  • 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-Robots
  • actionFrontControllerSetMedia: Frontend-CSS und JS
  • moduleRoutes: saubere Route für Landingpages
  • displayLeftColumn: Injektion des Filterpanels
  • displayBeforeBodyClosingTag: JSON-LD auf Landings
  • actionProductSearchProviderRunQuery: Integration mit der PS-Engine
  • actionProductSave und actionProductDelete: inkrementelle Reindexierung
  • actionCategoryUpdate: Invalidierung des Kategorie-Caches
  • displayBackOfficeHeader: 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.

  1. Prüfen Sie, ob Einstellungen → SEO und URLs → Sprechende URLs aktivieren auf JA steht
  2. Speichern Sie diese Seite (erzeugt die .htaccess neu)
  3. Leeren Sie den PrestaShop-Cache zweimal
  4. Gehen Sie zu Module → Positionen, prüfen Sie, ob dffacetedseo an moduleRoutes gebunden ist
  5. 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.

War diese Seite hilfreich?

Immer noch nicht weiter? Support kontaktieren