hreflang attribute cho Google biết trang nào dành cho ngôn ngữ/quốc gia nào — để Google phục vụ đúng phiên bản ngôn ngữ/khu vực cho từng user (lưu ý: Google khẳng định không có duplicate content penalty — hreflang không phải để 'tránh phạt'). Format: <link rel='alternate' hreflang='vi' href='https://example.com/vi/page'>.
Quy tắc:
- Mỗi trang phải có hreflang trỏ đến TẤT CẢ phiên bản ngôn ngữ (kể cả chính nó — self-referencing).
- hreflang phải reciprocal (trang A trỏ B, trang B phải trỏ lại A).
- Dùng x-default cho fallback language.
Format language code: 'vi' (ngôn ngữ), 'en-US' (ngôn ngữ-quốc gia). Trong Next.js: generateMetadata() với alternates.languages (App Router); còn cấu hình i18n trong next.config chỉ áp dụng cho Pages Router — App Router không có i18n routing built-in.
Sai lầm: hreflang không reciprocal (Google bỏ qua), mixed signals (hreflang nói tiếng Việt nhưng content tiếng Anh), quên x-default.