PrestaShop Administration & Productivity

Broken Link Checker PrestaShop 8 & 9 — Dead Links & Missing Images

Find dead links and broken images before your customers do

The module walks through product descriptions, categories, CMS pages, brands, suppliers and stores, extracts every link and every image, then checks their HTTP status. It also verifies that image files physically exist on disk, which the storefront never reports. Compatible with PrestaShop 8 and 9, multistore, 5 languages.

At a glance
  • Links and images scanned across products, categories, CMS pages, brands, suppliers and stores
  • Parallel HTTP checks through curl_multi, HEAD first then GET when the remote server rejects HEAD
  • Disk-level checks on product, category, brand, supplier image files and product attachments
  • Batched AJAX-driven scan: no PHP timeout, an interrupted scan resumes where it stopped
  • Every broken URL is linked to the content that uses it, with a direct edit button
PrestaShop 8 & 9 PHP 7.4+ Multistore 5 languages No Composer
  • 30-day refund
  • 12 months updates
  • 24h support
www.datafirefly.com/en/
Broken link and missing image report in the PrestaShop back office
v1.0.0 · updated 2026-07-27
What it does

The short version.

01

Two kinds of breakage, two methods

Links and images returning 404, 410, 500 or timing out are caught by HTTP request. Image files referenced in the database but absent from disk are caught by reading the filesystem: the storefront renders them as a broken image without ever returning a usable error.

02

Parallel HTTP checks

curl_multi queries several URLs at once, HEAD first, then GET when the remote server rejects the HEAD method. Concurrent requests, request timeout, connect timeout and user agent are all configurable.

03

Batched scan, no timeout

The scan advances in slices of a few seconds driven by AJAX, with a cursor saved to the database. A catalogue with tens of thousands of URLs runs without touching max_execution_time, and an interrupted scan picks up where it left off.

04

From broken URL to the record to fix

Every URL is linked to the list of content using it: source type, item name, field, language and anchor text. A button opens the product, category or CMS page directly in edit mode.

05

URL deduplication

A URL appearing 400 times in the catalogue is tested once, and all 400 locations stay listed. A footer link copied everywhere does not blow up the scan duration.

06

Exclusion list

Plain text, wildcards or regular expressions, one pattern per line. Partner domains that block bots, staging URLs and links being migrated stay out of the results.

The long version

Everything you'd want to know before you install.

A detailed look at how Broken Link Checker PrestaShop 8 & 9 — Dead Links & Missing Images works, why we built it the way we did, and the thinking behind the features above.

§ 01

A dead link costs you twice

It costs you first in search: Google follows the links in your descriptions, and a product description pointing at three 404s signals neglected content. It costs you again in conversion, when a customer clicks the size guide from a product page and lands on an error at the exact moment they were hesitating. The problem is that these links do not break the day you write them. They break six months later, when a partner rebuilds their site or a CMS page gets renamed, and nobody notices.

§ 02

Two distinct problems, two detection methods

A dead link is found by HTTP request: the module calls the URL and reads the status code. A missing image file cannot be found that way. When a product image is referenced in the image table but the file has disappeared from the img/p folder, the HTTP request may well return a placeholder page with a 200. So the module reads the filesystem directly for every product, category, brand, supplier and store image, and for product attachments. That is the only way to find the images rendering as an empty box while nothing shows up in the logs.

§ 03

What the module reads in your catalogue

Product descriptions and short descriptions, availability messages, category and CMS category descriptions, CMS page content, brand, supplier and store descriptions, and the footer link blocks managed by ps_linklist. In each of those fields it extracts a href links, img src images with their lazy-loading variants and srcsets, plus source, video, audio, iframe, embed, object, link and script tags, and background images declared in inline styles. Mailto, tel, bare anchors and data URIs are discarded outright, as are the Smarty or shortcode leftovers that sometimes survive in a copy-pasted description.

§ 04

How the scan holds up on a large catalogue

The scan runs in two phases. Collection walks the content and extracts URLs. Verification queries them. Each phase advances in slices of a few seconds driven by AJAX from the browser, with a cursor saved to the database after every slice. Nothing depends on max_execution_time, and closing the tab midway does not lose the work already done. Two optimisations handle the rest: URLs are deduplicated by fingerprint for the duration of the scan, so a URL appearing 400 times is tested once, and local URLs pointing at a static file present on disk are validated by reading the filesystem, with no network request at all.

§ 05

From result to fix

A result table sorted by severity lists every URL with its status, HTTP code, error message, redirect target where relevant and usage count. Opening a row shows the list of locations: source type, item name, field, language and anchor text. Each location has its own edit button that opens the product, category or CMS page at the right place. You can also recheck a single URL after fixing it, without rerunning the whole scan.

§ 06

What the statuses mean

Healthy covers 2xx responses and local files present on disk. Warning covers redirects, 401 and 403 codes, and 429 rate limiting: the resource exists, but something deserves a look. Dead covers 404, 410, other 4xx, 5xx, timeouts, DNS errors and refused connections. Ignored and skipped correspond to your exclusions and to the URL categories you disabled in the settings.

§ 07

Filtering out what should not be reported

Plenty of domains answer 403 to bots without the link being broken at all, particularly behind an application firewall. The module already classes those as warnings rather than dead links, but you can go further with an exclusion list: one pattern per line, as plain text for a substring match, with wildcards, or as a regular expression with a prefix. A URL can also be ignored in one click from the table, which keeps it out of subsequent scan results.

§ 08

Installation and uninstallation

No external dependency, no Composer, no theme modification. Upload the ZIP through the module manager and install: four tables are created and a tab appears under Catalog. The module adds no front-office hook and does not touch how your shop renders, it works only from the back office. On uninstall, the four tables, the tab and the configuration are removed.