International SEO

browser language detection

Phát hiện ngôn ngữ trình duyệt để đề xuất phiên bản phù hợp, nhưng không nên dùng làm cơ sở duy nhất để chuyển hướng tự động.

5 lượt xem Cập nhật: 30/05/2026

browser language detection là gì?

Browser language detection (phát hiện ngôn ngữ trình duyệt) là kỹ thuật xác định ngôn ngữ được thiết lập sẵn trong cài đặt trình duyệt của người dùng — thường thông qua tiêu đề HTTP Accept-Language hoặc API JavaScript như navigator.language hoặc navigator.languages. Đây là một tín hiệu hỗ trợ để đoán khu vực và ngôn ngữ ưu tiên của người truy cập, đặc biệt khi triển khai website đa ngôn ngữ.

Lưu ý quan trọng: Đây không phải là cơ sở duy nhất để tự động chuyển hướng người dùng sang phiên bản ngôn ngữ khác. Việc dựa hoàn toàn vào tín hiệu này có thể gây sai lệch do nhiều nguyên nhân: thiết bị chung (ví dụ máy tính công ty đặt tiếng Anh), trình duyệt được cài đặt bằng ngôn ngữ khác với ngôn ngữ thực tế người dùng sử dụng, hoặc người dùng đang du lịch/vừa thay đổi cài đặt.

Tại sao quan trọng trong SEO?

Trong bối cảnh International SEO, việc hiểu đúng ngôn ngữ và vị trí người dùng giúp tối ưu trải nghiệm và giữ chân khách hàng. Tuy nhiên, Google và các công cụ tìm kiếm nhấn mạnh rằng: URL là yếu tố xác định ngôn ngữ và khu vực chính xác nhất. Browser language detection chỉ nên đóng vai trò hỗ trợ — ví dụ để:

  • Hiển thị lời gợi ý chọn ngôn ngữ (banner, popup) khi phát hiện không khớp giữa ngôn ngữ trình duyệt và nội dung trang;
  • Hỗ trợ phân tích hành vi người dùng theo nhóm ngôn ngữ trong Google Analytics hoặc hệ thống báo cáo nội bộ;
  • Cải thiện tốc độ hiển thị nội dung phù hợp cho người mới đến (trước khi họ chọn ngôn ngữ thủ công).

Google khẳng định rõ: Không nên dùng browser language detection để tự động chuyển hướng (302/301) mà không có sự tương tác của người dùng. Hành vi này có thể khiến công cụ tìm kiếm khó lập chỉ mục đúng phiên bản, đồng thời làm giảm trải nghiệm nếu người dùng bị đưa nhầm sang ngôn ngữ không mong muốn.

Cách hoạt động

Khi người dùng truy cập website, trình duyệt gửi kèm tiêu đề Accept-Language trong yêu cầu HTTP. Giá trị này là danh sách ưu tiên các ngôn ngữ, ví dụ:

Accept-Language: vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7

Đây là chuỗi gồm mã ngôn ngữ (ví dụ vi), mã vùng (ví dụ VN), và hệ số ưu tiên q (từ 0.0 đến 1.0). Trình bày theo thứ tự ưu tiên giảm dần.

Bên phía client, JavaScript cũng có thể đọc giá trị qua:

  • navigator.language: trả về ngôn ngữ chính (ví dụ "vi-VN");
  • navigator.languages: trả về mảng đầy đủ các ngôn ngữ đã thiết lập (hỗ trợ tốt hơn trên Chrome, Firefox, Edge — nhưng không khả dụng trên một số phiên bản Safari cũ).

Giá trị từ trình duyệt chỉ mang tính tham khảo — không phản ánh vị trí địa lý thực tế, không đảm bảo người dùng hiểu ngôn ngữ đó, và có thể bị thay đổi dễ dàng trong cài đặt.

Hướng dẫn thực hiện

  1. Xác định mục đích rõ ràng: Chỉ dùng để gợi ý, không để chuyển hướng tự động.
  2. Đọc tiêu đề Accept-Language ở phía server (PHP, Node.js, Nginx…), hoặc dùng JavaScript ở phía client nếu cần xử lý nhanh trước khi render.
  3. Rút trích mã ngôn ngữ chuẩn: Dùng logic so sánh với danh sách ngôn ngữ hỗ trợ (ví dụ: vi, en, ja). Ưu tiên khớp chính xác vi-VN, sau đó mới xét vi chung chung.
  4. Hiển thị lời nhắc thân thiện: Ví dụ banner nhỏ ở đầu trang: “Bạn đang dùng tiếng Việt? Chuyển sang phiên bản tiếng Việt ngay.” — có nút “Chuyển” và “Không, cảm ơn”.
  5. Lưu lựa chọn người dùng bằng cookie hoặc localStorage để không hỏi lại lần sau.
  6. Kiểm tra tính tương thích: Đảm bảo giải pháp hoạt động trên Safari iOS, Chrome Android, và các trình duyệt phổ biến tại thị trường mục tiêu.

Lỗi thường gặp

  • Chuyển hướng tự động dựa trên navigator.language: Gây lỗi “soft 404” nếu URL đích không tồn tại, hoặc làm mất chỉ mục phiên bản gốc. Cách khắc phục: Thay bằng lời nhắc có nút bấm rõ ràng; không dùng window.location.href ngay khi load trang.
  • Bỏ qua phần mở rộng vùng (region): So sánh chỉ vi mà không phân biệt vi-VNvi-US → dẫn đến đề xuất sai cho cộng đồng người Việt hải ngoại. Cách khắc phục: Xử lý theo thứ bậc: vi-VN > vi > en-VN > en.
  • Không kiểm tra tính khả dụng của API: navigator.languages không tồn tại trên Safari 10.1 trở xuống. Cách khắc phục: Luôn kiểm tra điều kiện trước khi gọi: if ('languages' in navigator).
  • Dùng ngôn ngữ trình duyệt để đặt hreflang: hreflang phải dựa trên URL và cấu trúc site — không được sinh động theo giá trị runtime. Cách khắc phục: hreflang luôn là thẻ tĩnh trong <head>, ví dụ: <link rel="alternate" hreflang="vi-VN" href="https://example.com/vi/">.

Ví dụ thực tế

Một trang thương mại điện tử có 3 phiên bản: tiếng Việt (example.com/vi/), tiếng Anh Mỹ (example.com/en-us/), tiếng Nhật (example.com/ja/). Khi người dùng từ Việt Nam truy cập example.com (trang chủ mặc định tiếng Anh), hệ thống đọc Accept-Language: vi-VN và hiển thị thanh thông báo:

Bạn đang dùng tiếng Việt? Xem phiên bản tiếng Việt — hoặc tiếp tục dùng tiếng Anh.

Nếu người dùng bấm “Xem phiên bản tiếng Việt”, họ được chuyển tới /vi/ và cookie preferred_lang=vi-VN được lưu. Lần sau, hệ thống sẽ ưu tiên hiển thị lời nhắc phù hợp hơn hoặc bỏ qua nếu người dùng đã chọn rõ ràng.

Câu hỏi thường gặp

Browser language detection có ảnh hưởng trực tiếp đến thứ hạng SEO không?

Không. Google không dùng tín hiệu này để xếp hạng. Thứ hạng phụ thuộc vào nội dung, cấu trúc hreflang, URL rõ ràng, và trải nghiệm người dùng — không phải vào cách bạn đọc navigator.language. Tuy nhiên, nếu dùng sai (ví dụ chuyển hướng ảo gây bounce rate cao), gián tiếp làm giảm chất lượng trải nghiệm và ảnh hưởng đến SEO.

Có nên dùng cookie để ghi nhớ ngôn ngữ người dùng?

Có — nhưng phải tuân thủ GDPR/CCPA nếu phục vụ người dùng EU hoặc California. Cần hiển thị banner đồng ý cookie trước khi lưu. Thời hạn cookie nên hợp lý (thường 6–12 tháng). Lưu ý: cookie chỉ áp dụng cho domain hiện tại, không chia sẻ giữa subdomain nếu không cấu hình Domain=.example.com.

API JavaScript nào đáng tin cậy nhất để phát hiện ngôn ngữ?

navigator.language có độ phủ cao nhất (hỗ trợ từ IE11 trở lên), nhưng chỉ trả về một giá trị. navigator.languages chính xác hơn (danh sách ưu tiên), nhưng không khả dụng trên Safari cũ và một số trình duyệt Android đời đầu. Giải pháp an toàn: ưu tiên navigator.languages[0] nếu tồn tại, ngược lại dùng navigator.language. Không nên dùng document.documentElement.lang — vì đây là thuộc tính HTML, không phản ánh cài đặt trình duyệt.

Phương pháp Độ chính xác Độ phủ trình duyệt Ghi chú
HTTP Accept-Language Cao (server-side) 100% (chuẩn HTTP) Luôn có mặt, nhưng có thể bị proxy hoặc CDN sửa đổi
navigator.languages Cao (nhiều giá trị) ~95% (trừ Safari <11) Ưu tiên dùng nếu khả dụng
navigator.language Trung bình ~99.8% Dễ dùng, nhưng thiếu chi tiết ưu tiên
Geolocation API Thấp – trung bình ~90%, nhưng cần quyền Không nên dùng kết hợp với ngôn ngữ — vì không liên quan trực tiếp