← Quay lại blog

Chuyển hướng địa lý trên trang web: 6 sai lầm cloaking khiến Google cấm bạn

Googlebot thấy một trang, người dùng từ Đức thấy một trang khác. Phân tích 6 lỗi geo-redirect dẫn đến các hình phạt thủ công của Google và cách tránh chúng.

📅12 tháng 10, 2026

Trang web hiển thị cho người dùng nói tiếng Anh từ Mỹ một trang khác, trong khi Googlebot, vật lý ngồi trong trung tâm dữ liệu Mountain View, lại thấy một trang hoàn toàn khác. Về mặt hình thức, đây đã là cloaking, ngay cả khi bạn chỉ muốn điều chỉnh nội dung cho khu vực. Phân tích 6 lỗi điển hình trong chuyển hướng địa lý khiến các trang web mất vị trí, nhận hình phạt thủ công và bị cấm toàn bộ miền trong các mạng đối tác.

Chuyển hướng địa lý là gì và tại sao nó cần thiết cho doanh nghiệp

Chuyển hướng địa lý là một cơ chế tự động chuyển hướng người dùng đến phiên bản trang web được điều chỉnh cho quốc gia của họ: ngôn ngữ khác, tiền tệ, giá cả, ưu đãi. Các cửa hàng trực tuyến sử dụng nó để người mua từ Đức ngay lập tức truy cập vào phiên bản tiếng Đức với giá bằng euro, thay vì lướt qua danh mục bằng đô la. Các nhà tiếp thị sử dụng chuyển hướng địa lý trong các liên kết để hiển thị các ưu đãi khác nhau tùy thuộc vào lưu lượng địa lý — ví dụ, người dùng từ các quốc gia Tier-1 sẽ thấy một trang đích, trong khi những người khác sẽ thấy một trang tạm hoặc sản phẩm khác.

Vấn đề là logic tương tự, xác định quốc gia của người dùng qua IP, cũng áp dụng cho Googlebot. Và địa chỉ IP của bot Google thực tế nằm ở Mỹ, bất kể chúng có đang lập chỉ mục trang cho kết quả tìm kiếm của Nga, Kazakhstan hay Đức. Nếu hệ thống chuyển hướng địa lý không phân biệt được crawler với người sống, kết quả là Google thấy không phải trang mà người dùng thực sự thấy. Đây là định nghĩa hình thức về cloaking theo hướng dẫn của Google Search Central, và hình phạt cho điều này có thể từ việc giảm thứ hạng đến việc loại trừ hoàn toàn miền khỏi chỉ mục.

Tại sao Googlebot và con người thấy các trang khác nhau

Sự khác biệt xảy ra vì ba lý do đồng thời, và thường thì chúng chồng chéo lên nhau. Đầu tiên, Googlebot lập chỉ mục trang web từ các địa chỉ IP thuộc về Google, và các địa chỉ này được các dịch vụ địa lý (MaxMind, IP2Location và tương tự) xác định là của Mỹ gần như 100% trường hợp. Thứ hai, Googlebot gửi User-Agent riêng của mình, thường được xử lý bởi một nhánh mã riêng — đôi khi cố ý, để không làm hỏng việc lập chỉ mục, và đôi khi chỉ là do lỗi của lập trình viên. Thứ ba, hành vi của Googlebot khi thực hiện JS-rendering khác với hành vi của trình duyệt: crawler có thể không thực hiện chuyển hướng dựa trên JavaScript của khách hàng, và do đó nó lập chỉ mục một phiên bản hoàn toàn khác của trang mà người dùng thấy khi đã bật JS.

Thêm vào đó, bộ nhớ cache CDN có thể "dính" vào phiên bản cho một quốc gia và phát hành nó cho tất cả mọi người, dẫn đến tình huống mà ngay cả khi không có ý đồ xấu từ chủ sở hữu trang web, công cụ tìm kiếm lập chỉ mục nội dung không phù hợp với những gì khán giả thấy. Dưới đây là sáu kịch bản cụ thể mà điều này thường xảy ra.

Lỗi 1: chuyển hướng theo IP mà không kiểm tra User-Agent của bot

Lỗi thường gặp nhất là logic chuyển hướng được xây dựng hoàn toàn dựa trên việc xác định quốc gia qua IP, mà không kiểm tra ai đang thực hiện yêu cầu: con người hay crawler. Kết quả là Googlebot, truy cập từ dải IP của Mỹ, tự động vào phiên bản US của trang web, ngay cả khi trang ban đầu được quảng bá cho các yêu cầu từ Nga hoặc Kazakhstan. Sau vài tuần quét, chỉ mục của Google bị nhồi nhét với phiên bản "không đúng" của nội dung, và vị trí cho các khu vực mục tiêu bắt đầu giảm mà không có lý do rõ ràng.

Giải pháp là luôn loại trừ các User-Agent và dải IP của các bot tìm kiếm (Googlebot, Bingbot, YandexBot) khỏi chuyển hướng địa lý, cung cấp cho họ phiên bản chính thống của trang bất kể quốc gia xác định. Kiểm tra User-Agent là một rào cản cần thiết nhưng không đủ, vì nó dễ dàng bị giả mạo, vì vậy các dự án nghiêm túc xác minh thêm IP qua truy vấn DNS ngược (reverse DNS lookup), như chính tài liệu của Google khuyến nghị để xác minh Googlebot.

Lỗi 2: kiểm tra với IP từ trung tâm dữ liệu thay vì người dùng thực tế

Lỗi thứ hai xảy ra ngay trong giai đoạn kiểm tra. Lập trình viên hoặc nhà tiếp thị kiểm tra chuyển hướng địa lý qua proxy trung tâm dữ liệu thông thường hoặc VPN, và logic hoạt động như thể đây là người dùng thực tế từ quốc gia cần thiết. Nhưng các địa chỉ IP từ trung tâm dữ liệu dễ dàng phân biệt với lưu lượng gia đình — nhiều CDN và hệ thống chống gian lận đánh dấu chúng bằng một cờ riêng, và một phần logic nhắm mục tiêu địa lý có thể hoạt động khác cho những địa chỉ như vậy so với địa chỉ IP gia đình thông thường.

Cuối cùng, bài kiểm tra "đạt" yêu cầu, chuyển hướng trên máy chủ phát triển hoạt động hoàn hảo, nhưng trong môi trường sản xuất, người dùng thực tế từ quốc gia mục tiêu nhận được phiên bản không đúng, vì cơ sở dữ liệu định vị địa lý của nhà cung cấp hoặc quy tắc CDN diễn giải IP của họ khác với địa chỉ từ trung tâm dữ liệu thử nghiệm. Để kiểm tra chính xác, nên sử dụng proxy dân cư — chúng có IP của các nhà cung cấp thực tế trong quốc gia cần thiết, và các dịch vụ địa lý xác định chúng giống như họ xác định người dùng thực tế. Điều này cung cấp một bức tranh trung thực về những gì người truy cập thực sự thấy trên trang web, chứ không phải phiên bản đơn giản hóa cho "IP trung tâm dữ liệu điển hình".

Lỗi 3: bộ nhớ cache và thiếu tiêu đề Vary

Nếu trang web nằm sau CDN (Cloudflare, Fastly, Akamai) và chuyển hướng địa lý được thực hiện ở cấp máy chủ gốc, chứ không phải chính CDN, dễ dàng rơi vào tình huống mà CDN lưu trữ phiên bản đầu tiên của trang và phát hành nó cho tất cả mọi người — bất kể quốc gia của người truy cập tiếp theo. Điều này xảy ra khi trong phản hồi của máy chủ không có tiêu đề Vary: Accept-Language hoặc một khóa tương tự cho bộ nhớ cache theo đặc điểm địa lý.

Trong trường hợp này, Googlebot có thể thấy phiên bản "đúng" trong lần truy cập đầu tiên, lưu trữ nó trong các hệ thống lập chỉ mục của mình, và sau đó trong nhiều tuần nhận được cùng một phiên bản trong các lần truy cập tiếp theo, ngay cả khi nội dung cho các quốc gia khác đã thay đổi từ lâu. Trong khi đó, người dùng thấy phiên bản hiện tại nhưng khác — sự không đồng bộ tăng dần và khó chẩn đoán mà không có so sánh trực tiếp các phản hồi của máy chủ cho các khu vực khác nhau thông qua các công cụ như curl với việc thay thế tiêu đề hoặc qua proxy với định vị địa lý cần thiết.

Lỗi 4: chuyển hướng JS mà bot diễn giải khác

Googlebot có khả năng thực hiện JavaScript, nhưng làm điều này với độ trễ đáng kể (lần render thứ hai có thể mất vài ngày) và không phải lúc nào cũng giống như trình duyệt của người dùng. Nếu chuyển hướng địa lý được thực hiện qua JS của khách hàng — ví dụ, qua window.location sau khi thực hiện yêu cầu fetch đến geo-API — có nguy cơ rằng trong lần truy cập đầu tiên, crawler sẽ lập chỉ mục trang trước khi chuyển hướng xảy ra, tức là phiên bản "không đúng" cho khu vực cụ thể.

Điều này đặc biệt nghiêm trọng đối với các trang đích một trang (SPA), nơi toàn bộ logic cá nhân hóa được giữ ở phía khách hàng. Cách tiếp cận đúng là thực hiện xác định địa lý và chuyển hướng ở phía máy chủ (chức năng edge của CDN, middleware trên Node.js, quy tắc trong Nginx), để Googlebot và người dùng nhận được chuyển hướng HTTP 302 trước khi trang bắt đầu được render trong trình duyệt. Điều này loại bỏ sự phụ thuộc vào cách mà crawler sẽ xử lý JS tại một thời điểm cụ thể.

Lỗi 5: một URL không có hreflang cho các phiên bản ngôn ngữ khác nhau

Lỗi thứ năm là cố gắng phục vụ nhiều phiên bản ngôn ngữ trên cùng một URL mà không có đánh dấu hreflang. Google khuyến nghị rõ ràng: nếu nội dung trên một URL khác nhau tùy thuộc vào địa phương của người dùng, cần phải cung cấp các URL khác nhau cho mỗi phiên bản (subdomain, subfolder hoặc miền riêng) với đánh dấu hreflang chéo, hoặc trung thực hiển thị cùng một phiên bản cho tất cả, bao gồm cả bot, thêm khả năng chuyển đổi ngôn ngữ thủ công.

Nếu không có hreflang, Google không thể hiểu rằng /product bằng tiếng Nga và /product bằng tiếng Anh — đây là nội dung khác nhau có chủ ý cho các khán giả khác nhau, chứ không phải là cố gắng che giấu một phiên bản khỏi chỉ mục vì lý do khác. Kết quả là, một phiên bản ngẫu nhiên (thường là phiên bản mà bot đã truy cập trong lần lập chỉ mục cuối cùng) sẽ được đưa vào chỉ mục, và chính nó bắt đầu được xếp hạng ở tất cả các khu vực cùng một lúc, điều này ảnh hưởng xấu đến sự liên quan của kết quả tìm kiếm và tỷ lệ chuyển đổi.

Lỗi 6: không có fallback cho người dùng với VPN và proxy di động

Lỗi thứ sáu liên quan không chỉ đến Googlebot mà còn đến người dùng thực tế — nhưng nó liên quan trực tiếp đến chủ đề chuyển hướng địa lý, vì thường chính nỗ lực "sửa chữa" hành vi cho bot lại làm hỏng nó cho những người sống với VPN hoặc internet di động. Người dùng của các nhà mạng di động thường truy cập internet qua CGNAT (Carrier-Grade NAT), khi hàng chục nghìn thuê bao sử dụng cùng một IP công cộng, và cơ sở dữ liệu địa lý có thể xác định IP như vậy thuộc về quốc gia láng giềng hoặc hoàn toàn sai.

Nếu trên trang web không có công tắc ngôn ngữ/quốc gia thủ công như fallback, người dùng với IP "không đúng" sẽ bị mắc kẹt trên phiên bản không liên quan mà không có khả năng thay đổi — và chỉ đơn giản là rời đi. Để kiểm tra chính xác kịch bản như vậy, nên kiểm tra hành vi của trang web qua proxy di động, giả lập IP của các nhà cung cấp dịch vụ di động với hành vi định vị địa lý đặc trưng cho CGNAT — điều này giúp nhìn thấy vấn đề trước khi người dùng thực tế phát hiện và báo cáo cho bộ phận hỗ trợ.

Cách kiểm tra chuyển hướng địa lý qua mắt Google từ các quốc gia khác nhau

Công cụ chính cho chẩn đoán ban đầu là chức năng "Xem như Googlebot" trong Google Search Console (công cụ kiểm tra URL), cho thấy HTML nào thực sự được crawler Google nhận. Nếu phiên bản không giống như bạn thấy trong trình duyệt từ quốc gia của mình — vấn đề đã được xác nhận. Nhưng Search Console luôn lập chỉ mục từ các IP của Mỹ, vì vậy để so sánh hành vi của trang web theo các khu vực, cần một lớp kiểm tra riêng.

Trên thực tế, các nhà tiếp thị và chuyên gia SEO tạo ra một số hồ sơ trong trình duyệt chống phát hiện — Dolphin Anty, AdsPower, Multilogin hoặc GoLogin — và gán mỗi hồ sơ với proxy của quốc gia cần thiết, để thủ công đi qua con đường của người dùng: mở trang web, xem phiên bản nào đã tải, tiêu đề Accept-Language nào đã gửi, liệu chuyển hướng có hoạt động và URL nào. Đối với những kiểm tra như vậy, proxy dân cư với lựa chọn thành phố hoặc nhà cung cấp cụ thể là rất tiện lợi — chúng cung cấp mô phỏng trung thực nhất về người truy cập thực tế, khác với các địa chỉ từ trung tâm dữ liệu mà một số dịch vụ có thể đánh dấu là nghi ngờ ngay cả trước khi đánh giá địa lý.

Loại proxy Dùng để kiểm tra nào Rủi ro kết quả sai
Proxy dân cư Mô phỏng người dùng gia đình thông thường tại quốc gia/thành phố cần thiết Thấp
Proxy di động Kiểm tra hành vi khi CGNAT và định vị địa lý di động Thấp
Proxy trung tâm dữ liệu Kiểm tra nhanh việc chuyển hướng theo quốc gia Cao hơn: một số cơ sở dữ liệu địa lý đánh dấu IP khác với IP gia đình

Để kiểm tra chính xác hành vi của logic máy chủ (không phải render trực quan), có thể xem thêm phản hồi thô của máy chủ qua curl với việc thay thế User-Agent thành Googlebot và tiêu đề X-Forwarded-For thành IP của quốc gia cần thiết — điều này sẽ cho thấy trạng thái HTTP và Location mà máy chủ trả về trước bất kỳ JS-rendering nào, và cho phép phát hiện lỗi 4 và lỗi 1 trong danh sách trên chỉ với một lệnh.

Danh sách kiểm tra cấu hình chuyển hướng địa lý an toàn

  • Googlebot, Bingbot và YandexBot đã được loại trừ khỏi logic chuyển hướng địa lý qua User-Agent và được xác nhận qua DNS ngược
  • Chuyển hướng được thực hiện ở phía máy chủ (302/307), không chỉ qua JavaScript của khách hàng
  • Đã cấu hình tiêu đề Vary cho bộ nhớ cache CDN chính xác theo địa lý/ngôn ngữ
  • Đối với mỗi phiên bản ngôn ngữ, có một URL riêng với đánh dấu hreflang chéo
  • Có công tắc ngôn ngữ/quốc gia thủ công rõ ràng như fallback cho IP được xác định sai
  • Kiểm tra được thực hiện qua proxy dân cư và di động từ các quốc gia cần thiết, không chỉ qua địa chỉ từ trung tâm dữ liệu
  • Mỗi quý một lần kiểm tra xem Google Search Console hiển thị gì — phiên bản có trùng khớp với những gì người dùng thực tế thấy không

Kết luận

Sự khác biệt giữa những gì Googlebot thấy và những gì người dùng thấy hiếm khi là một sự lừa dối có chủ ý đối với công cụ tìm kiếm — thường thì đây là một khoản nợ kỹ thuật tích lũy: chuyển hướng theo IP mà không kiểm tra bot, bộ nhớ cache không có tiêu đề Vary, chuyển hướng JS mà crawler không kịp thực hiện, và thiếu hreflang cho các phiên bản ngôn ngữ. Mỗi lỗi này riêng lẻ có vẻ nhỏ nhặt, nhưng khi kết hợp lại, chúng tạo ra bức tranh cổ điển về cloaking trong mắt Google — với các hình phạt tương ứng.

Cách duy nhất đáng tin cậy để đảm bảo rằng trang web hoạt động một cách công bằng cho cả bot và con người là thường xuyên kiểm tra nó từ các IP thực tế của các quốc gia cần thiết. Đối với chẩn đoán như vậy, chúng tôi khuyên bạn nên sử dụng proxy dân cư để mô phỏng người dùng gia đình điển hình và proxy di động để kiểm tra các kịch bản với CGNAT — điều này cung cấp bức tranh trung thực nhất về những gì khán giả của bạn thực sự thấy ở mỗi khu vực, và giúp phát hiện vấn đề trước khi thuật toán của Google tìm thấy nó.