Sebesség

Lusta betöltés rosszul: mikor árt a lazy load a képeknek és a SEO-nak

Lusta betöltés hibái: mikor árt a lazy load a képeknek, az LCP-nek és az indexelésnek, és hogyan javítsd ki a hero képen egy attribútummal.

Scheo · · Frissítve: · olvasási idő ~10 perc · Szerző: Schmidt Péter

Összefoglalva: A lusta betöltés alapból hasznos, de ha a főképre is rákerül, lassul az első betöltés, ha pedig hiányzik a valódi src, a kép ki is maradhat a Képkeresőből. A megoldás egyszerű: a hero képen kapcsold ki a lazy loadot, adj neki fetchpriority="high"-t, és mindenhol rögzítsd a képméretet.

A lusta betöltés az egyik legolcsóbb sebesség-javítás, amit egy weboldalon be lehet kapcsolni: a böngésző csak akkor tölti le a képet, amikor az közeledik a képernyőhöz. Egy hosszú aloldalon ez tíz-húsz felesleges letöltést spórol meg az első másodpercben, mobilon pedig komoly adatforgalmat. Ezért kapcsolja be alapból szinte minden mai sablon és gyorsító bővítmény.

Lusta betöltés rosszul: mikor árt a lazy load a képeknek és a SEO-nak
Lusta betöltés rosszul: mikor árt a lazy load a képeknek és a SEO-nak

A baj ott kezdődik, hogy a legtöbb megoldás válogatás nélkül, mindenre ráteszi. Így késleltetve indul az a kép is, amelyik a látogató első benyomását adja, és amelyet a sebességmérő is a legfontosabb elemként mér. Nézzük végig, mikor fordul át a hasznos beállítás kárrá, és pontosan mit kell átállítani.

Mi történik technikailag, amikor lusta betöltést kapcsolsz be?

Röviden: a kép letöltése kikerül az oldal induló sorából, és egy későbbi, görgetéshez kötött pillanatra csúszik. Kétféleképpen szokott megvalósulni, és a kettő nagyon nem ugyanaz.

Az egyik a natív mód, amikor a képen ott van a loading="lazy" attribútum, a src viszont a helyén marad. A böngésző intézi az egészet, JavaScript nélkül. Hivatalosan igazolt: ezt az attribútumot a Chrome, a Firefox, a Safari és az Edge is támogatja, és a Google saját dokumentációja is ezt ajánlja első választásként.

A másik a JavaScript-alapú mód. Ilyenkor a valódi képcím egy saját attribútumba kerül (jellemzően data-src), a src helyén pedig egy pici üres pixel vagy elmosott helyőrző ül. Amikor a kép a nézetbe ér, egy szkript átmásolja a címet a helyére. Ez rugalmasabb, viszont itt tud legrosszabbul elromlani a dolog: ha a szkript nem fut le, nincs kép.

Miért árt, ha a fő kép is lusta betöltésű?

Mert a nyitóképernyő nagy képe általában maga az LCP-elem, vagyis az a tartalom, amelynek megjelenési idejét a Core Web Vitals méri. Ha erre lazy load kerül, a böngésző szándékosan késlelteti azt, amitől a mérés függ.

A késés több lépcsőből áll össze. A böngésző előbb végigolvassa a HTML-t, felépíti az elrendezést, kiszámolja, hogy a kép a nézetben van, és csak utána indítja a letöltést. Közben a képfelderítő mechanizmus, amely normál esetben már a HTML olvasása közben elindítaná a letöltést, ki van iktatva. Saját tapasztalat: WordPress-oldalakon ez tipikusan néhány száz ezredmásodperctől bő egy másodpercig terjedő különbséget jelent, gyenge mobilhálózaton a nagyobb véghez közelebb. Ez sokszor pont annyi, amennyi a mérés zöld és sárga sávja között van.

A hiba azért ennyire gyakori, mert a bekapcsolás automatikus, a kivétel viszont nem. Három szokásos forrás:

Mikor fordulhat elő, hogy a kép ki sem indexelődik?

Akkor, ha a renderelt HTML-ben nincs valódi képcím a src vagy srcset attribútumban, csak egy saját, nem szabványos attribútumban. Hivatalosan igazolt: a Google dokumentációja szerint a képek felfedezéséhez a képcímnek elérhetőnek kell lennie a HTML-ben (vagy képes webhelytérképben, illetve strukturált adatban), és a lusta betöltésnek úgy kell működnie, hogy a tartalom a renderelés során ténylegesen betöltődjön.

A klasszikus hibás minta így néz ki:

<img class="lazy" src="data:image/gif;base64,R0lGOD..." data-src="/kepek/termek.jpg" alt="Termékfotó">

Ha a szkript valamiért nem fut le a feldolgozáskor (időtúllépés, hibás betöltési sorrend, egy másik szkript elszáll előtte), akkor a feldolgozó annyit lát, hogy az oldalon egy üres pixel van. A szöveges tartalom rendben indexelődik, a kép viszont nem kerül be a Képkeresőbe. Termékoldalon, receptnél, ingatlanhirdetésnél vagy szolgáltatói galériánál ez érezhető veszteség.

A biztonságos változat az, ha a szabványos attribútumok mindig ki vannak töltve, és a lusta betöltést a natív megoldás intézi:

<img src="/kepek/termek-800.jpg" srcset="/kepek/termek-400.jpg 400w, /kepek/termek-800.jpg 800w" sizes="(max-width: 600px) 100vw, 800px" width="800" height="600" loading="lazy" decoding="async" alt="Termékfotó">

Hogyan okoz elrendezés-elmozdulást a késleltetett tartalom?

Úgy, hogy a böngésző nem tudja előre, mekkora helyet hagyjon. Amikor a kép megérkezik, szétnyomja a körülötte lévő szöveget, a látogató pedig épp akkor téveszti el a gombot, amikor kattintana. Ezt méri a CLS.

A javítás mechanikus: minden képnek legyen width és height attribútuma, vagy CSS-ben rögzített képarány. A böngésző ebből kiszámolja a helyet, és üresen tartja a kép érkezéséig. Ugyanez vonatkozik a beágyazott keretekre és a reklámhelyekre is: ha nincs fix magasságuk, ugrálni fog az oldal.

Saját tapasztalat: a legrosszabb ugrálást nem a képek, hanem a késleltetve betöltő sütikezelő sáv, a hírlevél-felugró és a chat-buborék okozza, mert ezek utólag tolják be magukat az oldal tetejére vagy aljára. Ha ilyet késleltetsz, tedd fix pozícióba, hogy ne mozgassa a dokumentum-folyamot.

Mikor elég a natív loading="lazy", és mikor kell fetchpriority="high"?

Egyszerű szabály: ami az első képernyőn látszik, az kap prioritást, ami alatta van, az lazy loadot. A kettő nem keverhető ugyanazon a képen.

A nyitókép helyes formája nagyjából ez:

<img src="/kepek/hero-1600.jpg" width="1600" height="900" fetchpriority="high" decoding="async" alt="Bemutató fotó">

Figyeld meg, hogy itt nincs loading attribútum. Az alapérték (eager) pontosan azt csinálja, amit szeretnél. A fetchpriority="high" pedig azt üzeni a böngészőnek, hogy ezt a letöltést hozza előre a többi elé. Hivatalosan igazolt: ez a Priority Hints szabvány része, a Chromium-alapú böngészők támogatják, a többi böngésző pedig egyszerűen figyelmen kívül hagyja, tehát nem tud kárt okozni.

Ha a nyitókép CSS háttérként jön, a HTML-ben nincs mit jelölni. Ilyenkor a fejlécbe kerülő előtöltés segít:

<link rel="preload" as="image" href="/kepek/hero-1600.avif" fetchpriority="high">

Néhány gyakorlati határ, amit érdemes tartani:

Mit kezdj a beágyazott videóval, térképpel és a chat-widgettel?

Ezek a legjobb jelöltek a késleltetésre, mert nagyok, ritkán kellenek azonnal, és sokszor idegen domainről töltenek be egész szkriptcsomagokat.

A beágyazott kereteknél a natív attribútum ugyanúgy működik, mint képnél: <iframe src="..." loading="lazy" width="640" height="360">. Videónál ennél is jobb a kattintásra betöltő minta: alapból csak egy előnézeti kép és egy lejátszás gomb látszik, a tényleges lejátszó pedig kattintásra épül be. Térképnél ugyanez a logika, statikus képpel vagy egyszerű címblokkal helyettesítve.

A chat-widget külön eset. Saját tapasztalat: ezek szinte mindig a legdrágább külső erőforrások az oldalon, és jellemzően a betöltés első pillanatában indulnak. Ha késleltetve indítod (első görgetésre, néhány másodperc után, vagy egy saját, könnyű buborékra kattintva), a mérési eredmény érezhetően javul, a valós beszélgetések száma pedig tapasztalatom szerint nem esik vissza. Ezt viszont mindenképp mérd az adott oldalon, mert erősen függ a közönségtől.

Ami a keresők szempontjából számít: a beágyazott videó tartalma önmagában nem helyettesíti a szöveget. Ha a videó fontos információt hordoz, legyen mellette leírás vagy leirat is a HTML-ben.

Hogyan ellenőrzöd, hogy jól áll-e a lusta betöltés?

Három helyen kell megnézni, és mindhárom mást mutat. A forráskód gyorsnézete önmagában félrevezet, mert nem mutatja a szkriptek utáni állapotot.

1. A renderelt HTML-ben:

  1. Nyisd meg az oldalt, és a fejlesztői eszközök Elements fülén keresd meg a nyitóképet.
  2. Nézd meg, van-e rajta loading="lazy". Ha igen, ez a javítandó pont.
  3. Ellenőrizd, hogy a src valódi képcímet tartalmaz-e, nem üres pixelt vagy csak data-src attribútumot.
  4. Nézd meg, van-e width és height értéke.
  5. Kapcsold ki a JavaScriptet, töltsd újra, és nézd meg, mely képek tűnnek el. Ami eltűnik, azt a feldolgozó is kockázatosnak látja.

2. A Képkeresőben:

  1. Keress rá a domainre képkeresésben, és nézd meg, a fontos képek megjelennek-e.
  2. Használd a Search Console URL-ellenőrzőjét: a renderelt HTML-ben keresd meg a képcímet.
  3. Ha sok kép hiányzik, tegyél be képes webhelytérképet, ez segítheti a felfedezést.

3. A mérőeszközben:

  1. Futtass PageSpeed Insights vagy Lighthouse mérést, és nézd meg, mit jelöl LCP-elemként.
  2. Ha az LCP-elem egy lazy loadolt kép, a jelentés külön figyelmeztetést is ad rá.
  3. Nézd meg a CLS értéket és az elmozduló elemeket a Performance fülön.
  4. A javítás után mérj újra, és ha van rá adat, hasonlítsd össze a Search Console Core Web Vitals jelentésének valós felhasználói adataival is.

Hogyan viselkednek a lazy-loadolt képekkel a kereső- és AI-botok?

Hivatalosan igazolt: a Googlebot rendereli az oldalakat, de nem görget úgy, ahogy egy ember. Ehelyett nagyon magas nézetablakkal dolgozik, így a görgetéshez kötött, natív lusta betöltés általában kiváltódik. Ezért működik jól a natív megoldás, és ezért kockázatosabb a saját szkriptre épülő, egyedi görgetésfigyelés.

Szakmai feltételezés: az AI-asszisztensek mögötti letöltők jelentős része nem rendereli a JavaScriptet, hanem a nyers HTML-lel dolgozik. Ha egy kép csak data-src attribútumban létezik, ezek nagy valószínűséggel egyáltalán nem látják. Ugyanez igaz a görgetésre betöltő szöveges tartalomra is, ami ennél is nagyobb baj: a végtelen görgetéssel megjelenő terméklista vagy hozzászólás-blokk sok bot számára egyszerűen nem létezik.

Ebből következik a gyakorlati elv: a lusta betöltés a képekre való, a szövegre nem. Ami tényleges információt hordoz (leírás, ár helyett szolgáltatás-tartalom, GYIK, paraméterek), az legyen benne a kiszolgált HTML-ben, JavaScript futtatása nélkül is.

Mi az álláspontunk a lusta betöltésről?

Kapcsold be alapértelmezésben, és a hero képen kapcsold ki. Ez a legjobb arány költség és haszon között, amit ezen a területen ismerek. A globális bekapcsolás egy pipa, a kivétel egy attribútum, és a kettő együtt jó eséllyel többet javít a mért sebességen, mint a legtöbb drágább optimalizálás.

Saját tapasztalat: a legtöbb oldalon, ahol a mérés a nyitóképnél panaszkodik, nem hiányzik semmilyen bonyolult beállítás. Egyszerűen rákerült a lazy load arra az egy képre, amelyikre nem lett volna szabad. A javítás perceken belül elvégezhető, viszont sokszor évekig ott marad, mert senki nem nézi meg, mit tesz a gyorsító bővítmény alapból.

Fontos árnyalat: a lusta betöltés helyes beállítása nem garantál jobb helyezést. A sebesség csak egy tényező a sok közül. Amit szinte biztosan javít, az a mért felhasználói élmény és annak esélye, hogy a képeid egyáltalán bekerüljenek a Képkeresőbe. Ez utóbbi pedig már közvetlen forgalmi kérdés.

Források és további olvasnivalók

Amit érdemes megjegyezni
  • Az első képernyőn látszó fő képre soha ne kerüljön loading="lazy", mert ez közvetlenül rontja az LCP-t.
  • A JavaScript-alapú lazy load data-src megoldása nélkül a kép valódi src attribútuma hiányzik, így a Képkereső jó eséllyel nem látja.
  • Minden képnek adj width és height (vagy CSS aspect-ratio) értéket, különben a felugró tartalom elmozdítja az elrendezést.
  • A beágyazott videó, térkép és chat-widget a legjobb jelölt a késleltetésre: ezek viszik a legtöbb erőforrást és a legritkábban kellenek azonnal.
  • Ellenőrizni renderelt HTML-ben, a Képkeresőben és mérőeszközben kell, nem a forráskód gyorsnézetében.

Gyakori kérdések

Minden képre rátehetem a loading="lazy" attribútumot?

Nem. Ami az első képernyőn látszik (jellemzően a nyitókép és a logó), az maradjon azonnali betöltésű, mert ez adja az LCP mérését. A hajtás alatti képek, galériák, bélyegképek viszont nyugodtan kaphatják meg.

Honnan tudom, hogy melyik a nyitóképem, ha több nagy kép is van az oldal tetején?

A PageSpeed Insights és a Lighthouse jelentés külön kiírja, melyik elemet mérte LCP-nek. Ezt a mérést végezd el mobil és asztali nézetben is, mert eltérhet a két eredmény.

Ha JavaScript-alapú lazy loadot használ az oldalam, mindenképp le kell cserélni?

Nem feltétlenül, de ellenőrizni kell. Ha a kép valódi címe ott van a szabványos src vagy srcset attribútumban, és JavaScript nélkül is megjelenik, akkor nincs indexelési kockázat. Ha csak data-src van, érdemes átállni a natív megoldásra.

A fetchpriority="high" működik minden böngészőben?

Nem mindegyikben, de nem is okoz gondot ott, ahol nincs támogatás: az ismeretlen attribútumot a böngésző figyelmen kívül hagyja. A Chromium-alapú böngészőkben viszont érezhetően előre tudja hozni a nyitókép letöltését.

Segít a lusta betöltés kikapcsolása a hero képen a keresési helyezésen?

Közvetlen helyezés-javulást senki nem tud ígérni. Amit javít, az a mért betöltési idő és a felhasználói élmény, ami hosszabb távon segítheti a teljesítményt. Az indexelési kockázat megszüntetése ennél jóval kézzelfoghatóbb nyereség.

A beágyazott YouTube-videót és a Google Térképet is lehet késleltetni?

Igen, és ezek a legjobb jelöltek rá. A keretre tehető natív loading="lazy", videónál pedig a kattintásra betöltő megoldás a leghatékonyabb. Adj nekik fix méretet, hogy ne mozdítsák el az elrendezést.

Források és további olvasnivalók

Ezen az oldalon a hivatalosan igazolt információt elsődleges forrásokból építjük fel; a saját tapasztalatot és a szakmai becslést mindig külön jelöljük a szövegben.

A cikk szerzője

Schmidt Péter, online marketing szakértő, a Scheo Tanácsadó Kft. alapítója. Székesfehérvárról, országosan dolgozó csapattal végzünk keresőoptimalizálást, AI-láthatóság mérést, Google és Meta hirdetéskezelést, weboldalkészítést. Amit itt leírunk, azt ügyfélmunkában is használjuk. Rólunk bővebben · Szolgáltatásaink

Kapcsolódó olvasnivaló

Kapcsolódó

Ügynöki (agentic) böngészés: amikor nem ember nyitja meg az oldalad

Kapcsolódó

Honnan tudod, hogy tényleg AI-bot járt nálad, és nem valaki más adta ki magát annak

Kapcsolódó

Az AI-ból érkező látogató más: mit várjon el tőle a céloldalad

Kapcsolódó

Képoptimalizálás: WebP/AVIF, srcset, alt-szöveg

Kapcsolódó

Az LCP-elem azonosítása és gyorsítása: a hero kép, ami visszafogja az egész oldalt

Kapcsolódó

Képek és ábrák az AI-válaszokban: mit lát belőlük egy válaszmotor

Kapcsolódó

Mit állítanak rólad az AI-motorok? Rendszeres tényellenőrzés lépésről lépésre

Kapcsolódó

Weboldal gyorsítás Miskolc: Core Web Vitals javítás lépésről lépésre

Kapcsolódó

CLS-hibák felkutatása és javítása: miért ugrál az oldalad betöltés közben

Helyi szolgáltatás a környékeden

Országosan dolgozunk, online és személyesen. Válaszd ki a városodat, és nézd meg, hogyan segítünk helyben:

Online marketing & AI SEO EgerOnline marketing & AI SEO ZalaegerszegOnline marketing & AI SEO SzekszárdOnline marketing & AI SEO SalgótarjánOnline marketing & AI SEO SzékesfehérvárOnline marketing & AI SEO Budapest

Weboldalkészítés városra bontva

Ha először a honlap kell, itt városonként arról írtunk:

Weboldalkészítés DunaújvárosWeboldalkészítés GyőrWeboldalkészítés DebrecenWeboldalkészítés SzegedWeboldalkészítés MiskolcWeboldalkészítés Pécs

Mind a 20 városunk és az összes szolgáltatás →

15 perces AI-láthatósági gyorselemzés - díjmentesen

Megnézzük három, számodra fontos keresőkérdésnél, hogy megjelenik-e a céged a ChatGPT, a Gemini és a Google AI-válaszaiban, mely versenytársakat ajánlják helyetted, és melyik három területen érdemes először javítani. A weboldaladat előzetesen átnézzük, tehát nem sablonos, automata riportot kapsz.

Adataidat kizárólag a kapcsolatfelvételhez használjuk. Kapcsolat: m@rketinges.hu
💬 Konzultáció