\n```\n\nMặc dù Googlebot tuyên bố có thể chạy JavaScript để cào dữ liệu, thực tế:\n- Quá trình chạy JS của Googlebot bị xếp vào hàng đợi chậm (**Render Queue**), có thể mất từ vài ngày đến vài tuần mới hoàn tất.\n- Các bot mạng xã hội (Facebook, Zalo, LinkedIn, Twitter) hoàn toàn **KHÔNG CHẠY JAVASCRIPT**, dẫn tới việc chia sẻ link không hiện được ảnh thumbnail, tiêu đề và mô tả!\n\n## So sánh 2 giải pháp cứu cánh cho website SPA cũ\n\n### 1. Dynamic Rendering (Prerender Service)\n- Dùng một dịch vụ như **Prerender.io** hoặc tự dựng cụm Puppeteer / Rendertron.\n- Khi có request gửi đến: Kiểm tra User-Agent. Nếu là người dùng thật $\\rightarrow$ Trả về SPA bình thường. Nếu là Bot tìm kiếm (Googlebot, Bingbot, FacebookExternalHit) $\\rightarrow$ Định tuyến qua Puppeteer để chụp lại bản HTML tĩnh hoàn chỉnh và trả về cho bot.\n- **Ưu điểm:** Không cần phải viết lại toàn bộ mã nguồn của dự án cũ.\n- **Nhược điểm:** Tốn chi phí vận hành máy chủ render, độ trễ phản hồi cho bot khá cao (1.5s - 3s).\n\n### 2. Chuyển đổi sang Static Export hoặc Modern SSR (Astro / Next.js)\n- Giải pháp triệt để và bền vững nhất: Di chuyển các trang công khai (Landing page, Blog, Danh mục sản phẩm) sang framework hỗ trợ SSR/SSG như **Astro** hoặc **Next.js**.\n- Mã HTML được render hoàn chỉnh ngay trên server hoặc trong lúc build, điểm PageSpeed cao tuyệt đối, Googlebot lập chỉ mục ngay trong ngày.\n\n## Bảng so sánh chiến lược\n\n| Tiêu chí | Dynamic Rendering (Puppeteer) | Static Export / SSR (Astro) |\n| :--- | :--- | :--- |\n| **Chi phí triển khai** | Nhanh, sửa ở tầng Nginx proxy | Cần công sức refactor mã nguồn |\n| **Tốc độ phản hồi cho Bot** | Chậm (1.5s - 3s) | Siêu tốc (**< 50ms**) |\n| **Độ ổn định lâu dài** | Trung bình (Dễ lỗi timeout khi bot cào mạnh) | **100% Ổn định** |\n\n## Góc thảo luận\nTeam bạn đã từng xử lý bài toán cứu vớt SEO cho một dự án SPA cũ chưa? Bạn chọn cách dùng Prerender hay quyết định viết lại bằng framework SSR?\n\n---\n*Xem thêm nội dung liên quan:*\n- [Học lộ trình SEO Kỹ thuật & Frontend](/career)\n- [Review công cụ lập trình web](/tools)\n","keywords":"Backend & Microservices, Frontend & Web UI","about":[{"@type":"Thing","name":"Backend & Microservices"},{"@type":"Thing","name":"Frontend & Web UI"}],"interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":1},"comment":[{"@type":"Comment","author":{"@type":"Person","name":"Hoàng Nam (Tech Lead)"},"datePublished":"2026-10-29T16:00:00.000Z","text":"Nếu dự án có ngân sách thì refactor phần public pages sang Astro là chuẩn bài nhất! Bọn mình từng dùng Prerender.io tốn mấy trăm đô mỗi tháng mà thỉnh thoảng Puppeteer bị crash bot vào không thấy nội dung."}]}
TopDev AI Robot TopDev
#Backend & Microservices#Frontend & Web UI

Tối ưu SEO cho Website Client-Side Rendering: Dynamic Rendering vs Static Export

Lan Anh (Senior Frontend)
📖 2 phút đọc 💬 1 phản hồi
⚡ Tóm tắt 30 giây bởi TopDev AI
AI Overview

Nỗi đau SEO của các website thuần React / Vue SPA Khi bạn xây dựng website bằng React Create React App hoặc Vite thuần client, mã HTML ban đầu gửi về cho Googlebot chỉ vỏn vẹn một thẻ rỗng: Mặc dù Go…

☰ Mục lục bài viết (6 phần) Mở / Đóng mục lục

Nỗi đau SEO của các website thuần React / Vue (SPA)#

Khi bạn xây dựng website bằng React (Create React App hoặc Vite thuần client), mã HTML ban đầu gửi về cho Googlebot chỉ vỏn vẹn một thẻ rỗng:

HTML
<div id="root"></div>
<script src="/bundle.js"></script>

Mặc dù Googlebot tuyên bố có thể chạy JavaScript để cào dữ liệu, thực tế:

  • Quá trình chạy JS của Googlebot bị xếp vào hàng đợi chậm (Render Queue), có thể mất từ vài ngày đến vài tuần mới hoàn tất.
  • Các bot mạng xã hội (Facebook, Zalo, LinkedIn, Twitter) hoàn toàn KHÔNG CHẠY JAVASCRIPT, dẫn tới việc chia sẻ link không hiện được ảnh thumbnail, tiêu đề và mô tả!

So sánh 2 giải pháp cứu cánh cho website SPA cũ#

1. Dynamic Rendering (Prerender Service)#

  • Dùng một dịch vụ như Prerender.io hoặc tự dựng cụm Puppeteer / Rendertron.
  • Khi có request gửi đến: Kiểm tra User-Agent. Nếu là người dùng thật $\rightarrow$ Trả về SPA bình thường. Nếu là Bot tìm kiếm (Googlebot, Bingbot, FacebookExternalHit) $\rightarrow$ Định tuyến qua Puppeteer để chụp lại bản HTML tĩnh hoàn chỉnh và trả về cho bot.
  • Ưu điểm: Không cần phải viết lại toàn bộ mã nguồn của dự án cũ.
  • Nhược điểm: Tốn chi phí vận hành máy chủ render, độ trễ phản hồi cho bot khá cao (1.5s - 3s).

2. Chuyển đổi sang Static Export hoặc Modern SSR (Astro / Next.js)#

  • Giải pháp triệt để và bền vững nhất: Di chuyển các trang công khai (Landing page, Blog, Danh mục sản phẩm) sang framework hỗ trợ SSR/SSG như Astro hoặc Next.js.
  • Mã HTML được render hoàn chỉnh ngay trên server hoặc trong lúc build, điểm PageSpeed cao tuyệt đối, Googlebot lập chỉ mục ngay trong ngày.

Bảng so sánh chiến lược#

Tiêu chí Dynamic Rendering (Puppeteer) Static Export / SSR (Astro)
Chi phí triển khai Nhanh, sửa ở tầng Nginx proxy Cần công sức refactor mã nguồn
Tốc độ phản hồi cho Bot Chậm (1.5s - 3s) Siêu tốc (< 50ms)
Độ ổn định lâu dài Trung bình (Dễ lỗi timeout khi bot cào mạnh) 100% Ổn định

Góc thảo luận#

Team bạn đã từng xử lý bài toán cứu vớt SEO cho một dự án SPA cũ chưa? Bạn chọn cách dùng Prerender hay quyết định viết lại bằng framework SSR?


Xem thêm nội dung liên quan:

Chia sẻ thảo luận này:

Thảo luận

1 phản hồi

Ý kiến từ cộng đồng kỹ sư TopDev
💬

Tham gia thảo luận

Cộng đồng mở · Đăng nhập 1-chạm qua Google
  1. Hoàng Nam (Tech Lead)
    #1

    Nếu dự án có ngân sách thì refactor phần public pages sang Astro là chuẩn bài nhất! Bọn mình từng dùng Prerender.io tốn mấy trăm đô mỗi tháng mà thỉnh thoảng Puppeteer bị crash bot vào không thấy nội dung.

Bài liên quan trong #Backend & Microservices

1
TopDev AI Companion
AI
✓ Đã sao chép link