Media cleaners have one big problem: false positives. An image looks unused, you delete it, and a page breaks. Shift Media Library Cleanup is built around the opposite promise: when in doubt, a file is kept, and nothing is ever deleted before you had the chance to undo it.
Why it is different
- It tells you why. Every file comes with a “Why?” panel: where it is used (with a link to edit that content), or everywhere it was looked for.
- Quarantine instead of deletion. Files are moved to a private folder and hidden from the Media Library. Restore them with one click, exactly as they were, for 30 days.
- It watches for broken images. If a page still requests a quarantined file, the plugin flags it (“requested N times since quarantine”) and shows you which page asked for it.
- It checks again right before acting. Before anything is moved, the plugin re-checks content edited since the scan and searches the files’ names across your database.
- Shared files are protected. When several media items point to the same file, none of them can remove it while another one is still in use.
Where it looks for your media
- Post and page content, excerpts and featured images, for every post type
- Block editor (core blocks and media attributes of third-party blocks)
- Classic editor: images, captions,
[gallery] and [playlist] shortcodes
- Elementor: page data, page and site settings (logo, favicon, backgrounds), dynamic tags
- WPBakery Page Builder and themes built on it: element attributes, background images, design options CSS
- WooCommerce: product images, product and variation galleries, category images, placeholder and email header images
- Advanced Custom Fields: image, file and gallery fields, including repeaters, flexible content, ACF blocks, term fields and options pages
- Custom fields of any plugin, user avatars, category and tag fields
- Site settings: site icon, logo, header and background images, widgets (image, gallery, text, HTML and block widgets), theme option panels
- Tables created by other plugins, such as sliders and form builders
- Your active theme, parent theme and must-use plugins: stylesheets, templates and scripts, including image IDs written in PHP
Drafts, private posts, revisions and trashed posts count as usage too: restoring any of them will never bring back a broken image.
Reports on what else is wasting space
Every scan also builds read-only reports. Nothing in them is changed by the plugin.
- Duplicates. Media items whose files are identical byte for byte, not guessed from their name or size, with the disk space the extra copies take. Media items that merely point at one and the same file (WPML and Polylang translations work this way) are listed apart, because removing one would remove the file the others use.
- Files outside the Media Library. Files in the year and month upload folders that no media item owns, largest first. Only the folders WordPress itself creates are read, so caches, page builder folders and backups are never listed. Files still referenced by name are flagged, and files derived from a media item (an old size, a WebP copy made by an optimization plugin) are linked to it.
- Missing files. Images, documents and other media your content, settings or theme still refer to, but that no longer exist, with the pages that ask for them.
- Alt text. The images that have no alternative text, with a field to write it straight from the list.
Control the image sizes WordPress creates
For every upload WordPress creates a resized copy for each registered size, whether your theme uses it or not. The Image sizes tab lists every size with how many images have it and how often the last scan found it linked in your content. Switch off the sizes you do not need and WordPress stops creating them: only new uploads and generated sizes are affected, files already on disk are left alone. One button creates the sizes images are missing, in the background, without deleting anything. WordPress’s own sizes are flagged, and the thumbnail the admin relies on cannot be switched off.
The media lists can be sorted by number of references, and media added after the last scan are counted apart as not scanned yet, never as unused.
Built to be safe for your site
- Scans run in the background in small batches, so large libraries do not hit server time limits, and they resume after an interruption.
- Scanning only reads your content: nothing in your media library changes until you choose to quarantine files.
- Data stored by other plugins is read without running any of their code.
- No data leaves your site. No tracking, no external services, no account.
- Cloud offloading is detected (WP Offload Media, Cloudinary, Media Cloud, WP-Stateless, S3 Uploads): while one of them is active, nothing is moved, so remote copies are never removed or desynchronized.
Page builders not supported yet
If the plugin detects a page builder it cannot read yet (for example Divi, Bricks, Oxygen or Beaver Builder), it shows a warning and asks for an extra confirmation before quarantining files. Review those results carefully, and use the quarantine period to check your pages.
Privacy
The plugin does not send any data outside your site and does not use cookies. To detect quarantined files that are still requested, it stores the requested file path, the time and the address of the page that asked for it (without query string). It does not store IP addresses or browser details.