Earth Notes: On Website Technicals (2021-08)
Updated 2024-03-03.2021-08-31: Page Experience Madness
GSC is still over the place with no URLs with a good page experience
, but the CWV and HTTPS flags randomly green / red / no data. Mobile Usability remains good, enumerating www pages rather than m-dot, and a http/https mix.
2021-08-30: SVN Repo Move
Very very tardily I finally moved an SVN repository (well, a cluster of them) from the old RPi server to the new. That needed a little bit of svn switch --relocate
TLC at the client, having carefully copied the repos over, eg:
% rsync -av --rsh ssh oldhost:/rw/SVN-repositories/general /rw/SVN-repositories/ % svn switch --relocate svn+ssh://dhd@oldhost.exnet.com/rw/SVN-repositories/general/www.hd.org svn+ssh://dhd@newhost.exnet.com/rw/SVN-repositories/general/www.hd.org
2021-08-22: Download Weight Measured
Taking byte weight of objects successfully downloaded from the EOU site variants (ie with 200 or 206 status codes), eliminating one-offs and video/audio files, and taking the biggest 20, a snapshot of object weight count
today is:
% sh script/countWeight.sh | egrep -v '[.]((mp[34])|(flac))' | egrep -v ' 1$' | tail -20 /img/fridge-freezer-interior-Siemens-KG34NA10GB.jpg 7394585 33 /img/thermal-images-tiled-2x1-1208w.jpg 7452898 33 /towards-a-LZC-home.html 7875926 259 /img/bat/20200917-SN358279.zca 7882443 5 /data/k8055-summary-200710-to-201407.br 8575556 3 /img/16WW/cemetery-closed-yellow-sign-20200408-Kingston.jpg 8857183 11 /img/wordcloud/podcast-1.png 9445862 52 /img/solar-PV-panels-on-roof.jpg 10899499 59 /img/tools-1280w.png 11063472 31 /img/ssheet/JPearson-Solar-Efficiency-Pitch-of-Panel-V7.xls 11288023 3 /img/teaching/2017/Y4-Solar-Power-lesson-slides.pptx 11309620 3 /img/3G/condensation-on-window-double-glazing-inside-pane-and-within-sealed-unit-1-DHD.jpg 11703756 22 /img/meet/CleanWeb-20150622/StreetlightComeback-JLewis-Telensa-20150622.pdf 11762615 3 /data/PV-3rd-party/SEEngland1/system2-20200817-to-20210817.csv 13369027 6 /_gridCarbonIntensityGB.html 18288844 2031 /OpenTRV/talks/FOSDEM2014/opentrv-FOSDEM.odp 21978812 5 / 36353682 3578 /img/front-entrance-after.jpg 40620825 32 /img/meet/CleanWeb-20150622/1506_Cleanweb_announcement_taxonomy.pdf 48788257 3 /rss/podcast.rss 86150795 10010
That suggests some potential quick wins manually generating at least WebP alternates for images such as front-entrance-after.jpg
, now done.
Potentially replacing some of the other files with more compact forms may also be helpful, eg the .csv
s with zopfli
ed versions, done.
The most fetched (ie by count) are:
% sh script/countWeight.sh | sort -k3n | tail /img/s42/3/icons.png 1687187 795 /img/s42/3/min.js 1082348 819 /out/hourly/button/intico1-64.png 2175119 835 /out/hourly/button/intico1-32.png 1051840 855 /sitemap.atom 2850595 961 /favicon.ico 792662 1013 /_gridCarbonIntensityGB.html 20952812 2336 /robots.txt 8894285 2562 / 41666188 4089 /rss/podcast.rss 99632424 11552
Avoid Heavy Unseen
I also made some tweaks to avoid generating huge images with schema.org
metadata purely for search engines to index. Now if they are larger than the largest allowed body image (~99kB) then I no longer generate/retain them.
2021-08-21: WebP Near Lossless
I was just sending a note to Jyrki Alakuijala to thank him for his work on WebP:
I know I am only 10Y late to the table, but I am using it to knock ~25% weight off my static site largely invisibly to the users.
He responded by asking what flavour(s) of WebP I use (lossy, lossless, near lossless) suggesting that the last is "technically strongest".
So I think --near_lossless 60
is in my near future to try out!
He said that near lossless is similar to the posterising/reducing colour depth that I already do to reduce PNG weight, but will not help when I am already on an 8-bit palette image.
So maybe I should do the initial PNG colour/weight reduction with pngquant
. Then maybe still a final pass with zopflipng of course! (Or do it all in one step with WebP 'near lossless'.)
Getting pngquant
is as simple as brew install pngquant
on Mac, and apt-get install pngquant
on RPi! Both V2.x, but about 6 years' development time between them!
The intent so far is that all lossless images (PNG source) will be completely pixel-for-pixel identical to the reference weight- and size- reduced PNG, but maybe that could change. I already allow the WebP versions of JPEGs to achieve weight savings in different ways: the same level of information should be present but they will not render identically.
2021-08-19: Shrink the Front Page!
I am keen to reduce the weight of all pages, particularly the lite pages, and the home pages of lite and desktop. Even more so for first / cold visits.
Looking at the lite (m-dot) home page there are only two images left on it. The 16WW carbon footprint by year, and the social media buttons.
Both are PNG and already compressed until pips have squeaked.
The carbon chart is dynamically generated and the social media buttons loaded by JavaScript. So in neither case is there a good hero-like solution using a picture
element.
I also do not want to add much more complexity to the handling of body images.
The sneaky solution that I am hatching is to make a .png.webp
from and alongside the .png
and if the browser explicitly says that it will Accept
a image/webp
, ship the .png.webp
instead of the .png
(and set the right MIME type too).
There are significant page-weight savings (~1kB) to be had:
3267 out/yearly/16WWYearlyEnergyCarbonFootprint.png 2514 out/yearly/16WWYearlyEnergyCarbonFootprint.png.webp 2073 img/s42/3/icons.png 1694 img/s42/3/icons.png.webp
The new icons WebP has been checked in. The new footprint WebP is now generated with a single extra makefile line.
That does not require any change to the HTML generation (unlike for the hero images) nor extra traffic. This is potentially extensible to all body images so long as I generate alternates alongside responsive body images and out/
output images. The Apache server then just has to pick what to serve at run-time.
It can even help with serving the PNG carbon intensity buttons, though I may want to turn down the cwebp
effort or stop creating them from the PNGs when battery is low.
This is starting to get a bit complex if it is to play nicely with the Save-Data
lo-fi L
versions, but should work silently for most modern browsers, and not break older ones that will just see plain PNGs and JPEGs as before.
Nominally I could slightly trim the hero picture
HTML where these two mechanisms overlap in functionality.
Apache Code
The Apache server code to handle Save-Data
currently is:
# Serve smaller images/audio for Save-Data clients if possible. # Ensure caches handle Save-Data correctly. <FilesMatch "\.(jpg|png|webp|mp3|mp4)$"> Header append Vary "Save-Data" </FilesMatch> # If client has Save-Data header set (to "on", case-insensitive). RewriteCond %{HTTP:Save-Data} on [NC] # ... and if the lo-fi image/audio exists... RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME}L -s # ... then send .xxxL content instead of .xxx hi-fi original. RewriteRule ^/(.+)\.(jpg|png|webp|mp3|mp4)$ /$1.$2L [L]
That probably needs to split into separate parts for audio and images, so that the images part can get more complicated for the WebP stuff.
Given that very very few requests are coming in with Save-Data
for now, maybe to keep things simple I can just deal with the WebP stuff for images initially, and fold the complexity back in later...
# Serve smaller audio and secondary images for Save-Data clients if possible. # Ensure caches handle Save-Data correctly. <FilesMatch "\.(mp3|mp4|webp|avif|jxl)$"> Header append Vary "Save-Data" </FilesMatch> # If client has Save-Data header set (to "on", case-insensitive). RewriteCond %{HTTP:Save-Data} on [NC] # ... and if the lo-fi image/audio exists... RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME}L -s # ... then send .xxxL content instead of .xxx hi-fi original. RewriteRule ^/(.+)\.(mp3|mp4|webp|avif|jxl)$ /$1.$2L [L] # Serve alternate compact WEBP images if possible. # Ensure caches handle Accept and Save-Data correctly. <FilesMatch "\.(jpg|png)$"> Header append Vary "Accept" Header append Vary "Save-Data" </FilesMatch> # If client can Accept WEBP as more-compact alternate/secondary image format. RewriteCond %{HTTP:Accept} image/webp # ... and if the alternate image exists... RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME}.webp -s # ... then send .xxx.webp content instead of .xxx primary original. RewriteRule ^/(.+)\.(jpg|png)$ /$1.$2.webp [L]
That indeed seems to work, and the previously PNG images are now being transferred as WebP and displaying correctly. WebPageTest reports the entire weight of http://m.earth.org.uk/
at 11kB, including all images and JavaScript, with the HTML being 6kB of that. WebPageTest is showing the weight of the HTTPS version at 10kB, the HTML ~5kB of that. Using the dynamic WebP response saved ~10% of the whole page weight.
Yes, the .png
responses have type image/webp
, but also the correct Vary: Accept,Save-Data
.
The handful of previously-unused WebP versions of body images, at various sizes for progressive support, should now be being served too!
Apache Redux
I had another slightly more comprehensive handling of the two headers and file existence for inbound PNG and JPEG requests... There is probably a much more elegant way to handle this!
# Serve alternate compact WEBP images if possible. # Ensure caches handle Accept and Save-Data correctly. <FilesMatch "\.(jpg|png)$"> Header append Vary "Accept" Header append Vary "Save-Data" </FilesMatch> # Four cases for primary images (.png, .jpg): # Save-Data image/webp Serve # 1 - - .xxx (no rewrite) # 2 on - .xxxL if extant, else no rewrite # 3 - yes .xxx.webp if extant, else no rewrite # 4 on yes .xxx.webpL if extant, else .xxxL else no rewrite # # 1 - by default do not rewrite. # 2 - cannot accept WEBP, has Save-Data, has L file: serve it! RewriteCond %{HTTP:Accept} !image/webp RewriteCond %{HTTP:Save-Data} on [NC] RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME}L -s RewriteRule ^/(.+)\.(jpg|png)$ /$1.$2L [L] # 3 - can accept WEBP, no Save-Data, has .webp file: serve it! RewriteCond %{HTTP:Accept} image/webp RewriteCond %{HTTP:Save-Data} !on [NC] RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME}.webp -s RewriteRule ^/(.+)\.(jpg|png)$ /$1.$2.webp [L] # 4a - can accept WEBP, has Save-Data, has .webpL file: serve it! RewriteCond %{HTTP:Accept} image/webp RewriteCond %{HTTP:Save-Data} on [NC] RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME}.webpL -s RewriteRule ^/(.+)\.(jpg|png)$ /$1.$2.webpL [L] # 4b - can accept WEBP, has Save-Data, has no .webpL but has L file: serve it! RewriteCond %{HTTP:Accept} image/webp RewriteCond %{HTTP:Save-Data} on [NC] RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME}.webpL !-s RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME}L -s RewriteRule ^/(.+)\.(jpg|png)$ /$1.$2L [L]
Enabling this feature, and forcing the alternates to be built for autogenerated images in https://m.earth.org.uk/note-on-best-time-to-fix-your-heating.html, reduced page weight from 28kB to 21kB according to WebPageTest! Cloudinary's integrated image analysis gives the page an A rating for image efficiency: a further ~20% could be saved by AVIF over WebP for the original JPEG it seems. (I manually generated a WebP and JXL alternate for the body image used as-is for desktop too.)
Hurrah!
I created specific tools to eagerly force-rebuild (almost) all hero and body images without having to rebuild pages that depend on them. The body image script was slow on the Mac and had to be paused overnight. It was left running overnight on the RPi and may take days to complete. By early morning it had generated more than 800 new images on the RPi and the image autogen body directory has nearly 10,000 entries excluding the new ones! Site visitors will asynchronously get value from the new images as they appear...
I have randomised the rebuild order for both of these so that in theory an extra instance can be run in parallel for decent speed-up.
These secondary images makes first page build with a new image slow. A disadvantage of the server-side trickery is that I do not see the benefit of it when looking at pages in the filesystem on my Mac while writing them. But the implied graceful degradation is as intended.
Hangover
Early afternoon the next day the Mac rebuild finished and the RPI continues. Even running the rebuild on the Mac when there is nothing to do is slow:
% time make allbodyimgs Eagerly building body image caches... 168.292u 238.298s 7:58.31 85.0% 0+0k 0+0io 1600pf+0w
There are 648 distinct body image/class combinations emitted by script/image_list_body
as used by make allbodyimgs
.
% script/image_list_body | head img/16WW/20210429ImpulseHeatingTest/20210429-16WWmultisensortempL-part.png respfloatr img/16WW/20210615-wren-perched-on-vertical-solar-panel-in-garden.jpg respfloatr img/16WW/GLS/20210516-screenshot-IFTTT-Green-Light-Signal-activity.png respfloatrsml ... img/wind/wind20120913-peak.png resp90 img/wordcloud/CHARM.png respfloatr img/wordcloud/TEDDINET.png respfloatr img/zero-carbon-house-solar-heating.png resp90
On the Mac (which may well have redundant images for historical reasons) here is a count of derived JPEG and JPEG-to-WebP body images:
% ls img/a/b/*.jpg | wc -l 3659 % ls img/a/b/*.jpg.webp | wc -l 952 % ls img/a/b/*.jpgL | wc -l 3574 % ls img/a/b/*.jpg.webpL | wc -l 908
Hangover Continues
RPi still going the !
Rebuilding the PNGs seems to be taking all the time, in particular likely the zopflipng -m
final step.
Maybe there's a argument for slackening that off a little where most browsers will get the smaller .png.webp
instead?
On the RPi the cache stats to match those for the Mac above are:
% ls img/a/b/*.jpg | wc -l 2868 % ls img/a/b/*.jpg.webp | wc -l 732 % ls img/a/b/*.jpgL | wc -l 2804 % ls img/a/b/*.jpg.webpL | wc -l 701
Maybe it's a bit over 70% done?
By :
% ls img/a/b/*.jpg.webp | wc -l 946
... And it's done?
% ls img/a/b/*.jpg.webp | wc -l 959
And even when there are no body images to rebuild, testing the waters is slow on the RPi, though curiously a little faster than on the Mac!
% time make allbodyimgs Eagerly building body image caches... 279.367u 122.809s 6:26.72 103.9% 0+0k 77256+2536io 16pf+0w
Large
I was avoiding making lo-fi versions of images wider than the viewport on the grounds that they may have been for high-pixel-density devices unlikely to be using Save-Data
. But I was also avoiding making alternate versions of such images, which happens also to exclude building alternates of full width (up to twice nominal viewport width) images/diagrams.
Removing the flags for such images to allow a rebuild is (note that no HTML needs to change):
% rm `ls -1 img/a/b/.flags/*.DONE | egrep 'l[0-9]*[.](([0-9][0-9][0-9][0-9])|([8-9][0-9][0-9]))x'`
The (re)build took a little over an hour on the Mac.
2021-08-18: More Alternates
I have just added code to be able to auto-generate alternate compact formats for hero images used as-is, alongside any manually-provided alternates.
The trick here is to have the code that looks for alternates, where the image that alternates are being looked for is not autogenerated, look in the autogenerated images area also, as if it were there. And to make alternates there if not yet present, and possible.
This will allow me to refactor out some current alternates handling code.
2021-08-17: Keen Image Inlining
I have just amended page generation to be very keen to inline very very small images for desktop pages, even below the fold.
Looking at the image size population, a useful threshold of 320 bytes was found:
% find img -name '*.png' -size -700c | wc -l 197 % find img -name '*.png' -size -400c | wc -l 141 % find img -name '*.png' -size -350c | wc -l 137 % find img -name '*.png' -size -320c | wc -l 137 % find img -name '*.png' -size -300c | wc -l 134 % find img -name '*.png' -size -200c | wc -l 50
Before, for a page with lots of tiny thumbnails:
% ls -alS statscast-202005.html{,gz,br} 88023 statscast-202005.html 18144 statscast-202005.htmlgz 14802 statscast-202005.htmlbr % ls -alS m/statscast-202005.html{,gz,br} 85759 m/statscast-202005.html 16293 m/statscast-202005.htmlgz 13265 m/statscast-202005.htmlbr
After:
% ls -alS statscast-202005.html{,gz,br} 115759 statscast-202005.html 27179 statscast-202005.htmlgz 23158 statscast-202005.htmlbr % ls -alS m/statscast-202005.html{,gz,br} 86016 m/statscast-202005.html 16495 m/statscast-202005.htmlgz 13454 m/statscast-202005.htmlbr
2021-08-16: AMP Zero
As of this afternoon, GSC's AMP page count is 0 in the dedicated section, but still 1 in the Overview...
I had hoped that the 'SEO' rubble would have stopped bouncing by now from this AMP excision (AMP-ectomy?), but it seems not!
2021-08-15: Page Rebuild Speedup
Yesterday I improved my debug timestamps: precision to milliseconds, and more code/operation granularity especially for image handling. Today I am starting to use that information to speed up page (re)builds, primarily by cacheing results of recursive image builds. Where a header hero is built from a full and a lite image (and variants) the script now does not need to actually check the underlying two or more images, nor regenerate the HTML based on them each time.
AMP One
GSC's AMP page count is back up to one, as of this afternoon...
2021-08-14: Googlebot Dodging 304s?
An extract from my logs of Googlebot fetches of a sample EOU URL. The EOU site is static and most pages change infrequently, and in any case more than once per day is rare. Looking at the response-length field (initially 14408 bytes) gives an idea of when the underlying page has actually changed. Googlebot does not seem to be making much use of 304s, even when it could.
www.earth.org.uk:443 66.249.64.135 - - [10/Aug/2021:01:06:12 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14408 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.128 - - [10/Aug/2021:01:58:56 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14408 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.135 - - [10/Aug/2021:02:53:33 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 9595 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.156 - - [10/Aug/2021:03:58:33 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14408 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.135 - - [10/Aug/2021:04:50:41 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14408 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.156 - - [10/Aug/2021:05:32:22 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14408 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.119 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.135 - - [10/Aug/2021:05:57:00 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14408 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" m.earth.org.uk:443 66.249.64.114 - - [10/Aug/2021:06:56:32 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 12666 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.119 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.128 - - [10/Aug/2021:06:58:06 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 9595 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.156 - - [10/Aug/2021:07:16:33 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14408 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.128 - - [10/Aug/2021:07:52:50 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14408 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.128 - - [10/Aug/2021:08:56:15 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14408 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.128 - - [10/Aug/2021:09:56:45 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14408 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.156 - - [10/Aug/2021:10:26:55 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14408 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.135 - - [10/Aug/2021:10:59:01 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14408 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.135 - - [10/Aug/2021:12:03:40 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14436 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.135 - - [10/Aug/2021:13:11:17 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14436 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.135 - - [10/Aug/2021:14:07:09 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14436 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.135 - - [10/Aug/2021:14:59:27 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14436 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.135 - - [10/Aug/2021:16:07:41 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14436 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.156 - - [10/Aug/2021:17:01:44 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14436 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.128 - - [10/Aug/2021:18:09:51 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14436 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.128 - - [10/Aug/2021:19:13:43 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14436 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.156 - - [10/Aug/2021:20:07:07 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14436 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.156 - - [10/Aug/2021:20:58:52 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14436 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.135 - - [10/Aug/2021:21:54:47 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14436 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.156 - - [10/Aug/2021:22:53:30 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14436 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.156 - - [10/Aug/2021:23:45:53 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14436 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.135 - - [11/Aug/2021:00:49:12 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14436 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.135 - - [11/Aug/2021:01:53:49 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14436 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.128 - - [11/Aug/2021:02:50:50 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14436 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.128 - - [11/Aug/2021:03:57:21 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14436 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.156 - - [11/Aug/2021:05:03:27 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14436 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.156 - - [11/Aug/2021:06:09:51 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14436 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.128 - - [11/Aug/2021:07:17:38 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14436 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.128 - - [11/Aug/2021:08:17:43 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14436 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.135 - - [11/Aug/2021:09:11:07 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14436 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.156 - - [11/Aug/2021:10:06:05 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14436 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.156 - - [11/Aug/2021:11:09:43 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14436 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.156 - - [11/Aug/2021:12:09:32 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14436 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.156 - - [11/Aug/2021:12:20:15 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14436 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.156 - - [11/Aug/2021:13:14:58 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14436 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.128 - - [11/Aug/2021:13:17:54 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 304 5088 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" m.earth.org.uk:443 66.249.64.118 - - [11/Aug/2021:13:32:19 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 12666 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.119 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.128 - - [11/Aug/2021:14:26:14 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14436 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.156 - - [11/Aug/2021:15:26:49 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14436 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.156 - - [11/Aug/2021:16:19:34 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14405 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.156 - - [11/Aug/2021:16:19:42 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14405 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.119 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.135 - - [11/Aug/2021:17:25:27 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14405 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.128 - - [11/Aug/2021:18:22:02 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14405 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.156 - - [11/Aug/2021:18:55:38 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14405 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.119 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.156 - - [11/Aug/2021:19:21:56 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14405 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.128 - - [11/Aug/2021:20:14:43 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14405 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.156 - - [11/Aug/2021:21:15:39 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14405 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.128 - - [11/Aug/2021:21:52:49 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14405 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.135 - - [11/Aug/2021:22:08:38 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14405 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:80 66.249.64.156 - - [11/Aug/2021:22:42:14 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 9535 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.119 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.128 - - [11/Aug/2021:23:01:29 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14405 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.135 - - [11/Aug/2021:23:53:35 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14405 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.156 - - [12/Aug/2021:00:53:13 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14405 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.156 - - [12/Aug/2021:01:38:59 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14405 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.135 - - [12/Aug/2021:01:49:20 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14405 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.156 - - [12/Aug/2021:02:48:38 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14405 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.135 - - [12/Aug/2021:03:51:41 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14405 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.156 - - [12/Aug/2021:04:52:56 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14405 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.156 - - [12/Aug/2021:05:50:06 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14405 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.156 - - [12/Aug/2021:05:56:53 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 304 5088 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.135 - - [12/Aug/2021:06:58:18 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14405 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.156 - - [12/Aug/2021:07:55:06 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14405 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.128 - - [12/Aug/2021:08:58:06 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14405 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.156 - - [12/Aug/2021:10:01:37 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14405 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.128 - - [12/Aug/2021:11:04:19 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14405 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.156 - - [12/Aug/2021:12:02:58 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14405 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.156 - - [12/Aug/2021:12:55:05 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.156 - - [12/Aug/2021:13:52:14 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.119 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.156 - - [12/Aug/2021:13:59:03 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.156 - - [12/Aug/2021:15:03:16 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.156 - - [12/Aug/2021:16:06:08 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.135 - - [12/Aug/2021:17:10:52 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.156 - - [12/Aug/2021:18:09:04 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.156 - - [12/Aug/2021:19:12:10 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.135 - - [12/Aug/2021:20:07:22 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.135 - - [12/Aug/2021:21:13:32 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.156 - - [12/Aug/2021:22:11:29 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.156 - - [12/Aug/2021:23:15:38 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.128 - - [12/Aug/2021:23:40:04 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 304 5088 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.119 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.156 - - [13/Aug/2021:00:08:45 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.128 - - [13/Aug/2021:00:26:57 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.156 - - [13/Aug/2021:01:05:00 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.156 - - [13/Aug/2021:01:56:00 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.135 - - [13/Aug/2021:03:03:12 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.128 - - [13/Aug/2021:03:56:53 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.128 - - [13/Aug/2021:05:02:56 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.156 - - [13/Aug/2021:06:10:35 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.128 - - [13/Aug/2021:07:14:52 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.135 - - [13/Aug/2021:08:06:34 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 9636 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.135 - - [13/Aug/2021:09:05:02 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.128 - - [13/Aug/2021:10:02:38 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.128 - - [13/Aug/2021:11:03:17 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.135 - - [13/Aug/2021:11:16:52 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.135 - - [13/Aug/2021:12:12:04 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.64.135 - - [13/Aug/2021:12:16:50 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 304 5088 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.69.176 - - [13/Aug/2021:13:08:12 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.69.176 - - [13/Aug/2021:14:07:06 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.69.174 - - [13/Aug/2021:15:10:56 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.69.178 - - [13/Aug/2021:16:06:07 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.69.174 - - [13/Aug/2021:17:03:51 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.69.174 - - [13/Aug/2021:18:08:45 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.69.178 - - [13/Aug/2021:19:15:45 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.69.178 - - [13/Aug/2021:20:19:06 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.69.178 - - [13/Aug/2021:21:15:01 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.69.178 - - [13/Aug/2021:22:21:54 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" m.earth.org.uk:443 66.249.69.146 - - [13/Aug/2021:22:31:11 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 12666 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.119 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.69.176 - - [13/Aug/2021:23:23:20 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.69.174 - - [14/Aug/2021:00:20:26 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.69.174 - - [14/Aug/2021:01:21:46 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.69.174 - - [14/Aug/2021:02:16:36 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.69.174 - - [14/Aug/2021:03:06:43 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.69.174 - - [14/Aug/2021:03:25:08 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.69.170 - - [14/Aug/2021:04:32:36 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.69.174 - - [14/Aug/2021:05:25:37 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.69.176 - - [14/Aug/2021:06:18:53 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.69.178 - - [14/Aug/2021:07:25:52 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.69.170 - - [14/Aug/2021:08:30:50 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" www.earth.org.uk:443 66.249.69.178 - - [14/Aug/2021:09:31:10 +0000] "GET /MHRV-Vent-Axia-Lo-Carbon-Tempra-P-REVIEW.html HTTP/1.1" 200 14449 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
2021-08-13: AMP Sneaks Back
Yesterday the count of AMP pages in GSC went up again, to 2! No, the pages really are not there...
By the following afternoon the AMP report is showing a count of 0, though the overview still shows 2.JXL for JPEG input
In V0.5.0 the -j
flag is required to allow a lossy JPEG output at a target size:
% cjxl -v -e 9 -j --target_size=10000 img.jpg out.jxl
Here is a real example, with target size in bytes set to ~50% of the source:
% cjxl -v -j -e 9 --progressive --target_size=15000 img/SIKP2000/SIKP2000-next-to-fixed-hob-800w.jpg img/SIKP2000/SIKP2000-next-to-fixed-hob-800w.jpg.jxl JPEG XL encoder v0.5.0 [AVX2,SSE4] Butteraugli distance 2.983 yields 25092 bytes, 0.834 bpp. Butteraugli distance 4.990 yields 17538 bytes, 0.583 bpp. Butteraugli distance 5.834 yields 15701 bytes, 0.522 bpp. Butteraugli distance 6.107 yields 15292 bytes, 0.508 bpp. Butteraugli distance 6.226 yields 15093 bytes, 0.501 bpp. Butteraugli distance 6.264 yields 14990 bytes, 0.498 bpp. Butteraugli distance 6.260 yields 15939 bytes, 0.530 bpp. Read 800x301 image, 37.6 MP/s Encoding [VarDCT, d6.264, tortoise], 2 threads. Compressed to 14990 bytes (0.498 bpp). 800 x 301, 0.07 MP/s [0.07, 0.07], 1 reps, 2 threads. Average butteraugli iters: 5.00 Total layer bits headers 0.109300% 96 Total layer bits TOC 0.291466% 256 Total layer bits quantizer 0.017078% 15 Total layer bits quant tables 0.002277% 2 Total layer bits order 1.703252% 1496 [c/i: 5.00 | hst: 33 | ex: 37 | h+c+e: 195.132] Total layer bits DC 0.001139% 1 Total layer bits ControlFields 9.383824% 8242 Total layer bits AC 7.980007% 7009 [c/i: 18.00 | hst: 858 | ex: 0 | h+c+e: 9383.687] Total layer bits ACTokens 79.098734% 69474 Total layer bits dictionary 0.857319% 753 [c/i: 5.00 | hst: 17 | ex: 10 | h+c+e: 63.142] Total layer bits modularGlobal 0.441752% 388 [c/i: 6.00 | hst: 48 | ex: 0 | h+c+e: 1010.020] Total layer bits modularTree 0.113854% 100 [c/i: 1.00 | hst: 1 | ex: 1 | h+c+e: 11.616] Total image size 87832 [c/i: 35.00 | hst: 959 | ex: 260 | h+c+e: 10874.097] Allocations: 35223 (max bytes in use: 7.853485E+07) % ls -al img/SIKP2000/SIKP2000-next-to-fixed-hob-800w.jpg* 34550 img/SIKP2000/SIKP2000-next-to-fixed-hob-800w.jpg 27956 img/SIKP2000/SIKP2000-next-to-fixed-hob-800w.jpg.avif 14990 img/SIKP2000/SIKP2000-next-to-fixed-hob-800w.jpg.jxl
2021-08-12: WebP from JPEG
I am being a bit bold today.
I am trying WebP as an alternate compact format for JPEG hero images. Yes, lossy even though I assumed I'd only use WebP for lossless!
I measure the PSNR of my generated JPEG image vs a lossless equivalent. I them try to match that with the WebP (plus a fudge factor).
The core commands being used are:
TARGETPSNR=`compare -metric PSNR $NOLOSSTMP $imain null: 2>&1 | awk '{print ($1 + 4.5)}'` cwebp -quiet -mt -psnr $TARGETPSNR -pass 10 -m 6 -af $NOLOSSTMP -o $itmp
The fudge factor is quite large (+4.5dB) and the WebP images amazingly small. They look a little less good than the JPEGs that they replace, but not bad.
To force (re)build of just the relevant images to create WebPs, requires:
% rm img/a/h/.flags/*.jpg*
Size savings of between ~25% and ~75% are being seen so far. The low end of that seems typical, but very much worth having.
See for example various versions of the fan image.
39058 fan-sq.l403381.800x200.jpg 24872 fan-sq.l403381.800x200.jpg.webp 11868 fan-sq.l403381.800x200.jpgL 8532 fan-sq.l403381.800x200.jpg.webpL
As a CPU-saving measure I have for now turned off generation of lo-fi (L) and alternate-format (eg WebP) images for high-pixel density displays. This on the grounds that users with such devices may be less bandwidth sensitive, and almost no one has Save-Data
enabled anyway, and the m-dot lite site is available when needed.
I could also save some effort by turning off alternate formats for body images, where I am not currently making use of them. But I may try doing so soon (I have a cunning plan)!
Success
~90% of desktop pages how have top heroes with a more-compact alternate format:
% egrep -L '<picture>.*((webp)|(avif)|(jxl)).*</picture>' *.html | wc -l 33 % egrep -l '<picture>.*((webp)|(avif)|(jxl)).*</picture>' *.html | wc -l 295
Only a few have (hand-crafted or iLIMG) AVIF or JXL alternates:
% egrep -l '<picture>.*((avif)|(jxl)).*</picture>' *.html | wc -l 28
2021-08-11: AVIF Playtime
I am going to try manually transcoding a couple of JPEGs to AVIF crudely. Firstly the transcode will be from the JPEG, whereas they should both be from a higher-resolution master to avoid AVIF trying to encode JPEG artefacts.
On my Mac:
brew install joedrago/repo/avifenc
First use (trying lossless) is not covering itself with glory! This is not my intended use case, however. I am expecting/hoping to use this as a JPEG improver, ie lossy.
% avifenc --lossless --speed 0 img/travel/train-fast.png img/travel/train-fast.png.avif Successfully loaded: img/travel/train-fast.png AVIF to be written: (Lossless) * Resolution : 1280x640 * Bit Depth : 8 * Format : YUV444 * Alpha : Not premultiplied * Range : Full * Color Primaries: 1 * Transfer Char. : 13 * Matrix Coeffs. : 0 * ICC Profile : Absent (0 bytes) * XMP Metadata : Absent (0 bytes) * EXIF Metadata : Absent (0 bytes) * Transformations: None Encoding with AV1 codec 'aom' speed [0], color QP [0 (Lossless) <-> 0 (Lossless)], alpha QP [0 (Lossless) <-> 0 (Lossless)], tileRowsLog2 [0], tileColsLog2 [0], 1 worker thread(s), please wait... Encoded successfully. * Color AV1 total size: 123667 bytes * Alpha AV1 total size: 15970 bytes Wrote AVIF: img/travel/train-fast.png.avif % ls -alS img/travel/train-fast.png* 140094 img/travel/train-fast.png.avif 26736 img/travel/train-fast.png 24802 img/travel/train-fast.png.webp 17729 img/travel/train-fast.png.jxl
The first couple of hero JPEGs I have tried this on have come down in size ~40%. I cannot see any obvious unpleasant artefacts. I have admitted 'avif' to the set of compact formats supported at page build, though AVIFs cannot yet be automatically generated. The full set of allowed alternates is now jxl avif webp
.
% avifenc --speed 0 image.jpg image.jpg.avif 37014 img/OpenTRV/20201112-EcoHome-Lab-talk-banner-hires.jpg 21128 img/OpenTRV/20201112-EcoHome-Lab-talk-banner-hires.jpg.avif 18557 img/wind/Hageman-chord.jpg 10731 img/wind/Hageman-chord.jpg.avif
Possible pages with JPEG heroes used as-is that may be worth of hand-optimised AVIF versions:
% egrep -l '[^0l].jpg></picture>' *.html catalogue-of-aerodynamic-characteristics-of-airfoils.html note-on-Better-Futures-meeting-at-London-City-Hall.html note-on-Method-Laundry-Detergent-REVIEW.html note-on-Raspberry-Pi-2-setup.html note-on-Raspberry-Pi-setup.html note-on-Salford-Energy-House.html note-on-SilverCrest-Portable-Induction-Hob-SIKP-2000-A1-REVIEW.html smart-radiator-valves-talk-20201112.html
In total I created .jpg.avif
derivatives of eight .jpg
images that are used as-is for hero images. All showed decent size reduction with no obvious image degradation.
Being able to fetch or build a avifenc
for the RPi server, to allowed automated conversions of the widest possible set of hero JPEGs, is proving difficult at the moment...
npx @squoosh/cli
may be a way ahead, as it may portably (if slowly) run the AVIF (and JXL) codecs in WebASM. But I am just getting various errors (eg about import
unexpected) for now...
2021-08-09: JXL Edge Case?
See libjxl
issue: cjxl
lossless encoding of PNG much larger than input #426.
Even though cwebp
manages to make the above image smaller, cjxl
makes it larger, up to 66% larger!
% cwebp -v -lossless -m 6 -q 100 img/data.png -o img/data.png.web % cjxl -v -s 9 -q 100 -E 3 -I 1 img/data.png img/data.png.jxl 8130 img/data.png 6820 img/data.png.webp 8642 img/data.png.jxl (cjxl at v0.3.7, cwebp at 1.2.0) -E 3 -I 1 at suggestion of @jonsneyers With cjxl v0.5.0: % cjxl -e 9 -g 3 -I 0 -P 0 --patches 0 JPEG XL encoder v0.5.0 [AVX2,SSE4] Read 800x153 image, 32.2 MP/s Encoding [VarDCT, d1.000, tortoise], 2 threads. Failed to compress to VarDCT. and: % cjxl -v -e 9 -q 100 img/data.png Compressed to 10485 bytes (0.685 bpp). % cjxl -v -e 9 -q 100 -E 3 -I 1 img/data.png Compressed to 13508 bytes (0.883 bpp). Expected behavior A JXL output file smaller than the input PNG. Environment OS: macOS: Darwin localhost 20.6.0 Darwin Kernel Version 20.6.0: Wed Jun 23 00:26:31 PDT 2021; root:xnu-7195.141.2~5/RELEASE_X86_64 x86_64 Compiler version: pre-built binaries from Homebrew. CPU type: x86_64 cjxl/djxl version string: v0.3.7 and v0.5.0 [AVX2,SSE4]
I have manually constructed WebP and JXL versions of a few hero images that get used as-is, and have modified the image selection code to offer them smallest first as source
s in the picture
2021-08-07: Ko-fi on the House
I have created a house ad featuring Patreon and Ko-fi for those pages from which ads were excluded only because the pages were not popular.
So the house ad will not appear on noindex
or error or very short pages.
(I took the opportunity to close my PayPal account after ~19 years!)
2021-08-06: Ko-fi
I have experimentally set up Ko-fi. As my PayPal has been borked for years, I have also experimentally set up Stripe for Ko-fi!
2021-08-05: Lingering
For some reason GSC is continuing to believe that there is AMP for just one page, and that the HTTP version is canonical, it appears.
GSC gives a last crawl date (for the HTTP page) of 10 Jun 2021, 05:11:48
.
2021-08-04: Moar Literer
The sheer hedonism!
- I have eliminated hero images entirely from lite (m-dot) pages.
- I have made the 'mobile' (smaller) hero image the same aspect ratio (4:1) as for desktop pages to eliminate CLS (Cumulative Layout Shift) when narrower devices visit desktop pages.
- I made a number of minor adjustments to save weight of some lite pages, eg removing all video-related information from lite page headers.
This really does make the 'lite' pages' HTML significantly lighter than the desktop / full-fat versions, often 10%--20%, with and without compression.
2021-08-03: Improved cwebp
The cwebp
PNG-to-WebP conversion on the server (sencha
) was giving consistently worse results (0.5.2) than on my laptop (1.2.0). So I manually built a binary from the github 1.2.0 release and installed in the server's /usr/local/bin
. I adjusted the the hero-image generation script to use that by preference.
Sing it with me now:
% rm `ls -1 img/a/h/*webp | awk -F. '{print $1"."$2".*"}' | sort -u | sed -e 's|img/a/h/|img/a/h/.flags/|'`
The improvements are significant. Eg for the following PNGs:
2567 img/a/h/tools-1280w.l354283.640x80.l.png 2053 img/a/h/tools-1280w.l354283.640x80.l.pngL 5395 img/a/h/tools-1280w.l354283.800x200.png 4416 img/a/h/tools-1280w.l354283.800x200.pngL
Before:
% ls -al img/a/h/tools-1280w.l354283.*webp* 2080 img/a/h/tools-1280w.l354283.640x80.l.png.webp 1646 img/a/h/tools-1280w.l354283.640x80.l.png.webpL 4646 img/a/h/tools-1280w.l354283.800x200.png.webp 3840 img/a/h/tools-1280w.l354283.800x200.png.webpL
After:
% ls -al img/a/h/tools-1280w.l354283.*webp* 1994 img/a/h/tools-1280w.l354283.640x80.l.png.webp 1604 img/a/h/tools-1280w.l354283.640x80.l.png.webpL 4506 img/a/h/tools-1280w.l354283.800x200.png.webp 3748 img/a/h/tools-1280w.l354283.800x200.png.webpL
I enabled multithreading too, to speed things up a little in many cases.
$CWEBP -quiet -mt -q 100 -lossless -m 6 $imain -o $itmp
The whole of this page so far comes in at ~8kB (WebPageTest London, UK - EC2 - Chrome - Emulated Motorola G (gen 4) - DSL - Mobile). ~600B, so a little under 10%, was saved by the hero being served as WebP.