Cara Menyajikan Gambar Format WebP di WordPress

WebP adalah format file untuk gambar yang menyediakan kompresi lossless dan lossy. Jika Anda menggunakan WordPress, Anda dapat dengan mudah menyajikan semua gambar dalam WebP dengan beberapa penyesuaian dasar.

Sebagian besar Browser mendukung WebP

  • Menurut data Caniuse, WebP saat ini didukung di 94% browser termasuk Apple Safari, Google Chrome, Opera, Mozilla Firefox, Microsoft Edge dan browser Android.
  • Anda masih bisa menyajikan JPEG/PNG sebagai fallback untuk browser yang tidak didukung.

Manfaat Utama menggunakan Gambar format WebP

  • Dibandingkan dengan ukuran gambar JPG atau PNG normal, gambar berdimensi sama WebP dapat disajikan dalam byte kecil. Oleh karena itu, gambar akan dimuat lebih cepat. Ini akan sangat membantu terutama untuk pengguna seluler.
  • Menyajikan Gambar Berkualitas dalam beberapa byte, secara dramatis menghemat bandwidth.
  • Perbarui situs web Anda dengan tren terbaru. Jangan sampai kehilangan percakapan karena masalah loading yang lambat.
  • WebP direkomendasikan oleh Google Developers. Membantu Anda melewati rekomendasi “sajikan gambar dalam format generasi berikutnya” dari Google PageSpeed Insight.

Beginilah cara Anda dapat menyajikan WebP untuk situs WordPress.

Melayani WebP di NGINX menggunakan Plugin ShortPixel

Plugin ShortPixel dapat membantu dalam optimasi gambar massal dengan konversi WebP dan melayani sesuai dukungan Browser. Bagian terbaiknya plugin ini melakukan pemrosesan di server mereka sehingga tidak akan memperlambat situs Anda.

shortpixel webp
  • Jika WordPress Anda di-host di pengguna server Apache, Anda dapat menggunakan penulisan ulang .htaccess.
  • Dalam kasus NGINX, Anda dapat menggunakan aturan penulisan ulang di bawah ini dengan bantuan dukungan hosting
  • Plugin ini juga didukung dengan plugin cache WP Rocket.

Pertama, tambahkan blok ini sebelum arahan server:

map $http_accept $webp_suffix {
    default "";
    "~*webp" ".webp";
}

Tambahkan blok ini di dalam arahan server:

location ~* ^(/wp-content/.+)\.(png|jpe?g)$ {
    set $base $1;
    set $webp_uri $base$webp_suffix;
    set $webp_old_uri $base.$2$webp_suffix;
    set $root "<<FULL PATH OF wp-content PARENT>>";
    root $root;
    add_header Vary Accept;
    if ( !-f $root$webp_uri ) {
        add_header X_WebP_SP_Miss $root$webp_uri;
    }
    try_files $webp_uri $webp_old_uri $uri =404;
}

Penempatan itu penting. Jadi, tambahkan dengan hati-hati.

Menggunakan Plugin WebP Express di NGINX

  • Instal & Aktifkan WebP Express, plugin gratis. Terima kasih banyak kepada Pengembang.
  • Mode operasi: Respons gambar yang bervariasi.
  • Scope: Hanya unggah.
image
  • Jalankan Konversi Massal
image 2

Untuk pengaturan kode yang lebih baik, saya akan merekomendasikan untuk menempatkannya terlebih dahulu di dalam direktori /etc/nginx/ dengan nama webp.conf kemudian memasukkannya ke dalam blok server utama.

Masukkan perintah di bawah ini

cd /etc/nginx/ && nano webp.conf
  • Tempelkan kode di bawah ini menggunakan klik kanan di dalam nano editor di SSH Terminal.
# 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?wp-content=wp-content
      ;
}
# ------------------- (WebP Express rules ends here)
  • Tekan CTRL+O dan tombol Enter untuk menyimpan.

Sekarang kunjungi blok server utama.

cd /etc/nginx/sites-available && ls

Edit berkas konfigurasi Anda, dan letakkan include webp.conf; seperti ditunjukkan di bawah ini.

# General
server {
    listen         80;
    server_tokens off;
    return 301 https://$host$request_uri;
}
server {
server_tokens off;
root /var/www/html;
index index.php index.html index.htm;
server_name .gulshankumar.net;
client_max_body_size 0;

    listen [::]:443 ssl http2 ipv6only=on;
    listen 443 ssl http2;
        ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
        ssl_certificate /etc/comodo/cert.pem;
        ssl_certificate_key /etc/comodo/private.pem;
        ssl_prefer_server_ciphers on;
        ssl_session_cache   shared:SSL:20m;
        ssl_session_timeout 20m;
        ssl_ciphers 'TLS13+AESGCM+AES128:EECDH+AES128';

error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;


# WebP Express rule goes here

include webp.conf;

# WebP Rule end

location / {
    try_files $uri $uri/ /index.php$is_args$args;
}

Muat ulang atau mulai ulang NGINX.

service nginx reload

Hal-hal yang perlu diperhatikan

  • Jika Anda menggunakan BunnyCDN, harus mengaktifkan Vary Cache.
bunnycdn vary cache
  • Cloudflare tidak mendukung Vary Cache. Coba pendekatan alternatif di bawah ini.

Gunakan WebP menggunakan Cloudflare CDN (Tanpa Plugin)

Jika Anda pengguna Cloudflare Pro, Anda dapat dengan mudah mengaktifkan WebP dalam satu klik dari Speed Tab.

cloudflare webp

Sajikan WebP menggunakan BunnyCDN Optimizer (Tanpa Plugin)

BunnyCDN menawarkan layanan Optimizer yang dilengkapi dengan solusi penayangan WebP On-the-fly. Ini adalah solusi satu klik dengan biaya tambahan $9,5/bulan.

bunnycdn webp

Sajikan WebP menggunakan Plugin JetPack

  • Cukup instal dan aktifkan plugin JetPack
  • Aktifkan Site Accelerator.
jetpack webp

Anda mungkin melihat penurunan kualitas gambar yang dapat diperbaiki dengan menggunakan filter di bawah ini.

Melayani WebP menggunakan Imagify

Imagify adalah plugin Pengoptimalan Gambar yang ditawarkan oleh WP Media, orang-orang di balik WP Rocket.

  • Instal dan aktifkan plugin Imagify
  • Masukkan Kunci API
  • Dalam pengaturan, pilih Picture tags mode untuk penyiapan cepat.
  • Alternatifnya, Anda bisa menggunakan rewrite rule dengan beberapa konfigurasi server seperti yang dijelaskan disini. Dengan Apache, proses penambahan kode .htaccess akan otomatis tetapi dengan NGINX Anda perlu melakukan secara manual.
imagify plugin webp settings

WebP untuk JPG

WebP dapat sedikit menurunkan kualitas gambar dalam beberapa kasus. Jika Anda ingin mengembalikan kembali dari WebP ke JPG, cukup ikuti langkah-langkah berikut ini.

  • Nonaktifkan & Hapus plugin terkait WebP.
  • Hapus pengaturan terkait dari file konfigurasi (.htaccess)
  • Hapus file .webp secara massal dan hemat ruang disk.
find . -type f -name "*.webp*" -delete

Jika Anda ingin mengonversi file WebP ke JPG, Anda dapat menggunakan alat yang tersedia di CloudConvert.


Metode manual tanpa Plugin

Bagian ini hanya untuk tujuan informasi.

Langkah 1: Menambahkan format WebP dalam Dokumen HTML

Pertama, Anda perlu mengkonversi semua gambar Anda di WebP dan bersama dengan format gambar Anda sebelumnya sebagai fall-back. Ada beberapa plugin seperti Optimus yang dapat melakukan pekerjaan ini secara otomatis. Tapi, saya akan menunjukkan cara lain yang mudah untuk melakukan ini secara manual.

  1. Buka situs web ini image.online-convert.com/convert-to-webp
  2. Tempel Tautan Gambar Anda dan klik konversi. Gambar format WebP Anda akan diunduh
  3. Sekarang edit kode HTML mentah di mana Gambar normal Anda muncul.

Katakanlah, pada awalnya kode HTML Gambar Anda seperti ini

<img src="https://www.gulshankumar.net/wp-content/uploads/2016/09/webplogo.png" alt="gulshan kumar" width="186" height="66" />

Anda perlu membungkus kode di atas dengan sedikit lebih banyak markup HTML.

<picture>
	<source srcset="https://www.gulshankumar.net/wp-content/uploads/2016/09/webplogo.webp" type="image/webp" />
	<img src="https://www.gulshankumar.net/wp-content/uploads/2016/09/webplogo.png" alt="gulshan kumar" width="186" height="66" />
</picture>

Sekarang, dokumen HTML Anda siap untuk menyajikan gambar dalam format WebP.
Langkah 2: Konfigurasi pengaturan server
Hanya satu langkah lagi, Anda perlu mengkonfigurasi beberapa pengaturan Apache Webserver melalui .htacccess sehingga browser dan server web dapat memperlakukannya dengan benar seperti semua gambar lainnya.

Server Web Hosting Anda mungkin tidak tahu dari jenis mime mana gambar format semacam ini yang perlu mereka layani. Jadi harus menambahkan jenis mime yang tepat. Juga, akan sangat berharga untuk mengatur expiry header untuk caching.

# Serve Images with correct Mime Type
AddType image/webp .webp

# Setup Cache
ExpiresActive On
ExpiresByType image/webp A2592000

Mohon diperhatikan: Pastikan Anda menggunakan WordPress 5.8 atau yang lebih baru.

Jika Anda menggunakan WordPress yang lebih lama dari versi 5.8, WordPress tidak mendukung pengunggahan gambar format WebP. Anda mungkin akan mendapatkan error “Jenis file ini sayangnya tidak diizinkan karena alasan keamanan” saat mengunggah gambar .webp.

Jadi, harus memperbaiki masalah ini dengan menambahkan kode ini di functions.php tema Anda Akan sangat membantu jika Anda akan mengunggah gambar Anda langsung dari Dasbor WordPress> opsi Media.

function webp_upload_mimes( $existing_mimes ) {
	// add webp to the list of mime types
	$existing_mimes['webp'] = 'image/webp';

	// return the array back to the function with our added mime type
	return $existing_mimes;
}
add_filter( 'mime_types', 'webp_upload_mimes' );

Selesai.

Jika Anda membutuhkan bantuan, silakan lihat di bagian komentar. Dengan senang hati saya akan membantu Anda.

Catatan tambahan

  • Jika Anda pengguna Cloudways, Anda tidak dapat mengirimkan WebP dengan .htaccess rewrite karena mereka menggunakan NGINX khusus untuk file statis. Dalam hal ini Anda memiliki dua pilihan. Minta tim hosting untuk mengedit file konfigurasi untuk Anda atau gunakan JavaScript atau solusi berbasis CDN pihak ketiga seperti Bunny atau CF.

Bacaan lebih lanjut
Jika Anda ingin tahu lebih lanjut tentang WebP, silakan merujuk ke tautan berikut ini.

Terima kasih.

Tinggalkan komentar

38 pemikiran pada “Cara Menyajikan Gambar Format WebP di WordPress”

  1. I didn’t try the webp format as of now in WordPress. But now after reading this post I will try to implement it. I will compare the image quality from other formats as well. Thank you for sharing this article.

    Balas
  2. I have a question about ShortPixel method.

    I use Plesk panel with NGINX
    There is a section called Additional nginx directives
    Here you can specify the settings for the nginx reverse proxy server that runs in front of Apache. Your directives will override the server-wide nginx configuration. For example, you may want to change the connection timeout or to pack requests with gzip. Use the same syntax as you use for nginx.conf. For example, if you want to pack all the proxied requests with gzip, add the line: ‘gzip_proxied any;’.

    https://i.imgur.com/OLWu9bJ.png

    can i add codes there i dont know?

    map $http_accept $webp_suffix {
    default “”;
    “~*webp” “.webp”;
    }

    location ~* ^(/wp-content/.+).(png|jpe?g)$ {
    set $base $1;
    set $webp_uri $base$webp_suffix;
    set $webp_old_uri $base.$2$webp_suffix;
    set $root “<>”;
    root $root;
    add_header Vary Accept;
    if ( !-f $root$webp_uri ) {
    add_header X_WebP_SP_Miss $root$webp_uri;
    }
    try_files $webp_uri $webp_old_uri $uri =404;

    You used these sentences!
    before the server directive and inside directive.
    I read your Installing WordPress at NGINX topic so
    If i try to add these from codes is this right?

    map $http_accept $webp_suffix {
    default “”;
    “~*webp” “.webp”;
    }
    server {
    listen 80;
    return 301 https://$host$request_uri;
    }
    server {

    location ~* ^(/wp-content/.+).(png|jpe?g)$ {
    set $base $1;
    set $webp_uri $base$webp_suffix;
    set $webp_old_uri $base.$2$webp_suffix;
    set $root “<>”;
    root $root;
    add_header Vary Accept;
    if ( !-f $root$webp_uri ) {
    add_header X_WebP_SP_Miss $root$webp_uri;
    }
    try_files $webp_uri $webp_old_uri $uri =404;
    }
    # Document Root
    root /var/www/html;
    index index.php index.html index.htm;
    server_name .example.com;
    client_max_body_size 0;

    listen [::]:443 ssl http2 ipv6only=on;
    listen 443 ssl http2;
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:20m;
    ssl_session_timeout 20m;
    ssl_ciphers ‘TLS13+AESGCM+AES128:EECDH+AES128’;

    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;

    location / {
    try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~* .php$ {
    if ($uri !~ “^/uploads/”) {
    fastcgi_pass unix:/run/php/php7.4-fpm.sock;
    }
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param SCRIPT_NAME $fastcgi_script_name;
    }
    location = /favicon.ico {
    log_not_found off;
    access_log off;
    }

    location = /robots.txt {
    log_not_found off;
    access_log off;
    allow all;
    }

    location ~* .(css|gif|svg|ico|jpeg|jpg|js|png)$ {
    expires 1y;
    log_not_found off;
    }

    # Enable Gzip compression.
    gzip on;

    # Disable Gzip on IE6.
    gzip_disable “msie6”;

    # Allow proxies to cache both compressed and regular version of file.
    # Avoids clients that don’t support Gzip outputting gibberish.
    gzip_vary on;

    # Compress data, even when the client connects through a proxy.
    gzip_proxied any;

    # The level of compression to apply to files. A higher compression level increases
    # CPU usage. Level 5 is a happy medium resulting in roughly 75% compression.
    gzip_comp_level 5;

    # Compress the following MIME types.
    gzip_types
    application/atom+xml
    application/javascript
    application/json
    application/ld+json
    application/manifest+json
    application/rss+xml
    application/vnd.geo+json
    application/vnd.ms-fontobject
    application/x-font-ttf
    application/x-web-app-manifest+json
    application/xhtml+xml
    application/xml
    font/opentype
    image/bmp
    image/svg+xml
    image/x-icon
    text/cache-manifest
    text/css
    text/plain
    text/vcard
    text/vnd.rim.location.xloc
    text/vtt
    text/x-component
    text/x-cross-domain-policy;
    }

    Is this right?
    And what do you think about plesk how i use webp at plesk?
    Thanks

    Balas
  3. Hi, this is a good article, but
    It is better to install the plugin or put the code directly for webp
    This way, each image does not create two urls. Does it cause a problem in the SEO site?

    Balas
  4. Hey Gulshan Kumar ,

    Awesome post with good information. It is my first time commenting on your blog post and am glad to say that you have done a fabulous work and provided helpful & easy tips to serve webp format images in WordPress. I really like and appreciate the way you have explained the things in such a step-by-step process making the concept very clear and easy to understand. while scrolling through your blog post i have noticed that you have also discussed about the major benefits of using webp format image that are also providing good understanding. You have explained all the vital things in an easy language that are true enough to understand and educate the readers.

    After going through this complete guide i really gain ideas and am sure that this post is definitely going to help lots of people & especially WordPress-users to sort out their query. Good work and keep sharing more similar post.

    Eventually thanks for sharing your knowledge, ideas and such an informative post.

    Regards
    -Aadarsh

    Balas
  5. I have tried this method to enable WebP format images on my site, but I am encountering some unknown error. My site showing a low score on google page speed insight.

    Balas
    • May I know please which specific method you have tried? Also, please share the screenshot of error. I will try my best to help you.

      Balas
  6. It works great in Chrome and Firefox on the PC/Laptop. BUT, the webp images are not displayed on iPhone (Chrome and Safari)

    Balas
    • Safari is not supporting webP. Chrome on iOS is based on Safari, too. So webP won‘t work on iOS at all and you have to serve a fallback image.

      Balas
  7. Hi,

    I am not quite clear on where this needs to be inserted. I am looking to Optimise my header image to Webp. Is there a video or screenshot based write up on how I can include this?

    Would really appreciate the help

    Regards
    Shwetha

    Balas
  8. Hello Gulshan,

    Thanks for sharing this article.

    I did follow the steps mentioned in here in this format.

    But the image is not appearing on Firfox, and IE. Did I miss any thing in here.

    Please suggest.

    Balas
  9. Hi..Just wondering if i need to edit each image tag or is there somewhere in my theme templates this could be done.
    Any guidence would be great.
    Thanks
    Mark

    Balas
  10. Hi Gulshan,

    Even after putting the code snippet in the function.php file.

    I still have the same error message when I try to upload webp format. The message is “sorry this file type is not permitted for security reasons”.

    Can you help fix this?

    Thanks.

    Martin

    Balas
    • Hello Martin,

      At my end it’s working fine. For a demo, I have sent a quick video on your email. Please check and revert back if I can help with any thing else.

      Thanks

      Balas
  11. I haven’t added anything except the last code from your post in function.php to support Webp format on all of future media uploads. Do I need to add any thing else ? or will it create any kind of issue for users whose browsers are yet unsupported to this format?
    anyway keep up the good work 😉

    Balas
    • That’s all. Now you can easily upload webp directly in your WordPress Dashboard. No extra things to do. Just feel free to use it with picture HTML tag. So, it will support for all browsers, without any issues. Thanks

      Balas
  12. The problem with the suggested HTML implementation is that Chrome will make two requests, one for WEBP and another one for JPEG resulting in double requests and increasing the page load time.

    Balas
    • Hey dear,

      It doesn’t create two requests(as you are saying) instead it automatically serve only one type image format either WebP or JPEG according to HTTP accept type.

      I’d suggest please try one more time and look carefully at Network Timeline in the browser console. If you see there are double requests, please email me your HTML code and timeline screenshot also. I’d love to review it. I believe it should work fine for you too.

      Thanks & Regards,
      Gulshan

      Balas
      • I installed the code into the functions.php. And as you said it did allow me to upload in my WP theme. The problem is that the image doesn’t allow cropping so it won’t allow me to use it on the site.

        Balas