PS PrestaShop Anfänger

Broken-Link-Checker: Dokumentation

Erkennung defekter Links, kaputter Bilder und auf der Festplatte fehlender Bilddateien in PrestaShop 8 und 9. Installation, Scan-Einstellungen, Ergebnisse lesen, korrigieren und Fehlerbehebung.

Aktualisiert Modulversion 1.0.0

Installation

Voraussetzungen

  • PrestaShop 8.0 bis 9.x
  • PHP mindestens 7.4, empfohlen 8.1 oder höher
  • PHP-Erweiterung cURL für die HTTP-Prüfung
  • PHP-Erweiterung DOM empfohlen für die Link-Extraktion (fehlt sie, übernimmt ein Verfahren mit regulären Ausdrücken)

Modul installieren

  1. Laden Sie dfbrokenlinks.zip aus Ihrem Kundenkonto herunter.
  2. Gehen Sie zu Module, Modulmanager, Modul hochladen und legen Sie die ZIP-Datei ab. Alternativ laden Sie den Ordner dfbrokenlinks/ per FTP nach /modules/.
  3. Klicken Sie auf Installieren.

Die Installation legt vier SQL-Tabellen an (ps_dfbl_scan, ps_dfbl_url, ps_dfbl_occurrence, ps_dfbl_ignore) sowie einen Backoffice-Reiter.

Wo Sie es finden

Der Scanner liegt unter Katalog, Defekte Links & Bilder. Die Konfigurationsseite des Moduls im Modulmanager zeigt eine Zusammenfassung des letzten Scans und einen Button, der zum Scanner führt.

Keine Auswirkung auf das Frontend. Das Modul registriert keinen Frontend-Hook. Es verändert weder Ihre Templates noch die Darstellung Ihres Shops. Alles läuft im Backoffice.

Den ersten Scan starten

Öffnen Sie Katalog, Defekte Links & Bilder und klicken Sie auf Neuen Scan starten. Die Standardeinstellungen passen für die meisten Shops, verfeinern können Sie später.

Die zwei Phasen

Ein Scan läuft in zwei Schritten:

  1. Sammlung. Das Modul durchläuft die angehakten Inhalte, extrahiert jeden Link und jedes Bild, dedupliziert die URLs und prüft auf der Festplatte die in der Datenbank referenzierten Bilddateien.
  2. Prüfung. Die verbleibenden URLs werden per HTTP abgefragt, mehrere gleichzeitig, um ihren Statuscode zu lesen.

Der Browser steuert den Fortschritt über aufeinanderfolgende Aufrufe. Jeder Aufruf arbeitet für die in den Einstellungen festgelegte Dauer (standardmäßig 12 Sekunden), speichert seine Position in der Datenbank und gibt die Kontrolle zurück. Genau das erlaubt es, einen großen Katalog zu verarbeiten, ohne je max_execution_time zu überschreiten.

Fortschritt verfolgen

Der Fortschrittsbalken zeigt die laufende Phase. Während der Prüfung nennt ein Zähler die Anzahl bereits getesteter URLs im Verhältnis zur gesammelten Gesamtzahl. Die sechs Kennzahlen unter dem Balken aktualisieren sich laufend.

Anhalten und fortsetzen

Der Button Stopp beendet den Scan sauber. Den Browser-Tab zu schließen hat denselben Effekt, ohne Verlust: die Position wird nach jedem Batch gespeichert. Ein angehaltener Scan behält die bereits erzielten Ergebnisse, sie bleiben in der Tabelle sichtbar.

Erster Scan. Starten Sie ihn außerhalb der Stoßzeiten, vor allem wenn Sie die Prüfung interner URLs aktiviert lassen: diese Anfragen landen wieder auf Ihrem eigenen Server.

Einstellungen

Das Panel Scan-Einstellungen ist standardmäßig eingeklappt und öffnet sich über das Symbol oben rechts im Block.

Zu analysierende Inhalte

Jedes Kästchen steht für eine Quelle. Quellen mit dem Hinweis Dateien erzeugen keine einzige HTTP-Anfrage, sie prüfen die Existenz der Dateien auf der Festplatte.

  • Produkte: Beschreibung, Kurzbeschreibung, Verfügbarkeitsmeldungen auf Lager und nicht auf Lager
  • Kategorien: Beschreibung sowie additional_description, sofern Ihre PrestaShop-Version diese Spalte führt
  • CMS-Seiten: Inhalt
  • CMS-Kategorien: Beschreibung
  • Marken: Beschreibung und Kurzbeschreibung
  • Lieferanten: Beschreibung
  • Filialen: Notiz, Adresszeile 1 und Zeile 2
  • Footer-Linkblöcke: benutzerdefinierter Inhalt des Moduls ps_linklist
  • Produktbilddateien: Vorhandensein in img/p/
  • Bilddateien von Kategorien, Marken, Lieferanten, Filialen: Vorhandensein in img/c/, img/m/, img/su/, img/st/
  • Produktanhänge: Vorhandensein im Ordner download/

Eine Quelle, deren Tabelle auf Ihrer Installation nicht existiert, etwa die Linkblöcke ohne ps_linklist, taucht in der Liste schlicht nicht auf.

Sprachen

Standardmäßig werden alle aktiven Sprachen analysiert. Sprachen abzuwählen verkürzt die Sammlung, lässt aber Links in den übersprungenen Übersetzungen ungeprüft. Nützlich für einen schnellen ersten Durchlauf, danach lohnt die volle Abdeckung.

HTTP-Optionen

  • Zeitlimit: maximale Zeit für eine vollständige Antwort. Standardmäßig 10 Sekunden. Danach gilt die URL als defekt, mit einer Zeitüberschreitungsmeldung.
  • Verbindungszeitlimit: maximale Zeit für den Verbindungsaufbau. Standardmäßig 5 Sekunden. Eine Domain, deren DNS nicht mehr auflöst, scheitert hier.
  • Gleichzeitige Anfragen: 1 bis 20, standardmäßig 6. Ein höherer Wert beschleunigt den Scan, erhöht aber die ausgehende Last und das Risiko einer Ratenbegrenzung durch entfernte Server.
  • Interne URLs prüfen: standardmäßig an. Lokale URLs, die auf eine vorhandene statische Datei zeigen, werden ohnehin ohne Netzwerkanfrage validiert, diese Option betrifft also nur URLs, die durch den PrestaShop-Router laufen.
  • Externe URLs prüfen: standardmäßig an. Abschalten ergibt einen sehr schnellen Scan, beschränkt auf Ihre eigenen Inhalte.
  • Weiterleitungen folgen: standardmäßig an, maximal fünf Sprünge. Der Endcode ist dann der des Ziels.
  • Weitergeleitete URLs als Warnung melden: standardmäßig an. Eine URL, die nach einer Weiterleitung 200 liefert, erscheint als Warnung. So erkennen Sie Links, die eine Aktualisierung verdienen, obwohl sie noch funktionieren.
  • SSL-Zertifikate prüfen: standardmäßig aus. Aktivieren Sie es, wenn abgelaufene Zertifikate auffallen sollen, wobei manche schlecht konfigurierten Server dann als Fehler erscheinen.
  • Nur aktive Elemente analysieren: standardmäßig aus. Einmal angehakt, fallen deaktivierte Produkte und Kategorien aus dem Umfang.
  • User-Agent: die im Header gesendete Zeichenfolge. Manche Seiten antworten identifizierten Bots mit 403. Der Wert eines aktuellen Browsers löst einen guten Teil dieser Fälle.

Taktung und Batches

Sekunden Arbeit pro Batch legt fest, wie lange jeder Aufruf arbeitet. Standardmäßig 12 Sekunden. Dieser Wert muss deutlich unter der max_execution_time Ihres Hostings bleiben, Sicherheitsmarge eingerechnet.

Achtung. Begrenzt Ihr Hoster Skripte auf 30 Sekunden, gehen Sie hier nicht über 20. Das Modul hält am Ende einer laufenden HTTP-Anfrage an, nicht mittendrin, für den letzten Batch braucht es also Luft.

Ausgeschlossene URLs

Ein Muster pro Zeile. Drei Schreibweisen sind möglich:

  • Einfacher Text: Treffer auf einen Teilstring. staging.meinedomain.de schließt jede URL aus, die diese Zeichenfolge enthält.
  • Platzhalter: * steht für eine beliebige Zeichenfolge, ? für ein einzelnes Zeichen. https://*.partner.tld/* schließt alle Subdomains des Partners aus.
  • Regulärer Ausdruck: Präfix re:. Das Muster wird wie geschrieben angewendet, ohne Begrenzer.

Eine typische Liste sieht so aus:

localhost
127.0.0.1
staging.meinedomain.de
https://*.partner-netz.tld/*
re:^https://[a-z0-9-]+[.]internes-cdn[.]net/

Einen literalen Punkt als [.] zu schreiben umgeht Escaping-Probleme und entspricht der maskierten Form.

Ausgeschlossene URLs erscheinen in der Tabelle mit dem Status ignoriert und verbrauchen keine Anfrage.

Die Ergebnisse lesen

Die sechs Kennzahlen

  • Gefundene URLs: eindeutige URLs aus allen Quellen
  • Defekt: fehlgeschlagene URLs und Dateien, alle Kategorien zusammen
  • Warnungen: Fälle, die einen Blick verdienen, ohne Dringlichkeit
  • Defekte Bilder: unter den defekten jene, die in einem Bild-Tag eines Inhalts gefunden wurden
  • Fehlende Dateien: unter den defekten die auf der Festplatte fehlenden Dateien
  • In Ordnung: alles, was korrekt antwortet

Die Status

  • In Ordnung: 2xx-Code oder lokal vorhandene Datei
  • Warnung: Weiterleitung, 401, 403, 429, oder eine nach Weiterleitung erreichte URL bei aktivierter zugehöriger Option
  • Defekt: 404, 410, weitere 4xx, 5xx, Zeitüberschreitung, DNS-Fehler, abgelehnte Verbindung oder fehlende Datei auf der Festplatte
  • Ignoriert: URL, die von Ihren Ausschlüssen abgedeckt oder aus der Tabelle in die Ignorierliste gesetzt wurde
  • Übersprungen: URL aus einer Kategorie, die Sie in den Einstellungen deaktiviert haben, intern oder extern

Die Tabelle sortiert nach Schwere, dann nach Anzahl der Verwendungen. Die im Katalog am weitesten verbreiteten Probleme stehen oben.

Filter und Suche

Der Statusfilter startet auf Nur Probleme, was defekte Einträge und Warnungen zusammenfasst. Die übrigen Filter betreffen den Ressourcentyp (Link, Bild, lokale Datei) und die Quelle. Das Suchfeld durchsucht sowohl die URL als auch die Fehlermeldung, so isolieren Sie etwa alle Connection timed out auf einmal.

Detail der Fundstellen

Das Augensymbol öffnet die Liste der Inhalte, die diese URL verwenden. Jede Zeile nennt:

  • den Quelltyp (Produkte, CMS-Seiten, Marken und so weiter)
  • den Namen des Elements und seine Kennung
  • das betroffene Feld (description, description_short, content)
  • die Sprache
  • den Ankertext des Links oder das alt-Attribut eines Bildes
  • einen Button Bearbeiten, der den Datensatz in einem neuen Tab öffnet

Eine URL, die in 34 Produktdatensätzen vorkommt, erscheint als eine einzige Tabellenzeile mit 34 Fundstellen im Detail. Sie sehen das Ausmaß, bevor Sie mit dem Korrigieren beginnen.

Korrigieren

Öffnen Sie das Detail, klicken Sie bei der gewünschten Fundstelle auf Bearbeiten, korrigieren oder entfernen Sie den Link im Editor und speichern Sie. Kommt dieselbe URL in mehreren Sprachen desselben Produkts vor, wird jede Sprache einzeln gelistet: PrestaShop speichert je Sprache einen eigenen Inhalt, jede Fassung braucht also ihre Korrektur.

Fehlende Bilddateien

Diese Zeilen zeigen einen Pfad statt einer URL, zum Beispiel img/p/4/2/9/429.jpg. Die Datei ist weg, während die Datenbank sie noch referenziert. Drei Auswege:

  1. Die Datei liegt in einem Backup: stellen Sie sie am angezeigten Pfad wieder her.
  2. Das Bild existiert endgültig nicht mehr: löschen Sie es im Reiter Bilder des Produkts, damit die Datenbank es nicht länger referenziert, und laden Sie einen Ersatz hoch.
  3. Auch die Miniaturen fehlen: nach Wiederherstellung oder erneutem Hochladen regenerieren Sie sie unter Design, Bildeinstellungen.
Bildformate. Seit PrestaShop 8.1 kann ein Bild je nach Einstellung PS_IMAGE_FORMAT als JPEG, WebP oder AVIF vorliegen. Das Modul wertet die Datei als vorhanden, sobald eine der Endungen jpg, jpeg, png, webp, avif oder gif gefunden wird. Als fehlend gemeldet wird sie nur, wenn keine dieser Varianten existiert.

Eine URL erneut prüfen

Das Aktualisieren-Symbol prüft eine einzelne Zeile erneut. Status und Code aktualisieren sich an Ort und Stelle, ohne den ganzen Scan neu zu starten. Praktisch, nachdem ein Partner eine Seite repariert hat oder Sie eine Datei wieder online gestellt haben.

Eine URL ignorieren

Das Verbotssymbol nimmt die URL in die Ignorierliste auf. Sie verschwindet aus der Tabelle und wird in späteren Scans nicht mehr gemeldet. Die Ignorierliste wird unabhängig von den Scans geführt und überlebt daher die automatische Bereinigung.

CSV-Export

Der Button CSV exportieren exportiert den Ergebnissatz genau so, wie er auf dem Bildschirm gefiltert ist. Die Datei nutzt das Semikolon als Trennzeichen und beginnt mit einem UTF-8 BOM, sodass Excel Umlaute direkt öffnet, ohne den Importassistenten.

Exportierte Spalten: URL, Typ, Bereich, Status, HTTP-Code, Fehler, Weiterleitung, Antwortzeit in Millisekunden, Anzahl der Verwendungen, Quellen, betroffene Elemente.

Große Kataloge und Performance

Wo die Zeit hingeht

Die Sammlung ist schnell, sie liest die Datenbank und parst HTML. Die Scandauer kommt fast vollständig aus der HTTP-Prüfung, genauer aus der Antwortzeit der entfernten Server. Zwei Mechanismen halten die Rechnung klein:

  • Deduplizierung. Eine 400-mal vorkommende URL wird einmal geprüft. In einem Katalog, in dem derselbe Link zur Größentabelle in jedem Produkt steht, macht das einen erheblichen Unterschied.
  • Lokale Validierung. Eine URL Ihrer eigenen Domain, die auf eine vorhandene statische Datei zeigt, wird über das Dateisystem validiert, ohne Netzwerkanfrage. Das deckt die meisten Bilder in Beschreibungen ab.

Empfohlene Einstellungen nach Größe

  • Unter 500 Produkte: Standardwerte genügen, nichts ändern.
  • 500 bis 5.000 Produkte: 6 bis 8 gleichzeitige Anfragen, 12 bis 15 Sekunden pro Batch.
  • Über 5.000 Produkte: beginnen Sie mit einem Scan bei abgeschalteten externen URLs, um zuerst Ihre eigenen Links und Bilder abzuarbeiten, und starten Sie danach außerhalb der Geschäftszeiten einen vollständigen Scan.

Shared Hosting

Auf Shared Hosting senken Sie die gleichzeitigen Anfragen auf 2 oder 3 und bleiben bei 10 Sekunden pro Batch. Wenn das Frontend während eines Scans langsamer wird, schalten Sie die Prüfung interner URLs ab: lokale statische Dateien werden weiterhin auf der Festplatte geprüft, Sie verlieren nur den Test der URLs, die durch den Router laufen.

Multishop

Der Scanbereich folgt dem in der oberen Backoffice-Leiste gewählten Shop-Kontext. Tabellen mit einer Shop-Kennungsspalte wie ps_product_lang oder ps_category_lang werden entsprechend gefiltert. Für ein Netz aus drei Shops starten Sie drei Scans und wechseln dazwischen den Kontext.

Fehlerbehebung

Der Scan scheint in der Sammelphase festzuhängen

Die Sammlung zeigt keinen detaillierten Zähler, auf einem sehr großen Katalog kann sie deshalb eingefroren wirken, obwohl sie vorankommt. Prüfen Sie den Netzwerk-Tab Ihres Browsers: etwa alle zwölf Sekunden sollten Aufrufe aufeinanderfolgen. Liefert ein Aufruf einen Fehler 500, senken Sie die Sekunden Arbeit pro Batch und starten Sie erneut.

Cloudflare und Bot-Schutzsysteme blockieren Anfragen, die nicht als Browser erkannt werden. Ersetzen Sie den User-Agent durch eine aktuelle Chrome- oder Firefox-Zeichenfolge. Bleibt die Domain blockiert, nehmen Sie sie in die Ausschlüsse auf: das ist kein defekter Link, sondern ein Link, der sich per Skript nicht prüfen lässt.

Fehler SSL certificate problem

Das Zertifikat der entfernten Seite wird vom Zertifikatsspeicher Ihres Servers nicht validiert. Wenn Sie keine Zertifikatsprüfung brauchen, entfernen Sie den Haken bei SSL-Zertifikate prüfen. Betrifft die Meldung Ihre eigene Domain, ist das ein echtes Problem für die Serverseite.

Alle internen URLs melden Fehler

Ihr Server erreicht sich selbst nicht, häufig hinter einem Reverse Proxy oder bei besonderer interner DNS-Auflösung. Entfernen Sie den Haken bei Interne URLs prüfen. Fehlende Bilddateien und externe Links werden weiterhin normal erkannt.

Bilder werden als fehlend gemeldet, obwohl sie angezeigt werden

Prüfen Sie den in der Tabelle angezeigten Pfad. Existiert die Datei dort tatsächlich, liegt es fast immer an einer PHP-Leseeinschränkung: kontrollieren Sie die Rechte des Ordners img/ und die Direktive open_basedir.

Der Hinweis meldet, dass cURL nicht verfügbar ist

Die PHP-Erweiterung cURL ist auf Ihrem Hosting nicht installiert. Bitten Sie Ihren Hoster um Aktivierung. Bis dahin bleibt das Modul für fehlende Bilddateien auf der Festplatte nutzbar, die nicht über das Netzwerk laufen.

Technische Referenz

SQL-Tabellen

  • ps_dfbl_scan: ein Datensatz je Scan, mit Phase, Wiederaufnahmeposition und Zählern
  • ps_dfbl_url: die eindeutigen URLs eines Scans, mit Fingerabdruck, Status und HTTP-Ergebnis
  • ps_dfbl_occurrence: die Fundstellen, verknüpft mit einer URL und einem Katalog-Inhalt
  • ps_dfbl_ignore: die Ignorierliste, unabhängig von den Scans

Nur die letzten drei Scans bleiben erhalten. Beim Start eines neuen Scans werden ältere samt ihrer URLs und Fundstellen gelöscht.

Extrahierte Attribute

Das Modul liest im HTML Ihrer Inhalte folgende Attribute:

  • Tag a: href
  • Tag area: href
  • Tag img: src, data-src, data-original, data-lazy, srcset
  • Tags source und video: src, srcset, poster
  • Tags audio, iframe, embed: src
  • Tag object: data
  • Tags link und script: href, src
  • Attribut style: die background-image: url(...)

Vor jeder Prüfung aussortiert werden: mailto:, tel:, sms:, callto:, javascript:, Daten-URIs, bloße Anker, andere Schemata als HTTP und HTTPS sowie jeder Wert mit geschweiften oder eckigen Klammern, die auf einen Smarty- oder Shortcode-Rest hindeuten.

Relative URLs werden gegen die Basis-URL des Shops aufgelöst, unter Beachtung der Segmente . und ... Protokollrelative URLs, die mit zwei Schrägstrichen beginnen, erben das Schema des Shops. Das Fragment nach der Raute wird vor der Anfrage entfernt.

Controller und Architektur

Ein einziger Admin-Controller, AdminDfBrokenLinks, liefert die Seite und die AJAX-Endpunkte. Das Modul deklariert keinen Hook. Die Klassen werden direkt eingebunden, ohne Composer und ohne externe Abhängigkeit.

Deinstallation

Deinstallieren Sie Broken Links & Images Checker im Modulmanager. Die vier Tabellen, der Backoffice-Reiter und sämtliche Konfigurationsschlüssel werden entfernt.

Die Ignorierliste geht mit. Die Tabelle ps_dfbl_ignore wird bei der Deinstallation gelöscht. Wenn Sie eine lange Liste manueller Ausschlüsse aufgebaut haben, exportieren Sie sie oder kopieren Sie das Feld der ausgeschlossenen URLs vor der Deinstallation.

FAQ

Verändert das Modul meine Inhalte?

Nein. Es liest Ihre Inhalte und schreibt nur in seine eigenen Tabellen. Jede Korrektur läuft über das Standard-Backoffice von PrestaShop.

Kann ich einen automatischen Scan planen?

Version 1.0.0 startet Scans aus dem Backoffice, mit dem Browser als Taktgeber. Es gibt keine Cron-Aufgabe. In der Praxis genügt ein manuell gestarteter Scan pro Monat für die meisten Kataloge.

Warum erscheint eine URL als Warnung, obwohl sie 200 liefert?

Weil sie nach einer Weiterleitung erreicht wurde und die Option Weitergeleitete URLs als Warnung melden aktiv ist. Der Link funktioniert, kostet Ihre Besucher und Google aber einen unnötigen Sprung. Die Ziel-URL direkt in den Inhalt zu schreiben ist besser.

Es analysiert Inhalte aus den Standardtabellen von PrestaShop sowie die Linkblöcke von ps_linklist. Ein Drittmodul, das seine eigenen Texte in eigenen Tabellen speichert, ist nicht abgedeckt.

Verbrauchen Scans viel Bandbreite?

Jede Prüfung beginnt mit einer HEAD-Anfrage, die nur die Header holt. Der GET-Fallback, genutzt wenn der entfernte Server HEAD ablehnt, begrenzt den Download auf die ersten zwei Kilobyte. Das Volumen bleibt marginal.

Wie viele Scans werden aufbewahrt?

Die letzten drei. Genug, um einen Zustand vor und nach der Korrektur zu vergleichen, ohne die Datenbank endlos wachsen zu lassen.

Ist das Modul DSGVO-konform?

Es speichert keine personenbezogenen Daten, nur URLs, HTTP-Codes und Verweise auf Ihre Inhalte. An DataFirefly wird nichts übermittelt.

War diese Seite hilfreich?

Immer noch nicht weiter? Support kontaktieren