メインコンテンツへスキップ
#Web制作 約5分で読めます

ブログの画像が重すぎたので圧縮したら、LCPがほぼ半分になった

スマホ写真をそのまま載せていたブログの画像をWebP・品質80・幅1920pxに統一したら、LCPが4.6秒→1.8秒に。実際の手順と、アップロード不要の自作圧縮ツールを紹介。

白状すると、このブログの前身サイトでは、スマホで撮った写真をそのまま記事に貼っていた。1枚4MBとかのやつを、平気で。

気づいたのはLighthouseを回したときで、パフォーマンススコアが50点台。指摘の筆頭が「Properly size images」と「Serve images in next-gen formats」。つまり、ほぼ画像のせいだった。

LCPの犯人は、たいていファーストビューの画像

LCP(Largest Contentful Paint)は「ページ内で一番大きい要素が表示されるまでの時間」。ブログの場合、一番大きい要素はほぼ確実にアイキャッチ画像だ。つまりアイキャッチが重い=LCPが遅い=Googleの評価も下がる、という単純な構図になっている。

目安として、LCPは2.5秒以内が「良好」。4MBの画像は4G回線だと読み込みだけで数秒かかるので、この時点で勝負がついてしまう。

実際にやったこと(3つだけ)

凝ったことはしていない。次の3つに統一しただけ。

  1. 幅1920pxにリサイズ — ブログの表示幅は広くても800px程度。4000px超のスマホ写真は完全に無駄。Retina対応を考えても1920pxあれば十分
  2. WebPに変換 — 同じ見た目でJPEGより25〜35%小さい。今どきのブラウザは全部対応している
  3. 品質80% — ここが一番大事かもしれない

手元のアイキャッチ(3.8MBのPNG)で試した結果がこれ。

状態サイズLCP(4Gスロットリング)
元画像そのまま3.8MB4.6秒
WebP・品質80・幅1920px178KB1.8秒

サイズは約1/20、LCPはほぼ半分。もちろん数値は環境によって変わるけれど、体感でも「一拍待つ」が「すっと出る」に変わるくらいの差はある。

品質80という数字について補足すると、90と80を並べて見比べても、写真では違いがほぼわからない。なのにファイルサイズは1.5〜2倍違う。80を切って70台に入るとグラデーション部分にノイズが見え始めるので、迷ったら80でいい。

オンラインの圧縮ツールに、仕事の画像を投げたくない

で、圧縮を何でやるかという話。

世の中に画像圧縮のWebサービスは山ほどあるが、大半は画像をサーバーにアップロードする方式だ。個人ブログの写真ならまだしも、仕事で扱う画面キャプチャや資料画像を、どこの誰が運営しているかわからないサーバーに送るのは正直気が引ける。利用規約を読みに行くのも毎回は面倒くさい。

ブラウザにはcanvasというAPIがあって、実は画像の変換くらいなら端末の中だけで完結できる。それなら自分で作った方が早い、ということで作った。

画像圧縮・リサイズツール

画像をドロップすると、ブラウザ内でWebP変換とリサイズをして、削減率を出してくれる。サーバーには何も送信しない(そもそも送信するコードが存在しない)ので、社外秘のキャプチャでも安心して使える。複数枚まとめてドロップも可。

圧縮以外で効く小ワザ

画像まわりでLCPに効くやつを、ついでに置いておく。

  • <img>widthheightを必ず書く。レイアウトシフト(CLS)対策
  • ファーストビューより下の画像はloading="lazy"。ただしアイキャッチには絶対つけない(遅延させたらLCPが悪化する。逆効果)
  • アイキャッチにはfetchpriority="high"をつけると、ブラウザが優先的に読んでくれる

このあたりを揃えると、Lighthouseの画像系の指摘はだいたい消える。うちのスコアが50点台から90点台に上がった要因は、正直なところ大半が画像だった。凝った最適化の前に、まず画像。順番はそれで間違いない。

#画像最適化 #LCP #WebP #Core Web Vitals
シェア