Hướng dẫn về Lazy Loading

Cách lazy loading images và iframes improves Core Web Vitals, đó loading thuộc tính, đó SEO risks of lazy-loading trên-đó-fold nội dung, và cách Googlebot renders deferred nội dung.

Xuất bản lần đầu: 2 thg 7, 2026 · Cập nhật lần cuối: 8 thg 8, 2026 · Advanced
Ngôn ngữ

Lazy loading defers off-screen images và iframes until họ là về để scroll vào view, cutting ban đầu trang weight và helping Core Web Vitals. Đó native way là đó loading="lazy" thuộc tính on <img> và <iframe> — không JavaScript needed. Đó big mistake là lazy-loading của bạn hero/LCP image, mà delays Largest Contentful Paint. Googlebot không scroll hoặc nhấp, so bất cứ điều gì gated behind một scroll hoặc nhấp event có thể go unseen. đây là không một trực tiếp xếp hạng factor — đó effect chạy qua Core Web Vitals và crawlability. Verify điều gì thực ra renders trong Search Console's URL Inspection Tool: đó image URLs nên sit trong đó src thuộc tính of đó được kết xuất HTML.

Tóm tắt — Lazy loading defers off-screen images và iframes cho đến khi họ near viewport, cutting ban đầu trang weight (helps LCP) và startup main-chuỗi trao đổi hoạt động (helps INP). native loading="lazy" thuộc tính on <img>/<iframe> có replaced phần lớn JS libraries; chỉ lazyeager là có ý nghĩa các giá trị (auto là deprecated). damaging mistakes: lazy-loading LCP/trên—fold image (delays rất chỉ số bạn’re chasing), và gating nội dung behind scroll/nhấp — mà Googlebot không bao giờ triggers vì nó không interact với trang. nó không trực tiếp xếp hạng factor; effect chạy qua Core Web Vitals và crawlability. Verify trong Search Console’s URL Inspection Tool đó image các URL land trong src thuộc tính của được kết xuất HTML.

Điều gì lazy loading thực ra làm

Đó ý tưởng là đơn giản: chỉ load các tài nguyên khi bạn cần them, thay vì loading mọi thứ tại khi. On một media-nặng trang, downloading mỗi image và embed lên front giữ đó trình duyệt busy fetching điều đó khách truy cập có thể không bao giờ scroll để — burning bandwidth, memory, và battery cho không có gì. Deferring đó off-screen ones lets đó trên-đó-fold nội dung paint sooner. Martin Splitt đã làm chính xác này point on Google Tìm kiếm Off đó Record episode “Lazy loading demystified” (bản dịch) «Lazy loading demystified»: đó goal là để tránh hoạt động đó yields không có gì, vì non-cốt yếu images đó trang sẽ là fine không có chỉ giữ đó trình duyệt occupied.

điều này connects để Core Web Vitals phần lớn mọi người là chasing. Ít hơn bytes competing cho network lên front có nghĩ là Largest Contentful Paint element có thể render sooner. cho iframes — quảng cáo, social widgets, comment sections, maps — deferring them cũng cuts main-chuỗi trao đổi hoạt động during startup, mà là Interaction để tiếp theo Paint win, không chỉ LCP một. Google own web.dev hướng dẫn frames lazy-loaded iframes as INP improvement during trang load.

Native so với. JavaScript-driven lazy loading

một vài năm ago, các trình duyệt gained native loading thuộc tính cho images và iframes, so Bạn có thể hand toàn bộ job để trình duyệt thay vì wiring lên JavaScript API. Trong my JavaScript SEO hướng dẫn tại Ahrefs I làm giống nhau observation: since I đầu tiên wrote đó piece, lazy loading có mostly moved từ là JavaScript-driven để là handled by các trình duyệt. bạn’ll vẫn chạy vào JS-driven setups, và cho images họ’re thường fine — điều I kiểm tra là liệu thực tế nội dung (không chỉ images) là lazy loaded, vì những điều đó setups là ones đó có gây ra nội dung không để là picked lên correctly.

native version:

<!-- Below-the-fold image: defer it -->
<img src="gallery-07.jpg" loading="lazy" width="800" height="600" alt="…">

<!-- Off-screen embed: defer it -->
<iframe src="https://www.youtube.com/embed/…" loading="lazy" title="…"></iframe>

luôn đặt rõ ràng width/height (hoặc aspect-ratio) on lazy images so trình duyệt reserves space trước khi image loads — đó biggest layout-shift risk với deferred images. Reserved dimensions không phải absolute CLS bảo đảm, though: nếu xung quanh layout hoặc responsive crop vẫn thay đổi sau khi image loads, Bạn có thể vẫn see shift, so xác nhận với thực layout-shift trace thay vì assuming fixed dimensions alone settle nó.

Lazy loading và iframes cần một hơn phân biệt: loading="lazy" on an <iframe> chỉ defers khi đó embed fetch và creation happen. Điều này không set của nó title, focus behavior, sandbox, allow/permissions policy, referrerpolicy, consent xử lý, hoặc dimensions cho bạn — những vẫn cần của họ own attention, và an embed có thể giữ đang làm hoạt động (scripts, tracking pixels, layout) khi điều này becomes eligible để load. Và không assume “below the fold” (bản dịch) «dưới đó fold» behaves đó giống nhau mọi nơi: display: none nội dung, offscreen carousel slides, transformed elements, và nested scroll containers có thể intersect đó viewport differently hơn một đơn giản dưới-đó-fold element, so kiểm thử đó thực tế layout và navigation controls thay vì assuming sự tương đương.

loading thuộc tính các giá trị

chỉ hai các giá trị quan trọng hôm nay:

  • loading="lazy" — defer tài nguyên cho đến khi nó near viewport.
  • loading="eager" — load nó immediately, default behavior. sử dụng nó để là rõ ràng về trên—fold images.
Evidence for this claim The native loading attribute supports lazy loading for images and iframes without a JavaScript lazy-loading library. Scope: Browser-level lazy loading behavior; browser heuristics decide the fetch distance. Confidence: high · Verified: web.dev: Browser-level image lazy loading

bạn có thể see loading="auto" trong older các bài viết — nó deprecated trong Chrome, so không reach cho nó. có không cần để; omitting thuộc tính đã cho bạn default (eager) behavior.

Cách near là “near”? loading="lazy" là một hint, không an tác giả-controlled bảo đảm — đó spec leaves đó thực tế near-viewport decision để đó trình duyệt. Chromium tries để fetch một lazy tài nguyên sớm đủ đó đây là ready by đó time bạn scroll để điều này, và đó trigger distance varies by trình duyệt, connection speed, và tài nguyên loại; điều này không một fixed pixel giá trị bạn có thể rely on hoặc reproduce trên các trình duyệt hoặc versions. không publish — hoặc trust — một cụ thể “loads N pixels before the viewport” (bản dịch) «loads N pixels trước đó viewport» number; treat đó near-viewport window as implementation-được định nghĩa và xác nhận thực tế behavior với một Network trace on đó trình duyệt/connection bạn care về thay vì assuming một constant.

Native lazy loading cũng plays fine với responsive images: nó áp dụng để ordinary srcsrcset/sizes selection, so bạn không lose responsive image behavior by thêm loading="lazy". nếu bạn thay vì hide thực URL chỉ trong data-* thuộc tính cho script để đổi trong sau đó, loading hiện tại phụ thuộc vào đó script — kiểm thử được kết xuất HTML và Điều gì happens nếu script fails (nhiều hơn on điều này trong Scripts và Khắc phục sự cố tabs).

Evidence for this claim Native lazy loading works with ordinary src and responsive srcset/sizes selection; hiding the real URL only in data-* attributes makes loading dependent on script and should be tested in rendered HTML and under script failure. Scope: responsive image fetching and layout Confidence: high · Verified: HTML Standard: img

#1 mistake: lazy-loading LCP / trên—fold image

Đây là thất bại I see phần lớn, và mỗi nguồn agrees on nó. nếu bạn lazy-load hero image — hoặc bất kỳ image có khả năng để là LCP element — bạn’ve told trình duyệt để chờ on single phần lớn quan trọng pixel cho perceived load speed. trình duyệt cũng có thể’t lazy-load image cho đến khi nó knows nơi image sẽ sit on trang, so lazy trên—fold images tend để load nhiều hơn slowly hơn eager ones. đó trực tiếp delays Largest Contentful Paint, chỉ số Google nói nên resolve trong đầu tiên 2,5 seconds của load.

Do not lazy-load the observed or likely LCP image; confirm the actual request and paint timing in a trace. Nguồn: Lazy Loading

The eager path discovers the likely LCP image in HTML and starts its request promptly. The lazy path waits for browser loading heuristics before request start. The comparison uses no fixed timing values and notes that actual LCP must be measured.

© Patrick Stox LLC · CC BY 4.0 ·

Splitt put flip side plainly on SOTR episode: nếu bạn’re không sử dụng lazy loading nơi bạn nên, đó sẽ probably hurt some aspect của Core Web Vitals — phần lớn có khả năng LCP. So nó cuts cả hai ways. rule:

  • Probable hoặc observed LCP candidate → load eagerly (omit loading="lazy", hoặc đặt eager). cân nhắc fetchpriority="high" on LCP image.
  • Dưới fold → loading="lazy".

không mỗi image trên fold LCP candidate — identify thực tế một ( Performance trace hoặc PageSpeed Insights sẽ name nó) và verify của nó yêu cầu timing thay vì treating mỗi đầu tiên-screen image giống nhau. và những điều này là tách biệt hints, không một setting: loading="eager" (hoặc omitting loading) chỉ có nghĩ là trình duyệt sẽ không defer phát hiện của tài nguyên — nó không itself raise fetch priority. fetchpriority là distinct, advisory hint bên cạnh đó. Stacking <link rel="preload"> với loading="lazy" on giống nhau tài nguyên gửi trình duyệt conflicting intent, so kiểm tra thực tế network waterfall thay vì assuming combination làm Điều gì bạn expect.

blanket anti-pattern là switching on lazy loading cho mỗi image trang web-wide — phổ biến CMS default. As Splitt noted, nếu mỗi image là lazy loaded, sau đó images đó là (hoặc nên là) immediately visible nhận lazy loaded cũng, mà là chính xác case bạn muốn để tránh.

Cách Googlebot renders lazy-loaded nội dung

Ở đây crawling reality đó trips mọi người lên: Googlebot không scroll, và nó không nhấp. nó renders của bạn trang với headless trình duyệt, nhưng nó không simulate người dùng interacting với nó. Google trạng thái điều này trực tiếp — của nó được khuyến nghị lazy-loading các phương thức có chủ ý không rely on người dùng actions như scrolling hoặc clicking, vì Google Search không interact với của bạn trang.

Evidence for this claim Google Search does not scroll or click to trigger lazy-loaded content, so implementations should not depend on user interaction and should expose resource URLs in rendered HTML. Scope: Google Search guidance for JavaScript-driven lazy loading. Confidence: high · Verified: Google Search Central: Lazy-load content

Đó là lý làm Cách của bạn implementation matters. Google doc lists three implementations nó considers safe: trình duyệt được xây dựng-trong lazy loading cho images và iframes, IntersectionObserver API (với polyfill), hoặc JavaScript library đó loads dữ liệu as nó enters viewport. All three mấu chốt off viewport intersection — không scroll hoặc nhấp event đó Googlebot sẽ không bao giờ fire.

cao-risk pattern là custom hoặc thứ ba-party JS lazy-load library. nếu library misbehaves và image URL không bao giờ lands trong src thuộc tính, Google đơn giản sẽ không pick đó image lên — Splitt described chính xác điều này thất bại chế độ on SOTR episode. có không có gì để chỉ mục nếu URL không phải ở đó. Đây là giống nhau điều I flag trong my JavaScript SEO hướng dẫn: image lazy loading là thường fine, nhưng lazy-loaded nội dung là nơi lập chỉ mục các vấn đề creep trong, và khắc phục là để kiểm tra Điều gì Google thực ra renders.

Infinite scroll là khác vấn đề

không conflate basic image/iframe lazy loading với infinite scroll hoặc paginated loading. Deferring images là một điều; loading new chunks của nội dung as người dùng scrolls là một, và nó cần của nó own architecture. Google hướng dẫn: cho mỗi chunk persistent, unique URL, giữ nội dung ổn định theo URL (sử dụng absolute trang numbers như ?page=12, không relative các giá trị như ?date=yesterday), và cập nhật displayed URL với History API as mỗi chunk becomes chính visible nội dung so nó có thể là refreshed, shared, và linked. Skip đó và deeper nội dung behind endless scroll có thể không bao giờ là reliably được crawl hoặc được lập chỉ mục.

Cách kiểm thử nó

Đó verification path là đó giống nhau trong Google doc và trong my own methodology: dùng Search Console’s URL Inspection Tool và xem đó được kết xuất HTML. Nếu của bạn image (hoặc video) URLs xuất hiện trong đó src thuộc tính on đó <img>/<video> elements trong đó được kết xuất HTML, của bạn setup hoạt động. Google says này outright — kiểm tra đó được kết xuất HTML để hãy bảo đảm nội dung của bạn là trong điều này — “Check the rendered HTML to make sure your content is in the rendered HTML” (bản dịch) «Kiểm tra HTML đã kết xuất để bảo đảm nội dung của bạn nằm trong HTML đã kết xuất». Nếu đó URL là bị thiếu từ src, đó là của bạn vấn đề, và điều này thường points lại để một scroll/nhấp trigger hoặc một hỏng library.

cho lazy-loaded sản phẩm grid, go beyond điều này presence kiểm tra. Chạy Infinite Scroll SEO kiểm thử matrix với tiêu chuẩn và tall viewports, fresh navigation và post-load resizing, không-hành động và incremental-scroll chạy, unique sản phẩm-link được tính, và accessibility-tree inspection. Resizing initialized trang không phải tương đương để navigating tại cuối viewport size vì observers và batch calculations có thể là registered chỉ during startup. Evidence for this claim Google Search does not scroll or click to trigger lazy-loaded content, so implementations should not depend on user interaction and should expose resource URLs in rendered HTML. Scope: Google Search guidance for JavaScript-driven lazy loading. Confidence: high · Verified: Google Search Central: Lazy-load content

Bạn có thể cũng lean on của bạn web-performance tooling: PageSpeed Insights flags off-screen images bạn nên là deferring. Trong my PageSpeed Insights hướng dẫn tại Ahrefs I note đó “defer offscreen elements” (bản dịch) «defer offscreen elements» audit là telling bạn để lazy-load images — một handy way để connect đó diagnostic bạn đã chạy để đó cách sửa.

Xếp hạng-tín hiệu honesty

là clear về Điều gì lazy loading là và không phải. sử dụng nó là không trực tiếp xếp hạng factor, và không sử dụng nó không phải hình phạt. connection để thứ hạng là gián tiếp: nó luồng qua Core Web Vitals (mainly LCP, đôi khi INP cho iframes) và qua crawlability, nếu bad implementation hides nội dung. Splitt characterized xếp hạng effect qua Core Web Vitals as tiny, minute factor trong phần lớn cases. So optimize lazy loading cho của bạn người dùng’ load experience và cho sạch lập chỉ mục — không vì bạn expect xếp hạng bump từ thuộc tính itself.

nơi điều này fits

Lazy loading là một lever trong rộng hơn web performance toolkit. nó pairs với tài nguyên hints (preload/preconnect cho các tài nguyên bạn làm muốn sớm), font-loading strategy, bộ nhớ đệm, và CDN — và nó judged, ultimately, qua Core Web Vitals. Nhận trên—fold/dưới—fold split right và nó một của cheapest wins khả dụng.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.