# Dode Links Checker: volledige gids

> Installatie Vereisten PrestaShop 8.0 tot 9.x PHP 7.4 minimum, 8.1 of hoger aanbevolen PHP-extensie cURL voor de HTTP-controle PHP-extensie DOM aanbevolen voor de linkextractie (een terugval op reguliere expressies neemt…

- Pagina: <https://www.datafirefly.com/nl/documentation/dfbrokenlinks/>
- Taal: nl
- Bijgewerkt op: 2026-09-16
- Andere talen: [fr](https://www.datafirefly.com/documentation/dfbrokenlinks/index.md), [en](https://www.datafirefly.com/en/documentation/dfbrokenlinks/index.md), [es](https://www.datafirefly.com/es/documentation/dfbrokenlinks/index.md), [de](https://www.datafirefly.com/de/documentation/dfbrokenlinks/index.md), [it](https://www.datafirefly.com/it/documentation/dfbrokenlinks/index.md), [pl](https://www.datafirefly.com/pl/documentation/dfbrokenlinks/index.md), [pt](https://www.datafirefly.com/pt/documentation/dfbrokenlinks/index.md)
- Index: <https://www.datafirefly.com/nl/documentation/llms.txt>

## Installatie

### Vereisten

- PrestaShop 8.0 tot 9.x
- PHP 7.4 minimum, 8.1 of hoger aanbevolen
- PHP-extensie cURL voor de HTTP-controle
- PHP-extensie DOM aanbevolen voor de linkextractie (een terugval op reguliere expressies neemt het over als ze ontbreekt)

### De module installeren

1. Haal `dfbrokenlinks.zip` op vanuit uw klantaccount.
2. Ga naar **Modules, Modulebeheer, Een module uploaden** en sleep de ZIP erin. U kunt ook de map `dfbrokenlinks/` via FTP naar `/modules/` uploaden.
3. Klik op **Installeren**.

De installatie maakt vier SQL-tabellen aan (`ps_dfbl_scan`, `ps_dfbl_url`, `ps_dfbl_occurrence`, `ps_dfbl_ignore`) en een back-office tabblad.

### Waar te vinden

De scanner is bereikbaar via **Catalogus, Dode links & afbeeldingen**. De configuratiepagina van de module, in het modulebeheer, toont een samenvatting van de laatste scan en een knop die naar de scanner leidt.

**Geen enkele impact op de front.** De module registreert geen enkele front-office hook. Ze wijzigt uw templates niet en evenmin de weergave van uw winkel. Alles gebeurt in de back-office.

## Een eerste scan starten

Open **Catalogus, Dode links & afbeeldingen** en klik op **Een nieuwe scan starten**. De standaardinstellingen passen bij de meeste winkels, u kunt ze daarna verfijnen.

### De twee fasen

Een scan verloopt in twee stappen:

1. **Verzameling.** De module doorloopt de inhoud die u hebt aangevinkt, extraheert elke link en elke afbeelding, ontdubbelt de URL's en controleert op de schijf de afbeeldingsbestanden waarnaar in de database wordt verwezen.
2. **Controle.** De overblijvende URL's worden via HTTP bevraagd, meerdere tegelijk, om hun responscode op te halen.

De browser stuurt de voortgang aan via opeenvolgende aanroepen. Elke aanroep werkt gedurende de in de instellingen vastgelegde duur (standaard 12 seconden), slaat zijn positie op in de database en geeft dan de hand terug. Zo kan een grote catalogus worden verwerkt zonder ooit `max_execution_time` te overschrijden.

### De voortgang volgen

De voortgangsbalk toont de lopende fase. Tijdens de controle geeft een teller het aantal al geteste URL's op het verzamelde totaal aan. De zes indicatoren onder de balk worden doorlopend bijgewerkt.

### Stoppen en hervatten

De knop **Stoppen** onderbreekt de scan netjes. Het sluiten van het browsertabblad heeft hetzelfde effect, zonder verlies: de positie wordt na elke batch in de database opgeslagen. Een gestopte scan behoudt de al verkregen resultaten, raadpleegbaar in de tabel.

**Eerste scan.** Start hem buiten de piekuren, zeker als u de controle van de interne URL's ingeschakeld laat: die verzoeken komen op uw eigen server terecht.

## Instellingen

Het paneel **Scaninstellingen**, standaard ingeklapt, opent via het icoon rechtsboven in het blok.

### Te analyseren inhoud

Elk selectievakje komt overeen met een bron. Bronnen met een badge _bestanden_ genereren geen enkel HTTP-verzoek: ze controleren de aanwezigheid van de bestanden op de schijf.

- **Producten**: beschrijving, korte beschrijving, beschikbaarheidsberichten op voorraad en niet op voorraad
- **Categorieën**: beschrijving, en `additional_description` als uw PrestaShop-versie deze kolom heeft
- **CMS-pagina's**: inhoud
- **CMS-categorieën**: beschrijving
- **Merken**: beschrijving en korte beschrijving
- **Leveranciers**: beschrijving
- **Winkels**: notitie, adresregel 1 en regel 2
- **Linkblokken van de footer**: aangepaste inhoud van de module `ps_linklist`
- **Productafbeeldingsbestanden**: aanwezigheid in `img/p/`
- **Afbeeldingsbestanden van categorieën, merken, leveranciers, winkels**: aanwezigheid in `img/c/`, `img/m/`, `img/su/`, `img/st/`
- **Productbijlagen**: aanwezigheid in de map `download/`

Een bron waarvan de tabel op uw installatie niet bestaat, bijvoorbeeld de linkblokken als `ps_linklist` afwezig is, verschijnt eenvoudigweg niet in de lijst.

### Talen

Standaard worden alle actieve talen geanalyseerd. Talen uitvinken verkort de verzameltijd, maar laat links ongecontroleerd in de uitgesloten vertalingen. Nuttig voor een snelle eerste doorloop, daarna terug te zetten op volledige dekking.

### HTTP-opties

- **Wachttijd**: maximale tijd voor een volledig antwoord. Standaard 10 seconden. Daarna wordt de URL als dood geteld met een time-outbericht.
- **Verbindingstijd**: maximale tijd om de verbinding op te bouwen. Standaard 5 seconden. Een domein waarvan de DNS niet meer resolvet, faalt hier.
- **Parallelle verzoeken**: van 1 tot 20, standaard 6. Hoger versnelt de scan maar verhoogt de uitgaande belasting en het risico op rate limiting bij de externe servers.
- **Interne URL's controleren**: standaard ingeschakeld. Lokale URL's die naar een op de schijf aanwezig statisch bestand wijzen, worden sowieso zonder netwerkverzoek gevalideerd; deze optie betreft dus alleen URL's die via de PrestaShop-router lopen.
- **Externe URL's controleren**: standaard ingeschakeld. Uitschakelen geeft een zeer snelle scan, beperkt tot uw eigen inhoud.
- **Redirects volgen**: standaard ingeschakeld, maximaal vijf sprongen. De eindcode is dan die van de bestemming.
- **Geredirecte URL's als waarschuwing melden**: standaard ingeschakeld. Een URL die na redirect 200 antwoordt, komt terug als waarschuwing, zodat u links opspoort die moeten worden bijgewerkt ook al werken ze nog.
- **SSL-certificaten controleren**: standaard uitgeschakeld. In te schakelen als u verlopen certificaten wilt detecteren, wetende dat sommige slecht geconfigureerde servers dan als fout terugkomen.
- **Alleen actieve elementen analyseren**: standaard uitgeschakeld. Eenmaal aangevinkt vallen uitgeschakelde producten en categorieën buiten het bereik.
- **User agent**: string die in de header wordt meegestuurd. Sommige sites antwoorden 403 aan geïdentificeerde robots. De waarde vervangen door die van een recente browser lost een groot deel van deze gevallen op.

### Tempo en batches

**Verwerkingsseconden per batch** bepaalt de werkduur van elke aanroep. Standaard 12 seconden. Deze waarde moet duidelijk onder de `max_execution_time` van uw hosting blijven, veiligheidsmarge inbegrepen.

**Let op.** Beperkt uw hoster de scripts tot 30 seconden, ga dan niet boven 20 met deze waarde. De module stopt aan het einde van een lopend HTTP-verzoek, niet middenin; er moet dus marge blijven voor de laatste batch.

### Uitgesloten URL's

Eén patroon per regel. Drie schrijfwijzen mogelijk:

- **Eenvoudige tekst**: match op een substring. `staging.mijndomein.com` sluit alle URL's uit die deze string bevatten.
- **Jokers**: `*` vervangt elke reeks tekens, `?` één enkel teken. `https://*.partner.tld/*` sluit alle subdomeinen van de partner uit.
- **Reguliere expressie**: voorvoegsel `re:`. Het patroon wordt toegepast zoals het er staat, zonder de scheidingstekens.

Voorbeeld van een typische lijst:

```
localhost
127.0.0.1
staging.mijndomein.com
https://*.partner-netwerk.tld/*
re:^https://[a-z0-9-]+[.]interne-cdn[.]net/
```

Een letterlijke punt schrijven als `[.]` in een reguliere expressie vermijdt escapeproblemen en is gelijkwaardig aan de vorm met backslash.

Uitgesloten URL's verschijnen in de tabel met de status _genegeerd_ en verbruiken geen enkel verzoek.

## De resultaten lezen

### De zes indicatoren

- **Gevonden URL's**: aantal unieke URL's verzameld over alle bronnen
- **Dood**: URL's en bestanden in fout, alle categorieën samen
- **Waarschuwingen**: gevallen om zonder urgentie te bekijken
- **Dode afbeeldingen**: onder de dode, die gedetecteerd in een afbeeldingstag van een inhoud
- **Ontbrekende bestanden**: onder de dode, de bestanden die op de schijf afwezig zijn
- **Geldig**: alles wat correct antwoordt

### De statussen

- **Geldig**: code 2xx, of lokaal bestand aanwezig op de schijf
- **Waarschuwing**: redirect, 401, 403, 429, of URL bereikt na redirect wanneer de bijbehorende optie actief is
- **Dood**: 404, 410, andere 4xx, 5xx, time-out, DNS-fout, geweigerde verbinding, of bestand afwezig op de schijf
- **Genegeerd**: URL gedekt door uw uitsluitingen, of vanuit de tabel op de negeerlijst gezet
- **Niet getest**: URL uit een in de instellingen uitgeschakelde categorie, intern of extern

De tabel is gesorteerd op afnemende ernst en daarna op aantal gebruiken. De meest verspreide problemen in de catalogus staan dus bovenaan.

### Filters en zoeken

De statusfilter staat bij het openen op **Alleen problemen**, wat dode links en waarschuwingen combineert. De andere filters betreffen het resourcetype (link, afbeelding, lokaal bestand) en de bron. Het zoekveld doorzoekt zowel de URL als het foutbericht, waardoor u bijvoorbeeld alle `Connection timed out` in één keer kunt isoleren.

### Detail van de locaties

Het oogicoon opent de lijst met inhoud die de URL gebruikt. Elke regel toont:

- het brontype (Producten, CMS-pagina's, Merken...)
- de naam van het element en zijn identifier
- het betrokken veld (`description`, `description_short`, `content`...)
- de taal
- de ankertekst van de link, of het alt-attribuut voor een afbeelding
- een knop **Bewerken** die de fiche in een nieuw tabblad opent

Een URL die in 34 productfiches voorkomt, verschijnt op één enkele regel van de tabel, met 34 locaties in het detail. U ziet meteen de omvang van het probleem voordat u begint te corrigeren.

## Corrigeren

### Dode links in een inhoud

Open het detail, klik op **Bewerken** voor de te behandelen locatie, corrigeer of verwijder de link in de editor, sla op. Verschijnt dezelfde URL in meerdere talen van hetzelfde product, dan wordt elke taal apart vermeld: PrestaShop slaat één inhoud per taal op, dus moet elke versie worden gecorrigeerd.

### Ontbrekende afbeeldingsbestanden

Deze regels tonen een pad in plaats van een URL, bijvoorbeeld `img/p/4/2/9/429.jpg`. Het bestand is afwezig terwijl de database er nog naar verwijst. Drie uitkomsten mogelijk:

1. Het bestand bestaat in een back-up: herstel het op de aangegeven locatie.
2. De afbeelding bestaat niet meer: verwijder haar via het tabblad Afbeeldingen van het product zodat de database er niet meer naar verwijst, en upload een vervangende afbeelding.
3. De miniaturen ontbreken ook: regenereer na herstel of herupload de thumbnails via **Design, Afbeeldingsinstellingen**.

**Afbeeldingsformaten.** Sinds PrestaShop 8.1 kan een afbeelding bestaan in JPEG, WebP of AVIF volgens de instelling `PS_IMAGE_FORMAT`. De module beschouwt het bestand als aanwezig zodra een van de extensies jpg, jpeg, png, webp, avif of gif wordt gevonden. Een bestand wordt alleen als ontbrekend gemeld als geen enkele van deze varianten bestaat.

### Een URL opnieuw controleren

Het vernieuwicoon start de controle van één enkele regel opnieuw. De status en de code worden ter plekke bijgewerkt, zonder de volledige scan te herstarten. Praktisch nadat een pagina aan partnerzijde is gecorrigeerd of een bestand weer online is gezet.

### Een URL negeren

Het verbodsicoon voegt de URL toe aan de negeerlijst. Ze verdwijnt uit de tabel en wordt bij volgende scans niet meer gemeld. De negeerlijst wordt onafhankelijk van de scans bewaard en overleeft dus de automatische opschoning.

## CSV-export

De knop **Exporteren naar CSV** exporteert de resultatenset zoals op het scherm gefilterd. Het bestand gebruikt de puntkomma als scheidingsteken en begint met een UTF-8 BOM, waardoor Excel de accenten direct opent zonder importassistent.

Geëxporteerde kolommen: URL, type, bereik, status, HTTP-code, fout, redirect, responstijd in milliseconden, aantal gebruiken, bronnen, betrokken elementen.

## Grote catalogi en prestaties

### Wat tijd kost

De verzameling is snel: ze leest de database en parseert HTML. De scantijd komt bijna volledig van de HTTP-controle, en meer bepaald van de responstijd van de externe servers. Twee mechanismen beperken de rekening:

- **Ontdubbeling.** Een URL die 400 keer voorkomt, wordt één keer getest. Op een catalogus waar dezelfde maattabel-link in alle fiches is gekopieerd, is het verschil aanzienlijk.
- **Lokale validatie.** Een URL van uw domein die naar een bestaand statisch bestand wijst, wordt gevalideerd door het bestandssysteem te lezen, zonder netwerkverzoek. Dat dekt de meerderheid van de afbeeldingen in beschrijvingen.

### Aanbevolen instellingen per omvang

- **Minder dan 500 producten**: standaardinstellingen, niets te wijzigen.
- **500 tot 5.000 producten**: 6 tot 8 parallelle verzoeken, 12 tot 15 seconden per batch.
- **Meer dan 5.000 producten**: begin met een scan met de externe URL's uitgeschakeld om eerst uw eigen links en afbeeldingen te behandelen, en start daarna een volledige scan buiten de actieve uren.

### Gedeelde hosting

Verlaag op een gedeelde hosting de parallelle verzoeken naar 2 of 3 en houd 10 seconden per batch aan. Merkt u een vertraging van de front tijdens de scan, schakel dan de controle van de interne URL's uit: de lokale statische bestanden blijven op de schijf gecontroleerd, u verliest alleen de test van de URL's die via de router lopen.

## Multistore

Het bereik van de scan volgt de winkelcontext die in de bovenbalk van de back-office is geselecteerd. Tabellen met een winkelidentifier-kolom, zoals `ps_product_lang` of `ps_category_lang`, worden dienovereenkomstig gefilterd. Om een netwerk van drie winkels te dekken, start u drie scans en wisselt u tussendoor van context.

## Probleemoplossing

### De scan blijft hangen in de verzamelfase

De verzameling toont geen gedetailleerde teller en kan dus op een zeer grote catalogus stil lijken te staan terwijl ze vordert. Controleer het netwerktabblad van uw browser: er moeten ongeveer elke twaalf seconden aanroepen elkaar opvolgen. Geeft een aanroep een 500-fout terug, verlaag dan de verwerkingsduur per batch en start opnieuw.

### Veel 403's op links die in de browser werken

Cloudflare en anti-botbeschermingen blokkeren verzoeken die niet als browser worden herkend. Vervang de user agent door die van een recente Chrome of Firefox. Blijft het domein geblokkeerd, voeg het dan toe aan de uitsluitingen: het is geen dode link, het is een link die vanuit een script niet controleerbaar is.

### Fout SSL certificate problem

Het certificaat van de externe site wordt niet gevalideerd door de certificaatopslag van uw server. Hebt u de certificaatcontrole niet nodig, vink dan **SSL-certificaten controleren** uit. Betreft het bericht uw eigen domein, dan is het een echt probleem om aan serverzijde op te lossen.

### Alle interne URL's komen als fout terug

Uw server slaagt er niet in zichzelf aan te roepen, een frequent geval achter een reverse proxy of met een bijzondere interne DNS-resolutie. Vink **Interne URL's controleren** uit. De ontbrekende afbeeldingsbestanden en de externe links blijven normaal gedetecteerd.

### Afbeeldingen worden als ontbrekend gemeld terwijl ze worden getoond

Controleer het pad in de tabel. Bestaat het bestand wel degelijk op die locatie, dan is de oorzaak bijna altijd een PHP-leesbeperking: controleer de rechten van de map `img/` en de directive `open_basedir`.

### De banner meldt dat cURL niet beschikbaar is

De PHP-extensie cURL is niet geïnstalleerd op uw hosting. Vraag uw hoster om activering. In afwachting blijft de module bruikbaar voor de op de schijf ontbrekende afbeeldingsbestanden, die niet via het netwerk lopen.

## Technische referentie

### SQL-tabellen

- `ps_dfbl_scan`: één record per scan, met zijn fase, zijn hervatpositie en zijn tellers
- `ps_dfbl_url`: de unieke URL's van een scan, met hun vingerafdruk, hun status en hun HTTP-resultaat
- `ps_dfbl_occurrence`: de locaties, gekoppeld aan een URL en aan een inhoud van de catalogus
- `ps_dfbl_ignore`: de negeerlijst, onafhankelijk van de scans

Alleen de laatste drie scans worden bewaard. Bij het starten van een nieuwe scan worden de oudste verwijderd met hun URL's en hun locaties.

### Geëxtraheerde attributen

De module leest de volgende attributen in de HTML van uw inhoud:

- tag a: `href`
- tag area: `href`
- tag img: `src`, `data-src`, `data-original`, `data-lazy`, `srcset`
- tags source en video: `src`, `srcset`, `poster`
- tags audio, iframe, embed: `src`
- tag object: `data`
- tags link en script: `href`, `src`
- attribuut `style`: de `background-image: url(...)`

Vóór elke controle worden uitgesloten: `mailto:`, `tel:`, `sms:`, `callto:`, `javascript:`, data-URI's, losse ankers, andere schema's dan HTTP en HTTPS, en elke waarde met accolades of vierkante haken, die op een rest van Smarty of een shortcode wijzen.

Relatieve URL's worden opgelost tegen de basis-URL van de winkel, met respect voor de segmenten `.` en `..`. Protocolloze URL's die met twee schuine strepen beginnen, erven het schema van de winkel. Het fragment na het hekje wordt vóór het verzoek verwijderd.

### Controller en architectuur

Eén enkele beheercontroller, `AdminDfBrokenLinks`, biedt de pagina en de AJAX-endpoints aan. De module declareert geen enkele hook. De klassen worden geladen door directe inclusie, zonder Composer of externe afhankelijkheid.

## Deïnstallatie

Deïnstalleer **Broken Links & Images Checker** vanuit het modulebeheer. De vier tabellen, het back-office tabblad en alle configuratiesleutels worden verwijderd.

**De negeerlijst gaat mee.** De tabel `ps_dfbl_ignore` wordt bij het deïnstalleren verwijderd. Hebt u een lange lijst met handmatige uitsluitingen opgebouwd, exporteer haar of kopieer het veld met uitgesloten URL's voordat u deïnstalleert.

## FAQ

### Wijzigt de module mijn inhoud?

Nee. Ze leest uw inhoud en schrijft alleen in haar eigen tabellen. Alle correcties lopen via de standaard back-office van PrestaShop.

### Kan ik een automatische scan plannen?

Versie 1.0.0 start de scans vanuit de back-office, met de browser als dirigent. Er is geen crontaak. In de praktijk volstaat een maandelijkse handmatig gestarte scan voor de meeste catalogi.

### Waarom verschijnt een URL als waarschuwing terwijl ze 200 antwoordt?

Omdat ze na een redirect is bereikt en de optie **Geredirecte URL's als waarschuwing melden** actief is. De link werkt, maar laat uw bezoekers en Google een onnodige sprong maken. De bestemmings-URL direct in de inhoud zetten is te verkiezen.

### Detecteert de module links in modules van derden?

Ze analyseert de inhoud in de standaardtabellen van PrestaShop en de linkblokken van `ps_linklist`. Een module van derden die zijn eigen teksten in zijn eigen tabellen opslaat, valt er niet onder.

### Verbruiken de scans bandbreedte?

Elke controle begint met een HEAD-verzoek, dat alleen de headers ophaalt. De terugval op GET, gebruikt wanneer de externe server HEAD weigert, beperkt de download tot de eerste twee kilobytes. Het volume blijft marginaal.

### Hoeveel scans worden bewaard?

De laatste drie. Zo kunt u een toestand vóór en na correctie vergelijken zonder de database eindeloos te laten groeien.

### Is de module AVG-conform?

Ze slaat geen enkel persoonsgegeven op: alleen URL's, HTTP-codes en verwijzingen naar uw inhoud. Er wordt geen enkel gegeven naar DataFirefly verzonden.
