Broken media is hard to find and risky to fix. An image disappears from a page, a thumbnail stops loading, a PDF link goes dead — and the usual advice is to run a search-and-replace across your database and hope for the best.
Media File Fixer takes the opposite approach. It scans what your site actually stores, tells you which media files are missing or at risk, explains why each one is broken in plain language, shows you every place it is used, and then repairs it in a way you can preview beforehand and undo afterwards.
How it works
- Detect — you start a batched, resumable scan that reads your posts, pages, featured images, Elementor Image widgets and Media Library, and records every media reference it finds. Scans only read; they never change anything.
- Diagnose — each unique file is checked once and given a plain-language root cause, not just “404”.
- See where it is used — every reference is indexed, so you can see which pages, posts and featured images point at a file before you touch it.
- Repair — fix one location, or every location that uses the file, after previewing the exact change.
- Verify and undo — the file is re-checked afterwards, the whole repair is recorded, and repairs that replaced something can be undone.
What it scans
- Post and page content, including Gutenberg blocks and plain HTML (images,
srcset, links to documents, <source>, <video>, <audio>, inline url() in style attributes)
- Featured images
- Elementor Image widgets, read from where Elementor actually keeps them, so they are found even when the page content holds nothing
- Media Library attachments, including their generated sizes
- Media hosted on other websites, only if you turn on Check external media URLs in Settings (off by default)
Published, private, scheduled, draft and pending content is scanned. Trashed content, auto-drafts and revisions are not.
Problems it identifies
- Missing local file and missing attachment
- Missing featured image
- Missing thumbnail or generated size
- Broken local URL
- Old domain reference, left behind after a move or migration
- Broken document, including empty and invalid PDFs
- Dead external file (404 or 410)
- At-risk external file — it works today, but a third party controls it
- Could not verify — the check was inconclusive, so the file is never counted as healthy or broken
The last three need Check external media URLs, which is off by default. While it is off, external files are reported as Not Checked and are never counted as healthy or broken.
Repairs included
- Regenerate missing image sizes from the attachment’s own original, which is only ever read
- Use another file here — pick an existing Media Library file, or upload one in the same step
- Suggested replacements — when your Media Library already holds a file that is plainly the same one (the same name in another folder, the original of a missing size, a re-upload), it is offered first with the reason it was chosen, and used only if you choose it
- Correct the address — fix a broken or outdated local URL
- Repair all locations — point every place that uses one broken file at the replacement, in a single operation, including a mixture of ordinary pages and Elementor widgets
- Repair an Elementor Image widget — the address and the Media Library item are both updated in Elementor’s own data, every other setting is left alone, and Elementor’s copy of the page and its stylesheet are rebuilt
- Undo — put back what a repair replaced
Built to be safe
Every repair runs the same way: analyse, preview, snapshot, repair, verify, log.
- Nothing is changed until you confirm, and the preview shows the exact values before and after.
- The original value of every field is stored before it is modified.
- Only the one occurrence you selected is rewritten. The rest of the content stays byte for byte identical.
- Elementor pages are changed widget by widget in Elementor’s own data — never by searching and replacing text in it — so every other widget and setting is untouched.
- If anything else would change, or a page will not save, the content is restored exactly as it was and the repair is recorded as failed.
- Repairing several locations is all or nothing. If any of them has been edited since the last scan, nothing is written at all.
- An issue is only marked resolved once the file has been re-checked and the problem is genuinely gone.
- Undoing is refused — rather than overwriting newer work — if the content changed after the repair.
Not in the free plugin
So you know what you are getting:
- Recurring scheduled scans, continuous monitoring and email alerts (in the free plugin, every scan is started by an administrator)
- Repairing several different files or issues together in one go
- Everything in Elementor other than the Image widget — background images, galleries, carousels and sliders, and images set in custom CSS
- Other page builders, and plugin integrations such as WooCommerce and ACF
- Rollback in bulk, advanced reporting and CSV export
Scanning covers posts, pages, featured images, the Media Library and Elementor Image widgets. Custom post types can be added with the media_file_fixer_scan_post_types filter but are not scanned by default. Other page builders’ storage, shortcode attributes, widgets, menus and theme or plugin CSS files are not parsed.
What Media File Fixer is not
It is not an image optimiser, a CDN, a backup plugin, a security scanner, an SEO suite, a compression or WebP plugin, or a media cleaner. It never deletes your media, and a file that nothing uses is reported as “0 locations” — information, never a problem.
Privacy
Media File Fixer does not send your website URL, media URLs, content, scan results, or any analytics to Media File Fixer or Potens Digital. There is no telemetry, no tracking, no account, and no external service to sign up for.
Suggested privacy policy text is available under Settings → Privacy.
External requests
Out of the box, Media File Fixer contacts no other website. External media checks are off by default: nothing is sent until an administrator turns on Check external media URLs under Media File Fixer → Settings.
While it is on, scans and re-checks send a HEAD request (or a GET request limited to 1 KB) directly to each external media URL found in your content, to find out whether that file still loads. These requests go to whichever third-party servers host those files, never to Media File Fixer or Potens Digital, and those servers’ own terms and privacy policies apply. Each server receives your server’s IP address, the address of the file, and a user agent naming the plugin and its version. The requests carry no cookies, no login details and no information about your visitors. Private and internal network addresses are never contacted.
While it is off, no lookup or request is made for external files. They are reported as Not Checked and left out of the health score. Turning the setting off also stops a scan that is already running from contacting anyone, from its next batch on.
Requirements
- WordPress 6.5 or later
- PHP 7.4 or later (tested on PHP 7.4, 8.0, 8.1, 8.2, 8.3 and 8.4)
- MySQL or MariaDB (tested against MySQL 5.7, MySQL 8.0 and MariaDB 10.11)
The plugin creates its own database tables. It loads nothing on the front end of your site.
Credits
- Inter typeface by The Inter Project Authors — SIL Open Font License 1.1 (assets/fonts/Inter-OFL-1.1.txt).
- Icon geometry derived from Lucide — ISC License (assets/icons-LICENSE.txt).