Website Pribadi Multibahasa — Bantu Manusia dan Mesin Menemukan Bahasa yang Tepat
Sebuah website dapat memiliki halaman berbahasa Inggris, terjemahan Indonesia, dan terjemahan Jerman, tetapi masih menyisakan satu pertanyaan penting: bagaimana pengunjung, screen reader, atau mesin pencari mengetahui bahwa ketiga URL tersebut saling berhubungan?
Jawabannya bukan satu tag ajaib. Website multibahasa memerlukan beberapa sinyal kecil dengan tugas berbeda: URL stabil untuk setiap terjemahan, bahasa dokumen yang benar, tautan eksplisit di antara halaman yang setara, dan cara yang terlihat agar pembaca dapat memilih. Tugas-tugas itu mudah tertukar. Sebuah halaman mungkin memiliki lang="de" tetapi tidak menyediakan jalan ke versi Inggris, atau language switcher mungkin berfungsi sementara metadata halaman menjelaskan hubungan yang keliru.
Panduan ini membangun model sederhana untuk website pribadi atau CMS kecil. Isinya tidak menjanjikan ranking dan tidak menganggap setiap website membutuhkan penargetan tingkat negara. Tujuannya lebih sederhana: membuat setiap terjemahan jujur tentang identitasnya dan jelas tentang lokasi halaman-halaman saudaranya.
Empat Lapisan dengan Empat Tugas Berbeda
Publikasi multibahasa akan lebih mudah dipahami jika dipisahkan menjadi empat lapisan:
- URL: memberi setiap terjemahan lengkap sebuah alamat yang tahan lama.
lang: menjelaskan bahasa dokumen HTML saat ini atau sebuah elemen di dalamnya.hreflang: menghubungkan URL lokal yang setara untuk Google Search.- Language switcher: memungkinkan seseorang berpindah ke versi lain.
Lapisan-lapisan ini saling menguatkan, tetapi tidak dapat saling menggantikan. Panduan Internasionalisasi W3C menyarankan agar bahasa halaman dideklarasikan pada elemen html. Sementara itu, Google mengatakan bahwa mereka memakai konten halaman yang terlihat, bukan lang atau hreflang, untuk mendeteksi bahasa. Ini bukan kontradiksi: semantik dokumen dan deteksi bahasa milik sebuah produk pencarian adalah dua sistem berbeda.
Berikan URL Stabil untuk Setiap Terjemahan Lengkap
Halaman terjemahan harus dapat diakses melalui alamatnya sendiri. Untuk website kecil dalam satu domain, subdirektori sering menjadi susunan yang paling sederhana:
https://example.com/quiet-web/
https://example.com/id/web-yang-tenang/
https://example.com/de/das-ruhige-web/
Subdomain atau domain terpisah juga dapat digunakan. Hal terpenting bukan bentuknya, melainkan kestabilannya: URL harus mengembalikan bahasa yang sama tanpa bergantung pada cookie, state JavaScript, atau preferensi yang ditebak. Panduan Google untuk website multibahasa menyarankan URL berbeda bagi setiap versi bahasa dan memperingatkan bahwa mengubah satu URL secara dinamis berdasarkan bahasa browser dapat membuat beberapa variasi sulit di-crawl.
Slug khusus bahasa masuk akal ketika membantu pembaca memahami alamat. Namun, pilihan ini membawa tanggung jawab editorial: tautan antar-terjemahan harus berasal dari hubungan yang tersimpan, bukan dari upaya mengubah satu slug menjadi slug lain. Mengganti kata di dalam URL bukanlah manajemen terjemahan.
Deklarasikan Bahasa Dokumen
Untuk HTML biasa yang disajikan sebagai text/html, letakkan bahasa default pada elemen root:
<html lang="en">
<html lang="id">
<html lang="de">
Menurut HTML Standard, bahasa sebuah elemen ditentukan oleh atribut bahasanya sendiri dan konteks yang diwarisi. Deklarasi ini dapat memengaruhi pemrosesan yang peka terhadap bahasa. MDN juga mencatat pentingnya hal ini untuk aksesibilitas: teknologi asistif dapat memakai informasi tersebut untuk memilih pengucapan yang sesuai.
Ketika sebuah bagian pendek berganti bahasa, tandai bagian tersebut alih-alih mengubah seluruh dokumen:
<p>The Indonesian phrase <span lang="id">pelan-pelan</span>
means doing something gradually or carefully.</p>
Jangan menyimpulkan bahasa dari UTF-8, ikon bendera, atau URL saja. Encoding menjelaskan bagaimana karakter direpresentasikan, bukan bahasa manusia apa yang dibentuknya. Bendera mewakili negara, sedangkan bahasa secara umum melintasi batas negara.
Gunakan Language Tag Seakurat yang Dibutuhkan
Nilai-nilai di atas adalah language tag yang ditetapkan melalui BCP 47 dan RFC 5646. Sebuah tag dimulai dengan subtag bahasa dan dapat menambahkan informasi seperti script atau region, dipisahkan dengan tanda hubung. Contohnya mencakup de, en-GB, dan zh-Hant.
Detail yang lebih banyak tidak otomatis lebih benar. Jika satu terjemahan Inggris ditulis untuk pembaca bahasa Inggris secara umum, en lebih jelas daripada menciptakan pembedaan wilayah. Gunakan en-GB ketika kontennya benar-benar mewakili penggunaan bahasa Inggris Britania, bukan sekadar karena server berada di Eropa. RFC 5646 menyatakan bahwa subtag region dapat dihilangkan ketika tidak memberi nilai pembeda.
Huruf besar atau kecil tidak mengubah makna tag BCP 47, meskipun format konvensional menuliskan bahasa dengan huruf kecil, script dengan kapital di awal, dan region dengan huruf kapital. Konsistensi tetap penting karena string yang tidak konsisten membuat template dan pengujian lebih sulit dipahami.
Hubungkan Halaman yang Setara dengan hreflang
Untuk Google Search, versi lokal dapat dideklarasikan melalui HTML, HTTP header, atau XML sitemap. Dokumentasi Google tentang versi lokal menjelaskan ketiga metode itu sebagai metode yang setara dan menyatakan bahwa tidak ada manfaat Search dari menerapkan semuanya. Untuk website HTML kecil, membuat tautan di bagian head dokumen biasanya mudah diperiksa:
<link rel="alternate" hreflang="en"
href="https://example.com/quiet-web/">
<link rel="alternate" hreflang="id"
href="https://example.com/id/web-yang-tenang/">
<link rel="alternate" hreflang="de"
href="https://example.com/de/das-ruhige-web/">
Set lengkap yang sama harus ada pada ketiga versi. Setiap halaman mencantumkan dirinya sendiri, setiap URL alternatif ditulis lengkap, dan setiap halaman saudara memberi tautan balik. Google mengatakan bahwa return link yang hilang dapat membuat anotasi diabaikan. Hubungan timbal balik ini lebih mudah dipelihara jika CMS memperlakukan terjemahan sebagai anggota satu kelompok konten, bukan sebagai post yang tidak saling terkait.
hreflang="x-default" yang bersifat opsional dapat mengarah ke halaman pemilih netral atau fallback bagi pengaturan bahasa yang tidak cocok. Nilai ini bukan bahasa lisan keempat dan tidak diperlukan untuk setiap blog tiga bahasa. Tambahkan hanya ketika halaman fallback yang nyata memang tersedia.
Pisahkan Hubungan Canonical dan Alternate
Canonical link menjawab, “URL mana yang menjadi identitas utama halaman ini di antara URL duplikat atau hampir duplikat?” Alternate-language link menjawab, “Di mana halaman yang setara untuk bahasa atau locale lain?” Keduanya adalah pertanyaan berbeda.
Jika konten utama benar-benar diterjemahkan, Google mengatakan bahwa halaman lokal tidak dianggap duplikat hanya karena menyampaikan pokok bahasan yang sama dalam bahasa berbeda. Karena itu, pola yang praktis adalah setiap terjemahan memakai canonical URL miliknya sendiri, sementara cluster hreflang menghubungkan seluruh set:
<!-- On the Indonesian page -->
<link rel="canonical"
href="https://example.com/id/web-yang-tenang/">
Mengarahkan semua canonical ke source Inggris dapat melemahkan pesan bahwa URL lokal adalah halaman sah dengan identitasnya sendiri. Namun, boilerplate yang diterjemahkan di sekeliling konten utama yang tidak berubah adalah kasus berbeda. Jangan melabeli halaman sebagai setara hanya karena navigasinya telah diterjemahkan.
Biarkan Pembaca Mengoreksi Tebakan
Preferensi browser dapat berguna sebagai petunjuk, tetapi bukan persetujuan. Perangkat bersama, pelancong, pelajar bahasa, atau seseorang yang mengikuti tautan tertentu mungkin menginginkan versi yang berbeda dari default browser. Panduan Google untuk website multibahasa menyarankan agar website tidak melakukan redirect otomatis antar-versi bahasa dan merekomendasikan tautan yang memungkinkan pengguna memilih.
Language switcher sebaiknya memakai tautan biasa yang dapat di-crawl dan menyebut nama bahasa dengan jelas:
<nav aria-label="Language">
<a href="https://example.com/quiet-web/" lang="en">English</a>
<a href="https://example.com/id/web-yang-tenang/" lang="id">Indonesia</a>
<a href="https://example.com/de/das-ruhige-web/" lang="de">Deutsch</a>
</nav>
Menulis setiap nama bahasa dalam bahasa tersebut membuatnya mudah dikenali. lang pada setiap label menjelaskan teks inline, sementara halaman di sekitarnya tetap memakai bahasa default miliknya sendiri. JavaScript boleh menyempurnakan kontrol, tetapi navigasi tidak seharusnya menghilang ketika script gagal.
Jujurlah tentang Terjemahan yang Hilang atau Sebagian
Masalah tersulit sering kali bersifat editorial, bukan teknis. Sebuah CMS mungkin menampilkan tombol Inggris, Indonesia, dan Jerman secara global meskipun satu artikel hanya tersedia dalam bahasa Inggris. Mengarahkan pilihan Jerman yang belum ada ke halaman Inggris lalu menganotasinya sebagai bahasa Jerman menciptakan hubungan palsu.
Publikasikan anotasi alternatif hanya ketika tujuannya tersedia, bersifat publik, dan memuat konten yang sesuai. Jika terjemahan masih berupa draft, hilangkan dari cluster publik dan language switcher. Jika hanya interface yang diterjemahkan sedangkan artikelnya tetap berbahasa Inggris, deklarasikan dokumen berdasarkan konten utama yang sebenarnya dan jelaskan keterbatasannya kepada pembaca bila bermanfaat.
Terjemahan juga dapat tertinggal setelah source berubah. Workflow publikasi yang andal sebaiknya mencatat status terjemahan dan memeriksa ulang seluruh set setelah revisi besar. Keserentakan sempurna tidak selalu mungkin, tetapi metadata harus menjelaskan halaman yang tersedia sekarang, bukan versi yang diharapkan editor selesai nanti.
Validasi Seluruh Set, Bukan Hanya Satu Halaman
Satu halaman dapat terlihat benar meskipun graph hubungannya rusak. Untuk setiap kelompok konten yang dipublikasikan, periksa:
- Setiap URL memberikan respons publik yang berhasil dalam bahasa yang diharapkan.
- Elemen root
htmlmemiliki nilailangyang benar. - Canonical URL dapat diakses dan mengidentifikasi halaman lokal saat ini.
- Setiap versi menghasilkan set lengkap reciprocal
hreflanglink yang sama. - Language switcher yang terlihat menuju artikel yang sesuai, bukan sekadar homepage locale.
- Tidak ada draft, redirect, error page, atau placeholder yang belum diterjemahkan di dalam cluster.
Uji HTML yang telah dirender, bukan hanya database atau template. Metadata dapat di-escape dengan keliru, disisipkan di luar head, atau tersimpan dalam cache setelah terjemahan berubah. Pemeriksaan otomatis kecil dapat mengambil setiap halaman saudara, mem-parse tautannya, dan mengonfirmasi hubungan timbal balik; pemeriksaan manual tetap perlu menilai apakah halaman-halamannya benar-benar setara.
Peta yang Jujur di Antara Bahasa
Publikasi multibahasa belum selesai hanya dengan menempatkan tiga bendera di header. Ini adalah janji bahwa setiap alamat berisi bahasa yang diklaimnya, setiap halaman yang setara menunjuk kembali ke halaman saudaranya, dan pembaca tetap bebas memilih.
Mulailah dengan sistem jujur yang paling kecil: URL stabil, nilai lang yang akurat, satu metode hreflang yang dapat dipelihara, canonical link yang konsisten dengan dirinya sendiri, serta navigasi yang terlihat. Tambahkan region atau x-default hanya ketika model konten benar-benar membutuhkannya. Hasilnya mungkin tidak terlihat dramatis, tetapi metadata yang baik biasanya memang tenang. Ia menghapus ambiguitas tanpa berpura-pura dapat menentukan keinginan pembaca.
References
- WHATWG — HTML Standard: Atribut
langdanxml:lang - RFC Editor — RFC 5646: Tags for Identifying Languages
- W3C Internationalization — Declaring language in HTML
- Google Search Central — Tell Google about localized versions of your page
- Google Search Central — Managing multi-regional and multilingual sites
- MDN Web Docs — Atribut global HTML
lang
