# Obfuskacja Linków SEO dla PrestaShop

> Ten przewodnik obejmuje instalację, konfigurację i weryfikację modułu dfobfuscator na PrestaShop 8 i 9. Instalacja Przejdź do Moduły i usługi, Wgraj moduł w swoim back-office. Upuść plik dfobfuscator.zip i zatwierdź.…

- Strona: <https://www.datafirefly.com/pl/documentation/dfobfuscator/>
- Język: pl
- Zaktualizowano: 2026-08-12
- Inne języki: [fr](https://www.datafirefly.com/documentation/dfobfuscator/index.md), [en](https://www.datafirefly.com/en/documentation/dfobfuscator/index.md), [es](https://www.datafirefly.com/es/documentation/dfobfuscator/index.md), [de](https://www.datafirefly.com/de/documentation/dfobfuscator/index.md), [it](https://www.datafirefly.com/it/documentation/dfobfuscator/index.md), [pt](https://www.datafirefly.com/pt/documentation/dfobfuscator/index.md), [nl](https://www.datafirefly.com/nl/documentation/dfobfuscator/index.md)
- Indeks: <https://www.datafirefly.com/pl/documentation/llms.txt>

Ten przewodnik obejmuje instalację, konfigurację i weryfikację modułu **dfobfuscator** na PrestaShop 8 i 9.

## Instalacja

1. Przejdź do **Moduły i usługi, Wgraj moduł** w swoim back-office.
2. Upuść plik `dfobfuscator.zip` i zatwierdź.
3. Kliknij **Konfiguruj** po zakończeniu instalacji.

Moduł rejestruje się automatycznie na dwóch hookach: `actionOutputHTMLBefore` do przepisywania HTML i `actionFrontControllerSetMedia` do ładowania assetów front. Nie jest tworzony żaden override plików core.

Rozszerzenie PHP `DOM` musi być aktywne. Jest domyślnie na niemal wszystkich hostingach. W jego braku moduł pozostaje zainstalowany, ale zostawia HTML bez zmian.

## Konfiguracja

### Włączenie obfuskacji

Główny przełącznik wyłącza całe przepisywanie bez odinstalowywania modułu. Praktyczne do porównania kodu źródłowego przed i po, albo do wyizolowania modułu podczas diagnozy.

### Trzy presety

| Preset | Co obejmuje | Domyślnie |
| --- | --- | --- |
| Nawigacja fasetowa | Bloki filtrów i lista aktywnych filtrów | Włączony |
| Sortowanie produktów | Rozwijane menu sortowania | Włączony |
| Paginacja | Linki do strony 2, 3 i kolejnych | Wyłączony |

Aktywuj paginację tylko wtedy, gdy sitemap XML i linkowanie wewnętrzne czynią każdą kartę produktu dostępną inną drogą. W przeciwnym razie odcinasz jedyną ścieżkę eksploracji do części katalogu.

### Własne selektory CSS

Jeden selektor na linię. Przecinki w tej samej linii są też akceptowane. Każdy link pasujący do selektora jest obfuskowany.

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

Wewnętrzny konwerter obsługuje znacznik, identyfikator, klasę, atrybuty (obecność lub dokładna wartość), kombinator potomka i kombinator dziecka bezpośredniego. Jeśli sklep ma `symfony/css-selector` w vendorze, moduł używa go priorytetowo i dysponujesz wtedy pełną składnią CSS.

### Linie XPath

Dla selekcji, których CSS nie potrafi wyrazić, poprzedź linię prefiksem `xpath:`:

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

### Wykluczone kontrolery

Lista nazw kontrolerów front rozdzielonych przecinkami. Na tych stronach nie zachodzi żadne przepisywanie, a assety nie są ładowane. Wartość domyślna: `order,cart`. Dodaj każdy kontroler, którego ścieżka nie powinna zależeć od żadnego JavaScriptu.

## Jak działa przepisywanie

Na hooku `actionOutputHTMLBefore` moduł otrzymuje pełny HTML strony. Najpierw sprawdza, czy to rzeczywiście kompletny dokument HTML, co wyklucza odpowiedzi AJAX i JSON. Następnie ładuje dokument do DOMDocument, konwertuje każdy selektor na zapytanie XPath, po czym zamienia znalezione linki na elementy span.

Każdy obfuskowany element otrzymuje:

- atrybut `data-o` zawierający URL w odwróconym base64;
- klasę `df-obf` oprócz oryginalnych klas;
- `tabindex="0"` i `role="link"` dla dostępności;
- `data-t`, gdy oryginalny link miał atrybut target.

Linki, których URL zaczyna się od `#`, `mailto:`, `tel:` lub `javascript:`, są pomijane. Atrybut `rel` jest usuwany, atrybut `target` zachowywany jako `data-t`.

### Automatyczny fallback

Jeśli analiza dokumentu się nie powiedzie albo żaden selektor nie pasuje do linku, oryginalny HTML jest zwracany bez modyfikacji. Moduł nie może więc zepsuć strony przez nieoczekiwane znaczniki.

### Treść ładowana w AJAX

Odświeżanie filtrów i nieskończone przewijanie wstrzykują linki po początkowym renderze. Plik `front.js` instaluje MutationObserver, który stosuje te same selektory do nowych linków, po stronie przeglądarki. Selektory są przekazywane na front przez `Media::addJsDef`. Linie XPath są wykluczone z tego mechanizmu, bo przeglądarka ich nie ewaluuje.

## Weryfikacja działania

1. Otwórz stronę kategorii z filtrami, potem wyświetl kod źródłowy strony (Ctrl+U, nie inspektor elementów).
2. Wyszukaj `df-obf`: powinieneś znaleźć elementy span zamiast linków filtrów.
3. Wyszukaj URL filtra, np. `?q=`: nie powinien już występować w atrybucie href.

Inspektor elementów pokazuje DOM po wykonaniu JavaScriptu, a nie serwowany HTML. Aby ocenić wynik od strony crawlera, zawsze używaj podglądu kodu źródłowego lub narzędzia jak `curl`.

Od strony nawigacji przetestuj lewy klik, klik kółkiem, ctrl+klik (cmd+klik na macOS) i klawisz Enter po dotarciu do filtra tabulacją.

## Rozwiązywanie problemów

### Nic nie jest obfuskowane

Sprawdź po kolei: główny przełącznik jest aktywny, co najmniej jeden preset lub selektor jest wpisany, bieżący kontroler nie jest na liście wykluczeń, rozszerzenie PHP DOM jest dostępne. Potem wyczyść cache PrestaShop.

### Motyw niestandardowy nie jest objęty

Presety celują w selektory motywu Classic. Na motywie szytym na miarę zbadaj blok filtrów, aby odczytać jego identyfikator lub klasę kontenera, potem dodaj linię własnego selektora.

### Link obfuskowany przez pomyłkę

Zawęź zasięg selektora, celując w bardziej precyzyjny kontener, albo usuń dany preset i zastąp go węższymi własnymi selektorami.

### Moduł wyszukiwania AJAX traci linki

Niektóre moduły zewnętrzne całkowicie przebudowują swój blok filtrów. Jeśli zachowanie różni się między pierwszym wyświetleniem a odświeżeniem, sprawdź, czy własny selektor faktycznie pasuje do przebudowanego kontenera, a nie do elementu niszczonego przy każdej aktualizacji.

## Częste pytania

### Czy to cloaking?

Nie. Serwowany HTML jest identyczny dla wszystkich: żadnego testu user-agenta, żadnego wariantu strony. Link nie istnieje dla nikogo w kodzie źródłowym, a przeglądarka odtwarza go w momencie interakcji.

### Czy już zaindeksowane adresy URL znikną?

Nie. Obfuskacja działa na odkrywanie nowych adresów. Dla adresów już w indeksie zachowaj dyrektywy noindex lub przekierowania, dopóki Google ich nie odwiedzi ponownie.

### Jaki wpływ na wydajność?

Analiza DOM końcowej strony, rzędu kilku milisekund na standardowej stronie kategorii. Po stronie frontu 5 KB JavaScriptu i 0,2 KB CSS.

### Czy trzeba wyłączać moduł na czas audytu SEO?

Nie, wręcz przeciwnie: audyt powinien odzwierciedlać to, co widzą crawlery. Jeśli narzędzie audytowe sygnalizuje spadek liczby linków wewnętrznych na stronach kategorii, to oczekiwany rezultat.
