PluginProbe
Autoptimize / 3.1.16
Autoptimize v3.1.16
3.1.16 2.2.2 2.3.0 2.3.1 2.3.2 2.3.3 2.3.4 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.5.0 2.5.1 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.7.6 2.7.7 All 108 releases
← All changes | readme.txt +224 -361 2.3.4 → 3.1.16 View file →
@@ -1,22 +1,27 @@
1 1 === Autoptimize ===
2 -Contributors: futtta, optimizingmatters, turl
3 -Tags: optimize, minify, performance, pagespeed, async
2 +Contributors: futtta, optimizingmatters, zytzagoo, turl
3 +Tags: optimize, performance, images, core web vitals, pagespeed
4 4 Donate link: http://blog.futtta.be/2013/10/21/do-not-donate-to-me/
5 -Requires at least: 4.0
6 -Tested up to: 4.9
7 -Stable tag: 2.3.4
5 +License: GPLv3
6 +License URI: [https://www.gnu.org/licenses/gpl-3.0.html](https://www.gnu.org/licenses/gpl-3.0.html)
7 +Requires at least: 5.3
8 +Tested up to: 7.1
9 +Requires PHP: 7.4
10 +Stable tag: 3.1.16
8 11
9 -Autoptimize speeds up your website by optimizing JS, CSS and HTML, async-ing JavaScript, removing emoji cruft, optimizing Google Fonts and more.
12 +Autoptimize speeds up your website by optimizing JS, CSS, images (incl. lazy-load), HTML and Google Fonts, asyncing JS, removing emoji cruft and more.
10 13
11 14 == Description ==
12 15
13 -Autoptimize makes optimizing your site really easy. It can aggregate, minify and cache scripts and styles, injects CSS in the page head by default (but can also defer), moves and defers scripts to the footer and minifies HTML. The "Extra" options allow you to async non-aggregated JavaScript, remove WordPress core emoji cruft, optimize Google Fonts and more. As such it can improve your site's performance even when already on HTTP/2! There is extensive API available to enable you to tailor Autoptimize to each and every site's specific needs.
16 +Autoptimize makes optimizing your site really easy. It can aggregate, minify and cache scripts and styles, injects CSS in the page head by default but can also inline critical CSS and defer the aggregated full CSS, moves and defers scripts to the footer and minifies HTML. You can optimize and lazy-load images (with support for WebP and AVIF formats), optimize Google Fonts, async non-aggregated JavaScript, remove WordPress core emoji cruft and more. As such it can improve your site's performance even when already on HTTP/2! There is extensive API available to enable you to tailor Autoptimize to each and every site's specific needs.
17 +If you think performance indeed is important, you should at least consider one of the many free page caching plugins (e.g. [Speed Booster pack](https://wordpress.org/plugins/speed-booster-pack/) or [KeyCDN's Cache Enabler](https://wordpress.org/plugins/cache-enabler)) to complement Autoptimize or even [consider Autoptimize Pro](https://misc.optimizingmatters.com/partners/?from=partnertab&partner=aopro) which not only has page caching but also image optimization, CDN, critical CSS and more!
14 18
15 -If you consider performance important, you really should use one of the many caching plugins to do page caching. Some good candidates to complement Autoptimize that way are e.g. [WP Super Cache](http://wordpress.org/plugins/wp-super-cache/), [HyperCache](http://wordpress.org/plugins/hyper-cache/), [Comet Cache](https://wordpress.org/plugins/comet-cache/) or [KeyCDN's Cache Enabler](https://wordpress.org/plugins/cache-enabler).
19 +> <strong>Autoptimize Pro</strong><br>
20 +> [Autoptimize Pro is a premium Power-Up](https://misc.optimizingmatters.com/partners/?from=partnertab&partner=aopro), adding image optimization, CDN, page caching, automatic critical CSS rules and extra “booster” options, all in one handy subscription to [make your site even faster!](https://misc.optimizingmatters.com/partners/?from=partnertab&partner=aopro)!
16 21
17 22 > <strong>Premium Support</strong><br>
18 -> We provide great [Autoptimize Pro Support and Web Performance Optimization services](http://autoptimize.com/), check out our offering on (http://autoptimize.com/)!
23 +> We provide great [Premium Support and Web Performance Optimization services](https://misc.optimizingmatters.com/partners/?from=partnertab&partner=autoptimizepro) with Accelera, check out our offering on [https://accelerawp.com/](https://misc.optimizingmatters.com/partners/?from=partnertab&partner=autoptimizepro)!
19 24
20 25 (Speed-surfing image under creative commons [by LL Twistiti](https://www.flickr.com/photos/twistiti/818552808/))
21 26
22 27 == Installation ==
@@ -30,25 +35,25 @@
30 35 == Frequently Asked Questions ==
31 36
32 37 = What does the plugin do to help speed up my site? =
33 38
34 -It concatenates all scripts and styles, minifies and compresses them, adds expires headers, caches them, and moves styles to the page head, and scripts (optionally) to the footer. It also minifies the HTML code itself, making your page really lightweight.
39 +It minifies all scripts and styles and configures your webserver to compresses them with good expires headers. JavaScript be default will be made non-render-blocking and CSS can be too by adding critical CSS. You can configure it to combine (aggregate) CSS & JS-files, in which case styles are moved to the page head, and scripts to the footer. It also minifies the HTML code and can also optimize images and Google Fonts, making your page really lightweight.
35 40
36 41 = But I'm on HTTP/2, so I don't need Autoptimize? =
37 42
38 -HTTP/2 is a great step forward for sure, reducing the impact of multiple requests from the same server significantly by using the same connection to perform several concurrent requests. That being said, [concatenation of CSS/ JS can still make a lot of sense](http://engineering.khanacademy.org/posts/js-packaging-http2.htm), as described in [this css-tricks.com article](https://css-tricks.com/http2-real-world-performance-test-analysis/) and this [blogpost from one of the Ebay engineers](http://calendar.perfplanet.com/2015/packaging-for-performance/). The conclusion; configure, test, reconfigure, retest, tweak and look what works best in your context. Maybe it's just HTTP/2, maybe it's HTTP/2 + aggregation and minification, maybe it's HTTP/2 + minification (which AO can do as well).
43 +HTTP/2 is a great step forward for sure, reducing the impact of multiple requests from the same server significantly by using the same connection to perform several concurrent requests and for that reason on new installations Autoptimize will not aggregate CSS and JS files any more. That being said, [concatenation of CSS/ JS can still make a lot of sense](http://engineering.khanacademy.org/posts/js-packaging-http2.htm), as described in [this css-tricks.com article](https://css-tricks.com/http2-real-world-performance-test-analysis/) and this [blogpost from one of the Ebay engineers](http://calendar.perfplanet.com/2015/packaging-for-performance/). The conclusion; configure, test, reconfigure, retest, tweak and look what works best in your context. Maybe it's just HTTP/2, maybe it's HTTP/2 + aggregation and minification, maybe it's HTTP/2 + minification (which AO can do as well, simply untick the "aggregate JS-files" and/ or "aggregate CSS-files" options). And Autoptimize can do a lot more then "just" optimizing your JS & CSS off course ;-)
39 44
40 45 = Will this work with my blog? =
41 46
42 -Although Autoptimize comes without any warranties, it will in general work flawlessly if you configure it correctly. See "Troubleshooting" below for info on how to configure in case of problems.
47 +Although Autoptimize comes without any warranties, it will in general work flawlessly if you configure it correctly. See "Troubleshooting" below for info on how to configure in case of problems. If you want you can [test Autoptimize on a new free dummy site, courtesy of tastewp.com](https://demo.tastewp.com/autoptimize).
43 48
44 -= Why is jquery.js not optimized =
49 += Why is jquery.min.js not optimized when aggregating JavaScript? =
45 50
46 -Starting from AO 2.1 WordPress core's jquery.js is not optimized for the simple reason a lot of popular plugins inject inline JS that is not aggregated either (due to possible cache size issues with unique code in inline JS) which relies on jquery being available, so excluding jquery.js ensures that most sites will work out of the box. If you want optimize jquery as well, you can remove it from the JS optimization exclusion-list (you might have to enable "also aggregate inline JS" as well or switch to "force JS in head").
51 +Starting from AO 2.1 WordPress core's jquery.min.js is not optimized for the simple reason a lot of popular plugins inject inline JS that is not aggregated either (due to possible cache size issues with unique code in inline JS) which relies on jquery being available, so excluding jquery.min.js ensures that most sites will work out of the box. If you want optimize jquery as well, you can remove it from the JS optimization exclusion-list (you might have to enable "also aggregate inline JS" as well or switch to "force JS in head").
47 52
48 53 = Why is Autoptimized JS render blocking? =
49 54
50 -If not "forced in head", Autoptimized JS is not render blocking as it has the "defer" flag added. It is however possible another plugin removes the "defer"-flag. Speed Booster Pack was reported doing this, but [the behavior has not been confirmed yet](https://wordpress.org/support/topic/speed-booster-pack-autoptimized-js-defer-flag/).
55 +This happens when aggregating JavaSCript and ticking the "force in head" option or when not aggregating and not deferring. Consider changing settings.
51 56
52 57 = Why is the autoptimized CSS still called out as render blocking? =
53 58
54 59 With the default Autoptimize configuration the CSS is linked in the head, which is a safe default but has Google PageSpeed Insights complaining. You can look into "inline all CSS" (easy) or "inline and defer CSS" (better) which are explained in this FAQ as well.
@@ -62,18 +67,10 @@
62 67 There's no easy solution for that as "above the fold" depends on where the fold is, which in turn depends on screensize. There are some tools available however, which try to identify just what is "above the fold". [This list of tools](https://github.com/addyosmani/above-the-fold-css-tools) is a great starting point. The [Sitelocity critical CSS generator](https://www.sitelocity.com/critical-path-css-generator) and [Jonas Ohlsson's criticalpathcssgenerator](http://jonassebastianohlsson.com/criticalpathcssgenerator/) are nice basic solutions and [http://criticalcss.com/](http://misc.optimizingmatters.com/partners/?from=faq&amp;partner=critcss) is a premium solution by the same Jonas Ohlsson. Alternatively [this bookmarklet](https://gist.github.com/PaulKinlan/6284142) (Chrome-only) can be helpful as well.
63 68
64 69 = Or should you inline all CSS? =
65 70
66 -The short answer: probably not.
71 +The short answer: probably not. Although inlining all CSS will make the CSS non-render blocking, it will result in your base HTML-page getting significantly bigger thus requiring more "roundtrip times". Moreover when considering multiple pages being requested in a browsing session the inline CSS is sent over each time, whereas when not inlined it would be served from cache. Finally the inlined CSS will push the meta-tags in the HTML down to a position where Facebook or Whatsapp might not look for it any more, breaking e.g. thumbnails when sharing on these platforms.
67 72
68 -Back in the days CSS optimization was easy; put all CSS in your head, aggregating everything in one CSS-file per media-type and you were good to go. But ever since Google included mobile in PageSpeed Insights and started complaining about render blocking CSS, things got messy (see "deferring CSS" elsewhere in this FAQ). One of the solutions is inlining all your CSS, which as of Autoptimize 1.8.0 is supported.
69 -
70 -Inlining all CSS has one clear advantage (better PageSpeed score) and one big disadvantage; your base HTML-page gets significantly bigger and if the amount of CSS is big, Pagespeed Insights will complain of "roundtrip times". Also when looking at a test that includes multiple requests (let's say 5 pages), performance will be worse, as the CSS-payload is sent over again and again whereas normally the separate CSS-files would not need to be sent any more as they would be in cache.
71 -
72 -So the choice should be based on your answer to some site-specific questions; how much CSS do you have? How many pages per visit do your visitors request? If you have a lot of CSS or a high number of pages/ visit, it's probably not a good idea to inline all CSS.
73 -
74 -You can find more information on this topic [in this blog post](http://blog.futtta.be/2014/02/13/should-you-inline-or-defer-blocking-css/).
75 -
76 73 = My cache is getting huge, doesn't Autoptimize purge the cache? =
77 74
78 75 Autoptimize does not have its proper cache purging mechanism, as this could remove optimized CSS/JS which is still referred to in other caches, which would break your site. Moreover a fast growing cache is an indication of [other problems you should avoid](http://blog.futtta.be/2016/09/15/autoptimize-cache-size-the-canary-in-the-coal-mine/).
79 76
@@ -89,8 +86,12 @@
89 86 When clicking the "Delete Cache" link in the Autoptimize dropdown in the admin toolbar, you might to get a "Your cache might not have been purged successfully". In that case go to Autoptimizes setting page and click the "Save changes & clear cache"-button.
90 87
91 88 Moreover don't worry if your cache never is down to 0 files/ 0KB, as Autoptimize (as from version 2.2) will automatically preload the cache immediately after it has been cleared to speed further minification significantly up.
92 89
90 += My site looks broken when I purge Autoptimize's cache! =
91 +
92 +When clearing AO's cache, no page cache should contain pages (HTML) that refers to the removed optimized CSS/ JS. Although for that purpose there is integration between Autoptimize and some page caches, this integration does not cover 100% of setups so you might need to purge your page cache manually.
93 +
93 94 = Can I still use Cloudflare's Rocket Loader? =
94 95
95 96 Cloudflare Rocket Loader is a pretty advanced but invasive way to make JavaScript non-render-blocking, which [Cloudflare still considers Beta](https://wordpress.org/support/topic/rocket-loader-breaking-onload-js-on-linked-css/#post-9263738). Sometimes Autoptimize & Rocket Loader work together, sometimes they don't. The best approach is to disable Rocket Loader, configure Autoptimize and re-enable Rocket Loader (if you think it can help) after that and test if everything still works.
96 97
@@ -97,9 +98,9 @@
97 98 At the moment (June 2017) it seems RocketLoader might break AO's "inline & defer CSS", which is based on [Filamentgroup’s loadCSS](https://github.com/filamentgroup/loadCSS), resulting in the deferred CSS not loading.
98 99
99 100 = I tried Autoptimize but my Google Pagespeed Scored barely improved =
100 101
101 -Autoptimize is not a simple "fix my Pagespeed-problems" plugin; it "only" aggregates & minifies (local) JS & CSS and allows for some nice extra's as removing Google Fonts and deferring the loading of the CSS. As such Autoptimize will allow you to improve your performance (load time measured in seconds) and will probably also help you tackle some specific Pagespeed warnings. If you want to improve further, you will probably also have to look into e.g. page caching, image optimization and your webserver configuration, which will improve real performance (again, load time as measured by e.g. https://webpagetest.org) and your "performance best practise" pagespeed ratings.
102 +Autoptimize is not a simple "fix my Pagespeed-problems" plugin; it "only" aggregates & minifies (local) JS & CSS and images and allows for some nice extra's as removing Google Fonts and deferring the loading of the CSS. As such Autoptimize will allow you to improve your performance (load time measured in seconds) and will probably also help you tackle some specific Pagespeed warnings. If you want to improve further, you will probably also have to look into e.g. page caching and your webserver configuration, which will improve real performance (again, load time as measured by e.g. https://webpagetest.org) and your "performance best practice" pagespeed ratings.
102 103
103 104 = What can I do with the API? =
104 105
105 106 A whole lot; there are filters you can use to conditionally disable Autoptimize per request, to change the CSS- and JS-excludes, to change the limit for CSS background-images to be inlined in the CSS, to define what JS-files are moved behind the aggregated one, to change the defer-attribute on the aggregated JS script-tag, ... There are examples for some filters in autoptimize_helper.php_example and in this FAQ.
@@ -113,9 +114,9 @@
113 114 = Why aren't my fonts put on the CDN as well? =
114 115
115 116 Autoptimize supports this, but it is not enabled by default because [non-local fonts might require some extra configuration](http://davidwalsh.name/cdn-fonts). But if you have your cross-origin request policy in order, you can tell Autoptimize to put your fonts on the CDN by hooking into the API, setting `autoptimize_filter_css_fonts_cdn` to `true` this way;
116 117
117 -`add_filter('autoptimize_filter_css_fonts_cdn',__return_true);`
118 +`add_filter( 'autoptimize_filter_css_fonts_cdn', '__return_true' );`
118 119
119 120 = I'm using Cloudflare, what should I enter as CDN root directory =
120 121
121 122 Nothing, when on Cloudflare your autoptimized CSS/ JS is on the Cloudflare's CDN automatically.
@@ -131,34 +132,29 @@
131 132 * if you want to exclude a specific file, e.g. wp-content/plugins/funkyplugin/css/style.css, you could simply exclude "funkyplugin/css/style.css"
132 133 * if you want to exclude all files of a specific plugin, e.g. wp-content/plugins/funkyplugin/js/*, you can exclude for example "funkyplugin/js/" or "plugins/funkyplugin"
133 134 * if you want to exclude inline code, you'll have to find a specific, unique string in that block of code and add that to the exclusion list. Example: to exclude `<script>funky_data='Won\'t you take me to, Funky Town'</script>`, the identifier is "funky_data".
134 135
135 -= Configuring & Troubleshooting Autoptimize =
136 += Troubleshooting Autoptimize =
136 137
137 -After having installed and activated the plugin, you'll have access to an admin page where you can to enable HTML, CSS and JavaScript optimization. According to your liking, you can start of just enabling all of them, or if you're more cautious one at a time.
138 +Have a look at the troubleshooitng instructions at https://blog.futtta.be/2022/05/05/what-to-do-when-autoptimize-breaks-your-site/
138 139
139 -If your blog doesn't function normally after having turned on Autoptimize, here are some pointers to identify & solve such issues using "advanced settings":
140 += I excluded files but they are still being autoptimized? =
140 141
141 -* If all works but you notice your blog is slower, ensure you have a page caching plugin installed (WP Super Cache or similar) and check the info on cache size (the solution for that problem also impacts performance for uncached pages) in this FAQ as well.
142 -* In case your blog looks weird, i.e. when the layout gets messed up, there is problem with CSS optimization. In this case you can turn on the option "Look for styles on just head?" and see if that solves the problem. You can also force CSS not to be aggregated by wrapping it in noptimize-tags in your theme or widget or by adding filename (for external stylesheets) or string (for inline styles) to the exclude-list.
143 -* In case some functionality on your site stops working (a carroussel, a menu, the search input, ...) you're likely hitting JavaScript optimization trouble. Change the "Aggregate inline JS" and/ or "Force JavaScript in head?" settings and try again. Excluding 'js/jquery/jquery.js' from optimization (see below) and optionally activating "[Add try/catch wrapping](http://blog.futtta.be/2014/08/18/when-should-you-trycatch-javascript/)") can also help. Alternatively -for the technically savvy- you can exclude specific scripts from being treated (moved and/ or aggregated) by Autoptimize by adding a string that will match the offending Javascript or excluding it from within your template files or widgets by wrapping the code between noptimize-tags. Identifying the offending JavaScript and choosing the correct exclusion-string can be trial and error, but in the majority of cases JavaScript optimization issues can be solved this way. When debugging JavaScript issues, your browsers error console is the most important tool to help you understand what is going on.
144 -* If your theme or plugin require jQuery, you can try either forcing all in head and/ or excluding jquery.js (and jQuery-plugins if needed).
145 -* If you can't get either CSS or JS optimization working, you can off course always continue using the other two optimization-techniques.
146 -* If you tried the troubleshooting tips above and you still can't get CSS and JS working at all, you can ask for support on the [WordPress Autoptimize support forum](http://wordpress.org/support/plugin/autoptimize). See below for a description of what information you should provide in your "trouble ticket"
142 +AO minifies excluded JS/ CSS if the filename indicates the file is not minified yet. As of AO 2.5 you can disable this on the "JS, CSS & HTML"-tab under misc. options by unticking "minify excluded files".
147 143
148 144 = Help, I have a blank page or an internal server error after enabling Autoptimize!! =
149 145
150 -First of all make sure you're not running other HTML, CSS or JS minification plugins (BWP minify, WP minify, ...) simultaneously with Autoptimize or disable that functionality your page caching plugin (W3 Total Cache, WP Fastest Cache, ...).
146 +Make sure you're not running other HTML, CSS or JS minification plugins (BWP minify, WP minify, ...) simultaneously with Autoptimize or disable that functionality your page caching plugin (W3 Total Cache, WP Fastest Cache, ...). Try enabling only CSS or only JS optimization to see which one causes the server error and follow the generic troubleshooting steps to find a workaround.
151 147
152 -In some rare cases the [CSS minification component](https://github.com/tubalmartin/YUI-CSS-compressor-PHP-port/) currently used by Autoptimize crashes due to a lack of resources (see [detailed technical explanation here](http://blog.futtta.be/2014/01/14/irregular-expressions-have-your-stack-for-lunch/)). You can in that case either disable CSS optimization, try to exclude specific CSS from being aggregated or activate the legacy minifiers which don't have that problem. The latter can be accomplished by adding this to your wp-config.php:
148 += But I still have blank autoptimized CSS or JS-files! =
153 149
154 -`define("AUTOPTIMIZE_LEGACY_MINIFIERS","true");`
150 +If you are running Apache, the .htaccess file written by Autoptimize can in some cases conflict with the AllowOverrides settings of your Apache configuration (as is the case with the default configuration of some Ubuntu installations), which results in "internal server errors" on the autoptimize CSS- and JS-files. This can be solved by [setting AllowOverrides to All](http://httpd.apache.org/docs/2.4/mod/core.html#allowoverride).
155 151
156 -The "legacy minifiers" will remain in Autoptimize "for ever" and changes to wp-config.php are not affected by core-, theme- or plugin-upgrades so you should be good to go.
152 += Can't log in on domain mapped multisites =
157 153
158 -= But I still have blank autoptimized CSS or JS-files! =
154 +Domain mapped multisites require Autoptimize to be initialized at a different WordPress action, add this line of code to your wp-config.php to make it so to hook into `setup_theme` for example:
159 155
160 -If you are running Apache, the htaccess file written by Autoptimize can in some cases conflict with the AllowOverrides settings of your Apache configuration (as is the case with the default configuration of some Ubuntu installations), which results in "internal server errors" on the autoptimize CSS- and JS-files. This can be solved by [setting AllowOverrides to All](http://httpd.apache.org/docs/2.4/mod/core.html#allowoverride).
156 +`define( 'AUTOPTIMIZE_SETUP_INITHOOK', 'setup_theme' );`
161 157
162 158 = I get no error, but my pages are not optimized at all? =
163 159
164 160 Autoptimize does a number of checks before actually optimizing. When one of the following is true, your pages won't be optimized:
@@ -182,13 +178,13 @@
182 178 Disable the option to optimize cart/ checkout pages (works for WooCommerce, Easy Digital Downloads and WP eCommerce).
183 179
184 180 = Revolution Slider is broken! =
185 181
186 -Make sure `js/jquery/jquery.js` is in the comma-separated list of JS optimization exclusions (this is excluded in the default configuration).
182 +Make sure `js/jquery/jquery.min.js` is in the comma-separated list of JS optimization exclusions (this is excluded in the default configuration).
187 183
188 184 = I'm getting "jQuery is not defined" errors =
189 185
190 -In that case you have un-aggregated JavaScript that requires jQuery to be loaded, so you'll have to add `js/jquery/jquery.js` to the comma-separated list of JS optimization exclusions.
186 +In that case you have un-aggregated JavaScript that requires jQuery to be loaded, so you'll have to add `js/jquery/jquery.min.js` to the comma-separated list of JS optimization exclusions.
191 187
192 188 = I use NextGen Galleries and a lot of JS is not aggregated/ minified? =
193 189
194 190 NextGen Galleries does some nifty stuff to add JavaScript. In order for Autoptimize to be able to aggregate that, you can either disable Nextgen Gallery's resourced manage with this code snippet `add_filter( 'run_ngg_resource_manager', '__return_false' );` or you can tell Autoptimize to initialize earlier, by adding this to your wp-config.php: `define("AUTOPTIMIZE_INIT_EARLIER","true");`
@@ -195,32 +191,35 @@
195 191
196 192 = What is noptimize? =
197 193
198 194 Starting with version 1.6.6 Autoptimize excludes everything inside noptimize tags, e.g.:
195 +`&lt;!&#45;&#45;noptimize&#45;&#45;>&lt;script>alert('this will not get autoptimized');&lt;/script>&lt;!&#45;&#45;/noptimize&#45;&#45;>`
199 196
200 - <!--noptimize--><script>alert('this will not get autoptimized')></script><!--/noptimize-->
201 -
202 197 You can do this in your page/ post content, in widgets and in your theme files (consider creating [a child theme](http://codex.wordpress.org/Child_Themes) to avoid your work being overwritten by theme updates).
203 198
204 199 = Can I change the directory & filename of cached autoptimize files? =
205 200
206 -Yes, if you want to serve files from e.g. /wp-content/resources/aggregated_12345.css instead of the default /wp-content/cache/autoptimize/autoptimize_12345.css, then add this to wp-config.php:
201 +Yes, if you want to serve files from e.g. /wp-content/resources/aggregated_12345.css instead of the default /wp-content/cache/autoptimize/autoptimize_12345.css, then add this to wp-config.php:
207 202 `
208 203 define('AUTOPTIMIZE_CACHE_CHILD_DIR','/resources/');
209 204 define('AUTOPTIMIZE_CACHEFILE_PREFIX','aggregated_');
210 205 `
211 206
207 += Does this work with non-default WP_CONTENT_URL ? =
208 +
209 +No, Autoptimize does not support a non-default WP_CONTENT_URL out-of-the-box, but this can be accomplished with a couple of lines of code hooking into Autoptimize's API.
210 +
212 211 = Can the generated JS/ CSS be pre-gzipped? =
213 212
214 213 Yes, but this is off by default. You can enable this by passing ´true´ to ´autoptimize_filter_cache_create_static_gzip´. You'll obviously still have to configure your webserver to use these files instead of the non-gzipped ones to avoid the overhead of on-the-fly compression.
215 214
216 -= What does "remove emoji's" do? =
215 += What does "remove emojis" do? =
217 216
218 217 This new option in Autoptimize 2.3 removes the inline CSS, inline JS and linked JS-file added by WordPress core. As such is can have a small positive impact on your site's performance.
219 218
220 219 = Is "remove query strings" useful? =
221 220
222 -Although some online performance assessement tools will single out "query strings for static files" as an issue for performance, in general the impact of these is almost non-existant. As such Autoptimize, since version 2.3, allows you to have the query string (or more precisely the "ver"-parameter) removed, but ticking "remove query strings from static resources" will have little or no impact of on your site's performance as measured in (milli-)seconds.
221 +Although some online performance assessment tools will single out "query strings for static files" as an issue for performance, in general the impact of these is almost non-existant. As such Autoptimize, since version 2.3, allows you to have the query string (or more precisely the "ver"-parameter) removed, but ticking "remove query strings from static resources" will have little or no impact of on your site's performance as measured in (milli-)seconds.
223 222
224 223 = (How) should I optimize Google Fonts? =
225 224
226 225 Google Fonts are typically loaded by a "render blocking" linked CSS-file. If you have a theme and plugins that use Google Fonts, you might end up with multiple such CSS-files. Autoptimize (since version 2.3) now let's you lessen the impact of Google Fonts by either removing them alltogether or by optimizing the way they are loaded. There are two optimization-flavors; the first one is "combine and link", which replaces all requests for Google Fonts into one request, which will still be render-blocking but will allow the fonts to be loaded immediately (meaning you won't see fonts change while the page is loading). The alternative is "combine and load async" which uses JavaScript to load the fonts in a non-render blocking manner but which might cause a "flash of unstyled text".
@@ -230,376 +229,240 @@
230 229 Preconnect is a somewhat advanced feature to instruct browsers ([if they support it](https://caniuse.com/#feat=link-rel-preconnect)) to make a connection to specific domains even if the connection is not immediately needed. This can be used e.g. to lessen the impact of 3rd party resources on HTTPS (as DNS-request, TCP-connection and SSL/TLS negotiation are executed early). Use with care, as preconnecting to too many domains can be counter-productive.
231 230
232 231 = When can('t) I async JS? =
233 232
234 -JavaScript files that are not autoptimized (because they were excluded or because they are hosted elsewhere) are typically render-blocking. By adding them in the comma-separated "async JS" field, Autoptimize will add the async flag causing the browser to load those files asynchronously (i.e. non-render blocking). This can however break your site (page), e.g. if you async "js/jquery/jquery.js" you will very likely get "jQuery is not defined"-errors. Use with care.
233 +JavaScript files that are not autoptimized (because they were excluded or because they are hosted elsewhere) are typically render-blocking. By adding them in the comma-separated "async JS" field, Autoptimize will add the async flag causing the browser to load those files asynchronously (i.e. non-render blocking). This can however break your site (page), e.g. if you async "js/jquery/jquery.min.js" you will very likely get "jQuery is not defined"-errors. Use with care.
235 234
236 -= Where can I get help? =
235 += How does image optimization work? =
237 236
238 -You can get help on the [wordpress.org support forum](http://wordpress.org/support/plugin/autoptimize). If you are 100% sure this your problem cannot be solved using Autoptimize configuration and that you in fact discovered a bug in the code, you can [create an issue on GitHub](https://github.com/futtta/autoptimize/issues). If you're looking for premium support, check out our [Autoptimize Pro Support and Web Performance Optimization services](http://autoptimize.com/).
237 +When image optimization is on, Autoptimize will look for png, gif, jpeg (.jpg) files in image tags and in your CSS files that are loaded from your own domain and change the src (source) to the ShortPixel CDN for those. Important: this can only work for publicly available images, otherwise the image optimization proxy will not be able to get the image to optimize it, so firewalls or proxies or password protection or even hotlinking-prevention might break image optimization.
239 238
240 -= I want out, how should I remove Autoptimize? =
239 += Can I use image optimization for my intranet/ protected site? =
241 240
242 -* Disable the plugin (this will remove options and cache)
243 -* Remove the plugin
244 -* Clear any cache that might still have pages which reference Autoptimized CSS/JS (e.g. of a page caching plugin such as WP Super Cache)
241 +No; Image optimization depends on the ability of the external image optimization service to fetch the original image from your site, optimize it and save it on the CDN. If you images cannot be downloaded by anonymous visitors (due to firewall/ proxy/ password protection/ hotlinking-protection), image optimization will not work.
245 242
246 -= How can I help/ contribute? =
243 += Where can I get more info on image optimization? =
247 244
248 -Just [fork Autoptimize on Github](https://github.com/futtta/autoptimize) and code away!
245 +Have a look at [Shortpixel's FAQ](https://shortpixel.helpscoutdocs.com/category/60-shortpixel-ai-cdn).
249 246
250 -== Changelog ==
247 += Can I disable AO listening to page cache purges? =
251 248
252 -= 2.3.4 =
253 -* bugfix: is_plugin_active causing errors in some cases as [reported by @iluminancia and @lozula](https://wordpress.org/support/topic/fatal-error-after-update-to-2-3-3/)
254 -* bugfix: added language domain to 4 __/_e functions, un grand merci à Guillaume Blet!
249 +As from AO 2.4 AO "listens" to page cache purges to clear its own cache. You can disable this behavior with this filter;
255 250
256 -= 2.3.3 =
257 -* improvement: updated to latest version of Filamentgroup's loadCSS
258 -* improvement: by default exclude `wp-content/cache` and `wp-content/uploads` from CSS optimization (Divi, Avada & possibly others store page-specific CSS there)
259 -* bugfix: stop double try/catch-blocks
260 -* misc. bugfixes (see [GitHub commit log](https://github.com/futtta/autoptimize/commits/master))
261 -* heads-up: this is (supposed to be) the last minor release of the 2.3 branch, [2.4 is a major change with some big under-the-hood and functional changes](https://blog.futtta.be/2018/02/18/introducing-zytzagoos-major-changes-for-autoptimize-2-4/)
251 +`
252 +add_filter('autoptimize_filter_main_hookpagecachepurge','__return_false');`
262 253
263 -= 2.3.2 =
264 -* workaround for [stale options-data in external object cache such as Redis, Memcached (core bug)](https://core.trac.wordpress.org/ticket/31245) resulting in Autoptimize continuously executing the upgrade-procedure including clearing the cache and trying to preload it with HTTP-requests with "cachebuster" in the query string, thanks to [Haroon Q. Raja](https://hqraja.com/) and [Tomas Trkulja](https://twitter.com/zytzagoo) for their great assistance!
265 -* fixes for "undefined index" notices on Extra settings page
266 -* now removing respective dns-prefetch resource hints when "remove emojis" or when Google Fonts are optimized or removed.
267 -* changed JS code to load webfont.js deferred instead of asynced to make sure the js-file or fonts are not consider render blocking.
254 += Some of the non-ASCII characters get lost after optimization =
268 255
269 -= 2.3.1 =
270 -* fix for issue with update-code in some circumstances, thanks to [Rajendra Zore](https://rajendrazore.com/) to report & help fix!
256 +By default AO uses non multibyte-safe string methods, but if your PHP has the mbstring extension you can enable multibyte-safe string functions with this filter;
271 257
272 -= 2.3.0 =
273 -* new: optimize Google fonts with “combine & link” and “combine and load async” (with webload.js), intelligently preconnecting to Google’s domains to limit performance impact even further
274 -* new: Async JS, can be applied to local or 3rd party JS (if local it will be auto-excluded from autoptimization)
275 -* new: support to tell browsers to preconnect (= dns lookup + tcp/ip connection + ssl negotiation) to 3rd party domains (depends on browser support, works in Chrome & Firefox)
276 -* new: remove WordPress’ Core’s emoji CSS & JS
277 -* new: remove (version parameter from) Querystring
278 -* new: support to clear cache through WP CLI thanks to [junaidbhura](https://junaidbhura.com)
279 -* lots of [bugfixes and small improvements done by some seriously smart people via GitHub](https://github.com/futtta/autoptimize/commits/master) (thanks all!!), including [a fix for AO 2.2 which saw the HTML minifier go PacMan on spaces](https://github.com/futtta/autoptimize/commit/0f6ac683c35bc82d1ac2d496ae3b66bb53e49f88) in some circumstances.
258 +`
259 +add_filter('autoptimize_filter_main_use_mbstring', '__return_true');`
280 260
281 -= 2.2.2 =
282 -* roll-back to previous battle-tested version of the CSS minifier
283 -* tweaks to Autoptimize toolbar menu (visual + timeout of "delete cache" AJAX call)
284 -* readme update
261 += I can't get Critical CSS working =
285 262
286 -= 2.2.1 =
287 -* fix for images being referenced in CSS not all being translated to correct path, leading to 404’s as reported by Jeff Inho
288 -* fix for "[] operator not supported for strings" error in PHP7.1 as reported by falk-wussow.de
289 -* fix for security hash busting AO's cache in some cases (esp. in 2.1.1)
263 +Check [the FAQ on the (legacy) "power-up" here](https://wordpress.org/plugins/autoptimize-criticalcss/#faq), this info will be integrated in this FAQ at a later date.
290 264
291 -= 2.2.0 =
292 -* new: Autoptimize minifies first (caching the individual snippets) and aggregrates the minified snippets, resulting in huge performance improvements for uncached JS/ CSS.
293 -* new: option to enable/ disable AO for logged in users (on by default)
294 -* new: option to enable/ disable AO on WooCommerce, Easy Digital Downloads or WP eCommerce cart/ checkout page (on by default)
295 -* improvement: switched to [rel=preload + Filamentgroup’s loadCSS for CSS deferring](http://blog.futtta.be/2017/02/24/autoptimize-css-defer-switching-to-loadcss-soon/)
296 -* improvement: switched to YUI CSS minifier PHP-port 2.8.4-p10 (so not to the 3.x branch yet)
297 -* improvements to the logic of which JS/ CSS can be optimized (getPath function) increasing reliability of the aggregation process
298 -* security: made placeholder replacement less naive to protect against XSS and LFI vulnerability as reported by Matthew Barry and fixed with great help from Matthew and Tomas Trkulja. Thanks guys!!
299 -* API: Lots of extra filters, making AO (even) more flexible.
300 -* Lots of bugfixes and smaller improvements (see [GitHub commit log](https://github.com/futtta/autoptimize/commits/master))
301 -* tested and confirmed working in WordPress 4.8
265 += Do I still need the Critical CSS power-up when I have Autoptimize 2.7 or higher? =
302 266
303 -= 2.1.2 =
304 -* fix for security hash busting AO's cache in some cases (esp. in 2.1.1)
305 -* identical to 2.1.0 except for the security fix backported from 2.2.0
267 +No, the Critical CSS power-up is not needed any more, all functionality (and many fixes/ improvements) are now part of Autoptimize.
306 268
307 -= 2.1.1 =
308 -* identical to 2.1.0 except for the security fix backported from 2.2.0
269 += What does "enable 404 fallbacks" do? Why would I need this? =
309 270
310 -= 2.1.0 =
311 -* new: Autoptimize now appears in admin-toolbar with an easy view on cache size and the possibility to purge the cache (pass `false` to `autoptimize_filter_toolbar_show` filter to disable), a big thanks to [Pablo Custo](https://github.com/pablocusto) for his hard work on this nice feature!
312 -* new: An extra "More Optimization"-tab is shown (can be hidden with ´autoptimize_filter_show_partner_tabs´-filter) with information about related optimization tools- and services.
313 -* new: If cache size becomes too big, a mail will be sent to the site admin (pass `false` to `autoptimize_filter_cachecheck_sendmail` filter to disable or pass alternative email to the `autoptimize_filter_cachecheck_mailto` filter to change email-address)
314 -* new: power-users can enable Autoptimize to pre-gzip the autoptimized files by passing `true` to `autoptimize_filter_cache_create_static_gzip`, kudo's to (Draikin)[https://github.com/Draikin] for this!
315 -* improvement: admin GUI updated (again; thanks Pablo!) with some responsiveness added in the mix (not showing the right hand column on smaller screen-sizes)
316 -* improvement: settings-screen now accepts protocol-relative URL for CDN base URL
317 -* improvement: new (smarter) defaults for JS (don't force in head + exclude jquery.js) and CSS optimization (include inline CSS)
318 -* Misc. bugfixes & small improvements (see [commit-log on GitHub](https://github.com/futtta/autoptimize/commits/master))
319 -* Minimal version updated from 2.7 (!) to 4.0
320 -* Tested and confirmed working on WordPress 4.6
271 +Autoptimize caches aggregated & optimized CSS/ JS and links to those cached files are stored in the HTML, which will be stored in a page cache (which can be a plugin, can be at host level, can be at 3rd party, in the Google cache, in a browser). If there is HTML in a page cache that links to Autoptimized CSS/ JS that has been removed in the mean time (when the cache was cleared) then the page from cache will not look/ work as expected as the CSS or JS were not found (a 404 error).
321 272
322 -= 2.0.2 =
323 -* bugfix: disallow moving non-aggregated JS by default (can be re-enabled by passing false to the `autoptimize_filter_js_unmovable`)
324 -* bugfix: hook autoptimize_action_cachepurged into init to avoid ugly error-message for ZenCache (Comet Cache) users
325 -* bugfix to allow for Autoptimize to work with PHP 5.2 (although [you really should upgrade](http://blog.futtta.be/2016/03/15/why-would-you-still-be-on-php-5-2/))
273 +This setting aims to prevent things from breaking by serving "fallback" CSS or JS. The fallback-files are copies of the first Autoptimized CSS & JS files created after the cache was emptied and as such will based on the homepage. This means that the CSS/ JS migth not apply 100% on other pages, but at least the impact of missing CSS/ JS will be lessened (often significantly).
326 274
327 -= 2.0.1 =
328 -* Improvement: Autoptimize now also tries to purge WP Engine cache when AO's cache is cleared
329 -* Improvement: for AMP pages (which are pretty optimized anyway) Autoptimize will not optimize to avoid issues with e.g. "inline & defer" and with AO adding attributes to link-tags that are not allowed in the subset of HTML that AMP is
330 -* Improvement: refactored the page cache purging mechanism (removing duplicate code, now nicely hooking into AO's own `autoptimize_action_cachepurged` action)
331 -* Improvement: Re-enable functionality to move non-aggregated JS if "also aggregate inline JS" is active (can be disabled with `autoptimize_filter_js_unmovable` filter)
332 -* Improvement: script tags with `data-noptimize` attribute will be excluded from optimization
333 -* Bugfix: Better support for renamed wp-content directories
334 -* Bugfix: Multiple fixes for late-injected CSS/ JS (changes in those files were not always picked up, fonts or background images were not being CDN'ed, ...)
335 -* Misc. other fixes & improvements, go read [the commit-log on GitHub](https://github.com/futtta/autoptimize/commits/master) if you're that curious
336 -* Tested & confirmed working with WordPress 4.5 (beta 3)
275 +When the option is enabled, Autoptimize adds an `ErrorDocument 404` to the .htaccess (as used by Apache) and will also hook into WordPress core `template_redirect` to capture 404's handled by Wordpress. When using NGINX something like below should work (I'm not an NGINX specialist, but it does work for me);
337 276
338 -= 2.0.0 =
339 -* On average 30% faster minification (more info [in this blogpost](http://blog.futtta.be/2015/12/22/making-autoptimize-faster/))!
340 -* New: Option to (de-)activate aggregation of inline JS and CSS.
341 -* New: Option to remove Google Fonts.
342 -* New: Cache-size will be checked daily and a notice will be shown on wp-admin if cache size goes over 512 MB (can be changed by filter).
343 -* New: Small autoptimized CSS (less then 256 characters, can be changed by filter) will be inlined instead of linked.
344 -* New in API: filters to declare a JS and CSS whitelist, where only files in that whitelist are autoptimized and all others are left untouched.
345 -* New in API: filters to declare removable CSS and JS, upon which Autoptimize will simply delete that code (emoji CSS/JS for example, if you prefer not to dequeue them).
346 -* New in API: filter to move fonts to CDN as well.
347 -* lots of small and bigger bugfixes, I won't bother you with a full list but have a look at [the commmit log on GitHub](https://github.com/futtta/autoptimize/commits/master).
348 -* tested and confirmed working with PHP7
277 +`
278 +location ~* /wp-content/cache/autoptimize/.*\.(js|css)$ {
279 + try_files $uri $uri/ /wp-content/autoptimize_404_handler.php;
280 +}`
349 281
350 -= 1.9.4 =
351 -* bugfix: make sure non-AO CSSmin doesn't get fed 2 parameters (as some only expect one, which resulted in an internal server error), based on [feedback from zerooverture and zamba](https://wordpress.org/support/topic/error-code-500internal-server-error?replies=7)
352 -* bugfix: make default add_action hook back into "template_redirect" instead of "init" to fix multiple problems as reported by [schecteracademicservices, bond138, rickenbacker](https://wordpress.org/support/topic/192-concatenated-js-but-193-does-not-for-me?replies=11), [Rick Sportel](https://wordpress.org/support/topic/version-193-made-plugin-wp-cdn-rewrite-crash?replies=3#post-6833159) and [wizray](https://wordpress.org/support/topic/the-page-loads-both-the-auto-combined-css-file-and-origin-raw-file?replies=11#post-6833146). If you do need Autoptimize to initialize earlier (e.g. when using Nextgen Galleries), then add this to your wp-config.php:
353 -`define("AUTOPTIMIZE_INIT_EARLIER","true");`
282 +And this a nice alternative approach (provided by fboylovesyou);
354 283
355 -= 1.9.3 =
356 -* improvement: more intelligent CDN-replacement logic, thanks [Squazz for reporting and testing](https://wordpress.org/support/topic/enable-cdn-for-images-referenced-in-the-css?replies=9)
357 -* improvement: allow strings (comments) to be excluded from HTML-optimization (comment removal)
358 -* improvement: changed priority with which AO gets triggered by WordPress, solving JS not being aggregated when NextGen Galleries is active, with great [help from msebald](https://wordpress.org/support/topic/js-options-dont-work-if-html-disabled/)
359 -* improvement: extra JS exclude-strings: gist.github.com, text/html, text/template, wp-slimstat.min.js, _stq, nonce, post_id (the latter two were removed from the "manual" exclude list on the settings-page)
360 -* new in API: autoptimize_filter_html_exclude, autoptimize_filter_css_defer, autoptimize_filter_css_inline, autoptimize_filter_base_replace_cdn, autopitmize_filter_js_noptimize, autopitmize_filter_css_noptimize, autopitmize_filter_html_noptimize
361 -* bugfix: remove some PHP notices, as [reported by dimitrov.adrian](https://wordpress.org/support/topic/php-errors-39)
362 -* bugfix: make sure HTML-optimalization does not gobble a space before a cite [as proposed by ecdltf](https://wordpress.org/support/topic/%E2%80%9Coptimize-html%E2%80%9D-is-gobbling-whitespace-before-cite-tag)
363 -* bugfix: cleaning the cache did not work on non-default directories as [encountered by NoahJ Champion](https://wordpress.org/support/topic/changing-the-wp-content-path-to-top-level?replies=10#post-6573657)
364 -* upgraded to [yui compressor php port 2.4.8-4](https://github.com/tubalmartin/YUI-CSS-compressor-PHP-port)
365 -* added arabic translation, thanks to the [ekleel team](http://www.ekleel.net)
366 -* tested with WordPress 4.2 beta 3
284 +`location ~* /wp-content/cache/autoptimize/.*\.(css)$ {
285 + try_files $uri $uri/ /wp-content/cache/autoptimize/css/autoptimize_fallback.css;
286 +}
287 +location ~* /wp-content/cache/autoptimize/.*\.(js)$ {
288 + try_files $uri $uri/ /wp-content/cache/autoptimize/js/autoptimize_fallback.js;
289 +}`
367 290
368 -= 1.9.2 =
369 -First of all; Happy holidays, all the best for 2015!!
291 += What open source software/ projects are used in Autoptimize? =
370 292
371 -* New: support for alternative cache-directory and file-prefix as requested by a.o. [Jassi Bacha](https://wordpress.org/support/topic/requesthelp-add-ability-to-specify-cache-folder?replies=1#post-6300128), [Cluster666](https://wordpress.org/support/topic/rewrite-js-path?replies=6#post-6363535) and Baris Unver.
372 -* Improvement: hard-exclude all linked-data json objects (script type=application/ld+json)
373 -* Improvement: several filters added to the API, e.g. to alter optimized HTML, CSS or JS
374 -* Bugfix: set Autoptimize priority back from 11 to 2 (as previously) to avoid some pages not being optimized (thanks to [CaveatLector for investigating & reporting](https://wordpress.org/support/topic/wp-property-plugin-add_action-priority-incompatibility?replies=1))
375 -* Bugfix (in YUI-CSS-compressor-PHP-port): don't convert bools to percentages in rotate3D-transforms (cfr. [bugreport on Github](https://github.com/tubalmartin/YUI-CSS-compressor-PHP-port/issues/17))
376 -* Bugfix: background images with a space in the path didn't load, [reported by johnh10](https://wordpress.org/support/topic/optimize-css-code-error-with-background-image-elements?replies=6#post-6201582).
377 -* Bugfix: SVG image with fill:url broken after CSS optimization as [reported by Tkama](https://wordpress.org/support/topic/one-more-broblem-with-plugin?replies=2)
378 -* Updated translation for Swedish, new translation for Ukrainian by [Zanatoly of SebWeo.com](http://SebWeo.com)
379 -* Updated readme.txt
380 -* Confirmed working with WordPress 4.1
293 +The following great open source projects are used in Autoptimize in some form or another:
381 294
382 -= 1.9.1 =
383 -* hard-exclude [the sidelink-search-box introduced in WP SEO v1.6](http://wordpress.org/plugins/wordpress-seo/changelog/) from JS optimization (this [broke some JS-optimization badly](http://wordpress.org/support/topic/190-breaks-js?replies=4))
384 -* bugfix: first add semi-colon to inline script, only then add try-catch if required instead of the other way around.
295 +* [Mr Clay's Minify](https://github.com/mrclay/minify/) for JS & HTML minification
296 +* [YUI CSS compressor PHP Port](https://github.com/tubalmartin/YUI-CSS-compressor-PHP-port) for CSS minification
297 +* [Lazysizes](https://github.com/aFarkas/lazysizes) for lazyload
298 +* [Persist Admin Notices Dismissal](https://github.com/w3guy/persist-admin-notices-dismissal) for notices in the administration screens
299 +* [Plugin Update Checker](https://github.com/YahnisElsts/plugin-update-checker/) for automated updates from Github for the beta version
300 +* [LoadCSS](https://github.com/filamentgroup/loadCSS) for deferring full CSS
301 +* [jQuery cookie](https://github.com/carhartl/jquery-cookie) to store the "futtta about" category selection in a cookie
302 +* [jQuery tablesorter](https://github.com/christianbach/tablesorter) for the critical CSS rules/ jobs display
303 +* [jQuery unslider](https://github.com/idiot/unslider/) for the mini-slider in the top right corner on the main settings page (repo gone)
304 +* [JavaScript-md5](https://github.com/blueimp/JavaScript-MD5) for critical CSS rules editing
305 +* [Speed Booster Pack](https://wordpress.org/plugins/speed-booster-pack/) for advanced JS deferring
306 +* [Disable Remove Google Fonts](https://wordpress.org/plugins/disable-remove-google-fonts/) for additional Google Font removal
385 307
386 -= 1.9.0 =
387 -* "Inline and defer CSS" allows one to specify which "above the fold CSS" should be inlined, while the normal optimized CSS is deferred.
388 -* Inlined Base64-encoded background Images will now be cached as well and the threshold for inlining these images has been bumped up to 4096 bytes (from 2560).
389 -* Separate cache-directories for CSS and JS in /wp-content/cache/autoptimize, which should result in faster cache pruning (and in some cases possibly faster serving of individual aggregated files).
390 -* Autoptimized CSS is now injected before the <title>-tag, JS before </body> (and after </title> when forced in head). This can be overridden in the API.
391 -* Some usability improvements of the administration-page
392 -* Multiple hooks added to the API a.o. filters to not aggregate inline CSS or JS and filters to aggregate but not minify CSS or JS.
393 -* Updated translations for Dutch, French, German, Persian and Polish and new translations for Brazilian Portuguese (thanks to [Leonardo Antonioli](http://tobeguarany.com/)) and Turkish (kudo's [Baris Unver](http://beyn.org/))
394 -* Multiple bugfixes & improvements
395 -* Tested with WordPress 4.0 rc3
308 += Where can I get help? =
396 309
397 -= 1.8.5 =
398 -* Updated to lastest version of [CSS minification component](https://github.com/tubalmartin/YUI-CSS-compressor-PHP-port/)
399 -* Improvement: for multi-sites the cache is now written to separate directories, avoiding one site to clean out the cache for the entire installation. Code [contributed by Joern Lund](http://wordpress.org/support/topic/multisite-blog-admin-can-delete-entire-network-cache), kudo's Joern!!
400 -* Improvement: add WordPress plugin header to autoptimize_helper.php_example to make it easier to enable it as a module
401 -* Improvement: nonce and post_id are added to default configuration for JS exclusion
402 -* Improvement: explicitely exclude wp-admin from being Autoptimized
403 -* Bugfix: plupload.min.js, syntaxhighlighter and "adsbygoogle" are excluded from JS aggregation.
404 -* Bugfix: avoid double closing body-tags when Autoptimize adds JS to HTML as [reported by Can](http://wordpress.org/support/topic/works-like-a-charm-but-i-have-two-problems)
405 -* Bugfix: make .htaccess compatible with both Apache 2.2 and 2.4 (http://wordpress.org/support/topic/feature-request-support-generating-htaccess-files-for-apache-24?replies=3)
310 +You can get help on the [wordpress.org support forum](http://wordpress.org/support/plugin/autoptimize). If you are 100% sure this your problem cannot be solved using Autoptimize configuration and that you in fact discovered a bug in the code, you can [create an issue on GitHub](https://github.com/futtta/autoptimize/issues). If you're looking for premium support, check out our [Autoptimize Pro Support and Web Performance Optimization services](http://autoptimize.com/).
406 311
407 -= 1.8.4 =
408 -* Bugfix: code in inline JS (or CSS) can be wrapped inside HTML-comments, but these got removed since 1.8.2 as part of a bugfix.
312 += I want out, how should I remove Autoptimize? =
409 313
410 -= 1.8.3 =
411 -* Bugfix: avoid useless warnings on is_callable to flood php error log as [reported by Praveen Kumar](http://wordpress.org/support/topic/182-breaks-css-and-js?replies=14#post-5377604)
314 +* Disable the plugin (this will remove options and cache)
315 +* Remove the plugin
316 +* Clear any cache that might still have pages which reference Autoptimized CSS/JS (e.g. of a page caching plugin such as WP Super Cache)
412 317
413 -= 1.8.2 =
414 -* Improvement: more graceful failure when minifier classes exist but method does not, based on [bug-report by Franck160](http://wordpress.org/support/topic/confict-with-dynamic-to-top)
415 -* Improvement: deferred CSS is also outputted in noscript-tags
416 -* Improvement: differentiate between Apache version in .htaccess file as suggested by [iMadalin](http://www.imadalin.ro/)
417 -* Improvement: also aggregate protocol-less CSS/JS URI's (as [suggested by Ross](http://wordpress.org/support/topic/protocol-less-url-support))
418 -* Improvement: disable autoptimization based on parameter in querystring (for debugging)
419 -* Bugfix: some CSS-imports were not being aggregated/ minified
420 -* Bugfix: add CSS before <title instead of <title> to avoid breakage when title includes other attributes (e.g. itemscope)
421 -* Bugfix: make sure javascript or css between comments is not aggregated as reported by [Milap Gajjar](http://wordpress.org/support/topic/the-optimized-css-contains-duplicate-classes)
422 -* Tested with WordPress 3.9 (beta 1)
423 -* Updates in FAQ
318 += How can I help/ contribute? =
424 319
425 -= 1.8.1 =
426 -* bugfix: CSS in conditional comments was not excluded from aggregation as reported by [Rolf](http://www.finkbeiner-holz.de/) and [bottapress](http://www.wordpress-hebergement.fr/)
320 +Just [fork Autoptimize on Github](https://github.com/futtta/autoptimize) and code away!
427 321
428 -= 1.8.0 =
429 -* New: Option to inline all CSS [as suggested by Hamed](http://wordpress.org/support/topic/make-style-sheet-inline)
430 -* New: set of filters to provide a simple API to change Autoptimize behavior (e.g. replace "defer" with "async", disabling Autoptimization on certain pages, specificy non-aggregatable script to be moved after aggregated one (cfr. http://wordpress.org/support/topic/feature-request-some-extra-options?replies=14), size of image to be data-urized). More info in the included autoptimize_helper.php_example.
431 -* Improvement: exclude (css in) noscript-tags as [proposed by belg4mit](http://wordpress.org/support/topic/feature-suggestion-noscript-for-css)
432 -* Improvement: switch default delivery of optimized CSS/JS-files from PHP to static files
433 -* Updated [upstream CSS minifier](https://github.com/tubalmartin/YUI-CSS-compressor-PHP-port/commit/fb33d2ffd0963692747101330b175a80173ce21b)
434 -* Improvement (force gzip of static files) and Bugfix (force expiry for dynamic files, thanks to [Willem Razenberg](http://www.column-razenberg.nl/) in .htaccess
435 -* Improvement: fail gracefully when things go wrong (e.g. CSS import resulting in empty aggregated CSS-files [reported by Danka](http://wordpress.org/support/topic/very-good-332) or when the theme is broken [as seen by Prateek Gupta](http://wordpress.org/support/topic/js-optimization-break-site-white-page-issue?replies=14#post-5038941))
436 -* Updated translations and Polish added (thanks to [Jakub Sierpinski](http://www.sierpinski.pl/)).
437 -* Bugfix: stop import-statements in CSS comments to be taken into acccount [hat tip to Josef from blog-it-solutions.de](http://www.blog-it-solutions.de/)
438 -* Bugfix: fix for blur in CSS breakeage as [reported by Chris of clickpanic.com](http://blog.clickpanic.com/)
322 +== Changelog ==
439 323
440 -= 1.7.3 =
441 -* improvement: remove cache + options on uninstall as [requested by Gingerbreadmen](http://wordpress.org/support/topic/wp_options-entries)
442 -* improvement: set .htaccess to allow PHP execution in wp-content/cache/autoptimize when saving optimized files as PHP, as suggested by (David Mottershead of bermuda4u.com)[http://www.bermuda4u.com/] but forbid PHP execution when saving aggregated script/css as static files (except for multisite).
443 -* bugfix: avoid Yoast SEO sitemaps going blank (due optimization of Yoast's dynamically built XML/XSL) as reported by [Vance Hallman](http://www.icefishing.co) and [Armand Hadife](http://solar-flag-pole-lights.com/). More info on this issue [can be found on my blog](http://blog.futtta.be/2013/12/09/blank-yoast-seo-sitemaps-no-more/).
444 -* smaller changes to readme.txt
324 += 3.1.16 =
325 +* Security: overall hardening of Autoptimize, e.g. replacing some regular expressions with a more modern, safer approach.
326 +* CSS minification: fixes for problems with alpha channel of rgb()/hsl() colors (thanks to @hinnerk-a)
327 +* Critical CSS: improvements to job queueing and settings page tweaks
328 +* confrimed OK with WordPress 7.1
445 329
446 -= 1.7.2 =
447 -* improvement: extra checks in CSS @import-handling + move import rules to top of CSS if not imported successfully, based a.o. on bug reports [by ozum](http://wordpress.org/support/topic/zero-lenght-file-with-css-optimization) and by [Peter Stolwijk](http://wordpress.org/support/topic/cant-activate-plugin-22?replies=13#post-4891377)
448 -* improvement: check if JS and CSS minifier classes exist and only load if they don't to avoid possible conflicts with other themes or plugins that already loaded minifiers
449 -* tested and approved for WordPress 3.8 (beta1)
330 += 3.1.15.1 =
331 +* fix for "Uncaught Error: Using $this when not in object context" when preloads are set
450 332
451 -= 1.7.1 =
452 -* New: support for mapped domains as suggested by [Michael for tiremoni.com](http://tiremoni.com/)
453 -* Added an .htaccess to wp-content/cache/autoptimize to overwrite other caching directives (fixing a problem with WP Super Cache's .htaccess really, [as reported](http://wordpress.org/support/topic/expiresmax-age-compatibility-with-supercache) by [Hugh of www.unitedworldschools.org](http://www.unitedworldschools.org/))
454 -* bugfix: Autoptimize broke data:uri's in CSS in some cases as reported by [Josef from blog-it-solutions.de](http://www.blog-it-solutions.de/)
455 -* bugfix: avoid PHP notice if CSS exclusion list is empty
456 -* moved "do not donate"-image into plugin
333 += 3.1.15 =
334 +* also add fetchpriority=high to preload set on Extra tab
335 +* improve exit survey display in RTL languages
336 +* security enhancements for 2 authenticated stored XSS issues responsibly reported by stealhcopter and bashu
337 +* multiple minor changes/ improvements/ bugfixes, see the [GitHub commit log](https://github.com/futtta/autoptimize/commits/beta).
457 338
458 -= 1.7.0 =
459 -* New: exclude CSS
460 -* New: defer CSS
461 -* Updated minimizing components (JSMin & YUI PHP CSSMin)
462 -* Updated admin-page, hiding advanced configuration options
463 -* Updated CDN-support for added simplicity (code & UI-wise), including changing background image url in CSS
464 -* Updated/ new translations provided for [French: wordpress-hebergement.fr](http://www.wordpress-hebergement.fr/), [Persian: Hamed Irani](http://basics.ir/), [Swedish: Jonathan Sulo](http://sulo.se/), [German: blog-it-solutions.de](http://www.blog-it-solutions.de/) and Dutch
465 -* Removed support for YUI
466 -* Flush HTML caching plugin's cache when flushing Autoptimize's one
467 -* fix for BOM marker in CSS-files [as seen in Frontier theme](http://wordpress.org/support/topic/sidebar-problem-42), kudo's to [Download Converter](http://convertertoolz.com/) for reporting!
468 -* fix for [protocol-less 3rd party scripts disappearing](http://wordpress.org/support/topic/javascript-optimize-breaks-twentythirteen-mobile-menu), thanks for reporting p33t3r!
469 -* fix for stylesheets without type="text/css" not being autoptimized as reported by [renzo](http://cocobeanproductions.com/)
470 -* tested with WordPress 3.7 beta2 (admin-bar.min.js added to automatically excluded scripts)
339 += 3.1.14 =
340 +* improve HTML output for <link rel="preload" images (based on report by Muhammad)
341 +* let the 404-handler issue a 302 iso 301 HTTP response (as mentioned by thefitrv)
342 +* small improvement in critical CSS cron job handling in case of an empty "time limit" (thanks for the help Jason)
343 +* fix bug in "domain binding" in critical CSS advanced options (reported by Hazel)
344 +* catch and report (exceptional) JS optimization issues causing preg_replace_callback to crash out (in case of a huge amount of JS code), thanks siliconforks
345 +* confirmed OK with WordPress 6.9
471 346
472 -= 1.6.6 =
473 -* New: disable autoptimizatoin by putting part of your HTML, JS or CSS in between noptimize-tags, e.g.;
474 -`<!--noptimize--><script>alert('this will not get autoptimized');</script><!--/noptimize-->`
475 -* Added extra check to prevent plugin-files being called outside of WordPress as suggested in [this good article on security](http://mikejolley.com/2013/08/keeping-your-shit-secure-whilst-developing-for-wordpress/).
476 -* Added small notice to be displayed after installation/ activation to ask user to configure the plugin as well.
477 -* Added Persian translation, thanks to [Hamed T.](http://basics.ir/)
347 += 3.1.13 =
348 +* multiple minor changes/ improvements/ bugfixes, see the [GitHub commit log](https://github.com/futtta/autoptimize/commits/beta).
478 349
479 -= 1.6.5 =
480 -* new javascript-debug option to force the aggregated javascript file in the head-section of the HTML instead of at the bottom
481 -* YUI compression & CDN are now deprecated functionality that will be removed in 1.7.0
350 += 3.1.12 =
351 +* image optimization: improvements to the favicon regex
352 +* javascript optimization: integrate most recent version of jsmin.php
353 +* critical CSS: improve blocklist (url/ paths that should not be added to the job queue)
354 +* some other minor changes/ improvements/ filters, see the [GitHub commit log](https://github.com/futtta/autoptimize/commits/beta).
482 355
483 -= 1.6.4 =
484 -* fix for PHP notice about mfunc_functions
485 -* fix for strpos warnings due to empty values from the "Exclude scripts from autoptimize" configuration as [reported by CandleFOREX](http://wordpress.org/support/topic/empty-needle-warning)
486 -* fix for broken feeds as [reported by Dinata and talgalili](http://wordpress.org/support/topic/feed-issue-5)
356 += 3.1.11 =
357 +* code quality improvements see the [GitHub commit log](https://github.com/futtta/autoptimize/commits/beta).
358 +* some other minor changes/ improvements/ filters, see the [GitHub commit log](https://github.com/futtta/autoptimize/commits/beta).
487 359
488 -= 1.6.3 =
489 -* fix for IE-hacks with javascript inside, causing javascript breakage (as seen in Sampression theme) as reported by [Takahiro of hiskip.com](http://www.hiskip.com/wp/)
490 -* fix for escaping problem of imported css causing css breakage (as seen in Sampression theme) as reported by Takahiro as well
491 -* fix to parse imports with syntax @import 'custom.css' not being parsed (as seen in Arras theme), again as reported by Takahiro
492 -* fix for complex media types in media-attribute [as reported by jvwisssen](http://wordpress.org/support/topic/autoptimize-and-media-queries)
493 -* fix for disappearing background-images that were already datauri's [as reported by will.blaschko](http://wordpress.org/support/topic/data-uris)
494 -* fix not to strip out comments in HTML needed by WP Super Cache or W3 Total Cache (e.g. mfunc)
495 -* added check to clean cache on upgrade
496 -* updated FAQ in readme with information on troubleshooting and support
497 -* tested with WordPress 3.6 beta
360 += 3.1.10 =
361 +* improvement: with "don't aggregate but defer" and "also defer inline JS" on, also defer JS that had the async flag to avoid the (previously) asynced JS from executing before the inline JS has ran.
362 +* improvement: show option to disable the default on "compatibility logic".
363 +* fix for regression in 3.1.9 which caused JetPack Image optimization not working even if image optimization was off in AO.
364 +* API: some extra hooks in critical CSS to enable others (and AOPro) to act on changes in critical CSS rules
365 +* some other minor changes/ improvements/ filters, see the [GitHub commit log](https://github.com/futtta/autoptimize/commits/beta).
498 366
499 -= 1.6.2 =
500 -* Yet another emergency bugfix I'm afraid: apache_request_headers (again in config/delayed.php) is only available on ... Apache (duh), breaking non-Apache systems such as ngnix, Lighttpd and MS IIS badly. Reported by multiple users, thanks all!
367 += 3.1.9 =
368 +* improvement: activate JS, CSS & HTML optimization upon plugin activation (hat tip to Adam Silverstein (developer relations engineer at Google))
369 +* improvement: also defer asynced JS (to ensure execution order remains intact; asynced JS should not execute before deferred inline JS which it might depend upon)
370 +* improvement: exclude images from being lazyloaded if they have fetchpriority attribute set to high (as done by WordPress core since 6.3)
371 +* bugfix: disable spellcheck on CSS textarea's (above the fold CSS/ critical CSS) which in some cases caused browser issues
372 +* add tab to explain Autoptimize Pro.
373 +* confirmed working with WordPress 6.4 (beta 3)
374 +* some other minor changes/ improvements/ filters, see the [GitHub commit log](https://github.com/futtta/autoptimize/commits/beta).
501 375
502 -= 1.6.1 =
503 -* fixed stupid typo in config/delayed.php which broke things badly (april fools-wise); strpos instead of str_pos as reported by Takahiro.
376 += 3.1.8.1 =
377 +* urgent fix for PHP error, sorry about that!
504 378
505 -= 1.6.0 =
506 -* You can now specify scripts that should not be Autoptimized in the admin page. Just add the names (or part of the path) of the scripts in a comma-separated list and that JavaScript-file will remain untouched by Autoptimize.
507 -* Added support for ETag and LastModified (essentially for a better pagespeed score, as the files are explicitely cacheable for 1 year)
508 -* Autoptimizing for logged in users is enabled again
509 -* Autoptimize now creates an index.html in wp-content/cache/autoptimize to prevent snooping (as [proposed by Chris](http://blog.futtta.be/2013/01/07/adopting-an-oss-orphan-autoptimize/#li-comment-36292))
510 -* bugfix: removed all deprecated functions ([reported by Hypolythe](http://wordpress.org/support/topic/many-deprecated-errors) and diff by Heiko Adams, thanks guys!)
511 -* bugfix for HTTPS-problem as [reported by dbs121](http://wordpress.org/support/topic/woocommerce-autoptimizer-https-issue)
512 -* bugfix for breakage with unusual WordPress directory layout as reported by [Josef from blog-it-solutions.de](http://www.blog-it-solutions.de/).
379 += 3.1.8 =
380 +* Images: improve optmization logic for background images
381 +* Critical CSS: don't trigger custom_post rule if not is_singular + adding debug logging for rule selection
382 +* some other minor changes/ improvements/ filters, see the [GitHub commit log](https://github.com/futtta/autoptimize/commits/beta).
513 383
514 -= 1.5.1 =
515 -* bugfix: add CSS before opening title-tag instead of after closing title, to avoid CSS being loaded in wrong order, as reported by [fotofashion](http://fotoandfashion.de/) and [blogitsolutions](http://www.blog-it-solutions.de) (thanks guys)
384 += 3.1.7 =
385 +* security: improve validation (import) and sanitization (output) of critical CSS rules, to fix a medium severity Admin+ Stored Cross-Site Scripting vulnerability as reported by WP Scan Security.
516 386
517 -= 1.5 =
518 -* first bugfix release by [futtta](http://blog.futtta.be/2013/01/07/adopting-an-oss-orphan-autoptimize/), thanks for a great plugin Turl!
519 -* misc bug fixes, a.o. support for Twenty Twelve theme, admin bar problem in WP3.5, data-uri breaking CSS file naming
387 += 3.1.6 =
388 +* CSS: removing trailing slashes in <link tags for more W3 HTML validation love
389 +* Extra: also dequeue WooCommerce block CSS if "remove WordPress block CSS" option is active
390 +* imgopt: also act on non-aggregated inline CSS
391 +* imgopt: added logic to warn users if Shortpixel can't reach their site
392 +* backend: AO toolbar JS/ CSS is finally minified as well.
393 +* explicitly disable optimization of login pages
394 +* some other minor changes/ improvements/ filters, see the [GitHub commit log](https://github.com/futtta/autoptimize/commits/beta).
520 395
521 -= 1.4 =
522 -* Add support for inline style tags with CSS media
523 -* Fix Wordpress top bar
396 += 3.1.5 =
397 +* improvements to JSMin by Robert Ehrenleitner (big thanks Robert!).
398 +* do not consider jquery.js as minified any more (WordPress now uses jquery.min.js by default and jquery.js is the unminified version).
399 +* fix for "undefined array key" PHP errors in autoptimizeCriticalCSSCron.php
400 +* some other minor changes/ improvements/ filters, see the [GitHub commit log](https://github.com/futtta/autoptimize/commits/beta).
524 401
525 -= 1.3 =
526 -* Add workaround for TinyMCEComments
527 -* Add workaround for asynchronous Google Analytics
402 += 3.1.4 =
403 +* Improvement: when all CSS is inlined, try doing so after SEO meta-tags (just before ld+json script tag which most SEO plugins add as last item on their list).
404 +* Img opt: also optimize images set in data-background and data-retina attributes (+ filter to easily add other attributes)
405 +* CSS opt: filter to enable AO to skip minification of calc formulas in CSS (as the CSS minifier on rare occasions breaks those)
406 +* Multiple other filters added
407 +* Some other minor changes/ improvements/ filters, see the [GitHub commit log](https://github.com/futtta/autoptimize/commits/beta).
528 408
529 -= 1.2 =
530 -* Add workaround for Chitika ads.
531 -* Add workaround for LinkWithin widget.
532 -* Belorussian translation
409 += 3.1.3 =
410 +* Multiple fixes for metabox LCP image preloads (thanks [Kishorchand](https://foxscribbler.com/) for notifying & providing a staging environment to debug on).
411 +* Fix in revslider compatibility (hat tip [Waqar Ahmed for reporting & helping out](https://wordpress.org/support/topic/issue-with-latest-version-of-slider-revolution/) ).
412 +* No image optimization or criticalcss attempts on localhost installations any more + notification of that fact if localhost detected.
413 +* Some other minor changes/ improvements/ filters, see the [GitHub commit log](https://github.com/futtta/autoptimize/commits/beta).
533 414
534 -= 1.1 =
535 -* Add workarounds for amazon and fastclick
536 -* Add workaround for Comment Form Quicktags
537 -* Fix issue with Vipers Video Quicktags
538 -* Fix a bug in where some scripts that shouldn't be moved were moved
539 -* Fix a bug in where the config page wouldn't appear
540 -* Fix @import handling
541 -* Implement an option to disable js/css gzipping
542 -* Implement CDN functionality
543 -* Implement data: URI generation for images
544 -* Support YUI CSS/JS Compressor
545 -* Performance increases
546 -* Handle WP Super Cache's cache files better
547 -* Update translations
415 += 3.1.2 =
416 +* Google Fonts: some more removal logic
417 +* fix for 404 fallback bug (hat tip to Asif for finding & reporting)
418 +* Some other minor changes/ improvements/ filters, see the [GitHub commit log](https://github.com/futtta/autoptimize/commits/beta).
548 419
549 -= 1.0 =
550 -* Add workaround for whos.among.us
551 -* Support preserving HTML Comments.
552 -* Implement "delayed cache compression"
553 -* French translation
554 -* Update Spanish translation
420 += 3.1.1.1 =
421 +* Quick workaround for an autoload conflict with JetFormBuilder (and maybe other Crocoblock plugins?) that causes a critical error on the AO settings page.
555 422
556 -= 0.9 =
557 -* Add workaround for networkedblogs.
558 -* Add workarounds for histats and statscounter
559 -* Add workaround for smowtion and infolinks.
560 -* Add workaround for Featured Content Gallery
561 -* Simplified Chinese translation
562 -* Update Spanish Translation
563 -* Modify the cache system so it uses wp-content/cache/
564 -* Add a clear cache button
423 += 3.1.1 =
424 +* images: when optimizing images and lazyloading is on, then by default do not set an LQIP (low quality image placeholder) any more (reason: it might *look* nice but it comes with a small-ish perf. penalty). This can be re-enabled by returning true to the `autoptimize_filter_imgopt_lazyload_dolqip` filter.
425 +* security: further improvements to critical CSS settings page (again with the great assistance of WPScan Security).
426 +* some other minor changes/ improvements/ filters, see the [GitHub commit log](https://github.com/futtta/autoptimize/commits/beta).
565 427
566 -= 0.8 =
567 -* Add workaround for Vipers Video Quicktags
568 -* Support <link> tags without media.
569 -* Take even more precautions so we don't break urls in CSS
570 -* Support adding try-catch wrappings to JavaScript code
571 -* Add workaround for Wordpress.com Stats
572 -* Fix a bug in where the tags wouldn't move
573 -* Update translation template
574 -* Update Spanish translation
428 += 3.1.0 =
429 +* new HTML sub-option: "minify inline CSS/ JS" (off by default).
430 +* new Misc option: permanently allow the "do not run compatibility logic" flag to be removed (which was set for users upgrading from AO 2.9.* to AO 3.0.* as the assumption was things were working anyway).
431 +* security: improvements to the critical CSS settings page to fix authenticated cross site scripting issues as reported by WPScan Security.
432 +* bugfix: "defer inline JS" of very large chunks of inline JS could cause server errors (PCRE crash actually) so not deferring if string is more then 200000 characters (filter available).
433 +* some other minor changes/ improvements/ hooks, see the [GitHub commit log](https://github.com/futtta/autoptimize/commits/beta)
575 434
576 -= 0.7 =
577 -* Add fix for DISQUS Comment System.
435 += 3.0.4 =
436 +* fix for "undefined array key ao_post_preload” on post/ page edit screens
437 +* fix for image optimization altering inline JS that contains an `<img` tag if lazyload is not active
438 +* improvements to exit survey
439 +* confirmed working with WordPress 6.0
578 440
579 -= 0.6 =
580 -* Add workaround for mybloglog, blogcatalog, tweetmeme and Google CSE
441 += 3.0.3 =
442 +* fix for images being preloaded without this being configured when lazyload is on and per page/post settings are off.
443 +* ensure critical CSS schedule is always known.
444 +* when deferring non-aggregated JS, make the optimatization exclusions take the full script-tag into account instead of just the src URL.
581 445
582 -= 0.5 =
583 -* Support localization
584 -* Fix the move and don't move system (again)
585 -* Improve url detection in CSS
586 -* Support looking for scripts and styles on just the header
587 -* Fix an issue with data: uris getting modified
588 -* Spanish translation
446 += 3.0.2 =
447 +* rollback automatic "minify inline CSS/ JS" which broke more then expected, this will come back as a separate default off option later and can now be enabled with a simple filter: `add_filter( 'autoptimize_html_minify_inline_js_css', '__return_true');` .
448 +* fix for "Call to undefined method autoptimizeOptionWrapper::delete_option()" in autoptimizeVersionUpdatesHandler.php
589 449
590 -= 0.4 =
591 -* Write plugin description in English
592 -* Set default config to everything off
593 -* Add link from plugins page to options page
594 -* Fix problems with scripts that shouldn't be moved and were moved all the same
450 += 3.0.1 =
451 +* fix for minification of inline script with type text/template breaking the template (e.g. ninja forms), hat tip to @bobsled.
452 +* fix for regression in import of CSS-files where e.g. fontawesome CSS was broken due to being escaped again with help of @bobsled, thanks man!
595 453
596 -= 0.3 =
597 -* Disable CSS media on @imports - caused an infinite loop
454 += 3.0.0 =
455 +* fundamental change for new installations: by default Autoptimize will not aggregate JS/ CSS any more (HTTP/2 is ubiquitous and there are other advantages to not aggregating esp. re. inline JS/ CSS and dependancies)
456 +* new: no API needed any more to create manual critical CSS rules.
457 +* new: "Remove WordPress blocks CSS" option on the "Extra" tab to remove block- and global styles (and SVG).
458 +* new: compatibility logic for "edit with elementor", "revolution slider", for non-aggregated inline JS requiring jQuery even if not excluded (= auto-exclude of jQuery) and JS-heavy WordPress blocks (Gutenberg)
459 +* new: configure an image to be preloaded on a per page/ post basis for better LCP.
460 +* improvement: defer inline now also allowed if inline JS contains nonce or post_id.
461 +* improvement: settings export/ import on critical CSS tab now takes into account all Autoptimize settings, not just the critical CSS ones.
462 +* technical improvement: all criticalCSS classes were refactored, removing use of global variables.
463 +* technical improvement: automated unit tests on Travis-CI for PHP versions 7.2 to 8.1.
464 +* fix: stop Divi from clearing Autoptimize's cache [which is pretty counter-productive](https://blog.futtta.be/2018/11/17/warning-divi-purging-autoptimizes-cache/).
465 +* misc smaller fixes/ improvements, see the [GitHub commit log](https://github.com/futtta/autoptimize/commits/beta)
598 466
599 -= 0.2 =
600 -* Support CSS media
601 -* Fix an issue in the IE Hacks preservation mechanism
602 -* Fix an issue with some urls getting broken in CSS
603 -
604 -= 0.1 =
605 -* First released version.
467 += older =
468 +* see [https://plugins.svn.wordpress.org/autoptimize/tags/2.9.5.1/readme.txt](https://plugins.svn.wordpress.org/autoptimize/tags/2.9.5.1/readme.txt)