Menu
πŸ“± Lihat versi lengkap (non-AMP)
Hugo Image Optimization Performance

Optimasi Gambar di Hugo: Image Processing dan Resizing Otomatis

Editor: Hendra WIjaya
Update: 3 February 2026
Baca: 6 menit

Optimasi Gambar di Hugo: Image Processing dan Resizing Otomatis

Optimasi gambar adalah salah satu faktor paling penting dalam meningkatkan performa website dan Core Web Vitals. Hugo menyediakan sistem image processing yang powerful yang memungkinkan Anda meresize, crop, dan mengkonversi gambar secara otomatis selama proses build. Dalam panduan ini, kita akan membahas secara komprehensif cara menggunakan fitur-fitur image processing Hugo untuk mengoptimalkan semua gambar di website Anda.

Gambar yang tidak dioptimasi adalah penyebab utama lambatnya loading website. Statistik menunjukkan bahwa gambar dapat menempati hingga 50-80% dari total berat halaman web. Dengan menggunakan sistem image processing Hugo, Anda dapat secara otomatis membuat berbagai ukuran gambar untuk different breakpoints, mengkonversi ke format modern seperti WebP, dan mengimplementasikan lazy loading untuk meningkatkan perceived performance.

Konfigurasi Image Processing di Hugo

Hugo image processing dikonfigurasi melalui file konfigurasi utama. Pengaturan default sudah cukup untuk kebanyakan kasus, namun Anda dapat menyesuaikan sesuai kebutuhan spesifik proyek.

Konfigurasi Dasar

# hugo.toml
[imaging]
  # Resample filter: Lanczos (default), Box, Linear, Nearest
  resampleFilter = "lanczos"
  
  # Kualitas output untuk format lossy (0-100)
  quality = 80
  
  #δΎιƒŽ output untuk gambar yang di-resize
  anchor = "smart" # smart, center, top, left, right, bottom
  
  # Enable EXIF data extraction
  preserveEXIF = false
  
  # Enable HDR metadata
  preserveHDR = true
  
  # Background color untuk gambar dengan transparency
  bgColor = "#ffffff"

Format Output yang Didukung

Hugo mendukung berbagai format output untuk image processing:

# hugo.toml
[imaging]
  [imaging.format]
    # Enable/disable format
    webp = true
    jpeg = true
    png = true
    gif = true
    
    # Format-specific quality
    [imaging.format.webp]
      quality = 85
    [imaging.format.jpeg]
      quality = 80

Menggunakan Image Resources

Hugo menggunakan Page Resources untuk mengelola gambar yang berada di dalam folder konten. Struktur yang direkomendasikan adalah menyimpan gambar di dalam page bundle yang sama dengan konten markdown.

Struktur Folder Page Bundle

content/
  posts/
    tutorial-hugo/
      index.md
      cover-image.jpg
      image-1.png
      image-2.webp

Mengakses Gambar di Template

Untuk mengakses gambar dari page bundle, gunakan method .Resources:

{{/* layouts/_default/single.html */}}
{{- $image := .Resources.GetMatch "cover-image.*" -}}
{{- if $image -}}
    <img src="{{ $image.RelPermalink }}"
         alt="{{ .Title }}"
         width="{{ $image.Width }}"
         height="{{ $image.Height }}">
{{- end -}}

Image Matching

Hugo menyediakan beberapa method untuk mencocokkan gambar berdasarkan pola:

{{/* Match berdasarkan nama file */}}
{{ $cover := .Resources.GetMatch "cover*" }}

{{/* Match berdasarkan ekstensi */}}
{{ $images := .Resources.ByType "image" }}

{{/* Match dengan wildcard */}}
{{ $match := .Resources.GetMatch "images/*.jpg" }}

Resizing Gambar

Hugo menyediakan fungsi Resize, Fit, dan Fill untuk meresize gambar dengan cara yang berbeda.

Resize (Proporsional)

{{/* Resize ke lebar tertentu, tinggi otomatis */}}
{{ $resized := $image.Resize "800x" }}

{{/* Resize ke tinggi tertentu, lebar otomatis */}}
{{ $resized := $image.Resize "x600" }}

{{/* Resize ke dimensi spesifik (kan bila perlu) */}}
{{ $resized := $image.Resize "800x600" }}

{{/* Resize dengan konfigurasi tambahan */}}
{{ $resized := $image.Resize "800x webp q85" }}

Fit (Contain)

{{/* Fit: gambar akan dimuat dalam box tanpa cropping */}}
{{ $fitted := $image.Fit "400x300" }}

Fill (Crop)

{{/* Fill: gambar akan di-crop untuk mengisi box */}}
{{ $filled := $image.Fill "400x300 smart" }}

{{/* Fill dengan posisi anchor spesifik */}}
{{ $filled := $image.Fill "400x300 top" }}
{{ $filled := $image.Fill "400x300 bottom" }}
{{ $filled := $image.Fill "400x300 center" }}

Membuat Multiple Sizes

Untuk responsive images, Anda perlu membuat berbagai ukuran gambar:

{{- $sizes := slice "320" "640" "960" "1280" -}}
{{- $image := .Resources.GetMatch "cover.*" -}}
{{- range $size := $sizes -}}
    {{- $resized := $image.Resize (print $size "x webp q85") -}}
    <img src="{{ $resized.RelPermalink }}"
         srcset="{{ range $i, $size := $sizes }}
                 {{- if $i }}, {{ end -}}
                 {{- $resized := $image.Resize (print $size "x webp q85") -}}
                 {{ $resized.RelPermalink }} {{ $size }}w
                 {{- end -}}"
         sizes="(max-width: 640px) 100vw, (max-width: 1024px) 50vw, 33vw"
         alt="{{ $.Title }}">
{{- end -}}

Image Processing Operations

Selain resizing, Hugo menyediakan berbagai operasi image processing lainnya.

Blur

{{/* Blur gambar */}}
{{ $blurred := $image.Blur 10 }}

Color Balance

{{/* Sesuaikan color balance */}}
{{ $adjusted := $image.Adjust 10 -10 10 0 }}

Contrast

{{/* Sesuaikan kontras */}}
{{ $adjusted := $image.Contrast 20 }}

Brightness

{{/* Sesuaikan brightness */}}
{{ $adjusted := $image.Brightness 10 }}

Saturation

{{/* Sesuaikan saturasi */}}
{{ $adjusted := $image.Saturation 20 }}

Rotate

{{/* Rotasi gambar */}}
{{ $rotated := $image.Rotate 90 }}
{{ $rotated := $image.Rotate 180 }}
{{ $rotated := $image.Rotate 270 }}

Crop

{{/* Crop manual */}}
{{ $cropped := $image.Crop "100,100,400,400" }} {{/* left, top, width, height */}}

Menggunakan Images dari Global Resources

Selain page resources, Hugo juga mendukung global resources untuk gambar yang digunakan di seluruh website, seperti logo dan icon.

Struktur Folder Global Resources

assets/
  images/
    logo.png
    favicon.ico
    banner.jpg

static/
  images/
    og-image.png

Mengakses Global Resources

{{- $logo := resources.Get "images/logo.png" -}}
{{- if $logo -}}
    <img src="{{ $logo.RelPermalink }}" alt="Logo">
{{- end -}}

{{- $banner := resources.Get "images/banner.jpg" | resize "1200x400 webp q85" -}}
<img src="{{ $banner.RelPermalink }}" alt="Banner">

Responsive Images dengan srcset dan sizes

Untuk implementasi responsive images yang optimal, gunakan atribut srcset dan sizes:

{{- /* layouts/partials/responsive-image.html */ -}}
{{- $image := .Resources.GetMatch .Src -}}
{{- if not $image -}}
    {{- $image = resources.Get .Src -}}
{{- end -}}
{{- with $image -}}
    {{- $sizes := slice 320 640 960 1280 1920 -}}
    {{- $srcset := slice -}}
    {{- $compressed := .Resize (print (index $sizes 0) "x webp") -}}
    {{- range $size := $sizes -}}
        {{- $resized := .Resize (print $size "x webp q85") -}}
        {{- $srcset = $srcset | append (printf "%s %dw" $resized.RelPermalink $size) -}}
    {{- end -}}
    <img src="{{ $compressed.RelPermalink }}"
         srcset="{{ delimit $srcset ", " }}"
         sizes="(max-width: 640px) 100vw, (max-width: 1024px) 50vw, 33vw"
         alt="{{ $.Alt | default $.Title }}"
         width="{{ .Width }}"
         height="{{ .Height }}"
         loading="lazy"
         decoding="async">
{{- end -}}

Penggunaan di markdown:

{{ < responsive-image src="cover.webp" alt="Cover image" >}}

Lazy Loading

Implementasi lazy loading untuk meningkatkan performa loading halaman:

{{/* layouts/partials/image.html */}}
{{- $image := . -}}
{{- with $image -}}
    <img src="{{ .RelPermalink }}"
         alt="{{ .Alt | default "" }}"
         loading="lazy"
         decoding="async"
         {{- with .Width }} width="{{ . }}"{{- end -}}
         {{- with .Height }} height="{{ . }}"{{- end -}}
         {{- with .Title }} title="{{ . }}"{{- end -}}>
{{- end -}}

Untuk above-the-fold images, gunakan eager loading:

{{/* layouts/partials/hero-image.html */}}
{{- $image := .Resources.GetMatch "hero.*" -}}
{{- with $image -}}
    {{- $mobile := .Resize "640x webp q85" -}}
    {{- $desktop := .Resize "1920x webp q85" -}}
    <picture>
        <source media="(max-width: 640px)" srcset="{{ $mobile.RelPermalink }}">
        <source media="(min-width: 641px)" srcset="{{ $desktop.RelPermalink }}">
        <img src="{{ $desktop.RelPermalink }}"
             alt="{{ $.Title }}"
             loading="eager"
             fetchpriority="high">
    </picture>
{{- end -}}

Implementasi image gallery dengan lightbox:

{{/* layouts/shortcodes/gallery.html */}}
{{- $images := where .Page.Resources.ByType "image" -}}
<div class="gallery" data-gallery>
    {{- range $index, $image := $images -}}
        <a href="{{ $image.RelPermalink }}"
           data-lightbox="gallery"
           data-title="{{ $image.Title }}">
            {{- $thumb := $image.Fill "300x300 webp q80" -}}
            <img src="{{ $thumb.RelPermalink }}"
                 alt="{{ $image.Title }}"
                 loading="lazy"
                 width="300"
                 height="300">
        </a>
    {{- end -}}
</div>

Performance Monitoring

Untuk memastikan optimasi gambar efektif, monitor performa dengan tools seperti Lighthouse dan WebPageTest:

# Build dan jalankan Hugo server
hugo server

# Build production dengan minifikasi
hugo --minify

# Check untuk broken links
hugo --printI18nWarnings

Best Practices Optimasi Gambar

Beberapa best practices yang perlu diikuti dalam optimasi gambar meliputi: gunakan format WebP untuk gambar modern dengan kualitas tinggi dan ukuran kecil, implementasikan responsive images dengan srcset untuk berbagai ukuran layar, gunakan lazy loading untuk gambar di below-the-fold, optimalkan dimensi gambar sesuai kebutuhan tampilan aktual, compress gambar sebelum menambahkannya ke proyek jika Hugo processing tidak cukup, dan gunakan appropriate quality settings (umumnya 80-85 untuk WebP, 80 untuk JPEG).

Kesimpulan

Image processing di Hugo adalah fitur yang sangat powerful untuk mengoptimalkan performa website melalui gambar. Dengan memanfaatkan resize, crop, format conversion, dan responsive images, Anda dapat secara signifikan mengurangi ukuran halaman dan meningkatkan Core Web Vitals. Implementasikan tips dan best practices di panduan ini untuk memaksimalkan performa gambar di website Hugo Anda.

Artikel Terkait

Bagikan:

Link Postingan: https://www.tirinfo.com/optimasi-gambar-hugo-image-processing/