Webサイトの表示速度を改善するうえで、画像の軽量化は重要な施策のひとつです。特にWordPressではメディアライブラリに大量の画像がアップロードされるため、自動でWebP形式に変換して容量を削減することで、パフォーマンス向上とSEO対策に効果が期待できます。
WebPとは|次世代の画像フォーマット
WebP(ウェッピー)はGoogleが開発した画像フォーマットで、JPEGやPNGと比較して高い圧縮率を誇ります。画質をほとんど落とさずにファイルサイズを大幅に削減できるため、表示速度の高速化やモバイル環境での通信量削減に有効です。
サーバーのWebP対応状況を確認する
WebP画像を生成するには、PHPのGDライブラリやImagickライブラリがWebPに対応している必要があります。以下のコードを一時的に設置し、対応状況を確認しましょう。
<?php
if (imagetypes() & IMG_WEBP) {
echo 'WebP対応済み';
} else {
echo 'WebP非対応';
}
?>
「WebP非対応」と表示された場合は、サーバー管理者に連絡してGDまたはImagickのWebP対応を有効にしてもらう必要があります。
画像アップロード時にWebPを自動生成するコード
以下のコードをfunctions.phpに追加することで、JPEGおよびPNG画像がアップロードされた際に、同時にWebP形式の画像も自動生成されます。
function create_webp_on_upload($metadata, $attachment_id) {
if (!function_exists('imagewebp')) {
return $metadata;
}
$upload_dir = wp_upload_dir();
$base_dir = trailingslashit($upload_dir['basedir']) . dirname($metadata['file']) . '/';
// オリジナルファイルをWebP化
convert_file_to_webp(get_attached_file($attachment_id));
// thumbnail・medium・large等、生成された全サイズもWebP化する
if (!empty($metadata['sizes']) && is_array($metadata['sizes'])) {
foreach ($metadata['sizes'] as $size) {
convert_file_to_webp($base_dir . $size['file']);
}
}
return $metadata;
}
add_filter('wp_generate_attachment_metadata', 'create_webp_on_upload', 10, 2);
function convert_file_to_webp($file) {
$mime_type = wp_check_filetype($file)['type'];
$image = null;
switch ($mime_type) {
case 'image/jpeg':
$image = imagecreatefromjpeg($file);
break;
case 'image/png':
$image = imagecreatefrompng($file);
imagepalettetotruecolor($image);
imagealphablending($image, true);
imagesavealpha($image, true);
break;
default:
return;
}
if ($image) {
$webp_path = preg_replace('/\.(jpe?g|png)$/i', '.webp', $file);
imagewebp($image, $webp_path, 80);
imagedestroy($image);
}
}
WordPressはアップロード時にthumbnail・medium・large等の複数のリサイズ済みサイズも生成し、記事本文やテーマで実際に表示されるのは大抵これらのリサイズ版です(エディタの既定の挿入サイズは通常「large」)。オリジナルファイルだけをWebP化すると、リサイズ版に対応するWebPファイルが存在せず、後述の
<picture>タグで指定しても404になってしまいます。$metadata['sizes']をループしてすべてのサイズを処理する必要があります。この処理により、オリジナルおよび各リサイズサイズについて、同じディレクトリ内に.webp形式の画像が生成されます。
WebP画像をHTMLで出し分ける方法
生成されたWebP画像をブラウザに適切に表示するには、<picture>タグを活用する方法が一般的です。
<picture> <source srcset="画像パス.webp" type="image/webp"> <img src="画像パス.jpg" alt="代替テキスト"> </picture>
これにより、WebPに対応したブラウザではWebP画像が表示され、未対応のブラウザではJPEGやPNG画像が表示されるため、互換性を保ちつつ軽量化が可能です。
より簡単な方法:WordPress公式のimage_editor_output_formatフィルター
WordPress 5.8以降では、アップロード時に生成される全サイズの出力形式を変換できる公式フィルターimage_editor_output_formatが用意されています。GD・ImageMagickのどちらの画像エディタを使っていても機能し、手動でGD関数を1ファイルずつ処理する必要がありません。
function convert_uploads_to_webp($output_format, $filename, $mime_type) {
if ('image/jpeg' === $mime_type) {
$output_format['image/jpeg'] = 'image/webp';
}
if ('image/png' === $mime_type) {
$output_format['image/png'] = 'image/webp';
}
return $output_format;
}
add_filter('image_editor_output_format', 'convert_uploads_to_webp', 10, 3);
この方法では、生成される各サイズの画像がJPEG/PNGの代わりに直接WebPとして保存されます(オリジナル形式と併存させるのではなく置き換える点が、上記の手動実装との違いです)。ほとんどのモダンブラウザはWebPに対応しているため、シンプルに導入したい場合はこちらの方法がおすすめです。
既存の画像をWebP化したい場合
すでにアップロード済みの画像についても、プラグインやWP-CLIなどを使えば一括変換が可能です。たとえば、以下のような無料プラグインがあります。
- WebP Express:Apache/Nginxに応じた設定が可能で、ブラウザに応じた画像出し分けも自動対応。
- EWWW Image Optimizer:WebPを含む多形式に対応し、CDN連携も可能。
手動で変換したい場合は、cwebpなどのCLIツールで対応することもできます。
関連記事
よくある質問(FAQ)
まとめ
WordPressにおける画像のWebP化は、サイト表示の高速化とユーザビリティの向上に大きく貢献します。functions.phpにコードを追加するだけで導入できるため、まずは自サイトの対応状況を確認し、導入を検討してみましょう。

