Cara Mudah dan Efektif Menghasilkan Sitemap.xml di Hugo untuk SEO Maksimal
Setiap kali kamu membangun situs dengan Hugo dan menjalankan hugo build, ada sebuah file XML yang digenerate secara otomatis di direktori public/ — dan banyak developer melewatinya begitu saja tanpa pernah membukanya. File itu adalah sitemap.xml, dan memahami cara kerjanya secara mendalam bisa menjadi perbedaan antara halaman-halaman konten yang terindeks Google dalam hitungan jam versus terindeks dalam hitungan minggu.
Sitemap bukan sekadar daftar URL. Ia adalah sinyal yang kamu kirim ke search engine crawler: halaman mana yang ada, kapan terakhir diubah, seberapa sering berubah, dan seberapa penting ia relatif terhadap halaman lain di situs yang sama. Hugo menyediakan semua fondasi ini secara bawaan, tapi sebagian besar konfigurasi defaultnya tidak optimal untuk kebutuhan produksi. Artikel ini membahas semuanya dari awal sampai ke kustomisasi mendalam — termasuk skenario yang jarang dibahas seperti sitemap untuk situs multilingual dan sitemap index untuk situs berskala besar.
Bagaimana Sitemap Bekerja dan Mengapa Ia Penting
Sebelum masuk ke konfigurasi Hugo, penting untuk memahami mengapa sitemap ada dan bagaimana search engine menggunakannya.
Search engine crawler — Googlebot, Bingbot, dan lainnya — menemukan halaman lewat dua cara: dengan mengikuti link dari halaman yang sudah diindeks, dan dengan membaca sitemap. Cara pertama disebut organic crawling, sedangkan sitemap memberikan crawler peta jalan yang eksplisit tentang struktur situs kamu.
flowchart TD
A[Search Engine Crawler] --> B{Cara Menemukan Halaman}
B --> C[Organic Crawling\nMengikuti link antar halaman]
B --> D[Sitemap Discovery\nMembaca sitemap.xml]
C --> E[Lambat untuk halaman baru\nTergantung internal linking]
D --> F[Cepat untuk halaman baru\nAnda kontrol penuh]
F --> G[URL ditemukan]
E --> G
G --> H[Crawling & Indexing]Sitemap sangat berguna dalam kondisi berikut:
- Situs baru yang belum punya banyak backlink eksternal
- Halaman yang tidak terhubung dari navigasi utama
- Konten yang sering diperbarui dan kamu ingin Google tahu secepat mungkin
- Situs dengan ratusan atau ribuan halaman di mana organic crawling bisa melewatkan beberapa URL
Penting juga untuk memahami apa yang sitemap tidak lakukan: ia tidak menjamin halaman akan diindeks. Sitemap adalah rekomendasi, bukan perintah. Google tetap memutuskan sendiri apakah suatu halaman layak diindeks berdasarkan kualitas kontennya.
Anatomi File sitemap.xml
File sitemap mengikuti standar yang didefinisikan oleh sitemaps.org dan diterima oleh semua major search engine:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://example.com/artikel-pertama/</loc>
<lastmod>2026-01-15</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://example.com/tentang/</loc>
<lastmod>2025-06-01</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
</urlset>
Empat elemen dalam setiap <url>:
| Elemen | Wajib | Fungsi |
|---|---|---|
<loc> | Ya | URL lengkap halaman, termasuk protokol dan trailing slash |
<lastmod> | Tidak | Tanggal terakhir konten dimodifikasi, format ISO 8601 |
<changefreq> | Tidak | Petunjuk seberapa sering halaman berubah |
<priority> | Tidak | Prioritas relatif halaman (0.0–1.0) |
Catatan penting: Google secara resmi menyatakan bahwa mereka mengabaikanchangefreqdanprioritysejak beberapa tahun lalu, dan hanya menggunakan<loc>dan<lastmod>sebagai sinyal yang bermakna. Bing masih mempertimbangkan keduanya. Tetap sertakan semua elemen untuk kompatibilitas, tapi jangan terlalu obsesif dengan nilai-nilainya.
Sitemap Bawaan Hugo: Apa yang Didapat Secara Default
Hugo menggenerate sitemap.xml secara otomatis tanpa konfigurasi apapun. Ini salah satu keunggulan Hugo dibanding static site generator lain yang memerlukan plugin tambahan.
Setelah menjalankan hugo build, kamu akan menemukan file di:
public/
sitemap.xml
index.html
artikel-pertama/
index.html
...
Secara default, Hugo memasukkan semua halaman ke dalam sitemap: artikel biasa, halaman section, halaman taxonomy (tag, kategori), dan halaman statis seperti /about/. Halaman yang di-set draft: true di front matter tidak dimasukkan.
Untuk melihat apa yang Hugo generate secara default, jalankan build dan buka public/sitemap.xml. Kamu akan melihat setiap halaman terdaftar dengan <lastmod> yang diambil dari tanggal modifikasi file konten.
Konfigurasi Global Sitemap
Konfigurasi sitemap dilakukan di file konfigurasi utama Hugo. Hugo mendukung tiga format: TOML, YAML, dan JSON.
TOML (hugo.toml atau config.toml)
baseURL = "https://example.com/"
languageCode = "id-ID"
title = "Blog Saya"
enableRobotsTXT = true
[sitemap]
changefreq = "weekly"
priority = 0.5
filename = "sitemap.xml"
YAML (hugo.yaml atau config.yaml)
baseURL: "https://example.com/"
languageCode: "id-ID"
title: "Blog Saya"
enableRobotsTXT: true
sitemap:
changefreq: "weekly"
priority: 0.5
filename: "sitemap.xml"
Nilai yang Tersedia untuk changefreq
| Nilai | Kapan Digunakan |
|---|---|
always | Halaman yang berubah setiap kali diakses (sangat jarang relevan) |
hourly | Dashboard live, berita breaking |
daily | Blog dengan post harian, agregator berita |
weekly | Blog dengan update mingguan |
monthly | Halaman konten stabil seperti dokumentasi |
yearly | Halaman yang hampir tidak pernah berubah |
never | Halaman yang diarsipkan, tidak akan pernah berubah |
Untuk blog teknikal tipikal, weekly atau monthly adalah pilihan yang paling masuk akal.
Nilai priority
Priority adalah skala 0.0 sampai 1.0 yang menunjukkan kepentingan relatif halaman dalam situs kamu sendiri. Default Hugo adalah 0.5. Halaman beranda biasanya diberi 1.0, artikel utama sekitar 0.8, halaman tag/kategori sekitar 0.3.
# Konfigurasi yang lebih diferensiatif
[sitemap]
changefreq = "weekly"
priority = 0.5 # default untuk semua halaman
filename = "sitemap.xml"
Nilai global ini berlaku untuk semua halaman. Untuk override per-halaman, kita akan bahas di bagian front matter.
Mengecualikan Halaman dari Sitemap
Tidak semua halaman layak masuk sitemap. Halaman seperti hasil pencarian, halaman error kustom, atau halaman utilitas sebaiknya tidak dikirim ke crawler.
Cara 1: Via Front Matter per Halaman
---
title: "Halaman Pencarian"
sitemap:
exclude: true
---
Atau dengan format TOML di front matter:
+++
title = "Halaman Pencarian"
[sitemap]
exclude = true
+++
Cara 2: Via robots.txt (Pendekatan Berbeda)
Jika halaman sudah masuk sitemap tapi kamu tidak ingin di-crawl sama sekali, kombinasikan dengan robots.txt:
User-agent: *
Disallow: /search/
Disallow: /private/
Sitemap: https://example.com/sitemap.xml
Jangan confuse sitemap exclusion dengan robots.txtDisallow.Disallowdi robots.txt mencegah crawler mengakses halaman. Menghapus dari sitemap hanya berarti kamu tidak secara aktif merekomendasikan halaman itu. Keduanya punya tujuan berbeda dan sering perlu digunakan bersamaan.
Override Priority per Halaman via Front Matter
Konfigurasi global memberikan nilai default untuk semua halaman. Tapi artikel utama, halaman beranda, dan halaman landing layak mendapat priority lebih tinggi dibanding halaman tag atau arsip.
Hugo memungkinkan override ini langsung di front matter setiap halaman:
---
title: "Panduan Lengkap Kubernetes untuk Production"
date: 2026-01-15
lastmod: 2026-03-20
sitemap:
changefreq: "monthly"
priority: 0.9
---
Atau dalam format TOML:
+++
title = "Panduan Lengkap Kubernetes untuk Production"
date = 2026-01-15
lastmod = 2026-03-20
[sitemap]
changefreq = "monthly"
priority = 0.9
+++
Catatan penting: lastmod di front matter adalah cara paling akurat untuk memberitahu search engine kapan konten terakhir diperbarui. Hugo akan menggunakan nilai ini jika tersedia, dengan fallback ke tanggal modifikasi file di filesystem.
Strategi Priority yang Masuk Akal
Beranda (/) → priority: 1.0
Artikel pillar/unggulan → priority: 0.9
Artikel biasa → priority: 0.7
Halaman section/kategori → priority: 0.5
Halaman tag → priority: 0.3
Halaman about/contact → priority: 0.4
Halaman arsip/search → priority: 0.1 atau exclude
Custom Template Sitemap
Ini adalah fitur yang sering dilewatkan tapi sangat powerful. Hugo memungkinkan kamu mengganti template sitemap default dengan versi kustom yang memberikan kontrol penuh atas output XML.
Buat file di path ini:
layouts/
sitemap.xml ← mengganti template sitemap global
Template Dasar
Template berikut mereplikasi perilaku bawaan Hugo dengan lebih eksplisit:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
{{- range .Data.Pages }}
{{- if not .Params.sitemap.exclude }}
<url>
<loc>{{ .Permalink }}</loc>
{{- if not .Lastmod.IsZero }}
<lastmod>{{ .Lastmod.Format "2006-01-02" }}</lastmod>
{{- end }}
<changefreq>{{ with .Params.sitemap.changefreq }}{{ . }}{{ else }}{{ $.Site.Sitemap.ChangeFreq }}{{ end }}</changefreq>
<priority>{{ with .Params.sitemap.priority }}{{ . }}{{ else }}{{ $.Site.Sitemap.Priority }}{{ end }}</priority>
</url>
{{- end }}
{{- end }}
</urlset>
Template dengan Filter Konten
Untuk situs yang ingin memisahkan mana halaman yang dikirim ke sitemap — misalnya hanya artikel dengan minimal panjang tertentu, atau hanya halaman yang tidak di-tag sebagai draft — kamu bisa tambahkan kondisi:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
{{- range .Data.Pages }}
{{- if and (not .Params.sitemap.exclude) (not .Draft) }}
<url>
<loc>{{ .Permalink }}</loc>
{{- if not .Lastmod.IsZero }}
<lastmod>{{ .Lastmod.Format "2006-01-02" }}</lastmod>
{{- end }}
{{- with .Params.sitemap.changefreq }}
<changefreq>{{ . }}</changefreq>
{{- else }}
<changefreq>{{ $.Site.Sitemap.ChangeFreq }}</changefreq>
{{- end }}
{{- with .Params.sitemap.priority }}
<priority>{{ . }}</priority>
{{- else }}
<priority>{{ $.Site.Sitemap.Priority }}</priority>
{{- end }}
</url>
{{- end }}
{{- end }}
</urlset>
Template dengan Image Sitemap Extension
Untuk situs yang kontennya banyak mengandung gambar penting (portofolio, galeri, tutorial dengan screenshot), Google merekomendasikan menyertakan informasi gambar dalam sitemap menggunakan ekstensi namespace khusus:
<?xml version="1.0" encoding="UTF-8"?>
<urlset
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">
{{- range .Data.Pages }}
{{- if not .Params.sitemap.exclude }}
<url>
<loc>{{ .Permalink }}</loc>
{{- if not .Lastmod.IsZero }}
<lastmod>{{ .Lastmod.Format "2006-01-02" }}</lastmod>
{{- end }}
{{- if .Params.cover_image }}
<image:image>
<image:loc>{{ .Params.cover_image | absURL }}</image:loc>
<image:title>{{ .Title }}</image:title>
</image:image>
{{- end }}
</url>
{{- end }}
{{- end }}
</urlset>
Ini memerlukan front matter dengan field cover_image di setiap artikel yang punya gambar utama.
Sitemap Index: Untuk Situs Berskala Besar
Standar sitemap membatasi satu file sitemap maksimal 50.000 URL dan maksimal 50 MB setelah dikompresi. Untuk situs yang mendekati atau melampaui batas ini, solusinya adalah sitemap index — sebuah file XML yang berisi daftar sitemap lain, alih-alih daftar URL langsung.
flowchart TD
A[sitemap.xml\nSitemap Index] --> B[sitemap-articles.xml\nSemua artikel]
A --> C[sitemap-pages.xml\nHalaman statis]
A --> D[sitemap-tags.xml\nHalaman taxonomy]
B --> E[URL 1..N]
C --> F[URL about, contact, ...]
D --> G[URL tag/golang, tag/docker, ...]Hugo memiliki dukungan bawaan untuk sitemap index melalui template layouts/sitemapindex.xml. Tapi untuk kontrol yang lebih granular — misalnya membuat sitemap terpisah per section — kamu perlu pendekatan dengan output format kustom.
Sitemap Index Manual dengan Hugo Outputs
Di hugo.toml, definisikan output format kustom:
[outputs]
home = ["HTML", "RSS", "SitemapIndex"]
[outputFormats]
[outputFormats.SitemapIndex]
mediaType = "application/xml"
baseName = "sitemap"
isPlainText = false
notAlternative = true
Kemudian buat template di layouts/index.sitemapindex.xml:
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
{{ range .Site.Pages }}
{{ if eq .Section "articles" }}
<sitemap>
<loc>{{ "articles-sitemap.xml" | absURL }}</loc>
<lastmod>{{ now.Format "2006-01-02" }}</lastmod>
</sitemap>
{{ end }}
{{ end }}
<sitemap>
<loc>{{ "pages-sitemap.xml" | absURL }}</loc>
</sitemap>
</sitemapindex>
Untuk situs tipikal dengan ratusan halaman, sitemap index belum diperlukan. Mulai pertimbangkan ini ketika jumlah halaman mendekati angka 10.000+.
Sitemap untuk Situs Multilingual
Ini adalah salah satu area yang paling sering menimbulkan kebingungan. Jika situs Hugo kamu mendukung lebih dari satu bahasa, Hugo akan menggenerate sitemap per bahasa secara default.
Konfigurasi Multilingual Dasar
# hugo.yaml
defaultContentLanguage: "id"
defaultContentLanguageInSubdir: false
languages:
id:
languageName: "Indonesia"
weight: 1
baseURL: "https://example.com/"
en:
languageName: "English"
weight: 2
baseURL: "https://example.com/en/"
Dengan konfigurasi ini, Hugo menggenerate:
public/
sitemap.xml ← sitemap index yang mereferensikan keduanya
id/
sitemap.xml ← sitemap khusus konten Bahasa Indonesia
en/
sitemap.xml ← sitemap khusus konten Bahasa Inggris
Menambahkan Tag hreflang di Sitemap
Untuk situs multilingual, Google merekomendasikan menyertakan tag hreflang dalam sitemap agar crawler tahu bahwa dua halaman adalah terjemahan satu sama lain. Ini memerlukan custom template:
<?xml version="1.0" encoding="UTF-8"?>
<urlset
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
{{- range .Data.Pages }}
{{- if not .Params.sitemap.exclude }}
<url>
<loc>{{ .Permalink }}</loc>
{{- if not .Lastmod.IsZero }}
<lastmod>{{ .Lastmod.Format "2006-01-02" }}</lastmod>
{{- end }}
{{- range .Translations }}
<xhtml:link
rel="alternate"
hreflang="{{ .Language.Lang }}"
href="{{ .Permalink }}"/>
{{- end }}
<xhtml:link
rel="alternate"
hreflang="{{ .Language.Lang }}"
href="{{ .Permalink }}"/>
</url>
{{- end }}
{{- end }}
</urlset>
Integrasi dengan robots.txt
Hugo bisa menggenerate robots.txt secara otomatis jika kamu mengaktifkan opsi ini:
# hugo.toml
enableRobotsTXT = true
robots.txt default Hugo hanya berisi satu baris:
User-agent: *
Untuk menyertakan lokasi sitemap, buat template kustom di layouts/robots.txt:
User-agent: *
Allow: /
# Crawler yang ingin kamu blokir sepenuhnya
User-agent: AhrefsBot
Disallow: /
# Halaman yang tidak ingin di-crawl
Disallow: /search/
Disallow: /private/
Disallow: /admin/
# Sitemap
Sitemap: {{ .Site.BaseURL }}sitemap.xml
MengapaenableRobotsTXT = truepenting: Tanpa barisSitemap:di robots.txt, crawler tetap bisa menemukan sitemap kamu tapi harus tahu URL-nya. Dengan mencantumkan sitemap di robots.txt, setiap crawler yang mengunjungi situs kamu langsung tahu di mana sitemap berada — bahkan sebelum menemukan halaman manapun.
Submission ke Google Search Console
Menggenerate sitemap yang sempurna tidak cukup jika search engine tidak tahu keberadaannya. Ada dua cara untuk memberitahu Google tentang sitemap kamu.
Cara 1: Melalui robots.txt
Ini sudah dibahas di atas — dengan menambahkan Sitemap: https://example.com/sitemap.xml ke robots.txt, Google akan menemukan sitemap kamu secara otomatis saat mengunjungi situs.
Cara 2: Submit Manual via Google Search Console
flowchart LR
A[Google Search Console] --> B[Pilih Property]
B --> C[Sitemaps di menu kiri]
C --> D[Masukkan URL sitemap]
D --> E[sitemap.xml]
E --> F[Klik Submit]
F --> G[Google mulai memproses]
G --> H[Status: Success / Error]Langkah-langkahnya:
- Buka search.google.com/search-console
- Pilih property situs kamu (atau tambahkan jika belum)
- Di menu kiri, klik Sitemaps
- Di kolom “Add a new sitemap”, masukkan path relatif:
sitemap.xml - Klik Submit
Google akan memproses sitemap dan menampilkan status: berapa URL yang ditemukan, berapa yang sudah diindeks, dan apakah ada error.
Apa yang Diperiksa di Search Console
Setelah submit, pantau beberapa hal:
- Discovered URLs vs Indexed URLs: Jika ada gap besar, Google menemukan halaman di sitemap tapi memilih tidak mengindeksnya — biasanya karena kualitas konten atau masalah duplicate content
- Errors: URL yang tidak bisa diakses, redirect chains, atau format sitemap yang salah
- Last read: Kapan Google terakhir membaca sitemap kamu — idealnya dalam beberapa hari terakhir
Anti-Pattern yang Harus Dihindari
1. Memasukkan URL yang Tidak Canonical
<!-- ANTI-PATTERN: URL dengan query string atau UTM parameter -->
<url>
<loc>https://example.com/artikel/?utm_source=twitter</loc>
</url>
<url>
<loc>https://example.com/artikel/?page=2</loc>
</url>
<!-- BENAR: hanya URL canonical tanpa parameter tracking -->
<url>
<loc>https://example.com/artikel/</loc>
</url>
Jika kamu punya URL dengan query string yang masuk sitemap, Google akan melihatnya sebagai URL berbeda dan bisa menciptakan masalah duplicate content.
2. Memasukkan Halaman yang Diblokir robots.txt
# robots.txt
Disallow: /admin/
Disallow: /private/
<!-- ANTI-PATTERN: memasukkan URL yang di-disallow di robots.txt -->
<url>
<loc>https://example.com/admin/dashboard/</loc>
</url>
<!-- Google akan mengeluhkan inkonsistensi ini di Search Console -->
Sitemap dan robots.txt harus konsisten satu sama lain.
3. lastmod yang Tidak Akurat
# ANTI-PATTERN: lastmod di front matter tidak pernah diupdate
---
title: "Artikel yang Sudah Di-update Berkali-kali"
date: 2024-01-01
lastmod: 2024-01-01 # tidak pernah diupdate meski konten sudah direvisi
---
# BENAR: lastmod selalu diperbarui setiap kali konten berubah secara signifikan
---
title: "Artikel yang Sudah Di-update Berkali-kali"
date: 2024-01-01
lastmod: 2026-03-15 # mencerminkan revisi terakhir yang substansial
---
Jika lastmod tidak akurat, Google kehilangan sinyal penting tentang kapan konten diperbarui dan mungkin tidak memprioritaskan re-crawling.
4. Semua Halaman Diberi Priority yang Sama
# ANTI-PATTERN: priority seragam untuk semua halaman
[sitemap]
priority = 0.8 # semua halaman 0.8? ini tidak memberikan sinyal apapun
Jika semua halaman punya priority yang sama, kamu kehilangan manfaat dari field tersebut. Lebih baik gunakan variasi yang mencerminkan kepentingan nyata, atau biarkan di default 0.5 dan override hanya untuk halaman yang benar-benar kritis.
5. Tidak Memverifikasi Output Sitemap Setelah Build
# ANTI-PATTERN: build dan langsung deploy tanpa memeriksa sitemap
hugo build
# langsung upload ke server
# BENAR: verifikasi dulu
hugo build
cat public/sitemap.xml | head -50
# atau buka di browser: hugo server, lalu kunjungi /sitemap.xml
Kesalahan di template sitemap bisa menghasilkan XML yang tidak valid, yang akan ditolak oleh Google Search Console.
Workflow Lengkap: Dari Build sampai Submission
Berikut adalah alur kerja lengkap untuk memastikan sitemap Hugo kamu benar dari ujung ke ujung:
flowchart TD
A[Konfigurasi sitemap\ndi hugo.toml/yaml] --> B[Tambahkan front matter\nsitemap per halaman jika perlu]
B --> C{Custom template\ndiperlukan?}
C -- Ya --> D[Buat layouts/sitemap.xml]
C -- Tidak --> E[Gunakan template default Hugo]
D --> F[hugo build]
E --> F
F --> G[Verifikasi public/sitemap.xml]
G --> H{XML valid?}
H -- Tidak --> I[Debug template]
I --> F
H -- Ya --> J[Update robots.txt\nsertakan Sitemap: URL]
J --> K[Deploy ke production]
K --> L[Submit ke Google Search Console]
L --> M[Pantau status indexing]
M --> N{Ada error?}
N -- Ya --> O[Investigasi dan perbaiki]
N -- Tidak --> P[Monitor secara berkala]Checklist Sitemap Sebelum Deploy
KONFIGURASI:
□ baseURL di hugo.toml sudah menggunakan domain production (bukan localhost)
□ enableRobotsTXT = true diaktifkan
□ Nilai changefreq sesuai dengan frekuensi update konten
□ Priority default masuk akal (0.5 untuk halaman biasa)
FRONT MATTER:
□ Halaman penting memiliki lastmod yang akurat
□ Halaman yang tidak perlu diindeks memiliki sitemap.exclude = true
□ Artikel unggulan memiliki priority lebih tinggi
OUTPUT:
□ public/sitemap.xml ada setelah build
□ XML bisa dibuka di browser tanpa error parsing
□ Jumlah URL di sitemap masuk akal (tidak kurang, tidak ada halaman duplikat)
□ Semua URL menggunakan HTTPS (bukan HTTP)
□ Semua URL menggunakan domain yang benar
ROBOTS.TXT:
□ Baris Sitemap: https://domain.com/sitemap.xml ada
□ Halaman yang di-Disallow tidak masuk sitemap
SEARCH CONSOLE:
□ Sitemap sudah disubmit
□ Status menunjukkan sukses
□ Tidak ada error yang dilaporkan
Ringkasan
- Sitemap adalah sinyal, bukan perintah — Google menggunakannya sebagai panduan crawling, tapi tetap memutuskan sendiri apakah halaman layak diindeks berdasarkan kualitas konten.
- Hugo menggenerate sitemap.xml secara otomatis tanpa konfigurasi apapun — terletak di
public/sitemap.xmlsetelah build. Tapi konfigurasi default tidak selalu optimal.- Konfigurasi global di
hugo.toml/yamlmengaturchangefreq,priority, danfilenameuntuk semua halaman secara serentak.- Override per-halaman melalui front matter
sitemap.changefreq,sitemap.priority, dansitemap.excludememberikan kontrol granular untuk halaman-halaman spesifik.lastmodadalah elemen paling penting yang benar-benar dibaca Google — selalu perbarui field ini di front matter setiap kali ada revisi konten yang substansial.- Custom template di
layouts/sitemap.xmlmemberikan kontrol penuh atas output XML — berguna untuk menambahkan image sitemap, hreflang untuk multilingual, atau logika filter yang kompleks.- robots.txt harus konsisten dengan sitemap — jangan memasukkan URL ke sitemap yang di-Disallow di robots.txt.
- Aktifkan
enableRobotsTXT = truedan tambahkan barisSitemap:di robots.txt agar crawler menemukan sitemap secara otomatis.- Submit ke Google Search Console untuk memastikan Google mengetahui sitemap kamu dan memantau status indexing secara aktif.
- Anti-pattern utama: URL dengan query string,
lastmodtidak akurat, priority seragam untuk semua halaman, dan tidak memverifikasi validitas XML setelah build.