{"id":357360,"date":"2026-08-25T15:58:19","date_gmt":"2026-08-25T15:58:19","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/buildsbyluke-speed-autopsy\/"},"modified":"2026-08-25T15:58:10","modified_gmt":"2026-08-25T15:58:10","slug":"buildsbyluke-speed-autopsy","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/buildsbyluke-speed-autopsy\/","author":23531792,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.1","stable_tag":"1.1.1","tested":"7.1","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"BuildsByLuke Speed Autopsy","header_author":"Luke W","header_description":"When a cache or speed-optimization plugin silently breaks your site, Speed Autopsy finds which setting did it \u2014 read-only, it never changes anything.","assets_banners_color":"443f3e","last_updated":"2026-08-25 15:58:10","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/buildsbyluke.com\/plugins\/speed-autopsy","header_author_uri":"https:\/\/buildsbyluke.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":44,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","faq","changelog"],"tags":{"1.1.1":{"tag":"1.1.1","author":"lukeaxiomflow","date":"2026-08-25 15:58:10"}},"upgrade_notice":{"1.1.1":"<p>First public release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3665641,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3665641,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3665641,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3665641,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3665641,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.1.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3665641,"resolution":"1","location":"assets","locale":"","width":1265,"height":823},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3665641,"resolution":"2","location":"assets","locale":"","width":1265,"height":753},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3665641,"resolution":"3","location":"assets","locale":"","width":1265,"height":1140}},"screenshots":{"1":"The report: the verdict, the risky settings, and the confirmed breakage \u2014 with the fix for each","2":"Settings","3":"Site Health integration"}},"plugin_section":[],"plugin_tags":[146,1736,187,247,8541],"plugin_category":[52,54],"plugin_contributors":[271970],"plugin_business_model":[],"class_list":["post-357360","plugin","type-plugin","status-publish","hentry","plugin_tags-cache","plugin_tags-minify","plugin_tags-optimization","plugin_tags-performance","plugin_tags-troubleshooting","plugin_category-performance","plugin_category-security-and-spam-protection","plugin_contributors-lukeaxiomflow","plugin_committers-lukeaxiomflow"],"banners":{"banner":"https:\/\/ps.w.org\/buildsbyluke-speed-autopsy\/assets\/banner-772x250.png?rev=3665641","banner_2x":"https:\/\/ps.w.org\/buildsbyluke-speed-autopsy\/assets\/banner-1544x500.png?rev=3665641","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/buildsbyluke-speed-autopsy\/assets\/icon.svg?rev=3665641","icon":"https:\/\/ps.w.org\/buildsbyluke-speed-autopsy\/assets\/icon.svg?rev=3665641","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/buildsbyluke-speed-autopsy\/assets\/screenshot-1.png?rev=3665641","caption":"The report: the verdict, the risky settings, and the confirmed breakage \u2014 with the fix for each"},{"src":"https:\/\/ps.w.org\/buildsbyluke-speed-autopsy\/assets\/screenshot-2.png?rev=3665641","caption":"Settings"},{"src":"https:\/\/ps.w.org\/buildsbyluke-speed-autopsy\/assets\/screenshot-3.png?rev=3665641","caption":"Site Health integration"}],"raw_content":"<!--section=description-->\n<p><strong>You turned on a speed plugin. Now your menu won't open, your checkout looks broken, or your fonts are gone \u2014 and you have no idea which setting did it.<\/strong><\/p>\n\n<p>Cache and optimization plugins make sites faster by combining and minifying files, deferring and delaying JavaScript, removing \"unused\" CSS, and lazy-loading images. When it works, it's great. When it breaks something, it breaks <em>silently<\/em> \u2014 and the settings that caused it are buried across dozens of checkboxes. Even the plugins' own \"safe mode\" just turns whole categories off and leaves you to bisect the rest by hand.<\/p>\n\n<p>Speed Autopsy is the post-mortem. It finds what your optimizer broke, <strong>names the setting responsible<\/strong>, and tells you how to fix it \u2014 without touching a single setting itself.<\/p>\n\n<h4>What it does<\/h4>\n\n<ul>\n<li><strong>Detects your active cache\/optimization plugins<\/strong> (LiteSpeed Cache, WP Rocket, Autoptimize, W3 Total Cache, SiteGround Optimizer, WP-Optimize, Perfmatters, FlyingPress, WP Fastest Cache) and reads \u2014 never changes \u2014 their current settings.<\/li>\n<li><strong>Confirms real breakage.<\/strong> It fetches your own pages and checks whether the combined and minified files your optimizer generates actually load. A combined stylesheet or script that is <strong>missing or empty<\/strong> is the single most common catastrophic failure \u2014 your page requests a file that isn't there, so its styles or scripts silently vanish. Speed Autopsy catches exactly this.<\/li>\n<li><strong>Names the risky setting.<\/strong> It cross-references the settings you have enabled against a knowledge base of known-breakage patterns \u2014 Remove Unused CSS breaking dropdowns and cart drawers, Combine JavaScript killing sliders and menus, Delay JavaScript stopping the checkout, lazy-load hiding slider images \u2014 and tells you the symptom to look for and the exact setting to change.<\/li>\n<li><strong>Gives you a clear verdict<\/strong>: confirmed breakage, risky settings enabled, or all clear.<\/li>\n<\/ul>\n\n<h4>Strictly read-only, by design<\/h4>\n\n<p>Speed Autopsy <strong>never<\/strong> changes a setting, deactivates a plugin, clears a cache, or modifies your site in any way. It reads and it fetches \u2014 that's all. Every fix it suggests is for <strong>you<\/strong> to apply, in control, when you're ready. A diagnostic you can trust must never be a hand on the controls.<\/p>\n\n<h4>Also included, free<\/h4>\n\n<ul>\n<li>Scan the pages you choose \u2014 the front page always, plus your shop, cart and key landing pages (the ones where breakage actually costs money)<\/li>\n<li>Weekly automatic scan + an email when new issues appear<\/li>\n<li>Findings report with severity, plain-language symptom and fix, and dismiss-with-note<\/li>\n<li>Site Health integration<\/li>\n<li>WP-CLI: <code>wp speed-autopsy scan<\/code> \/ <code>status<\/code>, including <code>--format=json<\/code><\/li>\n<li>A REST status endpoint (<code>spau\/v1\/status<\/code>, administrators only) with the verdict and open findings as JSON, for your own dashboards and tooling<\/li>\n<li>An honest loopback self-check: if your host blocks self-requests, Speed Autopsy says \"scan impaired\" \u2014 it never pretends everything is fine<\/li>\n<\/ul>\n\n<h4>Speed Autopsy Pro<\/h4>\n\n<p><strong><a href=\"https:\/\/buildsbyluke.com\/plugins\/speed-autopsy\">Pro<\/a><\/strong> adds the runtime layer a server-side scan can't see, plus agency tools: an <strong>opt-in, admin-only JavaScript-error collector<\/strong> that catches the actual errors and failed asset loads hit in the browser while testing \u2014 correlated to the deferred or combined script that caused them \u2014 <strong>Slack and webhook alerts<\/strong> when a scan finds new breakage, and a <strong>white-label client report<\/strong> (print \/ save as PDF). Sold and licensed through Freemius (see \"External services\").<\/p>\n\n<h4>This is a diagnostic, not a fixer<\/h4>\n\n<p>Speed Autopsy does not speed up your site, does not change your optimizer, and cannot guarantee a fix \u2014 it tells you, in plain language, what your optimizer appears to have broken and what to change. You stay in control of every change.<\/p>\n\n<h3>External services<\/h3>\n\n<p><strong>The scan contacts nothing external.<\/strong> Speed Autopsy fetches <strong>this site's own pages and its own optimizer-generated asset files<\/strong> from your own server (loopback requests). Asset files served from a different host (a CDN) are reported as \"not checked\" and are never fetched. Redirects are not followed by the HTTP layer: Speed Autopsy resolves each hop itself and re-checks the destination against your site address before requesting it, so a URL of yours that redirects off-site is stopped and reported rather than followed. Findings stay in your database. No third-party crawler, API, or CDN is involved, and nothing about your site is transmitted anywhere.<\/p>\n\n<p><strong>Freemius (freemius.com), who sell and license the Pro version<\/strong><\/p>\n\n<p>Freemius is contacted in four situations, each one something you click \u2014 never in the background:<\/p>\n\n<ol>\n<li><strong>If you opt in on the activation screen<\/strong> (or start a trial \/ activate a licence): your site URL, WordPress and PHP versions, and the activating account's email are sent to api.freemius.com. Skipping the opt-in is a first-class choice and the plugin is fully functional without it.<\/li>\n<li><strong>If you open the \"Upgrade\" page<\/strong>: your own server asks api.freemius.com for current plan prices, sending your site URL. The page loads no third-party scripts \u2014 everything it renders is served from this plugin's own folder. The payment SDK's bundled pricing script used to inject Google Analytics and a remote checkout script into wp-admin; this build removes both (see \"Source code\").<\/li>\n<li><strong>If you open the \"Contact Us\" page<\/strong> (Freemius's hosted support form, wp.freemius.com): the link carries your site URL and WordPress login URL.<\/li>\n<li><strong>If you click a plan to buy<\/strong>: you go to Freemius's hosted checkout (checkout.freemius.com), which receives your site URL, name, WordPress and PHP versions, and administrator email (pre-filled). Freemius is the merchant of record; their checkout loads its own third-party scripts (Stripe, PayPal, Google Tag Manager, Freemius's own). If you never click a plan, none of it loads.<\/li>\n<\/ol>\n\n<p>Terms: https:\/\/freemius.com\/terms\/ \u2014 Privacy: https:\/\/freemius.com\/privacy\/<\/p>\n\n<p>In Pro, the runtime collector POSTs errors <strong>only to this site's own REST endpoint<\/strong>, and Slack\/webhook alerts POST <strong>only to endpoint URLs you enter yourself<\/strong>.<\/p>\n\n<h3>Source code<\/h3>\n\n<p>This plugin's own PHP and JavaScript are unminified and readable in the plugin folder. The one exception is the third-party payment SDK in <code>vendor\/freemius\/<\/code>, which ships pre-minified; its source and build tooling are public:<\/p>\n\n<ul>\n<li>Freemius WordPress SDK: https:\/\/github.com\/Freemius\/wordpress-sdk<\/li>\n<li>The pricing screen at <code>vendor\/freemius\/assets\/js\/pricing\/freemius-pricing.js<\/code>: https:\/\/github.com\/Freemius\/pricing-page<\/li>\n<\/ul>\n\n<p>This plugin ships four deliberate modifications to that SDK (all in <code>assets\/js\/pricing\/freemius-pricing.js<\/code>, all removing remote references from wp-admin): the <code>appendScripts()<\/code> method is emptied (it injected Google Analytics + checkout.js), the GA pageview tracker is stubbed out, the remote loader GIF is replaced with an inline data-URI, and testimonial photos are forced to the bundled placeholder. Three carry a \"Speed Autopsy:\" comment at the patch site.<\/p>\n\n<h3>Known limitations<\/h3>\n\n<ul>\n<li><strong>Loopback-blocked hosts.<\/strong> If your server can't fetch its own pages (password protection, firewall, some local setups), the page\/asset scan can't run. Speed Autopsy detects this and shows \"scan impaired\" \u2014 it never reports a false all-clear. Optimizer settings are still checked.<\/li>\n<li><strong>CDN-served assets.<\/strong> Files rewritten to a CDN host are reported as \"not checked\" rather than fetched, to keep Speed Autopsy's outbound requests to your own server only.<\/li>\n<li><strong>Off-site redirects.<\/strong> If one of your own URLs redirects to a different host, Speed Autopsy stops at the redirect and reports it instead of following it \u2014 a page in that state is reported as unreachable, an asset as \"not checked\". Its requests never leave your own server, so a file that only exists on the far side of such a redirect cannot be verified.<\/li>\n<li><strong>Runtime-only breakage.<\/strong> A server-side fetch sees the HTML and whether files load, but does not execute JavaScript, so it can't observe a script that loads fine but errors at runtime. That's what the Pro runtime collector is for.<\/li>\n<\/ul>\n\n<!--section=faq-->\n<dl>\n<dt id=\"will%20it%20change%20my%20cache%20settings%20or%20clear%20my%20cache%3F\"><h3>Will it change my cache settings or clear my cache?<\/h3><\/dt>\n<dd><p>No. Speed Autopsy is strictly read-only. It reads your optimizer's settings and fetches your pages; it never writes a setting, clears a cache, or deactivates anything. Every fix it suggests is for you to apply.<\/p><\/dd>\n<dt id=\"how%20is%20this%20different%20from%20my%20cache%20plugin%27s%20%22safe%20mode%22%3F\"><h3>How is this different from my cache plugin's \"safe mode\"?<\/h3><\/dt>\n<dd><p>Safe mode turns whole categories of optimization off and leaves you to work out which specific setting was the problem. Speed Autopsy keeps everything on and tells you which individual setting is the likely culprit, with the symptom and the fix \u2014 and confirms real breakage by checking that your combined files actually load.<\/p><\/dd>\n<dt id=\"which%20cache%2Foptimization%20plugins%20does%20it%20support%3F\"><h3>Which cache\/optimization plugins does it support?<\/h3><\/dt>\n<dd><p>LiteSpeed Cache, WP Rocket, Autoptimize, W3 Total Cache, SiteGround Optimizer, WP-Optimize, Perfmatters, FlyingPress and WP Fastest Cache. It detects any of them that are active and reads the settings it understands; a couple store settings in a form it can't read, in which case it relies on the page\/asset scan.<\/p><\/dd>\n<dt id=\"it%20says%20a%20combined%20file%20is%20missing%20%E2%80%94%20what%20does%20that%20mean%3F\"><h3>It says a combined file is missing \u2014 what does that mean?<\/h3><\/dt>\n<dd><p>Your optimizer combined several scripts or stylesheets into one cached file, but that file returns an error or is empty. Your pages ask for it, so the styles or scripts it should contain never load. Clearing your optimizer's cache usually rebuilds it; if it keeps failing, exclude the offending file from combination.<\/p><\/dd>\n<dt id=\"does%20it%20slow%20my%20site%20down%3F\"><h3>Does it slow my site down?<\/h3><\/dt>\n<dd><p>No. Scans run on demand or weekly via WP-Cron, fetch your own pages with a strict time budget, and store compact findings. Nothing runs on your visitors' page loads.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Initial public release.<\/li>\n<\/ul>","raw_excerpt":"When a cache or speed plugin silently breaks your site, Speed Autopsy finds which setting did it \u2014 read-only, it never changes a thing.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/357360","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=357360"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/lukeaxiomflow"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=357360"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=357360"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=357360"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=357360"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=357360"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=357360"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}