SEO Link-Obfuskation für PrestaShop
Installation, Konfiguration der Presets, Schreiben von CSS-Selektoren und Überprüfung dessen, was Crawler tatsächlich erhalten.
Diese Anleitung behandelt Installation, Konfiguration und Überprüfung des Moduls dfobfuscator unter PrestaShop 8 und 9.
Installation
- Öffnen Sie im Backoffice Module und Dienste, Modul hochladen.
- Legen Sie die Datei
dfobfuscator.zipab und bestätigen Sie. - 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-omit der URL als umgekehrtes Base64; - die Klasse
df-obfzusätzlich zu den ursprünglichen Klassen; tabindex="0"undrole="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
- Öffnen Sie eine Kategorieseite mit Filtern und lassen Sie sich den Quelltext anzeigen (Strg+U, nicht den Element-Inspektor).
- Suchen Sie nach
df-obf: Dort, wo zuvor Filterlinks standen, sollten span-Elemente stehen. - 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.
Ein Link wurde versehentlich obfuskiert
Verengen Sie den Geltungsbereich des Selektors auf einen genaueren Container, oder entfernen Sie das betreffende Preset und ersetzen Sie es durch engere eigene Selektoren.
Ein AJAX-Suchmodul verliert seine Links
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.