Wykrywacz Martwych Linków: Dokumentacja
Wykrywanie martwych linków, uszkodzonych obrazów i plików graficznych nieobecnych na dysku w PrestaShop 8 i 9. Instalacja, ustawienia skanu, odczyt wyników, korekta i rozwiązywanie problemów.
Instalacja
Wymagania wstępne
- PrestaShop 8.0 do 9.x
- PHP 7.4 minimum, zalecane 8.1 lub nowsze
- Rozszerzenie PHP cURL dla weryfikacji HTTP
- Rozszerzenie PHP DOM zalecane do ekstrakcji linków (fallback przez wyrażenia regularne przejmuje pracę, jeśli go brak)
Instalacja modułu
- Pobierz
dfbrokenlinks.zipze swojego konta klienta. - Przejdź do Moduły, Menedżer modułów, Wgraj moduł i upuść ZIP. Możesz też wgrać folder
dfbrokenlinks/do/modules/przez FTP. - Kliknij Zainstaluj.
Instalacja tworzy cztery tabele SQL (ps_dfbl_scan, ps_dfbl_url, ps_dfbl_occurrence, ps_dfbl_ignore) i zakładkę back-office.
Gdzie go znaleźć
Skaner jest dostępny w Katalog, Martwe linki i obrazy. Strona konfiguracji modułu w menedżerze modułów wyświetla podsumowanie ostatniego skanu i przycisk prowadzący do skanera.
Pierwszy skan
Otwórz Katalog, Martwe linki i obrazy i kliknij Uruchom nowy skan. Ustawienia domyślne pasują do większości sklepów, dostroisz je później.
Dwie fazy
Skan przebiega w dwóch etapach:
- Zbieranie. Moduł przeszukuje zaznaczone treści, wyodrębnia każdy link i każdy obraz, deduplikuje adresy URL i sprawdza na dysku pliki graficzne, do których odwołuje się baza.
- Weryfikacja. Pozostałe adresy URL są odpytywane w HTTP, kilka równolegle, aby pobrać ich kod odpowiedzi.
Przeglądarka steruje postępem kolejnymi wywołaniami. Każde wywołanie pracuje przez czas ustalony w ustawieniach (domyślnie 12 sekund), zapisuje pozycję w bazie, po czym oddaje kontrolę. To pozwala przetworzyć duży katalog bez przekraczania max_execution_time.
Śledzenie postępu
Pasek postępu pokazuje bieżącą fazę. Podczas weryfikacji licznik wskazuje liczbę już przetestowanych adresów w stosunku do zebranych. Sześć wskaźników pod paskiem aktualizuje się na bieżąco.
Zatrzymywanie i wznawianie
Przycisk Zatrzymaj czysto przerywa skan. Zamknięcie karty przeglądarki daje ten sam efekt, bez straty: pozycja jest zapisywana w bazie po każdej partii. Zatrzymany skan zachowuje już uzyskane wyniki, dostępne w tabeli.
Ustawienia
Panel Ustawienia skanu, domyślnie zwinięty, otwiera się ikoną w prawym górnym rogu bloku.
Treści do analizy
Każdy checkbox odpowiada źródłu. Źródła oznaczone plakietką pliki nie generują żadnych żądań HTTP: sprawdzają obecność plików na dysku.
- Produkty: opis, opis skrócony, komunikaty dostępności w magazynie i przy braku
- Kategorie: opis oraz
additional_description, jeśli Twoja wersja PrestaShop ma tę kolumnę - Strony CMS: treść
- Kategorie CMS: opis
- Marki: opis i opis skrócony
- Dostawcy: opis
- Sklepy stacjonarne: notatka, adres linia 1 i linia 2
- Bloki linków stopki: własna treść modułu
ps_linklist - Pliki obrazów produktów: obecność w
img/p/ - Pliki obrazów kategorii, marek, dostawców, sklepów: obecność w
img/c/,img/m/,img/su/,img/st/ - Załączniki produktów: obecność w folderze
download/
Źródło, którego tabela nie istnieje w Twojej instalacji, np. bloki linków przy braku ps_linklist, po prostu nie pojawia się na liście.
Języki
Domyślnie analizowane są wszystkie aktywne języki. Odznaczenie języków skraca czas zbierania, ale pozostawia niesprawdzone linki w pominiętych tłumaczeniach. Przydatne do szybkiego pierwszego przebiegu, później wróć do pełnego pokrycia.
Opcje HTTP
- Limit oczekiwania: maksymalny czas na pełną odpowiedź. Domyślnie 10 sekund. Powyżej URL jest liczony jako martwy z komunikatem przekroczenia czasu.
- Limit połączenia: maksymalny czas na nawiązanie połączenia. Domyślnie 5 sekund. Domena, której DNS już nie rozwiązuje, pada tutaj.
- Równoległe żądania: od 1 do 20, domyślnie 6. Zwiększenie przyspiesza skan, ale podnosi ruch wychodzący i ryzyko limitowania przez serwery zdalne.
- Weryfikuj wewnętrzne adresy URL: domyślnie włączone. Lokalne adresy wskazujące na statyczny plik obecny na dysku są i tak walidowane bez żądania sieciowego, więc opcja dotyczy tylko adresów przechodzących przez router PrestaShop.
- Weryfikuj zewnętrzne adresy URL: domyślnie włączone. Wyłączenie daje bardzo szybki skan, ograniczony do Twoich własnych treści.
- Podążaj za przekierowaniami: domyślnie włączone, maksymalnie pięć skoków. Kod końcowy to wtedy kod miejsca docelowego.
- Zgłaszaj przekierowane adresy jako ostrzeżenia: domyślnie włączone. URL odpowiadający 200 po przekierowaniu trafia jako ostrzeżenie, co pozwala wykryć linki do aktualizacji, nawet jeśli jeszcze działają.
- Weryfikuj certyfikaty SSL: domyślnie wyłączone. Do włączenia, jeśli chcesz wykrywać wygasłe certyfikaty, wiedząc, że niektóre źle skonfigurowane serwery wpadną wtedy w błąd.
- Analizuj tylko elementy aktywne: domyślnie wyłączone. Po zaznaczeniu wyłączone produkty i kategorie wypadają z zakresu.
- User agent: ciąg wysyłany w nagłówku. Niektóre strony odpowiadają 403 rozpoznanym robotom. Podmiana wartości na tę z nowoczesnej przeglądarki rozwiązuje sporą część tych przypadków.
Tempo i partie
Sekundy przetwarzania na partię ustala czas pracy każdego wywołania. Domyślnie 12 sekund. Wartość musi pozostać wyraźnie poniżej max_execution_time Twojego hostingu, z zapasem bezpieczeństwa.
Wykluczone adresy URL
Jeden wzorzec na linię. Trzy możliwe zapisy:
- Zwykły tekst: dopasowanie po podciągu.
staging.mojadomena.plwyklucza wszystkie adresy zawierające ten ciąg. - Wieloznaczniki:
*zastępuje dowolny ciąg znaków,?jeden znak.https://*.partner.tld/*wyklucza wszystkie subdomeny partnera. - Wyrażenie regularne: prefiks
re:. Wzorzec jest stosowany bez ograniczników.
Przykład typowej listy:
localhost
127.0.0.1
staging.mojadomena.pl
https://*.siec-partnerska.tld/*
re:^https://[a-z0-9-]+[.]cdn-wewnetrzny[.]net/
Zapis kropki dosłownej jako [.] w wyrażeniu regularnym pozwala uniknąć problemów z escapowaniem i jest równoważny formie z backslashem.
Wykluczone adresy pojawiają się w tabeli ze statusem ignorowany i nie zużywają żadnego żądania.
Odczyt wyników
Sześć wskaźników
- Znalezione URL: liczba unikalnych adresów zebranych ze wszystkich źródeł
- Martwe: adresy i pliki w błędzie, wszystkie kategorie łącznie
- Ostrzeżenia: przypadki do przejrzenia bez pilności
- Martwe obrazy: wśród martwych te wykryte w tagu obrazu w treści
- Brakujące pliki: wśród martwych pliki nieobecne na dysku
- Prawidłowe: wszystko, co odpowiada poprawnie
Statusy
- Prawidłowy: kod 2xx lub plik lokalny obecny na dysku
- Ostrzeżenie: przekierowanie, 401, 403, 429 lub URL osiągnięty po przekierowaniu, gdy odpowiednia opcja jest aktywna
- Martwy: 404, 410, inne 4xx, 5xx, przekroczenie czasu, błąd DNS, odmowa połączenia lub plik nieobecny na dysku
- Ignorowany: URL objęty wykluczeniami lub dodany do listy ignorowanych z tabeli
- Nietestowany: URL należący do kategorii wyłączonej w ustawieniach, wewnętrznej lub zewnętrznej
Tabela jest sortowana od najpoważniejszych, potem po liczbie użyć. Najbardziej rozpowszechnione problemy w katalogu trafiają więc na górę.
Filtry i wyszukiwanie
Filtr statusu jest przy otwarciu ustawiony na Tylko problemy, co łączy martwe i ostrzeżenia. Pozostałe filtry dotyczą typu zasobu (link, obraz, plik lokalny) i źródła. Pole wyszukiwania przeszukuje jednocześnie URL i komunikat błędu, co pozwala np. wyizolować wszystkie Connection timed out naraz.
Szczegóły lokalizacji
Ikona oka otwiera listę treści używających danego URL. Każda linia wskazuje:
- typ źródła (Produkty, Strony CMS, Marki…)
- nazwę elementu i jego identyfikator
- dane pole (
description,description_short,content…) - język
- tekst kotwicy linku lub atrybut alt dla obrazu
- przycisk Edytuj otwierający kartę w nowej karcie przeglądarki
URL obecny w 34 kartach produktów pojawia się w jednej linii tabeli, z 34 lokalizacjami w szczegółach. Od razu widzisz skalę problemu, zanim zaczniesz poprawiać.
Naprawa
Martwe linki w treści
Otwórz szczegóły, kliknij Edytuj przy lokalizacji do obsłużenia, popraw lub usuń link w edytorze, zapisz. Jeśli ten sam URL występuje w kilku językach tego samego produktu, każdy język jest listowany osobno: PrestaShop przechowuje treść per język, trzeba więc poprawić każdą wersję.
Brakujące pliki obrazów
Te linie pokazują ścieżkę zamiast URL, np. img/p/4/2/9/429.jpg. Plik jest nieobecny, choć baza wciąż się do niego odwołuje. Trzy możliwe wyjścia:
- Plik istnieje w kopii zapasowej: przywróć go we wskazane miejsce.
- Obraz już nie istnieje: usuń go z zakładki Zdjęcia produktu, aby baza przestała się do niego odwoływać, potem wgraj obraz zastępczy.
- Brakuje też miniatur: po przywróceniu lub ponownym wgraniu przegeneruj miniatury w Wygląd, Ustawienia obrazów.
PS_IMAGE_FORMAT. Moduł uznaje plik za obecny, gdy znaleziona jest któraś z rozszerzeń jpg, jpeg, png, webp, avif lub gif. Plik jest zgłaszany jako brakujący tylko wtedy, gdy nie istnieje żaden z tych wariantów.
Ponowna weryfikacja URL
Ikona odświeżania ponawia weryfikację pojedynczej linii. Status i kod aktualizują się na miejscu, bez ponownego pełnego skanu. Praktyczne po poprawieniu strony u partnera lub przywróceniu pliku online.
Ignorowanie URL
Ikona zakazu dodaje URL do listy ignorowanych. Znika z tabeli i nie będzie już zgłaszany przy kolejnych skanach. Lista ignorowanych jest przechowywana niezależnie od skanów, przetrwa więc automatyczne czyszczenie.
Eksport CSV
Przycisk Eksportuj do CSV eksportuje zestaw wyników zgodnie z filtrami na ekranie. Plik używa średnika jako separatora i zaczyna się od BOM UTF-8, dzięki czemu Excel od razu poprawnie otwiera znaki diakrytyczne bez asystenta importu.
Eksportowane kolumny: URL, typ, zakres, status, kod HTTP, błąd, przekierowanie, czas odpowiedzi w milisekundach, liczba użyć, źródła, dotknięte elementy.
Duże katalogi i wydajność
Co kosztuje czas
Zbieranie jest szybkie: czyta bazę i parsuje HTML. Czas skanu pochodzi niemal całkowicie z weryfikacji HTTP, a dokładniej z czasu odpowiedzi serwerów zdalnych. Dwa mechanizmy ograniczają rachunek:
- Deduplikacja. URL obecny 400 razy jest testowany raz. W katalogu, gdzie ten sam link do tabeli rozmiarów jest skopiowany do wszystkich kart, różnica jest ogromna.
- Walidacja lokalna. URL z Twojej domeny wskazujący na istniejący plik statyczny jest walidowany odczytem systemu plików, bez żądania sieciowego. Obejmuje to większość obrazów w opisach.
Sugerowane ustawienia według rozmiaru
- Poniżej 500 produktów: ustawienia domyślne, nic do zmiany.
- 500 do 5 000 produktów: 6 do 8 równoległych żądań, 12 do 15 sekund na partię.
- Ponad 5 000 produktów: zacznij od skanu z wyłączonymi zewnętrznymi URL, aby najpierw obsłużyć własne linki i obrazy, potem uruchom pełny skan poza godzinami aktywności.
Hosting współdzielony
Na współdzielonym obniż równoległe żądania do 2 lub 3 i zostań przy 10 sekundach na partię. Jeśli zauważysz spowolnienie frontu podczas skanu, wyłącz weryfikację wewnętrznych URL: lokalne pliki statyczne pozostają kontrolowane na dysku, tracisz tylko test adresów przechodzących przez router.
Multistore
Zakres skanu podąża za kontekstem sklepu wybranym w górnym pasku back-office. Tabele z kolumną identyfikatora sklepu, jak ps_product_lang czy ps_category_lang, są odpowiednio filtrowane. Aby objąć sieć trzech sklepów, uruchom trzy skany, zmieniając kontekst między nimi.
Rozwiązywanie problemów
Skan tkwi w fazie zbierania
Zbieranie nie pokazuje szczegółowego licznika, może więc wyglądać na zawieszone na bardzo dużym katalogu, choć postępuje. Sprawdź zakładkę sieciową przeglądarki: wywołania powinny następować co około dwanaście sekund. Jeśli wywołanie zwraca błąd 500, zmniejsz czas przetwarzania na partię i uruchom ponownie.
Dużo 403 na linkach działających w przeglądarce
Cloudflare i ochrony anty-bot blokują żądania nierozpoznane jako przeglądarka. Podmień user agent na ten z nowszego Chrome’a lub Firefoksa. Jeśli domena pozostaje zablokowana, dodaj ją do wykluczeń: to nie jest martwy link, tylko link nieweryfikowalny ze skryptu.
Błąd SSL certificate problem
Certyfikat zdalnej strony nie jest walidowany przez magazyn certyfikatów Twojego serwera. Jeśli nie potrzebujesz kontroli certyfikatów, odznacz Weryfikuj certyfikaty SSL. Jeśli komunikat dotyczy Twojej własnej domeny, to realny problem do rozwiązania po stronie serwera.
Wszystkie wewnętrzne URL wpadają w błąd
Twój serwer nie potrafi wywołać sam siebie, częsty przypadek za reverse proxy lub przy nietypowym wewnętrznym DNS. Odznacz Weryfikuj wewnętrzne adresy URL. Brakujące pliki obrazów i linki zewnętrzne pozostają wykrywane normalnie.
Obrazy zgłaszane jako brakujące, choć się wyświetlają
Sprawdź ścieżkę wskazaną w tabeli. Jeśli plik faktycznie istnieje w tym miejscu, przyczyną jest niemal zawsze restrykcja odczytu PHP: skontroluj uprawnienia folderu img/ i dyrektywę open_basedir.
Baner sygnalizuje brak cURL
Rozszerzenie PHP cURL nie jest zainstalowane na Twoim hostingu. Poproś hostingodawcę o aktywację. W międzyczasie moduł pozostaje użyteczny do brakujących na dysku plików obrazów, które nie przechodzą przez sieć.
Referencja techniczna
Tabele SQL
ps_dfbl_scan: jeden rekord na skan, z fazą, pozycją wznawiania i licznikamips_dfbl_url: unikalne adresy URL skanu, z odciskiem, statusem i wynikiem HTTPps_dfbl_occurrence: lokalizacje, powiązane z URL i treścią katalogups_dfbl_ignore: lista ignorowanych, niezależna od skanów
Przechowywane są tylko trzy ostatnie skany. Przy uruchomieniu nowego najstarsze są usuwane wraz ze swoimi adresami i lokalizacjami.
Wyodrębniane atrybuty
Moduł czyta następujące atrybuty w HTML Twoich treści:
- tag a:
href - tag area:
href - tag img:
src,data-src,data-original,data-lazy,srcset - tagi source i video:
src,srcset,poster - tagi audio, iframe, embed:
src - tag object:
data - tagi link i script:
href,src - atrybut
style: deklaracjebackground-image: url(...)
Przed jakąkolwiek weryfikacją odrzucane są: mailto:, tel:, sms:, callto:, javascript:, data URI, same kotwice, schematy inne niż HTTP i HTTPS oraz każda wartość zawierająca klamry lub nawiasy kwadratowe, sygnalizujące pozostałość Smarty lub shortcode’u.
Względne adresy URL są rozwiązywane względem bazowego URL sklepu, z poszanowaniem segmentów . i ... Adresy bez protokołu zaczynające się od dwóch ukośników dziedziczą schemat sklepu. Fragment po kratce jest usuwany przed żądaniem.
Kontroler i architektura
Jeden kontroler administracyjny, AdminDfBrokenLinks, udostępnia stronę i punkty wejścia AJAX. Moduł nie deklaruje żadnego hooka. Klasy są ładowane przez bezpośrednie include, bez Composera i zależności zewnętrznych.
Odinstalowanie
Z menedżera modułów odinstaluj Broken Links & Images Checker. Cztery tabele, zakładka back-office i wszystkie klucze konfiguracji są usuwane.
ps_dfbl_ignore jest usuwana przy odinstalowaniu. Jeśli zbudowałeś długą listę ręcznych wykluczeń, wyeksportuj ją lub skopiuj pole wykluczonych adresów przed odinstalowaniem.
FAQ
Czy moduł modyfikuje moje treści?
Nie. Czyta treści i pisze wyłącznie we własnych tabelach. Wszystkie korekty przechodzą przez standardowy back-office PrestaShop.
Czy mogę zaplanować automatyczny skan?
Wersja 1.0.0 uruchamia skany z back-office, z przeglądarką jako dyrygentem. Nie ma zadania cron. W praktyce comiesięczny skan uruchamiany ręcznie wystarcza dla większości katalogów.
Dlaczego URL pojawia się jako ostrzeżenie, choć odpowiada 200?
Bo został osiągnięty po przekierowaniu, a opcja Zgłaszaj przekierowane adresy jako ostrzeżenia jest aktywna. Link działa, ale zmusza odwiedzających i Google do zbędnego skoku. Lepiej wstawić w treść bezpośrednio docelowy URL.
Czy moduł wykrywa linki w modułach zewnętrznych?
Analizuje treści przechowywane w standardowych tabelach PrestaShop i bloki linków ps_linklist. Moduł zewnętrzny przechowujący własne teksty we własnych tabelach nie jest objęty.
Czy skany zużywają przepustowość?
Każda weryfikacja zaczyna się od żądania HEAD, które pobiera tylko nagłówki. Fallback na GET, używany gdy serwer zdalny odmawia HEAD, ogranicza pobieranie do pierwszych dwóch kilobajtów. Wolumen pozostaje marginalny.
Ile skanów jest przechowywanych?
Trzy ostatnie. To pozwala porównać stan przed i po korekcie, nie pozwalając bazie rosnąć w nieskończoność.
Czy moduł jest zgodny z RODO?
Nie przechowuje żadnych danych osobowych: wyłącznie adresy URL, kody HTTP i odniesienia do Twoich treści. Żadne dane nie są przesyłane do DataFirefly.