Obfuskacja Linków SEO dla PrestaShop
Instalacja, konfiguracja presetów, pisanie selektorów CSS i weryfikacja renderowania serwowanego crawlerom.
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.zipi zatwierdź. - 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-ozawierający URL w odwróconym base64; - klasę
df-obfoprócz oryginalnych klas; tabindex="0"irole="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
- Otwórz stronę kategorii z filtrami, potem wyświetl kod źródłowy strony (Ctrl+U, nie inspektor elementów).
- Wyszukaj
df-obf: powinieneś znaleźć elementy span zamiast linków filtrów. - 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.