If you’ve analyzed your site via Google PageSpeed Insights, you must have probably seen the error “serve images in next-gen formats”. Well, WebP is that next-generation format.
However, delivering images WebP isn’t that easy. It depends on your server web server, cdn of choice, theme, cache plugins etc.
This guide helps you to deliver images as WebP in WordPress in 3 methods.
WebP is an image format (just like png and jpg), developed by Google. Images in WebP format (.webp) are generally much smaller, which makes websites faster and use less bandwidth.
Depending on the image, you may get a reduction of 25% to 70% in size.
JPEG, PNG, GIF etc have their own pros and cons. The table below will give you an idea:
JPG
GIF
PNG
SVG
Vector
❌
❌
❌
✅
Raster
✅
✅
✅
❌
Transparency
❌
✅
✅
✅
Animation
❌
✅
✅
✅
Lossy
✅
❌
❌
❌
WebP comes with almost all the features mentioned above! Then why can’t we use WebP everywhere?
Why not use WebP everywhere?
WebP Browser Support
As you can see only 80% of the devices only supports WebP. Not just outdated browsers, Safari/iOS Safari still doesn’t support WebP.
Why serving WebP is hard?
As you’ve noticed we’ve to deliver images according to the browser. If the browser doesn’t support WebP, we’ve to serve them the original image (jpg/png/gif).
There are mainly two ways to serve WebP:
Using picture tag
We can use picture tag to tell the browser that we do have WebP format. If the browser supports it, it will be fetched otherwise normal/fallback image.
By varied response
In varied responses, you have a single file as usual. Just like this:
The single image URL is capable of delivering jpg and webp. It’s done by the server.
Even though its file extension is ‘.jpg’, if the browser support WebP, then its response will be WebP. Also called ‘varied response’.
Picture tag vs Varied response
Each has its own pros and cons. Here is a comparison table:
Picture tag
Varied response
Works with background images
❌
✅
CDN friendly
✅
✅ (only a few)
Need to configure the server
❌
✅ (Nginx)
Works with lazy loading
✅
✅
How to Serve Images in WebP in WordPress?
Method #1 – Use CDN with only the fly WebP conversion
This is probably the easiest solution. Some CDN providers nowadays support converting images to WebP on the fly, along with image optimization.
As described above ‘varied response’ will have a single image URL that is capable of serving both WebP and non-webp images based on the requested browser.
We also need to pick the right CDN that supports WebP request headers as a cache key. Otherwise once the WebP image is cached in the server, the same will be delivered to browsers that don’t support WebP.
Setup varied response in WordPress
The easiest way to set up the varied response for WebP in WordPress is via WebP Express plugin. Just install the plugin and click ‘Save settings and force new .htaccess rules’.
WebP Express will set up a WebP converter and rewrite rules so that on receiving the request it will convert images to WebP on the fly and if the browser doesn’t support WebP, the default image will be delivered.
If you’re in Nginx
WebP Express adds necessary ‘.htaccess’ rewrite rules, but it only works in Apache or LiteSpeed or OpenLiteSpeed server. If you’re in Nginx, you’ll need to edit nginx.config and add the following code:
The above code adds necessary response headers (vary and cache-control) and try to deliver WebP if exists, otherwise, forward it to converter (based on the browser support)
CDN providers that support ‘Varied response’
If your CDN provider doesn’t support WebP as a cache key, then WebP files will be delivered to non-webp supported browsers. Similarly, there are also chances that non-webp images will be delivered to supported browsers.
BunnyCDN, KeyCDN, Google CDN and many other CDN providers support WebP as a cache key. Make sure you enable them in settings.
Kinsta or WP Engine – Contact their support to add the above Nginx config and enable cache WebP cache key in their CDN (KeyCDN).
Cloudways – Installing WebP Express and saving settings with ‘.htacess’ is enough. Since Cloudways uses a hybrid approach of Apache + Nginx, it works out of the box.
SiteGround – Contact support to add Nginx config. Use a supported CDN as mentioned above.
LiteSpeed/OpenLiteSpeed/Apache server – Installing WebP Express and saving settings with ‘.htacess’ is enough. Also, use a supported CDN as mentioned above.
Custom VPS with Nginx (LEMP stack) – Configure nginx.conf and use a supported CDN as mentioned above.
Method #3 – Using picture tag
If both of the above methods don’t work for you, you can use the picture tag. It doesn’t require any server configuration (editing nginx.conf) and it supports all CDN providers.
Using this method will alter HTML to deliver WebP. It will not work with background images, not compatible with some themes, cache plugins, lazy loading plugins etc.
If you use this method, all img tags will be converted to something like this:
If the browser supports WebP, the corresponding file is delivered, otherwise normal image.
Setup picture tag for WebP in WordPress
The easiest way to set up a picture tag is via WebP Express.
Set the operation mode to ‘CDN friendly’ and turn on ‘Alter HTML’
Conclusion
I wish there will be a day where all browsers support WebP!
If you can spend a few dollars a month, then the easiest and efficient way is to use a CDN like FlyingCDN that will convert images to WebP on the fly. Otherwise, stick with method #2 I mentioned above.
Comment below if you’ve any queries or feedback. I read and reply to each of them within 8 hours!
Comments are closed.