PS PrestaShop Mittel

SEO Link-Obfuskation für PrestaShop

Installation, Konfiguration der Presets, Schreiben von CSS-Selektoren und Überprüfung dessen, was Crawler tatsächlich erhalten.

Aktualisiert Modulversion 1.0.0

Diese Anleitung behandelt Installation, Konfiguration und Überprüfung des Moduls dfobfuscator unter PrestaShop 8 und 9.

Installation

  1. Öffnen Sie im Backoffice Module und Dienste, Modul hochladen.
  2. Legen Sie die Datei dfobfuscator.zip ab und bestätigen Sie.
  3. Klicken Sie nach Abschluss der Installation auf Konfigurieren.

Das Modul registriert sich auf zwei Hooks: actionOutputHTMLBefore für die HTML-Umschreibung und actionFrontControllerSetMedia für das Laden der Frontend-Assets. Es wird kein Core-Override angelegt.

Die PHP-Erweiterung DOM muss aktiv sein. Bei nahezu allen Hostern ist sie standardmäßig aktiviert. Fehlt sie, bleibt das Modul installiert, lässt das HTML jedoch unverändert.

Konfiguration

Obfuskation aktivieren

Der Hauptschalter deaktiviert die gesamte Umschreibung, ohne das Modul zu deinstallieren. Praktisch, um den Quelltext vorher und nachher zu vergleichen oder das Modul bei einer Fehlersuche zu isolieren.

Die drei Presets

Preset Zielt auf Standard
Facettennavigation Filterblöcke und die Liste aktiver Filter Aktiv
Produktsortierung Das Sortier-Dropdown Aktiv
Paginierung Links zu Seite 2, 3 und folgenden Inaktiv

Aktivieren Sie die Paginierung nur, wenn XML-Sitemap und interne Verlinkung jede Produktseite anderweitig erreichbar machen. Andernfalls kappen Sie den einzigen Crawl-Pfad zu einem Teil Ihres Katalogs.

Eigene CSS-Selektoren

Ein Selektor pro Zeile. Kommas innerhalb einer Zeile sind ebenfalls zulässig. Jeder Link, der einem Selektor entspricht, wird obfuskiert.

#footer .account-links a
.block-tags a
.my-custom-block a[data-filter]

Der interne Konverter unterstützt Tag, ID, Klasse, Attribute (Vorhandensein oder exakter Wert), den Nachfahren-Kombinator und den Kombinator für direkte Kinder. Liegt symfony/css-selector im vendor-Verzeichnis Ihres Shops, nutzt das Modul es vorrangig und Ihnen steht die vollständige CSS-Syntax zur Verfügung.

XPath-Zeilen

Für Selektionen, die CSS nicht ausdrücken kann, stellen Sie der Zeile xpath: voran:

xpath://div[@id='js-product-list']//a[contains(@href,'?order=')]

Ausgeschlossene Controller

Kommagetrennte Liste von Front-Controller-Namen. Auf diesen Seiten findet keine Umschreibung statt und die Assets werden nicht geladen. Standardwert: order,cart. Ergänzen Sie jeden Controller, dessen Ablauf nicht von JavaScript abhängen darf.

Wie die Umschreibung funktioniert

Über den Hook actionOutputHTMLBefore erhält das Modul das vollständige Seiten-HTML. Zunächst prüft es, ob es sich um ein komplettes HTML-Dokument handelt, wodurch AJAX- und JSON-Antworten ausgeschlossen sind. Anschließend lädt es das Dokument in DOMDocument, wandelt jeden Selektor in eine XPath-Abfrage um und ersetzt die gefundenen Links durch span-Elemente.

Jedes obfuskierte Element erhält:

  • ein Attribut data-o mit der URL als umgekehrtes Base64;
  • die Klasse df-obf zusätzlich zu den ursprünglichen Klassen;
  • tabindex="0" und role="link" für die Barrierefreiheit;
  • data-t, wenn der ursprüngliche Link ein target-Attribut trug.

Links, deren URL mit #, mailto:, tel: oder javascript: beginnt, werden übersprungen. Das Attribut rel wird entfernt, das Attribut target bleibt als data-t erhalten.

Automatischer Rückfall

Schlägt die Dokumentanalyse fehl oder trifft kein Selektor auf einen Link zu, wird das ursprüngliche HTML unverändert zurückgegeben. Das Modul kann eine Seite also nicht durch unerwartetes Markup beschädigen.

Per AJAX geladene Inhalte

Filteraktualisierung und unendliches Scrollen fügen nach dem ersten Rendering neue Links ein. Die Datei front.js installiert einen MutationObserver, der dieselben Selektoren browserseitig auf diese neuen Links anwendet. Die Selektoren werden über Media::addJsDef an das Frontend übergeben. XPath-Zeilen sind von diesem Mechanismus ausgenommen, da der Browser sie nicht auswertet.

Überprüfen, ob es funktioniert

  1. Öffnen Sie eine Kategorieseite mit Filtern und lassen Sie sich den Quelltext anzeigen (Strg+U, nicht den Element-Inspektor).
  2. Suchen Sie nach df-obf: Dort, wo zuvor Filterlinks standen, sollten span-Elemente stehen.
  3. Suchen Sie nach einer Filter-URL, etwa ?q=: Sie darf in keinem href-Attribut mehr auftauchen.

Der Element-Inspektor zeigt das DOM nach der JavaScript-Ausführung, nicht das ausgelieferte HTML. Um das Ergebnis aus Crawler-Sicht zu beurteilen, nutzen Sie stets die Quelltextanzeige oder ein Werkzeug wie curl.

Testen Sie auf Navigationsseite den Linksklick, die mittlere Maustaste, Strg+Klick (Cmd+Klick unter macOS) und die Eingabetaste, nachdem Sie einen Filter per Tabulator erreicht haben.

Fehlerbehebung

Es wird nichts obfuskiert

Prüfen Sie der Reihe nach: Hauptschalter aktiv, mindestens ein Preset oder Selektor gesetzt, aktueller Controller nicht in der Ausschlussliste, PHP-Erweiterung DOM verfügbar. Leeren Sie anschließend den PrestaShop-Cache.

Ein eigenes Theme wird nicht abgedeckt

Die Presets zielen auf die Selektoren des Classic-Themes. Untersuchen Sie bei einem individuellen Theme den Filterblock, notieren Sie ID oder Klasse des Containers und ergänzen Sie eine eigene Selektorzeile.

Verengen Sie den Geltungsbereich des Selektors auf einen genaueren Container, oder entfernen Sie das betreffende Preset und ersetzen Sie es durch engere eigene Selektoren.

Manche Drittmodule bauen ihren Filterblock vollständig neu auf. Weicht das Verhalten zwischen erster Anzeige und Aktualisierung ab, prüfen Sie, ob Ihr eigener Selektor auf den neu aufgebauten Container zielt und nicht auf ein Element, das bei jeder Aktualisierung zerstört wird.

Häufige Fragen

Ist das Cloaking?

Nein. Das ausgelieferte HTML ist für alle identisch: keine User-Agent-Prüfung, keine Seitenvariante. Der Link existiert im Quelltext für niemanden, und der Browser stellt ihn im Moment der Interaktion wieder her.

Verschwinden bereits indexierte URLs?

Nein. Die Obfuskation wirkt auf das Entdecken neuer URLs. Für URLs, die bereits im Index sind, behalten Sie Ihre noindex-Anweisungen oder Weiterleitungen, bis Google sie erneut besucht.

Welche Auswirkung auf die Performance?

Eine DOM-Analyse der fertigen Seite, im Bereich weniger Millisekunden auf einer üblichen Kategorieseite. Im Frontend 5 KB JavaScript und 0,2 KB CSS.

Sollte man das Modul während eines SEO-Audits deaktivieren?

Nein, im Gegenteil: Das Audit soll abbilden, was Crawler sehen. Meldet Ihr Audit-Werkzeug einen Rückgang der internen Links auf Kategorieseiten, ist das genau das erwartete Ergebnis.

War diese Seite hilfreich?

Immer noch nicht weiter? Support kontaktieren