{"id":290167,"date":"2026-04-02T13:42:59","date_gmt":"2026-04-02T13:42:59","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/site-scripts-speed-manager\/"},"modified":"2026-04-02T13:42:23","modified_gmt":"2026-04-02T13:42:23","slug":"site-scripts-speed-manager","status":"publish","type":"plugin","link":"https:\/\/vi.wordpress.org\/plugins\/site-scripts-speed-manager\/","author":13734147,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"2.3.0","stable_tag":"2.3.0","tested":"6.9.4","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"Site Scripts & Speed Manager","header_author":"Think Above AI","header_description":"A plugin that allows you to defer, async and ignore scripts with a simple interface and powerful results. More control with ease of use.","assets_banners_color":"","last_updated":"2026-04-02 13:42:23","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/thinkabove.ai","header_plugin_uri":"https:\/\/thinkabove.ai\/site-scripts-speed-manager\/","header_author_uri":"https:\/\/thinkabove.ai","rating":0,"author_block_rating":0,"active_installs":0,"downloads":48,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.3.0":{"tag":"2.3.0","author":"ithinkabove","date":"2026-04-02 13:42:23"}},"upgrade_notice":{"2.3.0":"<p>Major update: Full site crawl, per-page script tracking, inner-page-only detection, and expanded strategy reference. Update recommended.<\/p>","2.2.0":"<p>Complete UI redesign with modern interface, filter tabs, live search, and stats dashboard.<\/p>","2.1.1":"<p>Initial release. Install to start optimising your script loading strategy with full visibility and control.<\/p>"},"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["2.3.0"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Main dashboard showing the master toggle, URL scanner, and \"Crawl Entire Site\" button","2":"Script discovery table with per-script strategy dropdowns, type badges, page counts, and filter tabs","3":"Stats dashboard showing script counts and pages scanned","4":"Loading strategy reference cards with detailed guidance built into the admin page"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[8906,23130,247,2864,794],"plugin_category":[52,54],"plugin_contributors":[259281],"plugin_business_model":[],"class_list":["post-290167","plugin","type-plugin","status-publish","hentry","plugin_tags-async","plugin_tags-defer","plugin_tags-performance","plugin_tags-scripts","plugin_tags-speed","plugin_category-performance","plugin_category-security-and-spam-protection","plugin_contributors-ithinkabove","plugin_committers-ithinkabove"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/site-scripts-speed-manager.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>Site Scripts &amp; Speed Manager<\/strong> gives you full visibility and control over every JavaScript file loading on your WordPress site.<\/p>\n\n<p>Most performance plugins offer a blanket \"defer all scripts\" checkbox \u2014 then you spend hours figuring out what broke. This plugin takes a different approach: <strong>see first, then optimize.<\/strong><\/p>\n\n<ol>\n<li><strong>Crawl your entire site<\/strong> or scan a single page to discover every script<\/li>\n<li><strong>See exactly<\/strong> what each script is, where it comes from, how it currently loads, and which pages it appears on<\/li>\n<li><strong>Choose per-script<\/strong>: Defer, Async, or None \u2014 with visual badges, filter tabs, and live search<\/li>\n<li><strong>Master kill switch<\/strong> \u2014 if anything breaks, flip it off instantly. No cache clearing needed.<\/li>\n<\/ol>\n\n<h4>Full Site Crawl<\/h4>\n\n<p>Don't just scan one page \u2014 crawl your <strong>entire site<\/strong> with a single click. The plugin automatically discovers your pages, posts, and category archives (up to 50 pages, 10 posts, and 5 categories), scans each one for scripts, and merges the results into a unified view. An animated progress bar shows crawl status in real-time.<\/p>\n\n<h4>Per-Page Script Tracking<\/h4>\n\n<p>After a full site crawl, every script shows how many pages it appears on. Hover over the count to see the list of page paths. Scripts that only load on inner pages (not the homepage) are highlighted with an <strong>\"inner only\"<\/strong> badge, so you can immediately spot page-specific scripts from plugins like WooCommerce, contact forms, or page builders.<\/p>\n\n<h4>Per-Script Loading Control<\/h4>\n\n<p>Each discovered script gets its own dropdown: <strong>Defer<\/strong>, <strong>Async<\/strong>, or <strong>None<\/strong>. No blanket rules \u2014 you choose exactly how each script loads based on what it is and what it does. Color-coded dropdowns make it easy to see your choices at a glance: blue for Defer, amber for Async.<\/p>\n\n<h4>Protected Scripts<\/h4>\n\n<p>jQuery Core and jQuery Migrate are automatically locked and cannot be deferred or async'd. Deferring jQuery breaks the majority of WordPress sites, so the plugin prevents you from making that mistake. Protected scripts show a lock icon and their dropdowns are disabled.<\/p>\n\n<h4>Smart Script Classification<\/h4>\n\n<p>Every script is tagged with a visual badge:<\/p>\n\n<ul>\n<li>\ud83d\udd12 <strong>Protected<\/strong> \u2014 jQuery core \/ jQuery Migrate \u2014 locked, cannot be modified<\/li>\n<li><strong>WP<\/strong> (blue) \u2014 Registered via wp_enqueue_script() \u2014 fully controllable with Defer, Async, or None<\/li>\n<li><strong>EXT<\/strong> (amber) \u2014 Hardcoded or external scripts \u2014 shown for visibility only (must be modified at source)<\/li>\n<\/ul>\n\n<h4>Filter Tabs &amp; Live Search<\/h4>\n\n<p>Filter the script table by category:<\/p>\n\n<ul>\n<li><strong>All<\/strong> \u2014 every script found<\/li>\n<li><strong>Controllable<\/strong> \u2014 WP-enqueued scripts you can modify<\/li>\n<li><strong>External<\/strong> \u2014 hardcoded\/third-party scripts (display only)<\/li>\n<li><strong>Protected<\/strong> \u2014 locked scripts (jQuery)<\/li>\n<li><strong>Inner-Page Only<\/strong> \u2014 scripts not found on the homepage (appears after a full site crawl)<\/li>\n<\/ul>\n\n<p>Type in the search box to instantly filter by handle name or source URL. Filters and search work together.<\/p>\n\n<h4>Stats Dashboard<\/h4>\n\n<p>A real-time stats bar shows total scripts, controllable count, deferred count, async count, external count, and pages scanned (after a full crawl). Stats update automatically when you change strategies.<\/p>\n\n<h4>Bulk Actions<\/h4>\n\n<ul>\n<li><strong>Defer All<\/strong> \u2014 sets every controllable script to Defer in one click<\/li>\n<li><strong>Reset All<\/strong> \u2014 clears all strategies back to None<\/li>\n<li><strong>Save Settings<\/strong> \u2014 persists your choices to the database<\/li>\n<\/ul>\n\n<h4>Master Kill Switch<\/h4>\n\n<p>A prominent on\/off toggle at the top of the page. When active, the plugin modifies script tags on the front-end. When off, all scripts load normally \u2014 no changes are applied, no cache clearing needed, and your saved settings are preserved for when you turn it back on.<\/p>\n\n<h4>Built-in Strategy Reference<\/h4>\n\n<p>Detailed cards built right into the admin page explain exactly what each loading strategy does:<\/p>\n\n<ul>\n<li><strong>None (Default)<\/strong> \u2014 The browser downloads and runs the script immediately, pausing HTML parsing. Required for jQuery and scripts that must run before the page renders.<\/li>\n<li><strong>Defer (Recommended)<\/strong> \u2014 The browser downloads in parallel with HTML parsing, then executes after the document is fully parsed. Maintains execution order among deferred scripts. Best for most scripts.<\/li>\n<li><strong>Async<\/strong> \u2014 The browser downloads in parallel, then executes as soon as the download is complete \u2014 regardless of HTML parsing state. Execution order is not guaranteed. Best only for fully independent scripts like analytics and tracking pixels.<\/li>\n<\/ul>\n\n<p>Each card includes detailed \"When to use\", \"Impact\", and \"Caution\" guidance.<\/p>\n\n<h4>Modern Admin UI<\/h4>\n\n<p>A completely custom-built interface with CSS custom properties for consistent theming, color-coded dropdowns, change highlighting (modified rows turn amber until saved), responsive layout for all screen sizes, animated progress bar during crawls, and hover-to-expand source URLs in the table.<\/p>\n\n<h4>Zero Bloat<\/h4>\n\n<p>No external API calls. No tracking or analytics. No ads, banners, or upsells. No additional database tables. All settings are stored in a single wp_options row.<\/p>\n\n<h4>Who Is This For?<\/h4>\n\n<ul>\n<li><strong>WordPress developers<\/strong> who want granular script control without writing code<\/li>\n<li><strong>Site owners<\/strong> looking to improve Core Web Vitals and page speed scores<\/li>\n<li><strong>Agencies<\/strong> managing multiple client sites that need per-site optimization<\/li>\n<li><strong>Anyone<\/strong> tired of blindly deferring scripts and breaking things<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>site-scripts-speed-manager<\/code> folder to <code>\/wp-content\/plugins\/<\/code><\/li>\n<li>Activate the plugin through the 'Plugins' menu in WordPress<\/li>\n<li>Go to <strong>Scripts &amp; Speed<\/strong> in the admin sidebar (speedometer icon)<\/li>\n<li>Click <strong>Crawl Entire Site<\/strong> or enter a URL and click <strong>Scan Page<\/strong><\/li>\n<li>Choose Defer, Async, or None for each script<\/li>\n<li>Click <strong>Save Settings<\/strong><\/li>\n<li>Turn on the <strong>Master Switch<\/strong> to activate<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"will%20this%20break%20my%20site%3F\"><h3>Will this break my site?<\/h3><\/dt>\n<dd><p>The plugin has multiple safety features:<\/p>\n\n<ul>\n<li>jQuery and jQuery Migrate are <strong>protected by default<\/strong> \u2014 they cannot be deferred or async'd<\/li>\n<li>The <strong>master kill switch<\/strong> lets you instantly disable all modifications without losing settings<\/li>\n<li>The switch takes effect immediately \u2014 <strong>no cache clearing needed<\/strong><\/li>\n<li>If a single script causes issues, you can change just that one script instead of disabling everything<\/li>\n<\/ul><\/dd>\n<dt id=\"can%20i%20scan%20multiple%20pages%3F\"><h3>Can I scan multiple pages?<\/h3><\/dt>\n<dd><p>Yes, in two ways:<\/p>\n\n<ol>\n<li><strong>Crawl Entire Site<\/strong> \u2014 automatically discovers and scans up to 65 URLs (pages, posts, categories) and merges all results<\/li>\n<li><strong>Scan Page<\/strong> \u2014 scan individual URLs one at a time; results merge with any previous scan<\/li>\n<\/ol>\n\n<p>After a crawl, each script shows how many pages it appears on, and scripts unique to inner pages are flagged.<\/p><\/dd>\n<dt id=\"can%20i%20use%20this%20with%20caching%20plugins%3F\"><h3>Can I use this with caching plugins?<\/h3><\/dt>\n<dd><p>Yes. This plugin modifies script tags at the WordPress level via the <code>script_loader_tag<\/code> filter, which runs before any page caching. It works alongside WP Rocket, W3 Total Cache, LiteSpeed Cache, Breeze, and all other caching solutions.<\/p><\/dd>\n<dt id=\"what%20about%20scripts%20added%20by%20page%20builders%3F\"><h3>What about scripts added by page builders?<\/h3><\/dt>\n<dd><p>Scripts enqueued via <code>wp_enqueue_script()<\/code> (the WordPress way) are fully controllable. Hardcoded scripts injected directly into templates are shown in the scan results but marked as \"EXT\" (External) \u2014 they need to be modified at their source (the theme or plugin that adds them).<\/p><\/dd>\n<dt id=\"does%20this%20phone%20home%20or%20track%20anything%3F\"><h3>Does this phone home or track anything?<\/h3><\/dt>\n<dd><p>No. Zero external calls, zero tracking, zero analytics. The scanner fetches pages from your own server using <code>wp_remote_get()<\/code>. All data stays on your site.<\/p><\/dd>\n<dt id=\"how%20is%20this%20different%20from%20wp%20rocket%20or%20autoptimize%3F\"><h3>How is this different from WP Rocket or Autoptimize?<\/h3><\/dt>\n<dd><p>Those plugins offer blanket defer\/async options with a textarea for exclusions. You defer everything, then add exclusions when things break. This plugin lets you <strong>see every script first<\/strong> and make informed decisions per-script before anything changes. You also get per-page tracking, so you know exactly which scripts load where.<\/p><\/dd>\n<dt id=\"what%20does%20the%20%22inner-page%20only%22%20badge%20mean%3F\"><h3>What does the \"Inner-Page Only\" badge mean?<\/h3><\/dt>\n<dd><p>After a full site crawl, scripts that appear on inner pages but NOT on the homepage get this badge. These are typically scripts loaded by plugins that only run on specific pages \u2014 like WooCommerce on shop\/cart pages, or a contact form plugin on your contact page. This helps you identify scripts you might safely defer without affecting your homepage loading speed.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20i%20uninstall%20the%20plugin%3F\"><h3>What happens when I uninstall the plugin?<\/h3><\/dt>\n<dd><p>All plugin data is removed from the database on uninstall, including on multisite installations. No orphaned data is left behind.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.3.0<\/h4>\n\n<ul>\n<li><strong>Full site crawl<\/strong> \u2014 discover scripts across your entire site with one click (pages, posts, categories)<\/li>\n<li><strong>Per-page script tracking<\/strong> \u2014 see how many pages each script appears on with hover tooltip<\/li>\n<li><strong>Inner-page-only detection<\/strong> \u2014 badge highlights scripts not found on the homepage<\/li>\n<li><strong>Inner-Page Only filter tab<\/strong> \u2014 quickly filter to scripts unique to inner pages<\/li>\n<li><strong>Expanded strategy definitions<\/strong> \u2014 detailed \"When to use\", \"Impact\", and \"Caution\" for each strategy<\/li>\n<li><strong>Crawl progress bar<\/strong> \u2014 animated progress indicator during site crawls<\/li>\n<li><strong>Pages Scanned stat<\/strong> \u2014 stats bar shows crawl coverage<\/li>\n<li>Plugin Check compliance \u2014 inline nonce verification, sanitized inputs, wp_parse_url()<\/li>\n<\/ul>\n\n<h4>2.2.0<\/h4>\n\n<ul>\n<li>Complete UI\/UX redesign with modern card layout and CSS custom properties<\/li>\n<li>Color-coded strategy dropdowns with change highlighting<\/li>\n<li>Live search and filter tabs (All, Controllable, External, Protected)<\/li>\n<li>Stats dashboard with real-time counters<\/li>\n<li>Branding footer with Think Above AI<\/li>\n<li>Moved to top-level admin menu with speedometer icon<\/li>\n<\/ul>\n\n<h4>2.1.1<\/h4>\n\n<ul>\n<li>Initial public release<\/li>\n<li>Visual script discovery via URL scanning<\/li>\n<li>Per-script defer\/async\/none controls<\/li>\n<li>Protected scripts (jQuery core, jQuery Migrate)<\/li>\n<li>Multi-page scan merging<\/li>\n<li>Bulk actions (Defer All, Reset All)<\/li>\n<li>Master on\/off kill switch<\/li>\n<li>Native WordPress admin UI<\/li>\n<li>Clean uninstall support<\/li>\n<\/ul>","raw_excerpt":"See every JavaScript file on your WordPress site. Control how each one loads. Speed up your pages without breaking anything.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/vi.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/290167","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vi.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/vi.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/vi.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=290167"}],"author":[{"embeddable":true,"href":"https:\/\/vi.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/ithinkabove"}],"wp:attachment":[{"href":"https:\/\/vi.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=290167"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/vi.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=290167"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/vi.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=290167"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/vi.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=290167"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/vi.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=290167"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/vi.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=290167"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}