SEO untuk Multi-language — i18n

SEO untuk Multi-language Tanpa setup SEO yang benar, Google bisa mengindex versi bahasa yang salah untuk user, atau bahkan menganggap konten multi-bahasa…

SEO multi-language adalah membuat tiap versi bahasa ditemukan Google dan ditampilkan ke pencari yang tepat: tamu Jepang dapat halaman Jepang, tamu Mesir dapat halaman Arab. Bayangin rak brosur di pusat informasi wisata Dieng. Tiap versi brosur Homestay Kabut punya tempat sendiri di rak, dan di tiap brosur tercetak "Juga tersedia dalam: Bahasa Indonesia, English, 日本語, العربية", lengkap dengan nomor raknya. Petugas rak (Google) cuma percaya daftar itu kalau kedua brosur saling menyebut.

🧪 Tebakan cepat: Halaman /en/terrace-room memasang hreflang ke versi id, en, ja, dan ar. Halaman /ja/テラスルーム belum punya tag hreflang sama sekali. Apa yang Google lakukan dengan pasangan en dan ja: memakainya, memakainya satu arah (dari en ke ja saja), atau mengabaikannya? Jawabannya ada di bagian "hreflang: tiap halaman menyebut semua versi, termasuk dirinya".

Satu bahasa, satu URL

Halaman "Managing multi-regional and multilingual sites" di Google Search Central menulis: "Google recommends using different URLs for each language version of a page rather than using cookies or browser settings to adjust the content language on the page." Googlebot gak membawa cookie pilihan bahasa, jadi versi yang cuma muncul lewat cookie gak pernah dilihatnya.

Pilihan strukturnya, dengan untung rugi menurut halaman yang sama:

Struktur Contoh Untung Rugi
Domain negara (ccTLD) homestaykabut.jp Target negara paling jelas, lokasi server gak berpengaruh, tiap situs terpisah rapi Mahal (dan belum tentu tersedia), infrastruktur lebih banyak, aturan ccTLD kadang ketat, cuma bisa menyasar satu negara
Subdomain ja.homestaykabut.example Mudah dipasang, boleh beda lokasi server, tiap situs terpisah rapi Pengguna belum tentu paham dari URL saja ("ja" itu bahasa atau negara?)
Subdirectory homestaykabut.example/ja/ Mudah dipasang, perawatan ringan (satu host) Pengguna belum tentu paham dari URL saja, satu lokasi server, lebih susah dipisah
Parameter URL homestaykabut.example/?lang=ja Google menulis "Not recommended"

Google gak memilih satu pemenang di antara tiga yang pertama. Untuk Bu Sri, subdirectory paling masuk akal: satu domain, satu hosting, satu sertifikat, perawatan paling ringan.

hreflang: tiap halaman menyebut semua versi, termasuk dirinya

Tag <link rel="alternate" hreflang="..."> memberi tahu Google bahwa halaman yang sama tersedia di bahasa lain. Ini <head> halaman Jepang, dengan URL yang sudah di-encode (penjelasannya di bagian slug):

<link rel="alternate" hreflang="id" href="https://homestaykabut.example/id/kamar-teras">
<link rel="alternate" hreflang="en" href="https://homestaykabut.example/en/terrace-room">
<link rel="alternate" hreflang="ja" href="https://homestaykabut.example/ja/%E3%83%86%E3%83%A9%E3%82%B9%E3%83%AB%E3%83%BC%E3%83%A0">
<link rel="alternate" hreflang="ar" href="https://homestaykabut.example/ar/%D8%BA%D8%B1%D9%81%D8%A9-%D8%A7%D9%84%D8%AA%D8%B1%D8%A7%D8%B3">
<link rel="alternate" hreflang="x-default" href="https://homestaykabut.example/en/terrace-room">

Aturannya dari halaman "Tell Google about localized versions of your page":

Kode hreflang menyebut untuk siapa halamannya, bukan locale Intl-nya. Formatnya kode bahasa ISO 639-1, boleh ditambah kode wilayah ISO 3166-1 Alpha 2. Bu Sri cuma punya satu halaman Arab untuk semua penutur Arab, jadi kodenya ar, walaupun angkanya diformat ar-EG. ar-EG artinya "penutur Arab di Mesir", jadi tamu dari Riyadh (ar-SA) gak cocok dan jatuh ke x-default. Kode yang salah: jp (JP itu negara; bahasa Jepang ja), en-UK (kode Inggris Raya GB), dan kode wilayah saja seperti eg: "You can't specify the country code by itself." Kode di luar dua standar itu, seperti es-419, juga gak didukung.

Canonical: tiap bahasa menunjuk dirinya sendiri

<link rel="canonical"> menunjuk versi utama dari halaman-halaman yang isinya sama. Versi terjemahan bukan duplikat, jadi tiap bahasa punya canonical sendiri:

<!-- di /ja/テラスルーム -->
<link rel="canonical" href="https://homestaykabut.example/ja/%E3%83%86%E3%83%A9%E3%82%B9%E3%83%AB%E3%83%BC%E3%83%A0">

Kalau keempat halaman menunjuk ke /id/kamar-teras, Google diberi tahu bahwa en, ja, dan ar cuma salinan halaman id, dan bisa saja cuma menampilkan versi id ke semua orang. Halaman "How to specify a canonical URL with rel="canonical" and other methods" menulis: "If you're using hreflang elements, make sure to specify a canonical page in the same language, or the best possible substitute language if a canonical page doesn't exist for the same language."

Slug yang diterjemahkan

Bahasa Path Yang benar-benar dikirim
id /id/kamar-teras sama
en /en/terrace-room sama
ja /ja/テラスルーム /ja/%E3%83%86%E3%83%A9%E3%82%B9%E3%83%AB%E3%83%BC%E3%83%A0
ar /ar/غرفة-التراس /ar/%D8%BA%D8%B1%D9%81%D8%A9-%D8%A7%D9%84%D8%AA%D8%B1%D8%A7%D8%B3

Sitemap dengan xhtml:link

Daripada menaruh 5 tag di tiap <head>, hreflang boleh ditulis di sitemap. Pilih salah satu cara: tag HTML, header HTTP Link (untuk file seperti PDF), atau sitemap.

<?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">
  <url>
    <loc>https://homestaykabut.example/id/kamar-teras</loc>
    <xhtml:link rel="alternate" hreflang="id" href="https://homestaykabut.example/id/kamar-teras"/>
    <xhtml:link rel="alternate" hreflang="en" href="https://homestaykabut.example/en/terrace-room"/>
    <xhtml:link rel="alternate" hreflang="ja" href="https://homestaykabut.example/ja/%E3%83%86%E3%83%A9%E3%82%B9%E3%83%AB%E3%83%BC%E3%83%A0"/>
    <xhtml:link rel="alternate" hreflang="ar" href="https://homestaykabut.example/ar/%D8%BA%D8%B1%D9%81%D8%A9-%D8%A7%D9%84%D8%AA%D8%B1%D8%A7%D8%B3"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://homestaykabut.example/en/terrace-room"/>
  </url>
  <!-- tiga <url> lagi untuk en, ja, dan ar, masing-masing dengan lima xhtml:link yang sama -->
</urlset>

Jangan redirect otomatis menurut bahasa

Godaannya: tamu dengan browser berbahasa Jepang yang membuka /id/kamar-teras langsung dilempar ke /ja/.... Halaman "Managing multi-regional and multilingual sites" menulis: "Avoid automatically redirecting users from one language version of a site to a different language version of a site. For example, don't redirect based on what you think the user's language may be." Halaman "How Google crawls locale-adaptive pages" menjelaskan kenapa: "the default IP addresses of the Googlebot crawler appear to be based in the USA. In addition, the crawler sends HTTP requests without setting Accept-Language in the request header." Kalau server Bu Sri mengalihkan semua request tanpa bahasa Jepang dari /ja/ ke /en/, Googlebot gak pernah melihat halaman Jepang.

Yang dipakai sebagai gantinya: tampilkan saran yang bisa ditutup, misalnya "このページは日本語でもご覧いただけます" ("halaman ini juga tersedia dalam bahasa Jepang") dengan link ke versi Jepang, plus pemilih bahasa dari pelajaran sebelumnya. Halaman yang URL-nya sudah membawa bahasa selalu dikirim dalam bahasa itu.

⚠️ Jebakan yang sering ketemu

TL;DR: Tiap bahasa punya URL sendiri; Google merekomendasikan URL berbeda per bahasa, bukan cookie atau setelan browser. Subdirectory (/ja/), subdomain, dan domain negara sama-sama boleh, punya untung rugi masing-masing, sedangkan parameter ?lang= gak direkomendasikan; untuk Bu Sri subdirectory paling ringan. Tiap halaman memasang <link rel="alternate" hreflang="..."> untuk semua versi termasuk dirinya, plus x-default, dengan URL lengkap, dan pasangannya harus saling menunjuk atau diabaikan. Kode hreflang menyebut audiensnya (ar untuk semua penutur Arab, ar-EG cuma Mesir; bukan jp, en-UK, atau eg). Canonical tiap bahasa menunjuk dirinya sendiri. Slug terjemahan disimpan per bahasa dan di-encode UTF-8. Sitemap boleh menggantikan tag HTML dengan xhtml:link, satu <url> per bahasa. Jangan redirect otomatis menurut IP atau Accept-Language: Googlebot merayap dari IP Amerika tanpa header itu.

Yang akan kamu pelajari