Đăng Ký Học SEO

Lỗi Render JavaScript: 10 Lỗi Khiến Google Và AI Không Đọc Được

Lỗi render JavaScript là lỗi khiến chữ không có trong HTML mà Google dùng để lập chỉ mục, và kiểm lỗi này giúp bạn biết vì sao trang đủ chữ mà Google bỏ sót. Google render bằng Chromium nhưng không bấm, không cuộn. Bot AI chưa công bố có chạy JavaScript hay không. Cách kiểm là xem HTML đã render.

Lỗi render JavaScript làm một trang trông đầy đủ trên trình duyệt nhưng thiếu chữ trong bản Google dùng để lập chỉ mục. Mười lỗi bên dưới đi từ giao diện (accordion, nút bấm, lazy-load) tới kiến trúc (CSR, page builder, Shadow DOM). Mỗi lỗi có dấu hiệu, cách kiểm và cách sửa, đối chiếu với tài liệu của Google, MDN và Chrome đọc ngày 03/10/2026. Khái niệm render có ở bài JavaScript SEO và Rendering.

Tài liệu trả phí

Bản đầy đủ: Lỗi Render JavaScript: 10 Lỗi Khiến Google Và AI Không Đọc Được

Phần đọc miễn phí là trọn bài. Bản đầy đủ có thêm bộ tài nguyên làm theo viết riêng cho bản bán: checklist, quy trình từng bước, bảng lỗi, mẫu và nghiệm thu, kèm tệp PDF và Excel.

  • Đọc trên trang học: trọn 8.629 chữ
  • Bộ tài nguyên làm theo: checklist, quy trình 17 bước, bảng lỗi, mẫu, nghiệm thu (6 bảng)
  • PDF: 21 trang, tải về
  • Excel: 18 bảng và 44 dòng checklist có cột đánh dấu
  • Quyền dùng: mua một lần, sở hữu vĩnh viễn

399.000đ thanh toán 16 USD qua PayPal hoặc thẻ Visa, Mastercard

Mua tài liệu

Xem trước bản đầy đủ: ba ảnh chụp từ chính tệp PDF và Excel bạn nhận sau khi mua.

Trang 1 bản PDF của tài liệu Lỗi Render JavaScript: 10 Lỗi Khiến Google Và AI Không Đọc Được
Trang 1 trong 21 trang của bản PDF.
Trang 15 bản PDF của tài liệu Lỗi Render JavaScript: 10 Lỗi Khiến Google Và AI Không Đọc Được, phần có bảng
Trang 15 trong 21 trang của bản PDF, phần có bảng.
Sheet Mục lục trong tệp Excel của tài liệu Lỗi Render JavaScript: 10 Lỗi Khiến Google Và AI Không Đọc Được
Sheet Mục lục của tệp Excel: 18 bảng, mỗi bảng một sheet.

Google render JavaScript và lập chỉ mục ra sao?

Google xử lý trang JavaScript qua ba giai đoạn: thu thập, render và lập chỉ mục. Googlebot tải HTML, xếp trang vào hàng đợi render, rồi một Chromium không giao diện chạy JavaScript. Google dùng HTML đã render để lập chỉ mục, nên chữ nào không có trong HTML đó thì không vào chỉ mục, dù người dùng vẫn thấy.

Ba giai đoạn Google xử lý một trang JavaScript
Giai đoạnGoogle làm gìLỗi render hay gắn với giai đoạn này
Thu thập (crawling)Đọc robots.txt, tải HTML, lấy URL từ thẻ a có hrefrobots.txt chặn tệp JavaScript, link dựng bằng sự kiện onclick, URL dạng #/
RenderChromium không giao diện chạy JavaScript khi tài nguyên của Google cho phépNội dung cần bấm, cần cuộn, cần quyền camera, cần WebSocket
Lập chỉ mục (indexing)Dùng HTML đã render để lập chỉ mục và tìm thêm linkChữ không hiện trong HTML đã render, trang lỗi trả mã 200
Nguồn: Google Search Central, JavaScript SEO basics và Fix Search-related JavaScript problems, đọc ngày 03/10/2026.

Trang Understand the JavaScript SEO basics của Google ghi: "Google Search runs JavaScript with an evergreen version of Chromium". Trang đó cũng ghi trang có thể nằm trong hàng đợi render "a few seconds, but it can take longer than that", và khuyên render phía máy chủ hoặc pre-render vì "not all bots can run JavaScript".

Một giới hạn ít người để ý: theo tài liệu Googlebot, khi thu thập cho Google Search, Googlebot chỉ đọc 2MB đầu của mỗi tệp được hỗ trợ, tính trên dữ liệu chưa nén. Mỗi tệp CSS, JavaScript được tải riêng và chịu cùng giới hạn. Phần vượt giới hạn không được gửi đi xét lập chỉ mục.

Ba cách kiểm lỗi render JavaScript
Công cụXem được gìDùng khi
Kiểm tra URL trong Search ConsoleHTML đã render, tài nguyên đã tải, đầu ra JavaScript. Ảnh chụp trang chỉ có ở kiểm tra trực tiếpTrang thuộc site bạn đã xác minh
Rich Results TestHTML đã render, tài nguyên, lỗi JavaScriptTrang chưa xác minh, trang mẫu, trang của bên khác
Xem mã nguồn và tắt JavaScript trên trình duyệtHTML gốc máy chủ trả về, phần chữ còn lại khi script không chạySo nhanh HTML gốc với trang đầy đủ trước khi mở công cụ của Google
Nguồn: Google Search Console Help (URL Inspection), Google Search Central. Dòng thứ ba là cách làm của Danh Nolan.

Cách dùng công cụ Kiểm tra URL có ở bài Indexing và Rendering. Bảng tóm tắt mười lỗi, để bạn đối chiếu nhanh trước khi đọc từng mục:

Mười lỗi render JavaScript, dấu hiệu và hướng sửa
LỗiDấu hiệu khi kiểmHướng sửa
Accordion tải chữ khi bấmChữ trong accordion không có trong HTML đã renderĐưa chữ vào HTML, dùng details hoặc hidden=until-found
Nội dung chỉ tải sau khi bấmNút Xem thêm, tab gọi API, HTML đã render thiếu phần đóRender sẵn phần chữ, link phân trang bằng thẻ a có href
Lazy-load cho chữĐoạn chữ cuối trang thiếu trong HTML đã renderNạp khi vào khung nhìn, không lazy-load chữ chính
Chỉ render phía máy kháchMã nguồn gần như trống, chỉ có thẻ div gốcServer-side rendering, static rendering hoặc hydration
Ẩn đoạn trả lời trên di độngBản di động ít chữ hơn bản máy tínhGiữ đủ nội dung trên di động, thu gọn bằng accordion
Nhảy cấp tiêu đềH1 dựng bằng div, H2 lẫn H4 không theo cấpMột H1 thật, H2 và H3 theo đúng ý
Chặn JS, CSS trong robots.txtTài nguyên bị chặn trong mục More infoMở quyền thu thập cho tệp cần để dựng trang
Schema lệch chữ trên trangJSON-LD có giá, câu hỏi, đánh giá không thấy trên trangDựng schema từ cùng dữ liệu với phần hiển thị
Page builder nặngLỗi JavaScript trong console, tệp lớn, khối chữ trốngBỏ script thừa, chữ chính nằm trong HTML
Shadow DOM thiếu slotChữ của component không hiện trong HTML đã renderDùng slot hoặc Declarative Shadow DOM
Tổng hợp của Danh Nolan từ tài liệu Google Search Central, MDN và Chrome for Developers, đọc ngày 03/10/2026.

Google lập chỉ mục HTML đã render, không lập chỉ mục cái bạn thấy trên màn hình. Mọi lỗi bên dưới đều kiểm bằng cách so hai thứ đó.

Nội dung trong accordion có bị Google bỏ qua không?

Nội dung trong accordion không bị Google bỏ qua nếu chữ đã có sẵn trong HTML lúc tải trang. Google khuyên trang di động gom nội dung vào accordion hoặc tab để tiết kiệm chỗ, và xếp phần nằm sau tab vào nội dung chính. Lỗi chỉ xảy ra khi accordion gọi JavaScript để tải chữ lúc người dùng bấm mở.

Ba cách làm accordion và việc Google đọc được
Cách làmChữ có trong HTML lúc tải?Google đọc được?
Thẻ details và summary của HTMLCóCó, chữ nằm sẵn trong HTML
Ẩn bằng CSS hoặc thuộc tính hidden=until-foundCóCó. Chrome ghi hidden=until-found cho công cụ tìm kiếm truy cập phần bị ẩn
Gọi API khi người dùng bấm mởKhôngKhông, Google không bấm khi render
Nguồn: MDN (details), Chrome for Developers (hidden=until-found), Google Search Central, đọc ngày 03/10/2026.

Bản nháp gốc ghi AI Overviews xem accordion là thông tin phụ và bỏ qua. Tôi không tìm thấy câu nào như vậy trong tài liệu của Google. Ngược lại, trang mobile-first indexing ghi: "Instead of removing content, consider moving content into accordions or tabs to save space." Trang Creating helpful, reliable, people-first content xếp "Tabbed or expanded sections" vào nội dung chính của trang.

Chính sách spam của Google cũng ghi accordion không vi phạm: trong mục hidden text, Google liệt kê "Accordion or tabbed content that toggle between hiding and showing additional content" vào nhóm thiết kế hợp lệ. Còn điều kiện để được dẫn link trong AI Overviews vẫn là trang được index và đủ điều kiện hiện snippet.

Cách làm an toàn là dùng thẻ details của HTML, hoặc thuộc tính hidden=until-found cho accordion tự viết. Chrome ghi thuộc tính này cho phép công cụ tìm kiếm truy cập phần bị ẩn, và Google Search còn tạo được link cuộn tới đúng đoạn đó.

<details>
  <summary>Học phí gồm những gì?</summary>
  <p>Chữ trả lời nằm sẵn trong HTML, Google đọc được dù người dùng chưa mở.</p>
</details>

Accordion không làm mất chữ. Accordion tải chữ bằng JavaScript khi bấm mới làm mất chữ.

Vì sao nội dung chỉ tải sau khi bấm bị Google bỏ sót?

Nội dung chỉ tải sau khi bấm bị bỏ sót vì Google không bấm, không vuốt và không gõ phím khi render. Tài liệu lập chỉ mục ưu tiên thiết bị di động ghi rõ Google không tải nội dung cần người dùng tương tác. Nút Xem thêm, tab gọi API, ô chọn tỉnh thành rồi mới hiện bảng giá đều rơi vào lỗi này.

Bốn dạng nội dung chỉ tải sau khi bấm

  1. Nút Xem thêm gọi API: phần bình luận, đánh giá, sản phẩm tiếp theo chỉ có sau khi bấm. Google chỉ thấy phần đầu.
  2. Tab nạp dữ liệu khi chọn: thông số kỹ thuật, bảng giá theo gói chỉ tải khi người dùng chọn tab. Tab đầu được đọc, các tab sau thì không.
  3. Bộ lọc, ô chọn bắt buộc: trang yêu cầu chọn tỉnh thành hoặc ngành rồi mới hiện nội dung. Google thấy một trang gần như trống.
  4. Nội dung dựa vào dữ liệu lưu lần trước: trang đọc cookie hoặc Local Storage để quyết định hiện gì. Google không giữ các dữ liệu đó giữa hai lần tải.

Câu gốc trong trang mobile-first indexing: "Google won't load content that requires user interactions (for example, swiping, clicking, or typing) to load." Trang về lazy-load nói ngắn hơn: "Google Search does not interact with your page."

Trang Fix Search-related JavaScript problems thêm hai giới hạn. Dịch vụ render của Google không giữ Local Storage, Session Storage và cookie giữa các lần tải trang. Googlebot cũng từ chối mọi yêu cầu cấp quyền, ví dụ quyền camera hay vị trí.

Cách sửa: render sẵn phần chữ trong HTML rồi ẩn hiện bằng CSS. Với danh sách dài, mỗi trang phân trang có URL riêng và được trỏ tới bằng thẻ a có href. Google ghi trong trang link thu thập được rằng thường chỉ thu thập được link là thẻ a có thuộc tính href.

Nếu một người phải bấm mới thấy chữ, thì Google không thấy chữ đó. Đưa chữ vào HTML, để nút bấm chỉ lo việc ẩn hiện.

Lazy-load cho phần chữ gây lỗi render ra sao?

Lazy-load gây lỗi render khi chữ chỉ được nạp lúc người dùng cuộn tới, vì Google không cuộn trang. Google chấp nhận lazy-load nếu nội dung nạp ngay khi nằm trong khung nhìn, bằng thuộc tính loading của trình duyệt hoặc IntersectionObserver. Phần chữ chính và nội dung đầu trang thì không nên lazy-load.

Lazy-load đúng và sai theo tài liệu của Google
Cách làmGoogle thấy nội dung?Ghi chú
Thuộc tính loading=lazy cho ảnh, iframeCóCách có sẵn của trình duyệt, không cần thư viện
IntersectionObserver hoặc thư viện nạp khi vào khung nhìnCóKhông phụ thuộc thao tác cuộn hay bấm
Nạp chữ khi bắt sự kiện cuộnKhông chắcGoogle ghi các cách hợp lệ không dựa vào thao tác cuộn hay bấm
Cuộn vô tận không có URL riêng cho từng phầnKhông thấy các phần sauMỗi phần cần một URL cố định, ví dụ ?page=12
Nguồn: Google Search Central, Fix lazy-loaded content, đọc ngày 03/10/2026.

Trang Fix lazy-loaded content của Google ghi ba cách hợp lệ và một lời dặn: "Don't add lazy-loading to content that is likely to be immediately visible when a user opens a page." Với cuộn vô tận, Google khuyên: "Give each chunk its own persistent, unique URL."

Lazy-load sinh ra cho ảnh và video, những thứ tốn băng thông. Một đoạn văn chỉ nặng vài KB, lazy-load nó gần như không làm trang nhanh hơn, nhưng lại thêm rủi ro mất chữ. Cách dùng thuộc tính loading cho ảnh có ở bài Lazy Loading là gì.

Cách kiểm: mở Kiểm tra URL, xem HTML đã render, tìm câu cuối của bài. Google ghi nếu URL ảnh, video có trong thuộc tính src của thẻ img, video trong HTML đã render thì cách cài lazy-load đang chạy đúng.

Lazy-load cho ảnh, không cho chữ. Phần chữ chính nên có mặt trong HTML ngay lần tải đầu.

Trang chỉ render phía máy khách (CSR) rủi ro gì?

Trang chỉ render phía máy khách gửi về HTML gần như trống, nội dung chỉ có sau khi JavaScript chạy xong. Google vẫn render được, nhưng trang phải chờ trong hàng đợi, một lỗi script làm mất cả trang, và bot không chạy JavaScript chỉ thấy khung rỗng. Google khuyên dùng server-side rendering, static rendering hoặc hydration.

Bốn cách render và điều Google, bot khác nhận được
Cách renderĐịnh nghĩa của web.devHTML gốc đã có chữ?
Server-side rendering (SSR)Render ứng dụng trên máy chủ để gửi HTML, không gửi JavaScript, về máy kháchCó
Prerendering, static renderingChạy ứng dụng lúc build để lưu trạng thái đầu thành HTML tĩnhCó
HydrationChạy script phía máy khách để thêm trạng thái và tương tác cho HTML đã render từ máy chủCó
Client-side rendering (CSR)Render ứng dụng trong trình duyệt, dùng JavaScript để sửa DOMKhông, chữ chỉ có sau khi script chạy
Nguồn: web.dev, Rendering on the Web, đọc ngày 03/10/2026.

Trang Dynamic rendering as a workaround của Google ghi: "Dynamic rendering is a workaround and not a recommended solution", và khuyên dùng server-side rendering, static rendering hoặc hydration. Định nghĩa từng cách nằm ở bài Rendering on the Web của web.dev.

Ba lỗi đi kèm trang CSR và một ứng dụng một trang (SPA)

  1. Soft 404: trang lỗi vẫn trả mã 200 nên có thể bị lập chỉ mục. Google khuyên chuyển hướng bằng JavaScript tới URL máy chủ trả 404, hoặc thêm noindex.
  2. URL dạng #/: Google ghi cơ chế AJAX-crawling đã ngừng từ 2015, nên không dựa vào phần sau dấu # để tải nội dung khác nhau. Dùng History API.
  3. noindex trong HTML gốc: Google có thể bỏ qua bước render khi gặp noindex, nên dùng JavaScript để gỡ noindex sau đó có thể không chạy.

Nếu khung của bạn hỗ trợ, cách ít rủi ro nhất là để máy chủ trả HTML có sẵn tiêu đề, đoạn trả lời và phần thân, rồi JavaScript chỉ thêm tương tác. Chi tiết kỹ thuật có ở bài JavaScript SEO và Rendering.

CSR không làm Google mù, nhưng đặt mọi chữ vào một lần chạy script. Có HTML gốc đủ chữ thì lỗi script không còn làm mất cả trang.

Ẩn đoạn trả lời trên di động ảnh hưởng gì?

Ẩn hay cắt đoạn trả lời trên bản di động làm Google mất đoạn đó, vì Google lập chỉ mục chủ yếu bằng bản di động. Google ghi việc lập chỉ mục của site lấy từ bản di động và khuyên bản di động có cùng nội dung với bản máy tính. Thu gọn bằng accordion thì được, xóa khỏi bản di động thì không.

Năm thứ cần giống nhau giữa bản di động và bản máy tính
Thứ cần giốngGoogle ghi gìLỗi render hay gặp
Nội dung chínhBản di động nên có cùng nội dung với bản máy tínhTheme di động bỏ đoạn mở đầu, bảng, hỏi đáp để trang gọn
Tiêu đềDùng cùng tiêu đề rõ nghĩa trên cả hai bảnBản di động đổi H2 thành chữ in đậm thường
Dữ liệu có cấu trúcBản di động và máy tính có cùng structured dataPlugin chỉ chèn schema trên giao diện máy tính
Thẻ meta robotsDùng cùng thẻ meta robots trên hai bảnBản di động có noindex sót lại
Tài nguyênKhông chặn URL tài nguyên của bản di độngẢnh, CSS của bản di động nằm ở thư mục bị chặn
Nguồn: Google Search Central, Mobile-first indexing best practices, đọc ngày 03/10/2026.

Câu gốc trong trang Mobile-first indexing best practices: "just make sure that the content is equivalent to the desktop site, since indexing on your site comes from the mobile site." Tức là thứ bản di động thiếu thì chỉ mục cũng thiếu.

Đoạn bị cắt nhiều nhất là đoạn trả lời ngay dưới tiêu đề, vì nó chiếm chỗ đầu màn hình. Đó lại là đoạn viết theo Answer-First, tức đoạn để người đọc và AI (SI - Super Intelligence) lấy câu trả lời ngay. Trang AI features and your website của Google cũng khuyên nội dung quan trọng nên có ở dạng chữ.

Cách kiểm: chạy Kiểm tra URL, xem HTML đã render và tìm đoạn trả lời. Theo Google, phần lớn lượt thu thập của Googlebot dùng trình thu thập cho điện thoại. Nếu không thấy, sửa template di động trước khi viết thêm nội dung.

Bản di động là bản Google đọc. Đoạn trả lời nào không có trên di động thì xem như không có.

Nhảy cấp tiêu đề có làm Google đọc sai trang không?

Theo Google, nhảy cấp tiêu đề không làm Google Search đọc sai trang. Hướng dẫn SEO cơ bản của Google ghi tiêu đề đúng thứ tự rất có ích cho trình đọc màn hình, còn với Google Search thì dùng sai thứ tự không sao. Lỗi đáng sửa là tiêu đề chính không phải thẻ h1 thật, hoặc tiêu đề do JavaScript dựng muộn.

Tiêu đề trang: điều Google ghi và cách làm của Danh Nolan
ViệcGoogle ghi gìCách làm của Danh Nolan
Thứ tự H1, H2, H3Với Google Search, dùng sai thứ tự không saoVẫn giữ đúng cấp vì người đọc lướt và trình đọc màn hình
Số lượng tiêu đềKhông có số tiêu đề lý tưởng cho một trangMỗi H2 là một câu hỏi, mỗi mục tự trả lời được
Tiêu đề chínhNên nổi bật nhất, ví dụ đặt trong thẻ h1 hiển thị đầu tiênMột H1 thật trong HTML gốc, không dựng bằng div
Tiêu đề trên di độngDùng cùng tiêu đề rõ nghĩa với bản máy tínhKhông đổi H2 thành chữ in đậm trên theme di động
Nguồn: Google Search Central, SEO Starter Guide, Title links, Mobile-first indexing, đọc ngày 03/10/2026.

Câu gốc trong SEO Starter Guide: "Having your headings in semantic order is fantastic for screen readers, but from Google Search perspective, it doesn't matter if you're using them out of order." Bản nháp gốc xếp nhảy cấp tiêu đề vào lỗi render. Theo tài liệu trên, đó là lỗi trình bày, ảnh hưởng người đọc hơn là Google.

Phần liên quan tới render nằm ở tiêu đề chính. Trang Influencing your title links ghi Google xét cả thẻ title, tiêu đề hiển thị chính và các heading như h1 khi tạo tiêu đề kết quả tìm kiếm. Tiêu đề chính là một khối div do page builder dựng, hoặc chỉ có sau khi script chạy, làm tín hiệu đó yếu đi.

Quy tắc phân cấp chi tiết có ở bài Heading Structure.

Nhảy cấp H3 lên H4 không làm Google đọc sai. Một H1 dựng bằng div và chỉ hiện sau khi script chạy thì đáng sửa hơn.

Chặn JS, CSS trong robots.txt gây lỗi render gì?

Chặn tệp JavaScript hoặc CSS trong robots.txt làm Google render trang thiếu phần do các tệp đó dựng. Google ghi Search không render JavaScript từ tệp bị chặn, và khuyên đừng chặn tài nguyên nếu thiếu chúng thì trang khó hiểu hơn. Quy tắc dễ gây lỗi này là Disallow cho thư mục chứa theme, plugin hoặc thư viện JavaScript.

# Dễ gây lỗi render: chặn thư mục chứa JavaScript và CSS
User-agent: *
Disallow: /wp-content/plugins/
Disallow: /assets/js/

# Chặn đúng thứ không cần thu thập, để tài nguyên dựng trang mở
User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php

Trang JavaScript SEO basics ghi: "Google Search won't render JavaScript from blocked files or on blocked pages." Trang Introduction to robots.txt cho phép chặn tệp ảnh, script, CSS không quan trọng, nhưng nếu thiếu chúng thì trang khó hiểu hơn thì "don't block them, or else Google won't do a good job of analyzing pages that depend on those resources."

Ba bước kiểm tài nguyên bị chặn

  1. Xem tài nguyên trang: trong Kiểm tra URL, mở Xem trang đã kiểm tra, rồi More info, tìm tài nguyên không tải được và lý do bị chặn bởi robots.txt.
  2. Đọc robots.txt: tìm mọi dòng Disallow trỏ vào thư mục chứa tệp .js, .css, ảnh dùng trong phần nội dung.
  3. Kiểm tầng CDN và tường lửa: Google khuyên cho phép thu thập ở cả robots.txt lẫn CDN, hạ tầng hosting. Tường lửa chặn bot cũng làm thiếu tài nguyên.

Cách viết robots.txt và cách thử từng quy tắc có ở bài Robots.txt là gì.

Tệp nào cần để dựng phần chữ thì để Google tải được. Chặn tài nguyên là chặn luôn phần trang mà tài nguyên đó vẽ ra.

Schema lệch với chữ trên trang bị xử lý ra sao?

Schema lệch với chữ hiển thị vi phạm hướng dẫn về dữ liệu có cấu trúc của Google và có thể bị tác vụ thủ công. Theo Google, tác vụ này làm trang mất kết quả nhiều định dạng, không đổi thứ hạng trên web search. Lỗi render hay gặp là JSON-LD do JavaScript dựng từ dữ liệu khác phần hiển thị.

Bốn dạng schema lệch chữ trên trang
Dạng lệchVí dụCách sửa
Giá lệchSchema Product ghi giá cũ, trang hiện giá mớiDựng schema và phần hiển thị từ cùng một nguồn dữ liệu
Hỏi đáp không hiệnSchema FAQPage có câu hỏi không thấy trên trangChỉ đánh dấu câu hỏi người đọc thấy được
Đánh giá không có trên trangSchema có điểm đánh giá, trang không hiện đánh giá nàoBỏ phần đánh giá khỏi schema hoặc hiện đánh giá thật
Schema dựng lúc tải từ APIAPI trả dữ liệu khác bản đang hiện, hoặc lỗi nên schema rỗngKiểm JSON-LD trong HTML đã render bằng Rich Results Test
Nguồn: Google Search Central, General structured data guidelines, đọc ngày 03/10/2026.

Trang General structured data guidelines ghi: "Don't mark up content that is not visible to readers of the page." Cùng trang đó ghi tác vụ thủ công về structured data "doesn't affect how the page ranks in Google web search". Bản nháp gốc gọi đây là tín hiệu spam. Tài liệu không ghi vậy, hậu quả được ghi là mất kết quả nhiều định dạng.

Google cho phép dựng JSON-LD bằng JavaScript và chèn vào trang, kèm lời dặn "Make sure to test your implementation". Với AI features, Google khuyên structured data khớp với chữ hiển thị trên trang. Các loại schema và cách gắn có ở bài Schema Markup.

Schema là bản mô tả của trang, không thêm được điều trang không nói. Dựng schema và chữ hiển thị từ cùng một dữ liệu thì không lệch.

Page builder nặng làm hỏng render trang thế nào?

Page builder nặng làm hỏng render khi chữ nằm trong khối do JavaScript dựng, khi tệp vượt giới hạn tải của Googlebot hoặc khi script lỗi giữa chừng. Tài liệu JavaScript của Google không nêu mốc giây nào để hủy render. Việc cần kiểm là HTML đã render có đủ chữ không và console có lỗi JavaScript không.

Rủi ro render của page builder và cách kiểm
Rủi roTài liệu Google ghi gìCách kiểm
Tệp quá lớnGooglebot đọc 2MB đầu của mỗi tệp, tính trên dữ liệu chưa nén, CSS và JavaScript tính riêng từng tệpĐo dung lượng HTML và tệp JavaScript chính chưa nén
Script bị bỏ quaDịch vụ render có thể không tải tài nguyên không góp vào nội dung chínhChữ chính không phụ thuộc script theo dõi, quảng cáo, chat
Bản JavaScript cũDịch vụ render có thể bỏ qua header cache và dùng bản JavaScript, CSS cũTên tệp có dấu vân tay nội dung, ví dụ main.2bb85551.js
Tính năng không hỗ trợGooglebot không hỗ trợ WebGL, WebSocket, WebRTCCó đường tải nội dung qua HTTP thường
Lỗi JavaScriptKiểm tra URL cho xem đầu ra console và lỗiMở More info, đọc JavaScript console messages
Nguồn: Google Search Central, Googlebot và Fix Search-related JavaScript problems, đọc ngày 03/10/2026.

Bản nháp gốc ghi DOM Ready quá 4 giây hoặc 5 giây thì Google hủy render. Tôi không tìm thấy mốc đó trong Fix Search-related JavaScript problems hay trong JavaScript SEO basics, nên bỏ con số. Điều tài liệu ghi là trang chờ trong hàng đợi vài giây hoặc lâu hơn, và giới hạn dung lượng 2MB mỗi tệp.

Năm việc với site dựng bằng page builder

  1. Chữ chính trong HTML gốc: đoạn trả lời, H2 và thân bài nằm trong mã nguồn, không trong khối do script dựng sau.
  2. Gỡ widget không dùng: mỗi slider, popup, hiệu ứng thêm một tệp JavaScript. Bỏ khối không mang nội dung.
  3. Tắt nạp script toàn site: chỉ nạp script của form, bản đồ, slider ở trang có dùng chúng.
  4. Kiểm sau mỗi lần cập nhật plugin: một bản cập nhật có thể đổi cách khối nội dung được dựng.
  5. Đo trải nghiệm thật: theo dõi Core Web Vitals để biết script nặng có làm người dùng chờ hay không.

Cách gỡ CSS và JavaScript không dùng có ở bài Unused CSS, JavaScript là gì.

Page builder không có lỗi tự thân. Lỗi nằm ở chỗ chữ chính bị gói vào script, và bạn chỉ biết bằng cách xem HTML đã render.

Shadow DOM có làm Google mất nội dung không?

Shadow DOM không làm Google mất nội dung nếu nội dung hiện ra trong HTML đã render. Google ghi hỗ trợ web components và khi render sẽ làm phẳng shadow DOM cùng light DOM. Lỗi xảy ra khi component không dùng thẻ slot cho nội dung light DOM, hoặc chỉ dựng nội dung khi người dùng tương tác.

Shadow DOM là cây DOM ẩn gắn vào một phần tử. Theo MDN: "Shadow DOM allows hidden DOM trees to be attached to elements in the regular DOM tree". Nó giữ CSS và JavaScript của component tách khỏi phần còn lại của trang, nên hay gặp trong thư viện giao diện và widget nhúng.

Trang JavaScript SEO basics ghi: "When Google renders a page, it flattens the shadow DOM and light DOM content." Câu tiếp theo là điều kiện: "If the content isn't visible in the rendered HTML, Google won't be able to index it."

Ba cách viết web component và kết quả trong HTML đã render
Cách viếtChữ có trong HTML đã render?Ghi chú
Dùng thẻ slot để chiếu light DOM vào shadow DOMCóCách Google đưa làm ví dụ trong tài liệu
Declarative Shadow DOM, render từ máy chủCóChrome ghi DSD đưa Shadow DOM lên máy chủ
Component bỏ qua light DOM, không có slotCó thể khôngGoogle khuyên đọc tài liệu của component hoặc đổi component
Nguồn: Google Search Central, MDN, Chrome for Developers, đọc ngày 03/10/2026.
<my-component>
  <p>Chữ light DOM, được chiếu vào shadow DOM qua thẻ slot.</p>
</my-component>

Với component cần render phía máy chủ, Declarative Shadow DOM cho phép viết shadow root ngay trong HTML. Chrome ghi: "Declarative Shadow DOM (DSD) removes this limitation, bringing Shadow DOM to the server." Kiểm bằng Rich Results Test hoặc Kiểm tra URL, tìm chữ của component trong HTML đã render.

Shadow DOM không giấu chữ khỏi Google. Component không chiếu chữ ra HTML đã render thì mới giấu.

Người làm SEO hay hỏi gì về lỗi render JavaScript?

Người làm SEO hay hỏi bốn câu về lỗi render JavaScript: bot AI có chạy JavaScript không, dynamic rendering còn dùng được không, nội dung ẩn có bị xem là gian lận không, và sửa xong bao lâu Google cập nhật. Câu trả lời ngắn cho từng câu nằm ngay bên dưới.

GPTBot, PerplexityBot có chạy JavaScript không?

Chưa có câu trả lời chính thức. Trang tài liệu bot của OpenAI và Perplexity, đọc ngày 03/10/2026, không có chữ nào về JavaScript hay render. Google thì ghi không phải bot nào cũng chạy được JavaScript. Vì vậy tôi giữ phần chữ chính trong HTML gốc để bot nào đọc cũng thấy.

Dynamic rendering còn dùng được không?

Dùng được nhưng Google không khuyến nghị. Google ghi dynamic rendering là cách tạm thời, chưa phải giải pháp được khuyến nghị, vì nó thêm độ phức tạp và tài nguyên. Google khuyên chuyển sang server-side rendering, static rendering hoặc hydration. Site đang chạy dynamic rendering nên lên kế hoạch bỏ dần.

Nội dung ẩn trong accordion có bị xem là gian lận không?

Không. Chính sách spam của Google liệt kê accordion, tab, slider và tooltip vào nhóm thiết kế không vi phạm. Thứ bị xem là gian lận là chữ ẩn chỉ để thao túng công cụ tìm kiếm, ví dụ chữ trắng trên nền trắng, chữ cỡ 0 hoặc chữ đẩy ra ngoài màn hình.

Sửa lỗi render xong bao lâu Google cập nhật?

Google không nêu mốc thời gian cố định. Tôi chạy kiểm tra trực tiếp trong Kiểm tra URL để xác nhận HTML đã render đủ chữ, rồi yêu cầu lập chỉ mục. Với lỗi trên nhiều URL, Google khuyên chạy kiểm tra trực tiếp vài trang rồi bấm Validate fix trong báo cáo.

Học kiểm và sửa lỗi render JavaScript ở đâu?

Bạn học kiểm và sửa lỗi render JavaScript ở buổi Technical của Khóa Học SEO Cơ Bản, 4.900.000đ cho 6 buổi học online. Muốn làm trên chính website của bạn thì Mentor SEO 1 kèm 1 có 12 buổi trong 4 tuần. Muốn biết site đang lỗi ở đâu trước thì bắt đầu từ công cụ tự chấm miễn phí.

Chọn đường học theo việc bạn cần
Lựa chọnChi phíHình thứcHợp khi
chẩn đoán SQA-200™ (công cụ tự chấm)Miễn phí15 câu theo sáu trụ cột, thang 200 điểm, ra danh sách chỗ nên sửa trướcBạn muốn biết nên sửa gì trước
Phân tích SEO và GEO5.000.000đ, đăng ký Mentor 1 kèm 1 sau đó được trừ đủ vào học phíBản phân tích sâu một website do Danh Nolan làmBạn cần người soi lỗi trên site thật
Khóa Học SEO Cơ Bản4.900.000đ6 buổi online: ba buổi nền tảng Technical, On-page, Off-page và buổi thực hànhBạn mới bắt đầu, cần nền kỹ thuật
Mentor SEO 1 kèm 115.000.000đ12 buổi trong 4 tuần trên 1 website thật, online chia sẻ màn hìnhBạn cần sửa lỗi ngay trên website đang chạy
Khóa học SEO Master18.000.000đ24 buổi trong 2 tháng, offline ở Quận 7, lớp dưới 5 học viênBạn muốn đi trọn quy trình SEO
Giá và số buổi lấy từ trang khóa học trên danhnolan.com, đọc ngày 03/10/2026.

Trong SQA-200™, kiểm render nằm ở trụ Technical và trụ AI-Ready. Bảng chấm có trọng số cho từng lỗi, mẫu ghi lỗi và quy trình nghiệm thu sau khi sửa là phần tôi dùng khi phân tích và khi kèm học viên, không chép trọn ở đây. Mentor SEO 1 kèm 1 có thêm 30 ngày rà bài, 3 buổi xem dữ liệu và 6 tháng hỏi đáp sau khóa.

Bạn chọn lịch ở trang Đăng ký học SEO, hoặc nhắn Zalo 03 9999 5885, Zalo cá nhân của Danh Nolan, để hỏi khóa nào hợp với website của bạn.

Biết lỗi nằm ở đâu trước, rồi mới chọn khóa. Công cụ tự chấm miễn phí là bước đầu không tốn tiền.

Nguồn chính thức nào nói về lỗi render JavaScript?

Các dữ kiện về lỗi render JavaScript ở đây lấy từ tài liệu của chính Google Search Central, Search Console Help, web.dev, MDN và Chrome for Developers, cùng trang tài liệu bot của OpenAI và Perplexity. Tôi đọc lại toàn bộ ngày 03/10/2026, vì các trang này được cập nhật thường xuyên.

Mười hai nguồn gốc nên đọc khi sửa lỗi render

Tài liệu JavaScript của Google được sửa vài lần mỗi năm. Đọc lại nguồn gốc trước khi tin một con số về render.

Bước tiếp theo

Muốn tự làm được việc này trên website của bạn?

SEO Master hướng dẫn làm SEO trong 24 buổi, từ tư duy nền tảng tới triển khai và đo lường trên website thật.

Tài liệu trả phí

Bản đầy đủ: Lỗi Render JavaScript: 10 Lỗi Khiến Google Và AI Không Đọc Được

Phần đọc miễn phí là trọn bài. Bản đầy đủ có thêm bộ tài nguyên làm theo viết riêng cho bản bán: checklist, quy trình từng bước, bảng lỗi, mẫu và nghiệm thu, kèm tệp PDF và Excel.

  • Đọc trên trang học: trọn 8.629 chữ
  • Bộ tài nguyên làm theo: checklist, quy trình 17 bước, bảng lỗi, mẫu, nghiệm thu (6 bảng)
  • PDF: 21 trang, tải về
  • Excel: 18 bảng và 44 dòng checklist có cột đánh dấu
  • Quyền dùng: mua một lần, sở hữu vĩnh viễn

399.000đ thanh toán 16 USD qua PayPal hoặc thẻ Visa, Mastercard

Mua tài liệu

Cách kiểm và sửa lỗi render JavaScript

Các bước giúp bạn so HTML đã render với chữ trên màn hình, tìm đúng lỗi khiến Google bỏ sót nội dung và sửa để phần chữ chính có mặt ngay trong HTML gốc.

  1. Xem mã nguồn HTML gốcXem mã nguồn và tắt JavaScript trên trình duyệt để thấy HTML gốc máy chủ trả về và phần chữ còn lại khi script không chạy.
  2. Kiểm HTML đã renderChạy Kiểm tra URL trong Search Console cho trang đã xác minh, hoặc Rich Results Test cho trang chưa xác minh, rồi tìm câu cuối bài trong HTML đã render.
  3. Đọc tài nguyên và lỗi consoleMở More info để tìm tài nguyên không tải được vì robots.txt, đọc JavaScript console messages, rồi kiểm thêm CDN và tường lửa có chặn bot không.
  4. Đưa chữ chính vào HTMLRender sẵn đoạn trả lời, tiêu đề và thân bài trong HTML gốc, dùng thẻ details hoặc hidden=until-found cho accordion, để nút bấm chỉ lo việc ẩn hiện.
  5. Chọn cách render có HTML đủ chữVới trang chỉ render phía máy khách, chuyển sang server-side rendering, static rendering hoặc hydration, và với web component thì dùng thẻ slot hoặc Declarative Shadow DOM.
  6. Kiểm lại, yêu cầu lập chỉ mụcChạy kiểm tra trực tiếp trong Kiểm tra URL để xác nhận HTML đã render đủ chữ, rồi yêu cầu lập chỉ mục hoặc bấm Validate fix trong báo cáo.

Câu hỏi thường gặp về Lỗi render JavaScript

Giải đáp trực tiếp các câu hỏi thường gặp về Lỗi render JavaScript dựa trên dữ liệu triển khai thực tế, quy trình kiểm thử kỹ thuật và kinh nghiệm thực chiến trên website thật để tối ưu hiệu quả tìm kiếm.

Vì sao trang hiện đủ chữ trên trình duyệt mà Google vẫn bỏ sót nội dung?

Google lập chỉ mục HTML đã render, không lập chỉ mục cái bạn thấy trên màn hình. Chữ nào chỉ hiện sau khi bấm, cuộn, hoặc do script dựng mà không có trong HTML đó thì không vào chỉ mục, dù người dùng vẫn thấy đủ trên trình duyệt.

Vì sao trang lỗi trên ứng dụng một trang vẫn bị Google lập chỉ mục?

Trang lỗi trên ứng dụng một trang thường vẫn trả mã 200, nên Google xem đó là trang bình thường và có thể lập chỉ mục, gọi là soft 404. Google khuyên dùng JavaScript chuyển hướng tới URL mà máy chủ trả 404, hoặc thêm noindex cho trang lỗi.

Dùng JavaScript gỡ thẻ noindex sau khi tải trang có an toàn không?

Không an toàn. Khi HTML gốc có noindex, Google có thể bỏ qua bước render, nên đoạn JavaScript gỡ noindex sau đó có thể không chạy. Muốn trang được lập chỉ mục thì bỏ noindex ngay trong HTML gốc máy chủ trả về, rồi kiểm lại bằng Kiểm tra URL.

Vì sao Google vẫn dùng bản JavaScript cũ sau khi tôi đã cập nhật trang?

Dịch vụ render của Google có thể bỏ qua header cache và dùng bản JavaScript, CSS cũ. Cách xử lý là đặt tên tệp có dấu vân tay nội dung, ví dụ main.2bb85551.js, để tên tệp đổi theo nội dung và dịch vụ render không dùng nhầm bản cũ.

Googlebot đọc tối đa bao nhiêu dung lượng của mỗi tệp HTML, CSS, JavaScript?

Khi thu thập cho Google Search, Googlebot chỉ đọc 2MB đầu của mỗi tệp được hỗ trợ, tính trên dữ liệu chưa nén. Mỗi tệp CSS, JavaScript được tải riêng và chịu cùng giới hạn. Phần vượt giới hạn không được gửi đi xét lập chỉ mục, nên đo dung lượng HTML và tệp JavaScript chính chưa nén.

Kiểm tra URL trong Search Console và Rich Results Test khác nhau thế nào?

Kiểm tra URL dùng cho trang thuộc site bạn đã xác minh, cho xem HTML đã render, tài nguyên đã tải và đầu ra JavaScript. Ảnh chụp trang chỉ có ở kiểm tra trực tiếp. Rich Results Test dùng được cho trang chưa xác minh, trang mẫu hoặc trang của bên khác, cũng cho xem HTML đã render, tài nguyên và lỗi JavaScript.

Thuộc tính hidden=until-found khác thẻ details ở điểm nào khi làm accordion?

Thẻ details và summary là accordion có sẵn của HTML, chữ nằm sẵn trong mã. Thuộc tính hidden=until-found dùng cho accordion tự viết, ẩn chữ nhưng vẫn để công cụ tìm kiếm truy cập phần bị ẩn. Cả hai đều giữ chữ trong HTML lúc tải, nên Google đọc được.

Những tính năng trình duyệt nào Googlebot không hỗ trợ khi render trang?

Googlebot không hỗ trợ WebGL, WebSocket và WebRTC, từ chối mọi yêu cầu cấp quyền như camera hay vị trí, và không giữ Local Storage, Session Storage, cookie giữa các lần tải trang. Nội dung dựa vào các tính năng đó cần một đường tải qua HTTP thường hoặc nằm sẵn trong HTML.

Lỗi render JavaScript là gì và vì sao ảnh hưởng tới SEO?

Lỗi render JavaScript là lỗi khiến chữ không có trong HTML đã render mà Google dùng để lập chỉ mục. Trang vẫn trông đầy đủ trên trình duyệt, nhưng phần chữ thiếu trong HTML đó không vào chỉ mục. Lỗi render JavaScript thường đến từ accordion, nút bấm, lazy-load, CSR, page builder hoặc Shadow DOM.

Server-side rendering khác client-side rendering thế nào với SEO?

Server-side rendering render ứng dụng trên máy chủ và gửi HTML có sẵn chữ về máy khách. Client-side rendering render trong trình duyệt bằng JavaScript, nên HTML gốc gần như trống và chữ chỉ có sau khi script chạy. Với SEO, server-side rendering an toàn hơn vì bot không chạy JavaScript vẫn đọc được chữ.

Nên bắt đầu kiểm lỗi render JavaScript từ đâu?

Nên bắt đầu kiểm lỗi render JavaScript bằng cách so HTML gốc với HTML đã render. Xem mã nguồn và tắt JavaScript trên trình duyệt để thấy phần chữ còn lại, rồi mở Kiểm tra URL trong Search Console hoặc Rich Results Test, tìm đoạn trả lời và câu cuối bài trong HTML đã render.

Dữ liệu có cấu trúc dựng bằng JavaScript có được Google chấp nhận không?

Có. Google cho phép dựng JSON-LD bằng JavaScript và chèn vào trang, kèm lời dặn kiểm tra cách cài. Dữ liệu có cấu trúc dựng bằng JavaScript cần khớp với chữ hiển thị, nên dựng schema và phần hiển thị từ cùng một nguồn dữ liệu, rồi kiểm JSON-LD trong HTML đã render bằng Rich Results Test.

Menu

Thêm vào màn hình chính

  1. 1 Bấm nút Chia sẻ ở thanh công cụ Safari
  2. 2 Kéo xuống, chọn Thêm vào MH chính
  3. 3 Bấm Thêm ở góc trên bên phải

Ba bước này là của Safari. Nếu đang xem trong ứng dụng khác thì bấm mở bằng Safari trước đã.