Sẽ mở trong thẻ mới
360VRSố hoá không gian thật
Nhận báo giá

Nº 245 · 06/09/2026

Nhúng virtual tour vào WordPress chuẩn Core Web Vitals: mã nhúng, facade, responsive và bảo mật

Cách nhúng virtual tour 360 vào WordPress bằng iframe: mã mẫu, Gutenberg, Bricks, Elementor, facade click-to-load, responsive, CSP và SEO trang chứa tour.

Laptop mở trang WordPress có khung virtual tour 360 phòng khách nhúng giữa trang
Tour 360 nhúng bằng iframe hiển thị như một phần nội dung của trang WordPress, kèm thanh điều hướng cảnh bên dưới.
Laptop mở trang WordPress có khung virtual tour 360 phòng khách nhúng giữa trang
Tour 360 nhúng bằng iframe hiển thị như một phần nội dung của trang WordPress, kèm thanh điều hướng cảnh bên dưới.

Bạn đã có một virtual tour 360 đẹp, đơn vị sản xuất gửi cho một đường link. Việc tiếp theo nghe rất đơn giản: nhúng virtual tour vào WordPress, ở trang dịch vụ, trang dự án hay trang chủ. Nhưng nhiều doanh nghiệp làm xong mới phát hiện trang chậm hẳn trên điện thoại, nội dung bên dưới bị giật xuống khi tour tải xong, hoặc khách vuốt màn hình mà trang không chịu cuộn.

Những lỗi đó không nằm ở tour, mà ở cách nhúng. Bài này đi theo đúng thứ tự một kỹ thuật viên sẽ làm: chọn phương thức nhúng, viết mã nhúng đúng, đặt mã vào từng công cụ dựng trang, rồi xử lý tốc độ, giao diện điện thoại, header bảo mật và SEO cho trang chứa tour.

Nếu bạn muốn hiểu tour vận hành ra sao trước khi nhúng (ảnh panorama, trình phát WebGL, tile), hãy đọc bài nền Virtual tour 360 hoạt động trên website như thế nào.

Vì sao nên nhúng virtual tour bằng iframe

Một tour xuất từ Pano2VR, krpano hay công cụ tương tự là một thư mục gồm trang HTML, các file JavaScript của trình phát, file cấu hình và rất nhiều ảnh tile. Nói cách khác, đó là một ứng dụng frontend hoàn chỉnh, có CSS và JavaScript riêng. Nó không phải một tấm ảnh để chèn vào bài viết.

Nếu chèn trực tiếp mã của tour vào trang WordPress, CSS của theme và CSS của skin tour sẽ đè lên nhau, JavaScript của plugin có thể va chạm với JavaScript của trình phát. Lỗi kiểu này khó tìm vì nó chỉ xuất hiện trên một số trang hoặc sau một lần cập nhật plugin.

Iframe giải quyết đúng chỗ đó. Tour chạy trong một “cửa sổ” riêng, có ngữ cảnh riêng, theme và plugin WordPress không chạm vào được. Đổi theme, cập nhật builder hay bật plugin cache cũng không làm hỏng tour. Đây cũng là lý do bạn không cần plugin “virtual tour embed” nào: phần lớn plugin loại này cuối cùng vẫn sinh ra một iframe, chỉ thêm vài lớp div và một ít mã thừa.

Có hai trường hợp không dùng iframe. Một là mở tour ở URL riêng toàn màn hình, phù hợp khi gửi link qua Zalo hay in mã QR. Hai là tích hợp script trực tiếp vào trang, chỉ đáng làm khi có đội phát triển và nhu cầu điều khiển tour từ trang mẹ rất sâu. Với đa số website doanh nghiệp, iframe là lựa chọn mặc định.

Mã nhúng chuẩn cho một virtual tour

Đây là bộ khung tối thiểu. Phần lớn lỗi nhúng tour xuất phát từ việc thiếu một trong ba thành phần: khung giữ chỗ có tỷ lệ cố định, thuộc tính allow và loading="lazy".

<div class="vt-embed">
  <iframe
    src="https://tour.tenmien.vn/du-an-a/"
    title="Virtual tour 360 showroom Dự án A"
    loading="lazy"
    allow="fullscreen; gyroscope; accelerometer; xr-spatial-tracking"
    allowfullscreen>
  </iframe>
</div>

<style>
.vt-embed { position: relative; width: 100%; aspect-ratio: 16 / 9; background: #111; }
.vt-embed iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; }
@media (max-width: 767px) { .vt-embed { aspect-ratio: 4 / 5; } }
</style>
Trình soạn thảo khối HTML chứa mã iframe, bên cạnh là bản xem trước tour 360 căn hộ
Chỉ cần dán mã iframe vào khối HTML là tour hiển thị ngay trong bản xem trước của trình soạn thảo.

Giải thích từng phần:

  • title
    : mô tả ngắn cho trình đọc màn hình. Đây là yêu cầu cơ bản về khả năng truy cập, đồng thời giúp bạn dễ nhận ra iframe khi kiểm tra mã.
  • loading="lazy"
    : trình duyệt hoãn tải iframe cho đến khi khung tới gần vùng nhìn thấy. Các trình duyệt phổ biến hiện nay đều hỗ trợ thuộc tính gốc này. Không đặt
    lazy
    cho tour nằm ngay màn hình đầu tiên, vì khi đó nó vẫn tải ngay.
  • allow="fullscreen; gyroscope; accelerometer; xr-spatial-tracking"
    : cấp quyền cho trang bên trong iframe dùng toàn màn hình, cảm biến xoay của điện thoại và chế độ VR qua
    WebXR
    . Thiếu quyền này, nút toàn màn hình trong skin tour không phản hồi, chế độ xoay điện thoại để nhìn quanh cũng không chạy.
  • allowfullscreen
    : giữ lại cho các trình duyệt cũ chưa hiểu
    allow="fullscreen"
    .
  • Khung .vt-embed có aspect-ratio
    : trình duyệt biết trước khung cao bao nhiêu và dành sẵn chỗ, nên nội dung bên dưới không bị đẩy xuống khi tour tải xong.

Một lưu ý nhỏ: nếu một trang có nhiều tour, đặt CSS vào file CSS chung của theme hoặc builder thay vì lặp khối <style> ở mỗi lần nhúng.

Nhúng virtual tour vào WordPress theo từng công cụ dựng trang

Mã nhúng giống nhau, chỉ khác chỗ dán. Điểm chung: luôn dùng khối dành cho HTML thô, không dán vào khối văn bản thường, vì trình soạn thảo văn bản có thể tự sửa hoặc lọc mất thẻ iframe.

  1. Gutenberg: khối Custom HTML

    Trong trình soạn thảo mặc định của WordPress, thêm khối “HTML tùy chỉnh” (Custom HTML), dán đoạn mã và bấm “Xem trước” để kiểm tra. Không cần plugin. Nếu site có nhiều biên tập viên, lưu khối này thành Pattern để mọi người dùng lại cùng một mã chuẩn.

  2. Bricks Builder: phần tử Code

    Kéo phần tử Code vào section, dán mã HTML và CSS. Bricks yêu cầu bật quyền thực thi code trong phần cài đặt và vai trò người dùng phải được cấp quyền này; ở các bản Bricks gần đây, đoạn code còn phải được ký (code signature) trước khi hiển thị ngoài trang. Nếu khung trống trên trang thật nhưng hiện trong builder, hãy kiểm tra hai điểm này trước.

  3. GenerateBlocks: Container bọc khối HTML

    Tạo một Container (hoặc Element ở GenerateBlocks 2) làm khung ngoài, đặt max-width, khoảng đệm và căn giữa. Bên trong đặt khối Custom HTML chứa iframe. Cách tách này giúp bạn chỉnh bố cục bằng giao diện GenerateBlocks, còn iframe giữ nguyên mã gọn.

  4. Elementor: widget HTML

    Tìm widget HTML (không dùng Text Editor), kéo vào section và dán mã. Hạn chế các addon nhúng miễn phí: chúng thường bọc iframe trong nhiều lớp div và tải thêm CSS/JS cho cả trang, trong khi bạn chỉ cần một thẻ iframe.

Laptop mở giao diện Bricks Builder, bảng bên trái chứa phần tử Code với mã iframe, khung xem trước hiển thị tour 360 phòng khách
Trong Bricks Builder, đặt mã iframe vào phần tử Code và xem ngay khung tour trong vùng xem trước (ảnh minh hoạ giao diện).
Laptop mở trình soạn thảo với khối Container bọc khối Custom HTML chứa tour 360, bảng bên phải hiển thị thiết lập max-width
Với GenerateBlocks, bọc khối Custom HTML chứa tour trong một Container có max-width để khung tour không tràn toàn màn hình (ảnh minh hoạ giao diện).

Với Webflow, React hay site tự code, nguyên tắc vẫn vậy: một khung giữ chỗ cố định và một iframe bên trong. Đoạn mã facade ở phần sau cũng dùng được nguyên vẹn trên các nền tảng đó.

Iframe làm hỏng Core Web Vitals như thế nào

Core Web Vitals là bộ ba chỉ số Google dùng để đánh giá trải nghiệm tải trang. Khi một tour được nhúng thô và tải ngay lúc mở trang, cả ba chỉ số đều có thể bị ảnh hưởng, mỗi chỉ số theo một cơ chế khác nhau.

≤ 2,5 giâyLCP “tốt”: thời gian hiển thị phần tử nội dung lớn nhấtGoogle, web.dev
≤ 200 msINP “tốt”: độ trễ phản hồi thao tác của người dùngGoogle, web.dev
≤ 0,1CLS “tốt”: mức xê dịch bố cục cộng dồnGoogle, web.dev
75%Ngưỡng đánh giá theo phân vị thứ 75 của lượt truy cập thực tếGoogle, web.dev

LCP (Largest Contentful Paint). Iframe tour kéo theo trình phát, thư viện WebGL, file cấu hình và ảnh của cảnh đầu tiên. Những yêu cầu này tranh băng thông và CPU với chính trang mẹ, khiến ảnh hero hay tiêu đề chính hiện chậm hơn. Trên điện thoại tầm trung với mạng di động, khác biệt này dễ thấy bằng mắt.

CLS (Cumulative Layout Shift). Iframe không có kích thước cố định ban đầu cao gần như bằng 0 hoặc theo mặc định của trình duyệt. Khi tour tải xong và khung giãn ra, toàn bộ nội dung bên dưới bị đẩy xuống. Người dùng đang định bấm nút “Liên hệ” thì bấm nhầm vào chỗ khác.

INP (Interaction to Next Paint). Khởi tạo engine 3D và giải mã ảnh panorama tốn nhiều xử lý. Trên máy yếu, trong lúc đó các thao tác mở menu hay bấm nút của website mẹ phản hồi chậm.

Hai điểm hay bị hiểu sai. Thứ nhất, điểm PageSpeed Insights là dữ liệu đo trong phòng thí nghiệm (lab) trên một lần tải giả lập; báo cáo Core Web Vitals trong Search Console dùng dữ liệu thực tế của người dùng Chrome (CrUX). Điểm PageSpeed cao chưa chắc báo cáo Search Console đã xanh, và ngược lại. Thứ hai, Google không “phạt” thẻ iframe. Core Web Vitals là một trong nhiều tín hiệu trải nghiệm trang; trang chậm thiệt hại trước hết vì khách bỏ đi, sau đó mới đến thứ hạng.

Iframe làm hỏng Core Web Vitals như thế nào
Tiêu chí Iframe tải ngay Iframe loading="lazy" Facade bấm mới tải
Tải tài nguyên tour khi mở trang Có, với mọi lượt xem Chỉ khi cuộn gần tới khung Không, chỉ tải ảnh bìa
Ảnh hưởng LCP khi tour ở màn hình đầu Lớn Như tải ngay (vì đã trong vùng nhìn) Nhỏ, ảnh bìa có thể là phần tử LCP
Nguy cơ CLS Cao nếu thiếu khung giữ chỗ Cao nếu thiếu khung giữ chỗ Thấp khi có aspect-ratio
Băng thông máy chủ tour Tốn cho cả người chỉ đọc lướt Tốn cho người cuộn tới khung Chỉ tốn cho người chủ động mở tour
Nguy cơ kẹt cuộn trên điện thoại Có Có Không, cho tới khi người xem bấm mở
Độ phức tạp triển khai Thấp Thấp Trung bình (một đoạn JS ngắn)

Bảng trên so sánh theo cơ chế, không phải số đo. Muốn biết chênh lệch cụ thể trên site của bạn, hãy đo trước và sau khi đổi cách nhúng bằng PageSpeed Insights ở chế độ di động, rồi theo dõi báo cáo Core Web Vitals trong Search Console vài tuần sau.

Facade và click-to-load: chỉ tải tour khi người xem muốn xem

Facade (lớp mặt tiền) là một mẫu thiết kế phổ biến cho mọi nội dung nhúng nặng. Cách nhúng video YouTube nhẹ kiểu lite-youtube-embed là ví dụ quen thuộc. Thay vì iframe thật, trang chỉ hiện một ảnh bìa và nút “Khám phá 360°”. Khi người xem bấm, JavaScript mới tạo iframe và chèn vào khung.

Hai trạng thái facade: ảnh bìa sảnh khách sạn có nút Play và tour 360 đã tải sau khi bấm
Ảnh minh hoạ: trước khi bấm chỉ có ảnh bìa nhẹ, iframe tour chỉ được tạo khi người xem chủ động mở.

Quy trình triển khai gồm bốn bước:

  1. Chọn và xuất ảnh bìa

    Chọn góc nhìn đẹp và dễ hiểu nhất của cảnh đầu tiên, xuất WebP đúng tỷ lệ khung (16:9 cho desktop, có thể thêm bản 4:5 cho điện thoại). Nén càng nhẹ càng tốt mà vẫn rõ; ảnh bìa không cần độ phân giải của panorama.

  2. Bọc khung giữ chỗ

    Dùng lại khung .vt-embed với aspect-ratio ở trên. Ảnh bìa lấp đầy khung bằng object-fit: cover, nên khung đã có đúng chiều cao ngay từ đầu.

  3. Gắn nút mở tour

    Đặt nút “Khám phá 360°” là một thẻ button thật, có trạng thái hover và focus rõ ràng, để người dùng bàn phím cũng mở được.

  4. Tạo iframe khi bấm, gỡ iframe khi đóng

    Khi người xem bấm, script tạo iframe với đủ thuộc tính allow, chèn vào khung. Thêm nút đóng để gỡ iframe khỏi trang khi xem xong, trả lại bộ nhớ cho trình duyệt.

Đoạn mã mẫu, dán được vào khối Custom HTML hoặc phần tử Code:

<div class="vt-embed vt-facade" data-src="https://tour.tenmien.vn/du-an-a/"
     data-title="Virtual tour 360 showroom Dự án A">
  <img src="/wp-content/uploads/tour-du-an-a-bia.webp" alt="Toàn cảnh sảnh showroom Dự án A"
       width="1600" height="900" loading="lazy" decoding="async">
  <button type="button" class="vt-play">Khám phá 360°</button>
</div>

<script>
document.querySelectorAll('.vt-facade').forEach(function (box) {
  box.querySelector('.vt-play').addEventListener('click', function () {
    var f = document.createElement('iframe');
    f.src = box.dataset.src;
    f.title = box.dataset.title;
    f.allow = 'fullscreen; gyroscope; accelerometer; xr-spatial-tracking';
    f.allowFullscreen = true;
    var close = document.createElement('button');
    close.type = 'button'; close.className = 'vt-close'; close.textContent = 'Đóng tour';
    close.addEventListener('click', function () {
      f.remove(); close.remove(); box.classList.remove('is-open');
    });
    box.classList.add('is-open');
    box.append(f, close);
    close.focus();
  });
});
</script>

Trong CSS, khi khung có lớp is-open thì ẩn ảnh bìa và nút Play; nút “Đóng tour” đặt ở góc trên, đủ lớn để chạm bằng ngón tay.

Ảnh bìa có thể trở thành phần tử LCP. Nếu tour nằm ở màn hình đầu tiên (ví dụ hero trang chủ hay đầu trang dự án), ảnh bìa nhiều khả năng là phần tử lớn nhất được tính LCP. Khi đó bỏ loading="lazy" trên ảnh bìa và thêm fetchpriority="high" để trình duyệt ưu tiên tải nó. Nếu tour nằm giữa hoặc cuối bài, giữ loading="lazy" như mẫu.

Tự tải khi cuộn tới (Intersection Observer): khi nào dùng thay click

Intersection Observer là API của trình duyệt báo cho script biết khi một phần tử sắp vào vùng nhìn thấy. Bạn có thể dùng nó để tự tạo iframe khi khung tour cuộn tới, không cần người xem bấm.

Đây là một chiến lược khác với click-to-load, và hợp với ít trường hợp hơn. Nó phù hợp với trang mà tour là nội dung chính, ví dụ trang “Tham quan 360” riêng của một khách sạn, nơi gần như ai cuộn tới cũng muốn xem. Nó không phù hợp với bài viết dài hay trang dịch vụ, vì người chỉ cuộn qua cũng kích hoạt tải tour và tour lại bắt ngón tay khi họ đang cuộn tiếp.

Với loading="lazy" gốc đã có sẵn, Intersection Observer chỉ đáng dùng khi bạn cần kiểm soát thêm, chẳng hạn bắt đầu tải sớm hơn một khoảng nhất định, hay vừa tải vừa ghi sự kiện đo lường.

Nút đóng tour: gỡ iframe, thu hồi bộ nhớ

Ít bài hướng dẫn nhắc tới chi tiết này. Một tour đang chạy giữ trong bộ nhớ các tile đã tải và ngữ cảnh WebGL. Trên điện thoại, người xem mở tour, xem xong rồi cuộn tiếp đọc bài, tour vẫn chạy ngầm và chiếm bộ nhớ, đôi khi làm trang giật hoặc trình duyệt tải lại trang.

Nút “Đóng tour” trong đoạn mã trên gỡ hẳn iframe khỏi trang. Trình duyệt được giải phóng tài nguyên của tour, trang trở lại nhẹ như lúc đầu, và khung quay về ảnh bìa để người xem có thể mở lại.

Responsive cho điện thoại và chống kẹt cuộn trang

Với các ngành như bất động sản, khách sạn hay nhà hàng, nhiều người mở tour trên điện thoại, thường qua link Zalo, Facebook hoặc quảng cáo. Thiết kế khung nhúng phải bắt đầu từ màn hình dọc.

Cùng một virtual tour 360 hiển thị trên laptop và trên điện thoại cầm dọc
Khung tour cần đổi tỷ lệ theo màn hình để trên điện thoại dọc vẫn đủ rộng và dễ thao tác.

Đổi tỷ lệ theo màn hình. Khung 16:9 trên điện thoại cầm dọc chỉ cao chưa tới một phần ba màn hình, người xem nhìn qua một khe hẹp. Đổi sang 4:5 hoặc vuông bằng media query như mẫu ở trên giúp góc nhìn rộng hơn mà vẫn để lại chỗ cho tiêu đề và nút liên hệ.

Chống kẹt cuộn (scroll trap). Khi iframe tour chiếm phần lớn màn hình, ngón tay người đọc đặt lên đó để cuộn trang thì tour lại hiểu là thao tác xoay ảnh. Trang không cuộn được, người đọc bực và rời đi. Có ba cách xử lý, từ đơn giản đến kỹ hơn:

  • Dùng facade như phần trên: khi chưa bấm, khung chỉ là một ảnh, cuộn bình thường.
  • Nếu tour tải sẵn, đặt một lớp phủ trong suốt có dòng “Chạm để tương tác” lên trên iframe; chạm vào mới gỡ lớp phủ.
  • Trên điện thoại, cho nút mở tour sang chế độ toàn màn hình hoặc mở URL riêng của tour, kèm nút quay lại bài viết.

Luôn chừa một khoảng nội dung có thể chạm được ở trên và dưới khung tour, đừng để tour kín toàn bộ chiều cao màn hình khi chưa mở toàn màn hình.

Tách tour ra subdomain và CDN

Một tour nhiều cảnh có thể gồm rất nhiều file tile. Đưa cả thư mục đó vào thư mục wp-content/uploads của WordPress là cách nhanh nhưng dễ gặp vấn đề: hosting chia sẻ giới hạn số file (inode), sao lưu WordPress phình to và chậm, plugin bảo mật hay plugin tối ưu ảnh có thể quét hoặc xử lý cả các tile.

Cách gọn hơn là đặt tour ở một subdomain riêng, ví dụ tour.tenmien.vn, phía sau CDN. WordPress chỉ chứa trang giới thiệu và mã nhúng; mọi file của tour đi qua CDN, gần người xem hơn và không chiếm tài nguyên của máy chủ web. Cập nhật tour cũng không đụng tới WordPress.

Cách chọn nơi lưu trữ, cấu hình cache cho tile và chống người khác dùng trộm tour được trình bày trong bài Tối ưu tốc độ tải virtual tour. Nếu bạn cần đo lượt mở tour và lượt bấm hotspot từ iframe về GA4, xem thêm Đo lường virtual tour bằng GA4 và GTM.

Header bảo mật: thiết lập đúng chiều để tour hiển thị

Lỗi “khung tour trống trơn” thường do header bảo mật, và cũng hay bị hướng dẫn sai chiều. Cần tách rõ hai phía.

Phía máy chủ chứa tour quyết định ai được nhúng tour. Đây là nơi đặt header:

Content-Security-Policy: frame-ancestors 'self' https://www.tenmien.vn https://tenmien.vn

Header này cho phép tour chỉ được nhúng trên website của bạn, đồng thời chặn site khác nhúng lại tour. Nếu máy chủ tour đang trả về X-Frame-Options: DENY hoặc SAMEORIGIN (một số hosting bật mặc định), iframe trên domain khác sẽ bị chặn; hãy gỡ hoặc thay bằng frame-ancestors. Giá trị X-Frame-Options: ALLOW-FROM đã lỗi thời, trình duyệt hiện đại bỏ qua, nên đừng dùng.

Phía WordPress chỉ cần cho phép tải khung từ domain tour. Nếu site WordPress đang đặt CSP (qua plugin bảo mật, Cloudflare hoặc cấu hình máy chủ), thêm domain tour vào frame-src:

Content-Security-Policy: frame-src 'self' https://tour.tenmien.vn

Nếu WordPress không đặt CSP thì không cần làm gì ở phía này. Cách kiểm tra nhanh: mở DevTools, tab Console, tải lại trang. Thông báo lỗi sẽ nói rõ bị chặn bởi frame-ancestors (sửa ở máy chủ tour) hay frame-src (sửa ở WordPress).

Hai lỗi phụ hay gặp cùng lúc: nhúng tour bằng http:// trên trang https:// (trình duyệt chặn nội dung hỗn hợp), và CDN hoặc máy chủ tour cache lại header cũ sau khi đã sửa. Luôn dùng https và xoá cache sau khi đổi header.

SEO cho trang chứa virtual tour

Iframe đưa trải nghiệm vào trang, nhưng không mang nội dung chữ vào trang. Nội dung bên trong iframe thuộc về URL của tour; Google có thể xử lý nó khi hiển thị trang, nhưng bạn không nên trông chờ tên phòng, mô tả hotspot hay chú thích trong tour giúp trang WordPress lên hạng.

Vì vậy trang chứa tour cần được viết như một trang nội dung thật:

  • Một H1 rõ
    gắn với từ khoá của trang, ví dụ “Tham quan 360 căn hộ mẫu 2 phòng ngủ Dự án A”, không phải “Virtual tour”.
  • Đoạn giới thiệu bằng chữ
    ngay trên hoặc dưới khung tour: không gian này là gì, ở đâu, có gì đáng xem, người xem nên bắt đầu từ cảnh nào.
  • Mô tả các khu vực chính
    bằng H2/H3 ngắn, khớp với các cảnh trong tour. Đây cũng là chỗ đặt thông tin mà khách hay hỏi: diện tích, tiện ích, giờ mở cửa.
  • FAQ hiển thị trên trang.
    Google thu hẹp kết quả nhiều định dạng (rich result) FAQ từ tháng 8/2023 và ngừng hiển thị hẳn tính năng này trên Google Search từ ngày 7/5/2026. FAQ vẫn có ích vì trả lời đúng câu khách hỏi, nhưng đừng thêm schema FAQ với kỳ vọng hiện thêm dòng trên Google.
  • Link nội bộ
    từ trang dịch vụ, bài dự án và bài blog liên quan tới trang tour, và ngược lại.
  • Văn bản thay thế cho ảnh bìa
    mô tả đúng cảnh trong ảnh, không nhồi từ khoá.

Nếu tour có nhiều hotspot thông tin quan trọng (giá trị bảo tàng, thông số sản phẩm), hãy đưa phần chữ cốt lõi ra trang HTML luôn. Cách thiết kế hotspot gọn cho điện thoại có trong bài Hotspot trong virtual tour.

Trang web có khung tour 360 dạng ảnh bìa với nút Open Virtual Tour, bên dưới là các ảnh khu vực
Ảnh minh hoạ: khung tour facade đặt sau tiêu đề, phía dưới tiếp tục là nội dung mô tả có thể đọc được bằng chữ.

Danh sách kiểm tra trước khi xuất bản

Trước khi bấm “Cập nhật”, hãy chạy qua danh sách này trên cả máy tính lẫn một chiếc điện thoại thật:

Hiển thị

Tour hiện đúng trên Chrome, Safari iOS và trình duyệt trong Zalo/Facebook. Không có thanh cuộn kép, không có viền thừa quanh iframe.

Bố cục

Khung giữ đúng chiều cao trước khi tour tải. Trên điện thoại khung dùng tỷ lệ dọc, nút đóng và nút toàn màn hình dễ chạm.

Tốc độ

Tour không tải khi người xem chưa bấm (hoặc chưa cuộn tới). Ảnh bìa đã nén, có width/height. Đo PageSpeed Insights di động trước và sau.

Quyền trình duyệt

Toàn màn hình hoạt động. Chế độ xoay điện thoại hiện nút xin quyền trên iOS. Âm thanh chỉ phát sau khi người xem bấm.

Bảo mật

Không có lỗi frame-ancestors hay frame-src trong Console. Tour không nhúng được từ một domain lạ.

Nội dung

Trang có H1, đoạn giới thiệu, mô tả khu vực, FAQ và ít nhất một lời kêu gọi liên hệ rõ ràng ngoài khung tour.

Cần nhúng tour vào website mà không làm chậm trang?

Gửi cho 360VR link trang WordPress cần nhúng và link tour. Chúng tôi sẽ tư vấn cách đặt tour, khung responsive, facade và cấu hình header phù hợp với builder và hosting bạn đang dùng.

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

Có cần mua plugin trả phí để nhúng virtual tour vào WordPress không?

Không cần. Một khối Custom HTML hoặc phần tử Code của builder là đủ để chứa iframe và đoạn script facade. Plugin nhúng chỉ đáng cân nhắc khi bạn muốn biên tập viên không phải chạm vào mã; khi đó hãy kiểm tra plugin có sinh iframe gọn và không tải thêm CSS/JS cho mọi trang hay không.

Google có phạt trang nhúng iframe không?

Không có hình phạt nào dành riêng cho iframe. Điều ảnh hưởng là trải nghiệm: trang tải chậm, bố cục giật hay phản hồi trễ sẽ khiến khách rời đi và làm chỉ số Core Web Vitals thực tế kém đi. Nhúng có khung giữ chỗ và facade thì iframe gần như không còn tác động tới lúc tải trang.

Bắt khách bấm nút mới xem tour có làm giảm lượt xem không?

Thường là không đáng lo, vì người muốn xem tour sẽ bấm, còn người chỉ đọc lướt thì không phải tải thứ họ không dùng. Nút bấm còn giúp trên điện thoại không bị kẹt cuộn trang. Hãy làm ảnh bìa hấp dẫn và đặt nút rõ ràng, rồi đo tỷ lệ bấm mở tour bằng GA4 để quyết định dựa trên số liệu của chính trang bạn.

Vì sao xoay điện thoại để nhìn quanh không chạy trên iPhone?

Safari trên iOS yêu cầu người dùng cấp quyền truy cập cảm biến chuyển động, và quyền này chỉ được hỏi sau một thao tác chạm. Trong iframe, cần có allow="gyroscope; accelerometer" và skin tour phải có nút bật chế độ xoay để gọi lời xin quyền. Nếu thiếu một trong hai, tour vẫn xem được bằng cách vuốt.

Sao nhạc nền hoặc thuyết minh trong tour không tự phát?

Chrome và Safari chặn âm thanh tự phát khi người xem chưa tương tác với trang. Đây là chính sách của trình duyệt, không phải lỗi nhúng. Cách xử lý đúng là đặt nút bật/tắt âm thanh dễ thấy trong skin tour. Với facade, cú bấm diễn ra ở trang mẹ nên chưa chắc được tính là tương tác bên trong iframe khác domain; đừng dựa vào nó để tự phát âm thanh.

Khung tour trống trơn sau khi nhúng, kiểm tra ở đâu trước?

Mở DevTools, tab Console và tải lại trang. Nếu lỗi nhắc frame-ancestors hoặc X-Frame-Options, sửa header ở máy chủ chứa tour; nếu nhắc frame-src, thêm domain tour vào CSP của WordPress. Kiểm tra thêm link tour có dùng https và cache CDN đã được xoá sau khi đổi cấu hình.

Có nên đặt tour ngay ở đầu trang chủ không?

Được, nếu tour là điểm bán hàng chính, như trang dự án bất động sản hay trang khách sạn. Khi đó dùng facade với ảnh bìa làm ảnh hero, ưu tiên tải ảnh bằng fetchpriority="high" và không tải iframe cho tới khi người xem bấm. Đừng để tour tự tải ở đầu trang chủ, vì đó là trang nhiều người vào chỉ để tìm thông tin liên hệ.

Tư vấn dự án · miễn phí

Kể cho chúng tôi về không gian của bạn.

Đội ngũ 360VR đánh giá nhu cầu, mục tiêu và ngữ cảnh sử dụng trước khi đề xuất giải pháp. Gói VR Tour hoàn thiện chỉ từ 10 triệu.

Nhận tư vấn

Chia sẻ

Biên soạn

· Ban biên tập 360VR · đội ngũ kỹ sư VR Tour, flycam 360° và bản đồ số với hơn 100 công trình. Thông tin thiết bị, giá chỉ mang tính tham khảo tại thời điểm đăng.