WebP Express

Description

More than 9 out of 10 users are using a browser that is able to display webp images. Yet, on most websites, they are served jpeg images, which are typically double the size of webp images for a given quality. What a waste of bandwidth! This plugin was created to help remedy that situation. With little effort, WordPress admins can have their site serving autogenerated webp images to browsers that supports it, while still serving jpeg and png files to browsers that does not support webp.

The image converter

The plugin uses the WebP Convert library to convert images to webp. WebP Convert is able to convert images using multiple methods. There are the “local” conversion methods: imagick, cwebp, vips, gd. If none of these works on your host, there are the cloud alternatives: ewww (paid) or connecting to a WordPress site where you got WebP Express installed and you enabled the “web service” functionality.

The “Serving webp to browsers that supports it” part.

The plugin supports different ways of delivering webps to browsers that supports it:

  1. By routing jpeg/png images to the corresponding webp – or to the image converter if the image hasn’t been converted yet.
  2. By altering the HTML, replacing image tags with picture tags. Missing webps are auto generated upon visit.
  3. By altering the HTML, replacing image URLs so all points to webp. The replacements only being made for browsers that supports webp. Again, missing webps are auto generated upon visit.
  4. In combination with Cache Enabler, the same as above can be achieved, but with page caching.
  5. You can also deliver webp to all browsers and add the webpjs javascript, which provides webp support for browsers that doesn’t support webp natively. However, beware that the javascript doesn’t support srcset attributes, which is why I haven’t added that method to the plugin (yet).

The plugin implements the “WebP On Demand” solution described here and builds on a bunch of open source libraries (all maintained by me):
WebP Convert: For converting images to webp
WebP Convert Cloud Service: For the Web Service functionality
DOM Util for WebP: For the Alter HTML functionality
Image MimeType Guesser: For detecting mime types of images.
HTAccess Capability Tester: For testing .htaccess capabilities in a given directory, using live tests
WebP Convert File Manager: For browsing conversions and triggering conversions.
Exec With Fallback: For emulating exec() on systems where it is disabled (using proc_open(), passthru() or similar alternatives).

Benefits

  • Much faster load time for images in browsers that supports webp. The converted images are typically less than half the size (for jpeg), while maintaining the same quality. Bear in mind that for most web sites, images are responsible for the largest part of the waiting time.
  • Better user experience (whether performance goes from terrible to bad, or from good to impressive, it is a benefit).
  • Better ranking in Google searches (performance is taken into account by Google).
  • Less bandwidth consumption – makes a huge difference in the parts of the world where the internet is slow and costly (you know, ~80% of the world population lives under these circumstances).
  • Currently ~97% of all traffic are done with browsers supporting webp.
  • It’s great for the environment too! Reducing network traffic reduces electricity consumption which reduces CO2 emissions.

Limitations

Supporting WebP Express

Bread on the table don’t come for free, even though this plugin does, and always will. I enjoy developing this, and supporting you guys, but I kind of need the bread too. Please make it possible for me to continue wasting time on this plugin:

Supporters of WebP Express

Persons who recently contributed with ko-fi – Thanks!

  • 3 Nov: Tobi
  • 5 Nov: Anon
  • 18 Nov: Oleksii
  • 20 Feb: Assen Kovatchev
  • 22 Feb: Peter
  • 29 Feb: Luis Méndez Alejo
  • 5 Mar: tomottoe
  • 9 Mar: La Braud

Persons who contributed with extra generously amounts of coffee / lifetime backing (>30$) – thanks!:

  • Max Kreminsky ($115)
  • Justin – BigScoots ($105)
  • Bill Vallance ($102)
  • Label Vier ($100)
  • Sebastian ($99)
  • Tammy Lee ($90)
  • Steven Sullivan ($51)
  • Mathieu Gollain-Dupont ($50)
  • Erica Dreisbach ($50)
  • Brian Laursen ($50)
  • Dimitris Vayenas ($50)

Persons currently backing the project via GitHub Sponsors or patreon – Thanks!

Screenshots

  • WebP Express settings

Installation

  1. Upload the plugin files to the /wp-content/plugins/webp-express directory, or install the plugin through the WordPress plugins screen directly.
  2. Activate the plugin through the ‘Plugins’ screen in WordPress
  3. Configure it (the plugin doesn’t do anything until configured)
  4. Verify that it works
  5. (Optional) Bulk convert all images, either in the admin ui or using WP CLI (command: “webp-express”)

Configuring

You configure the plugin in Settings > WebP Express.

Operation modes

As sort of a main switch, you can choose between the following modes of operation:

Varied image responses:
WebP Express creates redirection rules for images, such that a request for a jpeg will result in a webp – but only if the request comes from a webp-enabled browser. If a webp already exists, it is served immediately. Otherwise it is converted and then served. Note that not all CDN’s handles varied responses well.

CDN friendly:
In “CDN friendly” mode, a jpeg is always served as a jpeg. Instead of varying the image response, WebP Express alters the HTML for webp usage.

Just redirect:
In “just redirect” mode, WebP Express is used just for redirecting jpeg and pngs to existing webp images in the same folder. So in this mode, WebP express will not do any converting. It may be that you use another plugin for that, or that you converted the images off-line and uploaded them manually.

Tweaked:
Here you have all options available.

Conversion methods

WebP Express has a bunch of methods available for converting images: Executing cwebp binary, Gd extension, Imagick extension, ewww cloud converter and remote WebP express. Each requires something. In many cases, one of the conversion methods will be available. You can quickly identify which converters are working – there is a green icon next to them. Hovering conversion methods that are not working will show you what is wrong.

In case no conversion methods are working out of the box, you have several options:
– You can install this plugin on another website, which supports a local conversion method and connect to that using the “Remote WebP Express” conversion method
– You can purchase a key for the ewww cloud converter. They do not charge credits for webp conversions, so all you ever have to pay is the one dollar start-up fee ??
– You can set up webp-convert-cloud-service on another server and connect to that. Its open source.
– You can try to meet the server requirements of cwebp, gd, imagick or gmagick. Check out this wiki page on how to do that

Quality detection of jpegs

If your server has Imagick extension or is able to execute imagemagick binary, the plugin will be able to detect the quality of a jpeg, and use that quality for the converted webp. You can tell if the quality detection is available by hovering the help icon in Conversion > Jpeg options > Quality for lossy. The last line in that help text tells you.

This auto quality has benefits over fixed quality as it ensures that each conversion are converted with an appropriate quality. Encoding low quality jpegs to high quality webps does not magically increase the visual quality so that your webp looks better than the original. But it does result in a much larger filesize than if the jpeg where converting to a webp with the same quality setting as the original.

If you do not have quality detection working, you can try one of the following:
– Install Imagick on the server (for this purpose, it is not required that it is compiled with WebP support)
– Install imagemagick on the server and grant permission for PHP to use the “exec” function.
– Use “Remote WebP Express” converter to connect to a site, that does have quality detection working
– If you have cwebp converter available, you can configure it to aim for a certain reduction, rather than using the quality parameter. Set this to for example 50%, or even 45%.

Verifying that it works (in “Varied image responses” mode)

  1. Make sure at least one of the conversion methods are working. It should have a green checkmark next to it.
  2. If you haven’t saved yet, click “Save settings”. This will put redirection rules into .htaccess files in the relevant directories (typically in uploads, themes and wp-content/webp-express/webp-images, depending on the “Scope” setting)
  3. I assume that you checked at least one of the two first checkboxes in the .htaccess rules section. Otherwise you aren’t using “varied responses”, and then the “CDN friendly” mode will be more appropriate.
  4. Click the “Live test” buttons to see that the enabled rules actually are working. If they are not, it could be that the server needs a little time to recognize the changed rules.

The live tests are quite thorough and I recommend them over a manual test. However, it doesn’t hurt to do a manual inspection too.

Doing a manual inspection

Note that when WebP Express is serving varied image responses, the image URLs still points to the jpg/png. If the URL is visited using a browser that supports webp, however, the response will be a webp image. So there is a mismatch between the file extension (the filename ends with “jpg” or “png”) and the file type. But luckily, the browser does not rely on the extension to determine the file type, it only looks at the Content-Type response header.

To verify that the plugin is working (without clicking the test button), do the following:

  • Open the page in a browser that supports webp, ie Google Chrome
  • Right-click the page and choose “Inspect”
  • Click the “Network” tab
  • Reload the page
  • Find a jpeg or png image in the list. In the “type” column, it should say “webp”

You can also look at the headers. When WebP Express has redirected to an existing webp, there will be a “X-WebP-Express” header with the following value: “Redirected directly to existing webp”. If there isn’t (and you have checked “Enable redirection to converter”), you should see a “WebP-Convert-Log” header (WebP-Express uses the WebP Convert for conversions).

Notes

Note:
The redirect rules created in .htaccess are pointing to a PHP script. If you happen to change the url path of your plugins, the rules will have to be updated. The .htaccess also passes the path to wp-content (relative to document root) to the script, so the script knows where to find its configuration and where to store converted images. So again, if you move the wp-content folder, or perhaps moves WordPress to a subfolder, the rules will have to be updated. As moving these things around is a rare situation, WebP Express are not using any resources monitoring this. However, it will do the check when you visit the settings page.

Note:
Do not simply remove the plugin without deactivating it first. Deactivation takes care of removing the rules in the .htaccess file. With the rules there, but converter gone, your Google Chrome visitors will not see any jpeg images.

Bulk convert

You can start a bulk conversion two ways:
1. In the admin UI. On the settings screen, there is a “Bulk Convert” button
2. By using WP CLI (command: “webp-express”).

I’m currently working on a file manager interface, which will become a third way.

Making sure new images becomes converted

There are several ways:
1. Enable redirection to converter in the .htaccess rules section.
2. Enable “Convert on upload”. Note that this may impact upload experience in themes which defines many formats.
3. Set up a cron job, which executes wp webp-express convert regularily

WP CLI command

WebP Express currently supports commands for converting and flushing webp images throug the CLI. You can use the –help option to learn about the options:
wp webp-express –help. Displays the available commands
wp webp-express convert –help. Displays the available options for the “convert” command.

A few examples:
wp webp-express convert: Creates webp images for all unconverted images
wp webp-express convert –reconvert: Also convert images that are already converted
wp webp-express convert themes: Only images in the themes folder
wp webp-express convert uploads/2021: Only images in the “2021” folder inside the uploads folder
wp webp-express convert –only-png: Only the PNG images
wp webp-express convert –quality=50: Use quality 50 (instead of what was entered in settings screen)
wp webp-express convert –converter=cwebp: Specifically use cwebp converter.

wp webp-express flushwebp: Remove all webp images
wp webp-express flushwebp –only-png: Remove all webp images that are conversions of PNG images

Synopsises:

wp webp-express convert [<location>] [--reconvert] [--only-png] [--only-jpeg] [--quality=<number>] [--near-lossless=<number>] [--alpha-quality=<number>] [--encoding=<auto|lossy|lossless>] [--converter=<converter>]
wp webp-express flushwebp [--only-png]

I’m considering adding commands for viewing status, viewing conversion stats, generating the .htaccess files and modifying the settings. Please let me know if you need any of these or perhaps something else.

FAQ

How do I verify that the plugin is working?

Verifying that the plugin works in “Varied image responses” mode
1. Make sure at least one of the conversion methods are working. It should have a green checkmark next to it.
2. If you haven’t saved yet, click “Save settings”. This will put redirection rules into .htaccess files in the relevant directories (typically in uploads, themes and wp-content/webp-express/webp-images, depending on the “Scope” setting)
3. I assume that you checked at least one of the checkboxes in the .htaccess rules section – otherwise you might as well change to “CDN friendly” mode. The first
4. Click the “Live test” buttons to see that the enabled rules actually are working. If they are not, it could be that the server needs a little time to recognize the changed rules.

The live tests are quite thorough and I recommend them over a manual test. However, it doesn’t hurt to do a manual inspection too.

Doing a manual inspection

Note that when WebP Express is serving varied image responses, the image URLs still points to the jpg/png. If the URL is visited using a browser that supports webp, however, the response will be a webp image. So there is a mismatch between the file extension (the filename ends with “jpg” or “png”) and the file type. But luckily, the browser does not rely on the extension to determine the file type, it only looks at the Content-Type response header.

To verify that the plugin is working (without clicking the test button), do the following:

  • Open the page in a browser that supports webp, ie Google Chrome
  • Right-click the page and choose “Inspect”
  • Click the “Network” tab
  • Reload the page
  • Find a jpeg or png image in the list. In the “type” column, it should say “webp”

You can also look at the headers. When WebP Express has redirected to an existing webp, there will be a “X-WebP-Express” header with the following value: “Redirected directly to existing webp”. If there isn’t (and you have checked “Enable redirection to converter”), you should see a “WebP-Convert-Log” header (WebP-Express uses the WebP Convert for conversions).

No conversions methods are working out of the box

Don’t fret – you have options!

  • If you a controlling another WordPress site (where the local conversion methods DO work), you can set up WebP Express there, and then connect to it by configuring the “Remote WebP Express” conversion method.
  • You can also setup the ewww conversion method. To use it, you need to purchase an api key. They do not charge credits for webp conversions, so all you ever have to pay is the one dollar start-up fee ?? (unless they change their pricing – I have no control over that). You can buy an api key here: https://ewww.io/plans/
  • I have written a template letter which you can send to your webhost
  • You can try to get one of the local converters working. Check out this page on the webp-convert wiki. There is also this test/troubleshooting script which is handy when messing around with this.
  • Finally, if you have access to another server and are comfortable with installing projects with composer, you can install webp-convert-cloud-service. It’s open source.

Of course, there is also the option of using another plugin altogether. I can recommend Optimole. If you want to try that out and want to support me in the process, follow this link. It is an affiliate link and will give me a reward in case you decide to sign up.

It doesn’t work – Although test conversions work, it still serves jpeg images

Actually, you might be mistaking, so first, make sure that you didn’t make the very common mistake of thinking that something with the URL example.com/image.jpg must be a jpeg image. The plugin serves webp images on same URL as the original (unconverted) images, so do not let appearances fool you! Confused? See next FAQ item.

Assuming that you have inspected the content type header, and it doesn’t show “image/webp”, please make sure that:
1) You tested with a browser that supports webp (such as Chrome)
2) The image URL you are looking at are not pointing to another server (such as gravatar.com)

Assuming that all above is in place, please look at the response headers to see if there is a X-WebP-Convert-Status header. If there isn’t, well, then it seems that the problem is that the image request isn’t handed over to WebP Express. Reasons for that can be:

  • You are on NGINX (or an Apache/Nginx combination). NGINX requires special attention, please look at that FAQ item
  • You are on WAMP. Please look at that FAQ item

I shall write more on this FAQ item… Stay tuned.

How can a webp image be served on an URL ending with “jpg”?

Easy enough. Browsers looks at the content type header rather than the URL to determine what it is that it gets. So, although it can be confusing that the resource at example.com/image.jpg is a webp image, rest assured that the browsers are not confused. To determine if the plugin is working, you must therefore examine the content type response header rather than the URL. See the “How do I verify that the plugin is working?” Faq item.

I am btw considering making an option to have the plugin redirect to the webp instead of serving immediately. That would remove the apparent mismatch between file extension and content type header. However, the cost of doing that will be an extra request for each image, which means extra time and worse performance. I believe you’d be ill advised to use that option, so I guess I will not implement it. But perhaps you have good reasons to use it? If you do, please let me know!

WP CLI, but how do I use it to bulk convert?

Well, first, if you don’t know WP CLI, here is a quick start

WebP Express currently supports commands for converting and flushing webp images throug the CLI. You can use the –help option to learn about the options:
wp webp-express –help. Displays the available commands
wp webp-express convert –help. Displays the available options for the “convert” command.

A few examples:
wp webp-express convert: Creates webp images for all unconverted images
wp webp-express convert –reconvert: Also convert images that are already converted
wp webp-express convert themes: Only images in the themes folder
wp webp-express convert uploads/2021: Only images in the “2021” folder inside the uploads folder
wp webp-express convert –only-png: Only the PNG images
wp webp-express convert –quality=50: Use quality 50 (instead of what was entered in settings screen)
wp webp-express convert –quality=50 –near-lossless=50 –alpha-quality=50 –encoding=lossy: More conversion options. encoding can be “lossy”, “lossless” or “auto”
wp webp-express convert –converter=cwebp: Specifically use cwebp converter. Other options: “vips”, “imagemagick”, “ffmpeg”. PS: For “ewww” and “wpc” (remote webp express) does not work here.

wp webp-express flushwebp: Remove all webp images
wp webp-express flushwebp –only-png: Remove all webp images that are conversions of PNG images

Synopsises:

wp webp-express convert [<location>] [--reconvert] [--only-png] [--only-jpeg] [--quality=<number>] [--near-lossless=<number>] [--alpha-quality=<number>] [--encoding=<auto|lossy|lossless>] [--converter=<converter>]
wp webp-express flushwebp [--only-png]

I’m considering adding commands for viewing status, viewing conversion stats, generating the .htaccess files and modifying the settings. Please let me know if you need any of these or perhaps something else.

Blank images in Safari?

WebP Express has three ways of distributing webp to webp-enabled browsers while still sending the originals to webp-disabled browsers. While method 1 can be combined with any of the other methods, you would usually just pick method 1 or one of the others if method 1 cannot be used for you.

Can some of these go wrong?
Yes. All!

Method 1: Varied image responses
The “Varied image responses” method adds rules to the .htaccess which redirects jpegs and pngs to the corresponding webps (if they exist). The rules have a condition that makes sure they only trigger for browsers supports webp images (this is established by examining the “accept” header).

I the method “varied image responses” because the response on a given image URL varies (the webp is served on the same URL as the jpeg/png).

In the cases where method 1 fails, it is due to systems that cache images by the URL alone. To prevent this from happening, the .htaccess rules adds a Vary:Accept response header. However, most CDNs does not respect that header unless they are configured to do so. Fortunately proxy servers respects it nicely (however often by throwing out the cached image if the accept header doesn’t match)

Method 1 can go wrong if:

  1. You are using a CDN and it hasn’t been set up to handle varied image responses. If this has happened, it is critical that you purge the CDN cache! For information regarding CDN setups, check out the CDN section in this FAQ
  2. Your server doesn’t support adding response headers in .htaccess. On Apache, the “mod_headers” module needs to be enabled. Otherwise the all important Vary:Accept response header will not be set on the response.
  3. Your server doesn’t support SetEnv. However, that module is fortunately very common. I have posted a possible solution to make the rules work without SetEnv here.
  4. You are on Nginx and you haven’t created rules that adds the Vary:Accept header.

I do not believe it can go wrong in other ways. To be certain, please check out this test page. When visiting the test-page with Safari, you should see two images with the “JPG” label over them. When visiting the test-page with a browser that supports webp, you should see two images with the “WEBP” label over them. If you do not see one of these things, please report! (no-one has yet experienced that)

Since WebP Express 0.15.0 you can use the “Live test” button to check that browsers not supporting webp gets the original files and that the Vary:Accept header is returned. Note however that it may not detect CDN caching problems if the CDN doesn’t cache a new image immediately – and across all its nodes.

Method 2: Altering HTML to use picture tags
IMG tags are replaced with PICTURE tags which has two sources. One of them points to the webp and has the “content-type” set to “image/webp”. The other points to the original. The browser will select the webp source if it supports webp and the other source if it doesn’t.

Method 2 can go wrong on old browser that doesn’t support the picture tag syntax. However, simply enable the “Dynamically load picturefill.js on older browsers” option, and it will take care of that issue.

Method 3: Altering HTML to point directly to webps in webp enabled browsers
In this solution, the URLs in the HTML are modified for browsers that supports webp. Again, this is determined by examining the “accept” header. So, actually the complete page HTML varies with this method.

Method 3 can go wrong if you are using a page caching plugin if that plugin does not create a separate webp cache for webp-enabled browsers. The Cache Enabler plugin handles this. I don’t believe there are other page caching plugins that does. There is a FAQ section in this FAQ describing how to set Cache Enabler up to work in tandem with WebP Express.

Note that Firefox 66+ unfortunately stopped including “image/webp” in the “accept” header it sends when requesting the page. While Firefox 66+ fortunately still includes “image/webp” in its accept header for images. That will however not get it webp images when using method 3.

I am on NGINX or OpenResty

WebP Express works well on NGINX, however the UI is not streamlined NGINX yet. And of course, NGINX does not process the .htaccess files that WebP Express generates. WebP Express can be used without redirection, as it can alter HTML to use picture tags which links to the webp alternative. See “The simple way” below. Or, you can get your hands dirty and set up redirection in NGINX guided by the “The advanced way” section below.

The simple way (no redirecting rules)
The easy solution is simply to use the plugin in “CDN friendly” mode, do a bulk conversion (takes care of converting existing images), activate the “Convert on upload” option (takes care of converting new images in the media library) and enable Alter HTML (takes care of delivering webp to webp enabled browsers while still delivering the original jpeg/png to browsers not supporting webp).

PRO: Very easy to set up.
CON: Images in external CSS and images being dynamically added with javascript will not be served as webp.
CON: New new theme images will not be converted until you run a new Bulk conversion

The advanced way (creating NGINX redirecting rules)
Creating NGINX rules requires manually inserting redirection rules in the NGINX configuration file (nginx.conf or the configuration file for the site, found in /etc/nginx/sites-available). If you do not have access to do that, you will have to settle with the “simple way” described above.

There are two different approaches to achieve the redirections. The one that I recommend is based on a try_files directive. If that doesn’t work for you, you can try the alternative rules that are based on the rewrite directive. The rules are described in the next couple of sections.

For multisite on NGINX, read here

Recommended rules (using “try_files”)

Preparational step:
The rules looks for existing webp files by appending “.webp” to the URL. So for this to work, you must configure WebP Express to store the converted files like that by setting General > File extension to Append “.webp”

The rules:
Insert the following in the server context of your configuration file (usually found in /etc/nginx/sites-available). “The server context” refers to the part of the configuration that starts with “server {” and ends with the matching “}”.

# WebP Express rules
# --------------------
location ~* ^/?wp-content/.*\.(png|jpe?g)$ {
  add_header Vary Accept;
  expires 365d;
  if ($http_accept !~* "webp"){
    break;
  }
  try_files
    /wp-content/webp-express/webp-images/doc-root/$uri.webp
    $uri.webp
    /wp-content/plugins/webp-express/wod/webp-on-demand.php?xsource=x$request_filename&wp-content=wp-content
    ;
}

# Route requests for non-existing webps to the converter
location ~* ^/?wp-content/.*\.(png|jpe?g)\.webp$ {
    try_files
      $uri
      /wp-content/plugins/webp-express/wod/webp-realizer.php?xdestination=x$request_filename&wp-content=wp-content
      ;
}
# ------------------- (WebP Express rules ends here)

BEWARE:
– Beware that when copy/pasting you might get html-encoded characters. Verify that the ampersand before “wp-content” isn’t encoded (in the last line in the try_files block)

  • Beware that the rules looks for existing webp files by appending “.webp” to the URL. So for this to work, you must configure WebP Express to store the converted files like that.

  • Beware that if you haven’t enabled png conversion, you should replace “(png|jpe?g)” with “jpe?g”.

  • Beware that if you have moved wp-content to a non-standard place, you must change accordingly. Note that you must then also change the “wp-content” parameter to the script. It expects a relative path to wp-content (from document root) and is needed so the script can find the configuration file.

  • Beware that there is a hack out there for permalinks which is based on “rewrite” (rather than the usual solution which is based on try_files). If you are using that hack to redirect missing files to index.php, you need to modify it as specified here

  • I have put in an expires statement for caching. You might want to modify or disable that.

  • The rules contains all redirections (as if you enabled all three redirection options in settings). If you do not wish to redirect to converter, remove the last line in the try_files block. If you do not wish to create webp files upon request, remove the last location block.

  • If you have configured WebP Express to store images in separate folder, you do not need the “$uri.webp” line in the first “try_files” block. But it doesn’t hurt to have it. And beware that the reverse is not true. If configured to store images in the same folder (“mingled”), you still need the line that looks for a webp in the separate folder. The reason for this is that the “mingled” only applies to the images in the upload folder – other images – such as theme images are always stored in a separate folder.

If you cannot get this to work then perhaps you need to add the following to your mime.types configuration file:
image/webp webp;

If you still cannot get it to work, you can instead try the alternative rules below.

Credits: These rules are builds upon Eugene Lazutkins solution.

Alternative rules (using “rewrite”)

In case the recommended rules does not work for you, you can try these alternative rules.

The reason I recommend the try_files approach above over these alternative rules is that it is a bit simpler and it is supposed to perform marginally better. These alternative rules are in no way inferior to the other. Choose whatever works!

Preparational step:
The rules looks for existing webp files by appending “.webp” to the URL. So for this to work, you must configure WebP Express to store the converted files like that by setting General > File extension to Append “.webp”. Also make sure that WebP Express is configured with “Destination” set to “Mingled”.

The rules:
Insert the following in the server context of your configuration file (usually found in /etc/nginx/sites-available). “The server context” refers to the part of the configuration that starts with “server {” and ends with the matching “}”.

# WebP Express rules
# --------------------
location ~* ^/wp-content/.*\.(png|jpe?g)$ {
    add_header Vary Accept;
    expires 365d;
}
location ~* ^/wp-content/.*\.webp$ {
    expires 365d;
    if ($whattodo = AB) {
        add_header Vary Accept;
    }
}
if ($http_accept ~* "webp"){
    set $whattodo A;
}
if (-f $request_filename.webp) {
    set $whattodo  "${whattodo}B";
}
if ($whattodo = AB) {
    rewrite ^(.*) $1.webp last;
}
if ($whattodo = A) {
    rewrite ^/wp-content/.*\.(jpe?g|png)$ /wp-content/plugins/webp-express/wod/webp-on-demand.php?xsource=x$request_filename&wp-content=wp-content break;
}
# ------------------- (WebP Express rules ends here)

BEWARE:

  • Beware that when copy/pasting you might get html-encoded characters. Verify that the ampersand before “wp-content” isn’t encoded (in the last line in the try_files block)

  • Beware that the rules looks for existing webp files by appending “.webp” to the URL. So for this to work, you must configure WebP Express to store the converted files like that.

  • Beware that if you haven’t enabled png conversion, you should replace “(png|jpe?g)” with “jpe?g”.

  • Beware that if you have moved wp-content to a non-standard place, you must change accordingly. Note that you must then also change the “wp-content” parameter to the script. It expects a relative path to wp-content (from document root) and is needed so the script can find the configuration file.

  • Beware that there is a hack out there for permalinks which is based on “rewrite” (rather than the usual solution which is based on try_files). If you are using that hack to redirect missing files to index.php, you need to modify it as specified here

  • I have put in an expires statement for caching. You might want to modify or disable that.

  • I have not set any expire on the webp-on-demand.php request. This is not needed, as the script sets this according to what you set up in WebP Express settings. Also, trying to do it would require a new location block matching webp-on-demand.php, but that would override the location block handling php files, and thus break the functionality.

  • There is no longer any reason to add “&$args” to the line begining with “/wp-content”. It was there to enable debugging a single image by appending “?debug” to the url. I however removed that functionality from webp-on-demand.php.

It is possible to put this stuff inside a location directive. However, having if directives inside location directives is considered evil. But it seems that in our case, it works. If you wish to do that, use the following rules instead:

# WebP Express rules
# --------------------
location ~* ^/wp-content/.*\.(png|jpe?g)$ {
    add_header Vary Accept;
    expires 365d;

    if ($http_accept ~* "webp"){
        set $whattodo A;
    }
    if (-f $request_filename.webp) {
        set $whattodo  "${whattodo}B";
    }
    if ($whattodo = AB) {
        rewrite ^(.*) $1.webp last;
    }
    if ($whattodo = A) {
        rewrite ^/wp-content/.*\.(jpe?g|png)$ /wp-content/plugins/webp-express/wod/webp-on-demand.php?xsource=x$request_filename&wp-content=wp-content last;
    }
}

location ~* ^/wp-content/.*\.webp$ {
    expires 365d;
    if ($whattodo = AB) {
        add_header Vary Accept;
    }
}
# ------------------- (WebP Express rules ends here)

PS: In case you only want to redirect images to the script (and not to existing), the rules becomes much simpler:

# WebP Express rules
# --------------------
if ($http_accept ~* "webp"){
  rewrite ^/(.*).(jpe?g|png)$ /wp-content/plugins/webp-express/wod/webp-on-demand.php?xsource=x$request_filename&wp-content=wp-content break;
}
# ------------------- (WebP Express rules ends here)

Discussion on this topic here
And here: https://github.com/rosell-dk/webp-express/issues/166

Here are rules if you need to replace the file extension with “.webp” rather than appending “.webp” to it: https://www.keycdn.com/support/optimus/configuration-to-deliver-webp

I am on a Windows server

Good news! It should work now, thanks to a guy that calls himself lwxbr. At least on XAMPP 7.3.1, Windows 10. https://github.com/rosell-dk/webp-express/pull/213.

I am on a Litespeed server

You do not have to do anything special for it to work on a Litespeed server. You should be able to use WebP Express in any operation mode. For best performance, I however recommend that use the LiteSpeed Cache plugin for page caching.

LiteSpeed Cache can be set up to maintain separate page caches for browsers that supports webp and browsers that don’t. Through this functionality it is possible to use “Alter HTML” with the option “Replace image URLs” and “Only do the replacements in webp enabled browsers” mode.

The setup was kindly shared and explained in detail by @ribeiroeder here

I am using Jetpack

If you install Jetpack and enable the “Speed up image load times” then Jetpack will alter the HTML such that images are pointed to their CDN.

Ie:

becomes:

Jetpack automatically serves webp files to browsers that supports it using same mechanism as the standard WebP Express configuration: If the “Accept” header contains “image/webp”, a webp is served (keeping original file extension, but setting the “content-type” header to “image/webp”), otherwise a jpg is served.

As images are no longer pointed to your original server, the .htaccess rules created by WebP Express will not have any effect.

So if you are using Jetpack you don’t really need WebP Express?
Well, there is no point in having the “Speed up image load times” enabled together with WebP Express.

But there is a case for using WebP Express rather than Jetpacks “Speed up image load times” feature:

Jetpack has the same drawback as the standard WebP Express configuration: If a user downloads the file, there will be a mismatch between the file extension and the image type (the file is ie called “logo.jpg”, but it is really a webp image). I don’t think that is a big issue, but for those who do, WebP Express might still be for you, even though you have Jetpack. And that is because WebP Express can be set up just to generate webp’s, without doing the internal redirection to webp (will be possible from version 0.10.0). You can then for example use the Cache Enabler plugin, which is able to generate and cache two versions of each page. One for browsers that accepts webp and one for those that don’t. In the HTML for webp-enabled browsers, the images points directly to the webp files.

Pro Jetpack:
– It is a free CDN which serves webp out of the box.
– It optimizes jpegs and pngs as well (but note that only about 1 out of 5 users gets these, as webp is widely supported now)

Con Jetpack:
– It is a big plugin to install if you are only after the CDN
– It requires that you create an account on WordPress.com

Pro WebP Express:
– You have control over quality and metadata
– It is a small plugin and care has been taken to add only very little overhead
– Plays well together with Cache Enabler. By not redirecting jpg to webp, there is no need to do any special configuration on the CDN and no issue with misleading file extension, if user downloads a file.

Con WebP Express:
– If you are using a CDN and you are redirecting jpg to webp, you must configure the CDN to forward the Accept header. It is not possible on all CDNs.

Why do I not see the option to set WebP quality to auto?

The option will only display, if your system is able to detect jpeg qualities. To make your server capable to do that, install Imagick extension (PECL >= 2.2.2) or enable exec() calls and install either Imagick or Gmagick.

If you have the Imagick, the Imagick binary or the Remote WebP Express conversion method working, but don’t have the global “auto” option, you will have the auto option available in options of the individual converter.

Note: If you experience that the general auto option doesn’t show, even though the above-mentioned requirements should be in order, check out this support-thread.

How do I configure my CDN in “Varied image responses” operation mode?

In Varied image responses operation mode, the image responses varies depending on whether the browser supports webp or not (which browsers signals in the Accept header). Some CDN’s support this out of the box, others requires some configuration and others doesn’t support it at all.

For a CDN to cooperate, it needs to
1) forward the Accept header and
2) Honour the Vary:Accept response header.

You can also make it “work” on some CDN’s by bypassing cache for images. But I rather suggest that you try out the CDN friendly mode (see next FAQ item)

Status of some CDN’s:

  • KeyCDN: Does not support varied image responses. I have added a feature request here. You can give it a +1 if you like!
  • Cloudflare: See the “I am on Cloudflare” section
  • Cloudfront: Works, but needs to be configured to forward the accept header. Go to Distribution settings, find the Behavior tab, select the Behavior and click the Edit button. Choose Whitelist from Forward Headers and then add the “Accept” header to the whitelist.

I shall add more to the list. You are welcome to help out here.

How do I make it work with CDN? (“CDN friendly” mode)

In CDN friendly mode, there is no trickery with varied image responses, so no special attention is required on the CDN.

However, there are other pitfalls.

The thing is that, unless you have the whole site on a CDN, you are probably using a plugin that alters the HTML in order to point your static assets to the CDN. If you have enabled the “Alter HTML” in WebP Express, it means that you now have two alterations on the image URLs!

How will that play out?

Well, if WebP Express gets to alter the HTML after the image URLs have been altered to point to a CDN, we have trouble. WebP Express does not alter external images but the URLs are now external.

However, if WebP Express gets to alter the HTML before the other plugin, things will work fine.

So it is important that WebP Express gets there first.

The good news is that WebP Express does get there first on all the plugins I have tested.

But what can you do if it doesn’t?

Firstly, you have an option in WebP Express to select between:
1. Use content filtering hooks (the_content, the_excerpt, etc)
2. The complete page (using output buffering)

The content filtering hooks gets to process the content before output buffering does. So in case output buffering isn’t early enough for you, choose the content filtering hooks.

There is a risk that you CDN plugin also uses content filtering hooks. I haven’t encountered any though. But if there is any out there that does, chances are that they get to process the content before WebP Express, because I have set the priority of these hooks quite high (10000). The reasoning behind this is to that we want to replace images that might be inserted using the same hook (for example, a theme might use the_content filter to insert the featured image). If you do encounter a plugin for changing URLs for CDN which uses the content filtering hooks, you are currently out of luck. Let me know, so I can fix that (ie. by making the priority configurable)

Here are a list of some plugins for CDN and when they process the HTML:

Plugin
Method
Hook(s)
Priority

BunnyCDN
Output buffering
template_redirect
default (10)

CDN enabler
Output buffering
template_redirect
default (10)

Jetpack
content filtering
the_content, etc
the_content: 10

W3 Total Cache
Output buffering
no hooks. Buffering is started before hooks

WP Fastest Cache
Output buffering
no hooks. Buffering is started before hooks

WP Super Cache
Output buffering
init
default (10)

With output buffering the plugin that starts the output buffering first gets to process the output last. So WebP Express starts as late as possible, which is on the template_redirect hook, with priority 10000 (higher means later). This is later than the init hook, which is again later than the no hooks.

I am on Cloudflare

Without configuration, Cloudflare will not maintain separate caches for jpegs and webp; all browsers will get jpeg. To make Cloudflare cache not only by URL, but also by header, you need to use the Custom Cache Key page rule, and add Header content to make separate caches depending on the Accept request header.

However, the Custom Cache Key rule currently requires an Enterprise account. And if you already have that, you may as well go with the Polish feature, which starts at the “Pro” level plan. …

Reviews

November 11, 2024
This stuff is the real deal: just an app that works, no hassling like premium versions or special features. Thank you.
October 29, 2024
It works. It’s seamless. It provides clear explanations of all the options. It’s done with the nicest, selfless hacker mindset there is.
July 22, 2024
While many other optimization plugins try to reduce the server work and get you to use their cloud solution (and pay), this plugin does the most suitable job. Converts the files on request from the end user, doing it on the server. Creating the required sizes and later serving the other users those images. Practically, if you upload the image and preview your post/page, the converted file is there and no more waiting. No payments, no bloatware. With popular plugins that’s mostly not the case as they do the bulk conversion by sending the files to their servers and of course – if you pay for it – send back the files when they can. It can take quite some time and often having issues as the sync can run into various troubles on your or their side. Meaning that with other plugins you may have to wait to have optimized images served (if ever). With this one, you have it there from the start. Fantastic job!
April 3, 2024
This WordPress plugin is working really well for me on a Multisite setup with Subdirectories. Additionally, I’ve configured a custom folder for image uploads in the root directory, outside of the wp-content folder. All of this is installed on a server running Debian OS, Plesk Panel, and Nginx. To achieve this, I had to tweak the Nginx configuration in Plesk, specifically in the “Web and Domains” section and then in “Apache and Nginx Settings” within the Plesk control panel. Here, I was able to input the Nginx configuration code as per the instructions provided by the plugin developer. While the first configuration option for Nginx didn’t work for me, the second option of “Alternative rules (using ‘rewrite’)” did. Now, with WordPress Multisite set up with subdirectories and a custom uploads folder, the webp images are served seamlessly, redirecting to JPG in older browsers. I really appreciate the effort put in by the plugin developer to provide these configuration options and make everything work smoothly. Thank you very much.
Read all 159 reviews

Contributors & Developers

“WebP Express” is open source software. The following people have contributed to this plugin.

Contributors

“WebP Express” has been translated into 25 locales. Thank you to the translators for their contributions.

Translate “WebP Express” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.

Changelog

0.25.9

(released 7 April 2024)
* Bugfix: Fixed ewww conversion method after ewww API change

0.25.8

(released 20 October 2023)
* Bugfix: Depreciation warning on PHP 8.2 with Alter HTML. Thanks to @igamingsolustions for reporting the bug

0.25.7

(released 19 October 2023)
* Bugfix: Removed depreciation warning on settings screen, which was showing in PHP 8.2. Thanks to Rob Meijerink from the Netherlands for providing the fix in a pull request
* Bugfix: Removed depreciation warning when converting, happening in PHP 8.2. Thanks to Sophie B for reporting and Rob Meijerink from the Netherlands for providing the fix in a pull request
* Bugfix: One of the Mime fallback methods did not work. Thanks to gerasart from Ukraine for providing the fix in a pull request

0.25.6

(released 15 April 2023)
* Bugfix: A bug in another plugin can cause delete file hook to be called with an empty string, which WebP Express was not prepared for (fatal exception). Thanks to Colin Frick from Liechtenstein for providing the fix in a pull request on github
* Bugfix: Bug when testing imagick converter from settings page (only PHP 8). Thanks to Sisir from Bangladesh for reporting and providing the fix in a pull request

0.25.5

(released 23 May 2022)
* When using the “Prevent using webps larger than original” with Alter HTML (picture tags) on images with srcset, those webps that where larger than the originals was picked out from the srcset for the webp. This could lead to bad quality images. In the fix, the image will only have a webp source alternative when ALL the webps are smaller than their originals (when the “prevent…” option is set).
* Bugfix: In rare cases, WebP Express could fail detecting mime type

0.25.4

(released 6 May 2022)
* AlterHTML (when using picture tags): Fixed charset problems for special characters in alt and title attributes. The bug was introduced in 0.25.2. Thanks to Cruglk for first pointing this out.

0.25.3

(released 4 May 2022)
* AlterHTML: Fixed BIG BUG introduced in 0.25.2 (the webp urls was wrong when using picture tags). So sorry! Thankfully, I was quickly made aware of this and quickly patched it.

0.25.2

(released 4 May 2022)
* AlterHTML did not skip existing picture tags when they contained newlines, resulting in picture tags inside picture tags, which is invalid markup. Thanks to Jonas for being very helpful in solving this.

0.25.1

(released 7 dec 2021)
* An innocent text file triggered Windows Defender. It has been removed. Thanks to Javad Naroogheh from Iran for notifying

0.25.0

(released 7 dec 2021, on my daughters 10 year birthday!)
* No exec()? – We don’t give up easily, but now emulates it if possible, using proc_open(), passthru() or other alternatives. The result is that the cwebp converter now is available on more systems. Quality detection of jpegs also works on more systems now. The fallback feature with the emulations is btw implemented in a new library, exec-with-fallback
* Bugfix: Our WP CLI command “webp-express” has a quality option, but it was not working

For older releases, check out changelog.txt

Malaking puwang ng bass splash review Bakit pinapayagan ng pamahalaan ang operasyon ng mga monopolyo How to play Super Ace jili Nice88 club withdrawal Esball online casino com registration Nuebe Gaming legit HB888 Casino real money Casino bonus no deposit free spins 2021 12 Titans Greek mythology online slot machines for real money free play Mines jili login download Allin88 ph login Casino Guru gratis Vegas World login Apanalo online game no deposit bonus 77ph Himala himala wikipedia 啶掂啷嵿ぐ啶ぞ啶?啶曕啶ぞ 啶灌? 啶す 啶囙い啶ㄠぞ 啶栢い啶班え啶距 啶曕啶啶?啶灌啶むぞ 啶灌? Mnl168 online casino register philippines login Bally slot machine value Jili live casino no deposit bonus Gcash gambling reddit philippines tamabetcasino Jili magic lamp app Mwplay888 net download for android Vegas Live Slots hack APK Clive and jill sidequest ffxvi Jiliasia online casino Online bingo jili withdrawal Chili for a crowd Silver Palate Jili168 register philippines Jili mk casino Jili cc download for android Habanero online casino games philippines Philucky withdrawal format 377 jili login register philippines Jili slots download Bsa387 login password Ginto Casino link 49jili login to my account login philippines app Royal777 casino no deposit bonus 8 juli feiertag wikipedia Ano ang mga flash game sa hollywoodbets app download Game of Thrones Slots referral code Igt address manila Zynga slots free coins cheat android Jilicash real money withdrawal Paano gumagana ang mga online slot machine login Ezwin online casino philippines Peso88 login register Jili kaganapan login register Winning plus 8 login philippines masuwerteng iikot ang mga nakakalokang slot 123jili app Login casino games online unblocked Transaction password USDT Baccarat games online real money Appointment slots vs appointment schedule quick hit slots commercial actor Multiclass spell slots table Slot schedule template 啶灌啶曕啶?啶曕ぞ 啶い啷嵿い啶?啶曕た啶むえ啶?啶灌啶むぞ 啶灌 Jili jackpot 777 download for android latest version Million 888 casino login register Tongits go apk unlimited money latest version Pinakamahusay na jili slot game download YE7 Download App BET99 Quebec Free 100 online casino registration facebook page 2021 slots no deposit bonus Online gambling philippines real money Jilibet casino login philippines Super Royal 777 Slots go casino login Register Youtube ng slots today Peso 888 apk Mini777 register download PG gaming casino login Wizard of Oz free coins gamehunters Philippine News today live 247Spin free 100 spin the wizard of oz slots free coins E2 jili casino login Konjac jelly Japan Big bet review korean Online casino Philippines News 7 Juli 2024 memperingati Hari Apa Jili 747 casino login Winph 777 login philippines app benefits of online casino games Wild aces online casino real money Mwcash88 Bonus hunter cc email Maduna clan names FF16 change party members Online casino games real money free spins no deposit Dbx casino real money philippines Okada online casino apk latest version Skype Download for PC Jilibet donnalyn login Register online casino 777 Pub download old version Spaghetti Jollibee price Jili no 1 login register Jiliasia app apk Super slots apk old version 646 casino login Register Philippines Listahan ng laro ng skillz login Totoong online pokies philippines release the kraken clash of the titans (1981) Casinos online real money philippines Phil168 APK Download Chumba Casino login Www 49 jili casino login password Fb jili casino login download apk Jlbet slot login Jili 777 lucky slot login register philippines apk Pagcor logo meaning Hard Rock online casino login 77ph com login password download Ano ang gamot sa mataas ang sugar Online casino download APK Geely Emgrand price Philippines BLBET Tapwin 2024 download apk Lodi 646 casino login ph Royal558 download Abc jili register philippines download LVJILI login Royal fishing jili download for android Free60 casino philippines Kk jili libre 58 real money download PHFUN login Nice88 download free ios Best penny slot machines to play at the casino for beginners portal.pagcor.ph sitemap online casino games no deposit bonus Unlapi AAA Jili login Bongobongo ug Casino Jili x yb download apk do 888 casino register Cash Rush slots 777 apk latest version Free online casino games win real money no deposit Philippines Fortune 888 login password Slots casino login no deposit bonus 49 jili time philippines download Nuebe register login Jili fishing game download free Win99 casino philippines Bingo Super Star download 55bmw win withdrawal Jili kilig login download Superball Keno online Hacksaw slots real money Pagcor address philippines 188 jili demo account hack Vegas online casino games free play Jili 49 net casino login philippines 777 jili jackpot apk latest version Fc slot demo free download Jili under maintenance today download android 3 patti slots patti online play Jili bingo download for android Smbet register philippines Osm jili register mobile number philippines MWGAMING 188 register Nuebe agent login philippines Online casino color games philippines Is Winford Casino open today Jili update today WK777 slot Jili casino review philippines slotomania online Lucky jili slots login register mobile 188 jili casino login download philippines Baccarat game strategy reddit Jili22 promotion How to withdraw in jili slot online 1xslots login Mnl168 online casino register philippines login Paano maglaro ng slot gambling login casino for real money online Best online casino Philippines reddit Jili deposit 50 withdrawal limit Nextbet philippines registration 168jili login registration Www royal888casino net register Double Win Withdrawal App Fisheries department officials 777 Lucky JILI Slots Casino APK download Nz online casino games real money 888php withdrawal Jili mines predictor apk Online casino jackpot slots free play yy777cam Jili one login download mainstream records lee young-ji 77ph com download free 49 jili years login register Jili slot club jackpot 777 download free money philippines Www betvisa games app 1888 jili casino withdrawal online July 10 religious holiday Labet88 login registration 2021 Osm jili casino online games philippines download Money 888 login download Empire slot machine download Ireland online casino games free play Kk jili casino login registration download apk 1000 free games to play with friends Poseidon god son Jili lucky slot app download Big baller club casino login registration philippines Fish Hunter - Shooting Fish Pnp 888 jili slot game login app Limbo game download for PC Highly Compressed Jili jackpot 777 download apk ios slot machine free games free spins deposit bonus Jackpot meter app for android Instant withdrawal betting app Dama N.V. casinos no deposit Bonus Joy 7 casino login free chips Eliakim Sadoki Hadaa Ya Walimwengu Gemdisco login 08 jili register app Jollibee slot casino login philippines register online Award winning chili recipe Allrecipes Helens Slot APK old version Mga kahinaan ng mga pragmatic slot machine login Jili pulang sobre register online Jili777 free 150 no deposit bonus Philippines Jili no 1 com withdrawal philippines Slot online game free real money Jackpot joker jili demo free download Best pg slot game free no download Wagi77 login Philippines Rich9 pinakamainit na laro login Fortune gaming88 login philippines Royal Slot Login Fun facts about July 19th Geely gx3 fiche technique philippines IND slots APK yono Ox jili slot withdrawal What happened on October 7 Al Jazeera 777 pub com login download Nice88 app 99 Fortune Casino login Register Tmtplay888 Jiliplay login download Love jili vip login password 888bet registration online Dragon vs Tiger hack apk Lucky JILI slots login register Kpl casino Online casino game for real money free play 777pub open now promo Video poker jacks or better strategy chart Jili 365 casino login register philippines no deposit bonus download Free slots com party bonus Animal Husbandry Minister Bihar list 188 JILI casino login registration Philippines Anuani ya katibu tawala mkoa wa dar es salaam NetBet registration Fg777 register philippines 90 jili live login download One slot game download Agent GEMDISCO Jili 999 com withdrawal Jilimk casino log in no deposit bonus tg777 login register philippines Pagcor login philippines List of licensed POGO in Philippines 2023 How many cannabinoid receptors are there in the human body Q25 jili download ios Ff777 vip login Jili 49 dot com registration philippines Ano ang speed roulette review Ph joy vip login registration philippines 4 ram slots which ones to use Mga puwang ng video youtube Jackpot Party Instagram free coins www.free facebook.com log in Betvisa download for android 49jili pogcor Betso888 login download Jollibee slot login Fruit Theme Birthday Party Wjslot claim form Nextbet Live Casino Lotto go Jili volatility calculator philippines Teenage Kraken Salish Matter Lucky 777 online casino login philippines Slotomania 777 casino real money Mega ace jili demo apk latest version Falcon Play customer service www.666.com games Bingo Jili PH Slots earning app real money no deposit Canara Bank Internet banking PIN generation 8K8 vip login Philippines No 1 jili app for android free download Gonzo's Quest max win 9 Pots of Gold land and win What does Mr Mike Slots do for a living Jili fc slot real money no deposit bonus Ph macao jili register download limbo apk + obb download Swcup6 net live login Register philippines Free slots 8888 no deposit philippines Jili tadhana slots download free Free casino slots 3 lines no download Jili okbet real money philippines Jili88 ph com register login password Slots earning app real money download Jili apps download free for android ios Kurdish traditional dress Labet88 online casino Ez jili telegram ios 94067 water heater door installation Real Boxing 3 download Best casino online Wishbone Games Nextbet login mobile registration Jili no 2 login no deposit bonus Poder Judicial Superace88 club login registration link Triple match 3d master mod apk Sino ang cowboy slots wife Jili 5678 casino login poker star Apanalo casino app login KK JILI casino login app apk Www gibson casino www gibsoncasino com login APEX slot download Best free slot machines play for free no deposit Mining Telegram group link Jili t7 real money Jili369 app download Progressive jackpot meter link Lampara ng genie philippines Best free slots with bonus Asia JILI casino register 888 ladies slots login UNO Spin Millionaire Dimm slots reddit King game app download apk Yy777 index login No deposit slots real money Yeriko by injili bora choir session 49 jili road register philippines Jili slot 777 login register online no deposit bonus philippines 啶啶?啶曕 啶啶班が啶?啶曕ぐ啶ㄠ 啶曕 啶夃お啶距く GGBet welcome bonus Is the 49ers coach a Christian Sino ang may akda ng medusa Ace Super ph casino Login games.747 games.ph/launchgame open now Tiktok video Zili 7 Gold Fruits slot Peraplay APK download Labet88 register philippines app Love jili vip login philippines Slots download free Jili slot jackpot login register Junglee Rummy APK Paddy power virtue Welke dag is het vandaag in belgie Nn777 login philippines app Pb777 login id and password free Sweet Bonanza free spins no deposit Online slots casino 888 real money no deposit online casino games real money Osm jili casino Megaways slots login Konami free slots no download Big Bass Hold and Spinner Megaways demo Jili 888 register Jili mines download free Best free video poker no download fishing slot casino - free 100 000 coins Jili22 NEW com register Big Bass Bonanza Geely subsidiaries in philippines State fish of bihar in english Game of Thrones Slots Casino free coins hack Lucky jili casino login registration philippines apk Mga laro ng slot na nagbabayad ng totoong pera apk Niceph casino real money Fortune Dragon PG slot demo Reference generator Jili88ph net register download FG7777 Jili super win apk best online casino games to win money Bagong jili register app 777sm vip login Jl bet slot register Jili casino sign up bonus no deposit philippines Phlove Casino Login Register Jili slot online real money Ez jili code free download Cannabinoids structure How does Dragon Link slot work 188 jili casino download free Which casino has the most winners in Vegas Goldfish slots apk Fisheries, Bihar gov in Medusa megaways real money Mwcash88 casino login Best time to play crazy time reddit Voslot jili register philippines Ang tao ba ay nagmula sa unggoy PHL63 login register Demo Jili Golden Empire Download app and get bonus Pogibet free 100 philippines 22FUN APK Lucky JILI Casino login registration Win win Game zambia online app download Win100 com casino group win100 originals win100 originals register Mlbb Win Rate Calculator APK Mi777 casino login philippines register Do888 casino login no deposit bonus Jill Scott net worth 8 jili slot download for android 55X Casino Login Register Philippines Ug777 app download apk for android 94067 water heater door replacement Loveph casino Tianjin University of Science and Technology How to play Fortune Gems online Earn money online Philippines legit Xo jili com register philippines Cruise casino in Goa Play slot machines for free online no deposit Is golden Cowboy good tds online casino games volatility Tmtplay casino login register mobile 啶戉え啶侧ぞ啶囙え 啶曕啶膏啶ㄠ 啶椸啶?啶曕啶膏 啶栢啶侧啶? EZJILI Login Register Game room online casino games real money Casino dealer Reddit ph Slots jackpot meter philippines app Pldt 777 real money withdrawal Jackpot World redeem code free 2024 Jilibay free 68 no deposit bonus Bet88 ph app download for android OKBet rewards app Julie emergency contraception reviews 啶ぞ啶椸啶?啶う啶侧え啷?啶曕ぞ 啶膏す啶?啶夃お啶距く Mega win login Best online casino games real money app Jiliasia ace download Jili 178 real money app Pag-IBIG membership Double DaVinci Diamonds free slot game jili 711 Slot virtual real money free Jili tongits withdrawal limit Okbet casino login philippines download Sabong derby 2023 Full Video MONOPOLY Slots download White part of eye swollen like jelly home remedies Ez jili codes 2021 Wjslot com rewards login How many evolutions can you have in a deck Clash Royale Online casino jili login register House of Fun VIP PLUS download SM Megamall 3 day sale 2024 dates Phil163 login Simple chili recipe Jili slot machine apk latest version Jili188 login download Boss88 Slot Login Jili go login philippines Online casino games with free signup bonus philippines Jili mines download apk Fc slot online philippines Y777 jili real money withdrawal Win99 online casino login register Lucky jili slots login register mobile philippines BetVictor UK Jilino1 new site Jili no minimum deposit philippines 2020 Royal777 login register philippines Forgot transaction password in phdream Casino plus jili slot real money Win99 slot games free apk Nn777 slot jili real money 38jili login GO Keyboard APK betBonanza mobile login registration Dragon cash vs Dragon Link 8k8 online casino games downloadable content philippines Best slots to play on FanDuel reddit balato8aa Crown89ph casino login Online casino builder Wjevo22 app irich slots&games casino 777 Boxing king casino real money Jili22 vip202 download online casino games with no minimum deposit Mega Wheel game download Jili apps download for android free Diablo 4 enchantment slot not working Online lucky sweepstakes no deposit bonus 747 online casino games philippines Super ace demo game online free Spin and win cash in Uganda withdrawal PG Soft Wild Bounty Showdown 777sky slot Jiliapp download latest version Www royal888casino net register Royal slots real money login ????? ?? ???? ??? ???? ????? ????? Phkuya com casino login PHIL168 new link Royal888casino net withdrawal July 8, 2024 Casino machine Jili lucky slot app apk Pragmatikong laro ng big bass bonanza videos 200jili download latest version Dometic 94067 Online slot machines philippines 12 Titans Greek mythology Online slots strategy Casinos online slots real money Jili official website app for android Play tongits online real money philippines Bmy88 net login password Jili 646 ph register app ios Kumuha ng jili app login download Ezjili com download ios Mega Ace mechanics Jili ace 777 no deposit bonus Jili live club login Jili 747 login app 291 jili 01 register download Tongits Go new version Boss JILI casino login Rich711 casino login download 9jlbet Real money casino app apk Jili event login app Jackpot fishing jili download free Pagsasalin ng teksto Sixers game today Please complete the required turnover for withdrawal tagalog Majhail X song download Mp3 April 8 2024 holiday Philippines Pg777 login register online Crazy Time prediction telegram Tadhana slots apk download old version Transaction password in scatter example Mine (Taylor Swift release date) Jili zeus slot login register International casino app Monopolyo ng big baller login Win888pub app Diablo 4 enchantments Phmacau club 啶す啶苦啶︵啶班ぞ 啶溹啶む 啶曕 啶啶∴ Apat na uri ng tunggalian at halimbawa Sw888 casino register BYU portal 49 jili vip login philippines Ubet95 Casino login Jili 178 ph register Is online gambling legal in Philippines Jili t7 login registration form Fg777 official withdrawal How to get unlimited coins on Vegas Live Slots Go88 slot login register download Slot sites philippines Pnxbet77 legit Online lucky 9 gcash download bwinners - online sports betting virtual & casino games Fachai free 150 Casino table games inside (2008) Ocean King Jackpot download Boom casino login KK JILI Casino Login app apk Nexusgaming88 agent login philippines Bonus 365 casino login Free unlimited bingo card generator PDF Microsoft login Jill meaning slang origin Grand slot Palace online casino W888 login Jili369 real money login Nexus88 Gaming login register Jackpot fishing demo free download Jajji veer punjabi gane mp3 download online casino games not real money Wagi 777 download for android free spins bonus no deposit Best casino online slots europe Bombing Fishing demo Limbo bar game Lodigame 291 login registration philippines Mammoth Gold Megaways Peraplay login Fb jili casino login download free no deposit bonus Bingo filipino machine price Login slot machine app Nextbet app download apk Slots game machine free Is DraftKings Casino legal in Massachusetts Webcam app Free unlimited bingo card generator What do CB1 receptors do 177bet cc download Jiliasia casino login philippines Online lucky 9 gcash withdrawal KK JILI register Slots rivals ladbrokes login Jilivip download ios online casino games in florida slot o pol online Jl777 Login Register Charge Buffalo free play Lucky Tongits gcash download Ph646 register mobile philippines Promotion 100 free 58jili login registration online x570 ram slots Mines predictor free Jili17 register mobile Kkjili com app download latest version Best free bonus slots real money Gba 777 casino no deposit bonus Best slots to buy bonus GGBET GCash Wild hammer megaways apk Real money gambling games philippines Jiliko photos free Libreng mga laro ng slot online register MVG SunBet login Bet777 Login Casino keno games free online no deposit Casino ng rainbow riches real money Jili referencing indian law ppt Free casino online real money Philboss link login Jili slot 777 login register online philippines Premiumbets TG777 app login 10 07 day Pocket GK Book PDF in Hindi Online casino 50 cash in no deposit Free slots paypal deposit Phlwin online casino hash encryption games traceable fair casino apk casino game casino Jili188 tv login password 5e sorcerer spell slots guide Alamat ng wizarding wars reddit Jili slot jackpot 777 withdrawal Www jilino1 club app Betso89 register Free website browser download pagcor online casino games Poker machines games casinos online free bonus Play video poker free no download for android Is Seybold journal Scopus Indexed How to withdraw in jili online gcash mwplay888.net login Phpslot app apk Top 1 game in the world 2024 Bingo plus pagcor login password 178jili HP777 Casino Jili day app apk Casino guru Brazil nuebegamingslot Jili casino app login download Jili 09 register download taylor swift july 9th 1:38 Geely Coolray 2024 Release date Philippines Jollibee picture outside Xo jili casino login register mobile Spielautomaten kaufen Royal Club apk Mod Helens gogo jili login register philippines Lucky 777 apk latest version Katangian ni apollo sa cupid at psyche Doble Engineering Casino jili real money app Slot machine png Falcon casino login register 5e multiclass spell slots Arcane Trickster Jili slot jackpot app download Paano maglaro ng slot para kumita withdrawal casino slot games real money Helens gogo jili register philippines Casino articles topics Fachai free 100 Slot 50 minimum deposit Philippines sm 3-day sale schedule 2024 Magic jili slot game login Are casino Apps rigged Tala888 download jackpotfree Big bet review guardian online casino games for free Fg777 casino login register link Betvisa best online casino Microsoft Store download lodivip3web Jili 789 download Best online casino games for real cash Tongits go 4.1 6 apk download latest version Gba333 login Register Phone club Game online azure pre-validated domain Sabong app apk Bandit Slots Youtube Jacks or Better strategy app Magandang slot ba ang Sweet Bonanza? 100 free spins no deposit no wagering requirements philippines Fg777win com login Pci slot types explained Nakakabuti ba ang sugal sa tao Tmtplay casino login register mobile Galaxy 88 casino com login register Free flash video poker download no download Winford Online casino login JIL pastor Winhq9 login register mobile W500 one Jili veo casino login registration Buenas 88 Register How to withdraw 90 jili club philippines online Jili free 100 php no deposit bonus philippines Jili com casino register Minecraft Crazy games Mitran de boot remix mp3 song download 320kbps Anjeer Dry fruit tg777 customer service 24/7 Arat365 com login Apps na pwedeng kumita ng pera legit 9k slot Casino Jili 8888 download for android William Hill live Tesla jili login philippines 啶す啶苦啶︵啶班ぞ 啶溹啶む x7-16 啶啶侧啶? Okada Online Casino download ios Lucky Neko demo play Jili lucky download for pc Original Buffalo wings recipe 777 jili Casino real money Betsson Group Glassdoor 40 jili casino login philippines app 777ku login App Byu jili register download Yesjili com login philippines Jackpot fishing game real money Ubet95 app apk 888 casino app store download Betway zambia online live sports betting download jili 80 iRich kh free download Mga nakakatawang palaro Top online slots online lucky 777 slot game download 50 deposit game online 49 jili games Online casino game with real money Freeplay Casino no deposit bonus Jili 646 777 login register philippines link Kk jili login register online philippines Anti epidemic online casino gcash login Gold 168 Casino login Royal777 register JILI6 promo code Philippines Lodislot 777 casino online real money Ijility maumelle ar Mnl168 download for android Bet 888 login philippines Boeing Secure Login 188 JILI Casino login Jili asya download Mr joker Photo Dinosaur tycoon jili ios download Jili777 login register Philippines 49 jili games download Wow888one philippines Phl63one philippines Mega Medusa Casino login Win888 casino register online Pldt 777 real money withdrawal solaire online casino games MNL63 free 100 No Deposit Jili caishen casino irich slots&games casino 777 Free slots poker online real money Casinos online for real money philippines Royal Club login app download free Online casino free real money DO888 online casino JILI188 app Charge buffalo jili download free Jili free 100 no turnover philippines no deposit bonus Gogosolot online Casino Login Superjilli ph Jili365 bet login sign up philippines Jili x super ace download 5 jili casino login register online Lolliplay login no deposit bonus Pldt jili slot download ios New online casino free chip no deposit Is transaction password and atm pin same sbi mega joker spielautomat Baccarat Strategy book Sweet Bonanza Candyland live Jili 337 withdrawal fee Baccarat Evolution Jili games download for pc slots with real money online 5jl Casino Login Super Ace slot demo SWERTRES sureball hearing today Philippines youtube Jili big win login register Online casino games no deposit free spins philippines Top online slots online lucky 777 slot game download Big baller Club info login Non working holiday Pasig 45 days from july 9, 2024 777 10 jili casino register download jackpot giant slot 90 jili register download JL777 Casino Tp777 com login register mobile Casino tr c tuy n login Gogo jili app download apk mod Legends Slot Bingo JILI 52 Club APK Jilievo888 com login register online Lucky jili real money 888bets mozambique app download Happy jackpot slots Fairground Slots no deposit bonus Wild ace demo download New Vegas slots luck Casino mania bonus Huff and more Puff slot machine for sale baccarat game how to play Jili ph register online Jolibet withdrawal Football teams Premier League sissi slot machine free play Jili vip login register philippines download app ios Transaction password in tagalog example brainly Play free casino games online without downloading for android ELK casino games Libreng computer video poker download Winph6aa philippines Jlbetslot 49 jili casino slots login Jili app casino download apk for android Mnl168 online casino register philippines apk Jili 80 login register Jili free withdrawal app Maaari ba tayong maglaro ng monopoly online play SYNOT Interactive Playzone cashback labet88.com app Jili49 login register Jili asia com casino login download Gold slots casino sa facebook login Jili balita withdrawal fee Gamezy Rummy Jili day register online 90jili game club download PH Macao game 777sky casino philippines Ibetph web casino Best online casino games philippines gcash 247 slots login Elf bingo jili online registration Funny captions for online casino games 777 lucky slot no deposit bonus OKBet App download apk Z25 Gaming P88 jili login app Jili77win philippines DuckyLuck Casino Ttjl casino link app 55jili login Cali 777 com login password LIMBO APK download latest version 200jili login philippines 646 jili 01 login app FB JILI Login Golden Wealth Baccarat live Panaloka login registration Tala0888 download apk GemDisco Login register Lion dance history Ezjili login register mobile Royal777 register Jili 337 login register philippines download Fishing era poppo How to play jackpot fishing app Libreng jili games login Swerte ng buto 77ph1 com login password How do i install tongits go on android Joy jili casino login register philippines free chips Slot machine 777 login Jili online slot apk Jili ko o casino login register APK injector Slot Pragmatic Play Gogo JILI Casino login 50 minimum Z790 ram slots for gaming Tongits Go update download How to compute special non working holiday Philippines 777 Casino 77 free spins login MWGAMING Login Password How to play taya 777 online How does Lee Young ji know English Phdream88 login app 63jili download ios ME777 Casino Login Philippines Baba Slots online casinoplusslot How to play jili super ace online Unibet sign up bonus 60 jili login download no deposit bonus Philippine online casino no deposit bonus pxbetgamingslot Online casino games that pay real money no deposit 49jili flag login password Jili 2024 login register Paano maglaro ng jili super ace login download Vip jili login philippines app Jili bingo download for android 9Y game City Jili jackpot lucky casino real money no deposit bonus Easy money jackpot fishing philippines Casino free games slots machine no deposit Slots7 Casino free spins Winjili ph login registration Jili games free 100 download apk Jiliplay999 com login Hot chilli megaways review Jili games apk latest version ang mga slot ay nagsusugal Nice 888 login philippines Playzone Casino FC jackpot Casino login Spin jackpot YONO apk Juegos de casino gratis sin descargar ni registrarse Gold slots casino sa facebook withdrawal Jili 168 login registration link Mitran De Junction Te Mp3 Song Download pagalworld Lovejili app for android apk download Helens gogo jili casino login Transaction password in scatter example mainit na jili casino Casino online free credit no deposit How do i install tongits go on iphone Boombet casino 100 JILI casino no deposit bonus Peso88aa philippines Jiliko gcash withdrawal Jili veo login philippines Jili slot game download apk latest version Macau casino online login philippines online casino Katangian ni sita sa rama at sita 49jili login to my account philippines app Forgot transaction password Fg777app download Baccarat in casino online 98 jili casino login register philippines download app Marvelbet apps download apk for android Xo jili app login Speed roulette strategy betway zambia live soccer online casino games Casino 777 lucky jili slots real money yakuza: like a dragon slots high payout token Wild Coaster PG slot Turkish Airlines flights Bet jili app download for iphone Why do slot machines have bingo cards Ez jili code philippines DOUBLE Jackpot Slot MACHINE for sale play free online casino games Bet777 Login app Supabets mobile app download Winning plus 40 apk Play top Dollar slot machine online free no download Jackpot meter jili download apk Plot 777 casino login register link Best time to play jili slot on sunday reddit