Safe mode
yoursite.com/?mw_safe_mode=1The undo button for this whole area. Safe mode switches every Performance setting off for visitors — cache, minification, defer, delayed JavaScript, image handling, fonts, CDN — without changing what is saved. The site goes back to how it was before you touched anything, you find the setting that caused the problem, turn that one off, and leave safe mode. Admin screens keep showing your saved settings the whole time so you can see what was on.
While it is on, a notice sits at the top of every admin screen and a dark bar at the bottom of the site, visible only to administrators.
Settings
- Turn safe mode on / off
- The button on the Performance page. Clears the page cache when switched either way.
- The URL
- Visit
yoursite.com/?mw_safe_mode=1while logged in as an administrator.=0turns it off. Works even when the page looks broken, because it runs before anything is drawn. - The wp-config line
- If the site will not load at all, add
define( 'MW_SAFE_MODE', true );towp-config.phpabove That’s all, stop editing. Safe mode is forced on until you remove the line; the button and the URL cannot override it.
When something looks wrong
- Safe mode is on but the site still looks broken
- Then the cause was not a Performance setting. Clear your host’s cache and hard-refresh. If it is still broken, see Recovery.
- The URL does nothing
- You are not logged in as an administrator on that browser. Log in at
/wp-login.phpfirst, then visit the URL again. - I cannot turn it off
- The wp-config line is present. Remove it; the notice tells you when that is the case.
- Visitors saw the dark bar
- They cannot; it only renders for logged-in administrators.
Page speed
Measures your site the way Google’s tools do and keeps every result, so you can see what a setting changed and go back to the best one. The score out of 100 is how Google grades the page. The times underneath are what a visitor waits for: when something first appears, when the main content has loaded, when the page is ready to use, how long it is blocked by scripts, and how much the layout shifts while loading.
Below the numbers is What is slowing it down: the findings from the last check, each with the MetaWrench setting that fixes it and a button to open that setting.
Settings
- Check page speed
- Runs a fresh measurement of your homepage. Takes twenty to sixty seconds.
- See what a visitor gets / Back to my real results
- Switches the findings between what the measurement found and what a visitor actually receives now, after any fixes applied since. A finding marked “already handled” was fixed after the measurement was taken; measure again to clear it.
- Fix now / Fix all now
- Switches on the MetaWrench settings that address the listed findings. Nothing you have already chosen is changed. Undo last fix reverses the most recent one.
- Show every possible finding
- Shows example text for every check the tool knows about, with made-up file names, so you can read the wording. Nothing is measured and no setting changes.
- Past measurements
- Every run, newest first, with score, load time and date. The best so far is marked. Use these restores the Performance settings that were active for that run. The last twenty runs are kept; tick and Delete selected to prune.
When something looks wrong
- The score is different from PageSpeed Insights
- Tests run from different locations on different simulated devices and network speeds, so the absolute number varies. Compare MetaWrench runs to each other to see what a setting did; compare Google’s runs to Google’s.
- The check never finishes or errors out
- The measurement calls an external service; if your host blocks outbound requests it cannot run. Ask your host whether outbound HTTPS is allowed from PHP. Also check the site is publicly reachable — a staging site behind a password cannot be measured.
- A finding stays after I fixed it
- Findings are from the measurement, not live. Press Check page speed again.
- Use these made the site slower
- It restored the exact settings from that run, which may have been before you turned other things on. Pick the run marked best so far instead, or switch settings by hand.
Images
Photos are the heaviest thing on most sites. This tab converts them to a smaller format, compresses them, delays the ones below the fold, serves the right size to each device, fills in missing alt text and dimensions, loads the main image first, and turns animated GIFs into video. Each is its own switch.
Settings
- Enable lazy loading
- Images below the fold are not downloaded until the visitor scrolls near them. Images to load immediately sets how many at the top of the page are exempt — those are visible on arrival, so delaying them makes the page feel slower, and the first one is marked high priority so the browser fetches it first. Default 3; a hero plus a row of logos might need 5.
- Convert new uploads to WebP
- JPG and PNG uploads are converted to WebP, which is 25–35% smaller at the same visible quality. Originals are kept.
- Compress images on upload
- Recompresses JPG and PNG on upload. Quality defaults to 82: most people cannot tell it from the original at about a third of the size. Below 70 starts to show on photographs.
- Images you already have → Start bulk conversion
- Applies the conversion and compression settings to everything already in the media library, in batches in the background. You can leave the page. Images are converted from the original, so quality is applied once, not stacked.
- Enable responsive images
- Adds srcset so phones get a small copy and desktops a large one, instead of every device downloading the full-size file. WordPress does some of this already; this fills in the gaps themes leave.
- Auto-generate missing alt text
- Images with no alt text get one from their caption, title or filename. Existing alt text is never overwritten. Helps accessibility and the Image descriptions check on the SEO tab.
- Load the main image first
- Tells the browser up front which image is the biggest visible one — the featured image or the first image on the page — and keeps it out of lazy loading. Usually the single largest improvement to how quickly a page looks finished.
- Convert animated GIFs to video
- The same animation as a muted, looping video is a fraction of the size. Plays exactly like the GIF did.
- Auto-add image dimensions
- Adds width and height to images that are missing them so the browser reserves the space before they load. Stops the page jumping about, which Google measures as layout shift.
When something looks wrong
- Images look soft or blurry
- Quality is too low. Raise it to 82 or above, then re-run the bulk conversion; because it converts from the original, raising quality later works.
- An image at the top of the page appears late
- It is being lazy-loaded. Raise Images to load immediately, or turn on Load the main image first.
- Bulk conversion stopped partway
- It runs in the background in batches and resumes on the next page load or cron run. Leave it; if the count has not moved in an hour, your host may be killing long requests — run it again and it continues where it stopped.
- The page still jumps while loading
- The theme sets its own image sizes in CSS that override the width and height. Check the image in the browser inspector: if it has width and height attributes but still shifts, the theme is the cause.
- Another plugin already does WebP
- Two converters fight over the same files. Keep one. If you keep the other, turn off both conversion switches here.
CSS / JS / HTML
Four jobs on one tab. Making stylesheets and scripts smaller (minify). Not loading stylesheets a page has no use for (reduce unused CSS). Loading scripts later so the page can paint first (defer), or holding them until the visitor does something (delay). And cleaning up the HTML itself, including tags a theme sometimes forgets.
This is the tab most likely to break something, because themes and page builders depend on their scripts loading in a particular order. Every switch has an exclusion list for exactly that reason.
Settings
- Minify CSS files
- Strips whitespace and comments from every stylesheet. Only minify these files: if left empty, every stylesheet is combined, which changes load order and can move a page builder’s styling; naming a few keeps the rest alone. Exclude files from minification: partial paths, one per line.
- Reduce unused CSS
- Skips plugin stylesheets on pages that do not use them. Reduce these files: paste the stylesheets a page speed report lists; they still load but the page no longer waits for them. Never reduce these files: always loaded normally. The Recently skipped list shows what it has done on real visits.
- Minify JavaScript files
- Same as CSS minification, for scripts. Exclusions work the same way.
- Defer JavaScript loading
- Scripts load after the page content instead of blocking it. jQuery is excluded by default because deferring it breaks most themes. Exclude files from deferring and Defer only these specific files give you either direction of control.
- Enable delayed JavaScript
- The files you name in Files to delay wait for the first scroll, tap or key press. Part of the name is enough:
googletagmanagercatches Tag Manager wherever it loads from. Nothing you do not list is touched; leave it empty and nothing is delayed. Run anyway after is the fallback for visitors who read and leave without scrolling: with Tag Manager delayed and no fallback, that visit is never counted. Load after 5 seconds is recommended if you rely on analytics. - Minify HTML output
- Strips whitespace from the page itself. Safe on every theme.
- Declare the page language / character set / mobile viewport
- Adds three head tags some themes leave out. The lang tag is used by screen readers and search engines; the charset stops the browser guessing and restarting; the viewport tag stops phones showing the desktop layout zoomed out.
- Send security headers
- Stops other sites framing yours. Safe defaults that do not break embeds. The same headers are also on Security → General; turning them on in either place is enough.
- Enable text compression
- Compresses HTML, CSS and JavaScript before sending, typically cutting transfer size by 60–80%. Uses Brotli where the server supports it, Gzip otherwise. Check if compression is working tests it.
When something looks wrong
- A slider, form, menu or popup stopped working
- Turn off Enable delayed JavaScript first and reload. If that fixed it, the script was delayed; add it to Never reduce / Exclude from deferring, or remove it from Files to delay. If not, turn off Defer and repeat. If it is still broken, turn off Minify JavaScript. Re-enable each one once the culprit is excluded.
- The page flashes unstyled for a moment
- A stylesheet that styles what visitors see first is in the Reduce these files list. Move it to Never reduce these files.
- The page builder editor is broken
- MetaWrench never runs on the editor, so the cause is a cached copy. Clear the MetaWrench cache and the host cache and try again.
- Google Analytics numbers dropped after delaying scripts
- Visitors who leave without interacting are not counted. Set Run anyway after to 5 seconds.
- Text compression check fails
- The server is not compressing. On Apache, the .htaccess rules need mod_deflate or mod_brotli enabled; on Nginx, compression is set in the server config. Ask your host to enable it; most will.
Cache
Two different caches. The page cache saves a finished copy of each page as a plain HTML file and serves it before WordPress even starts, which is typically two to ten times faster to first byte; it helps every visitor including first-timers. The browser cache tells each visitor’s browser to keep your images, stylesheets, scripts and fonts so repeat visits do not download them again.
The top of the tab shows how many pages are cached and when it was last cleared, with a Clear & preload cache button that empties it and rebuilds it from the sitemap.
Settings
- Enable static page cache
- Switches the page cache on. Logged-in visitors, carts, and any address with a query string are never cached. Cached pages are cleared automatically whenever you edit content, so your changes still show immediately.
- How long to keep cached pages
- A backstop only, since edits clear the cache anyway. The default is fine.
- Enable browser caching
- Sends the cache headers. Cache duration applies to images, CSS, JavaScript and fonts only; your pages themselves are never browser-cached by this setting, so edits appear immediately. One year passes Google’s efficient cache policy check.
When something looks wrong
- Edits are not showing on the live site
- Press Clear & preload cache. If that does not do it, your host has its own page cache (WP Engine, Kinsta, SiteGround, Hostinger and Cloudflare all do) — purge that too. If you edited a stylesheet directly and it is not updating, that is browser cache: hard-refresh.
- My host already has a page cache
- Turn off Enable static page cache and keep browser caching. Two page caches do not add up to a faster site, and they disagree about when to clear.
- A logged-in visitor sees stale content
- They should never be served from the cache. If they are, another caching plugin is active; deactivate it.
- Pages cached shows 0 after enabling
- The cache fills as pages are visited or preloaded. Press Clear & preload cache to build it now. If it stays at 0, the cache folder is not writable; ask your host to make
wp-contentwritable by the PHP user.
Fonts and videos
Two things that quietly cost seconds. Browsers hide your text until the font file arrives, and fetch that file from Google’s servers every time. And a single YouTube embed pulls down more than a megabyte of scripts before anyone decides to press play.
Settings
- Show text while fonts load
- Text appears immediately in a fallback font, then switches when the real one arrives. Safe on every site.
- Connect to Google Fonts early
- Opens the connection to Google’s font server before it is needed. Ignored automatically once fonts are hosted on your own server.
- Host Google Fonts on my own server
- Downloads the font files to your site so visitors never contact Google. Removes a third-party request and helps with privacy rules. Press Download fonts now after turning it on; Remove downloaded fonts undoes it.
- Load fonts as early as possible
- Starts downloading your two main fonts straight away instead of waiting to discover them. Limited to two so they do not compete with the hero image. Extra font files to load early is for fonts your theme loads itself; leave blank unless you know the exact file.
- Load videos only when clicked
- Shows the video thumbnail and loads the player on click. Works with YouTube and Vimeo. The visitor sees the same thing until they press play.
When something looks wrong
- The font briefly shows wrong, then changes
- That is Show text while fonts load working. If the swap is distracting, turn it off — but the page will then show blank text for that moment instead.
- Fonts look wrong after self-hosting
- A weight or style the theme uses was not in the download. Press Remove downloaded fonts, then Download fonts now again; if it persists, turn self-hosting off.
- Download fonts now fails
- The server could not reach Google. Ask your host whether outbound HTTPS is allowed from PHP.
- A video shows a thumbnail but will not play
- The embed is not a standard YouTube or Vimeo iframe, or a script is being delayed on the CSS / JS / HTML tab. Turn off Load videos only when clicked for that page, or exclude the player script.
CDN / DNS
A CDN serves your static files from a server near each visitor. MetaWrench does not provide one; if you have Cloudflare, BunnyCDN, KeyCDN or similar, this tab points your files at it. The DNS settings below help even without a CDN, by opening connections to outside services before the page needs them.
Settings
- CDN URL
- The full address your CDN gave you, with https. Every static file on the page is rewritten to load from it. Leave blank to turn it off.
- Remove version query strings
- Strips the
?ver=6.4WordPress adds to file addresses. Some older CDNs refuse to cache files with a query string. Leave this off unless a CDN specifically requires it: that version number is what tells browsers a file changed, and with a one-year browser cache, removing it means visitors can keep your old CSS for a year after a theme update — a broken layout only you cannot reproduce. Modern CDNs cache query strings fine. - Enable DNS prefetch
- Adds hints for commonly used external domains so the browser resolves them early.
- Connect early to other services
- Goes one step further and opens the connection to analytics, fonts and your CDN before the page asks for them.
When something looks wrong
- Images and styles 404 after entering a CDN URL
- The CDN is not set up to pull from your site. MetaWrench only rewrites the addresses; the CDN has to know your origin. Check the pull zone or origin setting in the CDN dashboard, or clear the URL here until it is configured.
- The layout broke after a theme update and only some visitors see it
- Remove version query strings is on with a long browser cache. Turn it off and ask affected visitors to hard-refresh; the rest clears as their caches expire.
- Cloudflare is on but nothing is faster
- Cloudflare proxies the whole site at DNS level, so it does not need a CDN URL here at all. Leave the field blank and use Cloudflare’s own caching settings.
Cleanup
Every edit you ever made is still in the database as a revision, alongside auto-drafts, trashed posts and comments, spam, and expired temporary data. None of it is live, all of it slows queries down. This tab shows the count of each before you delete anything, cleans them one type at a time or all at once, and can run on a schedule.
It also holds the one setting that controls what happens to your data if you delete the plugin.
Settings
- The cleanup table
- Post revisions, auto-drafts, trashed posts, spam comments, trashed comments and expired transients, each with a live count and a Clean up button. A type with nothing to remove shows Clean. Clean all removes every type at once.
- Run cleanup automatically
- Off, Weekly (recommended) or Daily. Runs the table above on that schedule so the database does not refill between visits.
- Revisions to keep per page
- WordPress keeps every revision forever by default. Keep 5 is recommended; 3, 10, 20 and none are also available. Applies to new edits from now on; use the cleanup above for revisions already stored.
- Also remove everything I have set up
- Off by default. With it off, deleting the plugin leaves your business details, services, hours, per-page SEO and settings in the database, so reinstalling picks up where you left off. Turn it on only if you want all of it gone for good. Either way, the cache rules, generated files and scheduled jobs the plugin added are removed on deactivation.
When something looks wrong
- A count does not go down after Clean up
- Some hosts restrict large DELETE queries. Clean one type at a time, or run it again; each pass removes what it can.
- I lost a revision I needed
- Cleanup is permanent. Restore the page from a backup taken before the cleanup ran, under Backup → Restore → Database only.
- Expired transients come straight back
- Normal. Plugins create transients constantly; expired ones are removed on each run. A count in the hundreds a week later is healthy, thousands a day is a plugin misbehaving.