Sebesség Szakszó

Render-blokkoló erőforrás

Szerző: · 6 perc olvasás · Frissítve:
Render-blokkoló erőforrás - Sebesség (szakszó) a tudástárban
Render-blokkoló erőforrás - Sebesség | eClick GEO-audit tudástár

A render-blokkoló erőforrás olyan CSS- vagy JavaScript-fájl, amelyet a böngészőnek le kell töltenie és fel kell dolgoznia, mielőtt az oldal első képpontját kirajzolná. Amíg ezek a fájlok nem készülnek el, a látogató üres fehér képernyőt néz, akkor is, ha a HTML már régen megérkezett.

Hogyan működik

A böngésző fentről lefelé olvassa a HTML-t. Amikor <link rel="stylesheet"> elemet talál, megáll a rajzolással: a stíluslap nélkül nem tudja, hogyan nézzen ki a tartalom. A <head>-ben lévő klasszikus <script src="..."> ennél is durvább, mert a HTML feldolgozását is felfüggeszti.

A blokkolás ideje két részből áll:

Miért lassít ez többet, mint gondolnád

Egy render-blokkoló fájl gyakran további fájlokat hív be. Ez láncot alkot, és a lánc minden eleme hozzáad egy teljes hálózati körfordulót. Mobilhálózaton egy körfordulás 100-300 ms is lehet. Öt láncszem már másodpercekben mérhető késés.

Emiatt a blokkoló erőforrás egyszerre rontja az első tartalmi megjelenést és az legnagyobb tartalmi elem idejét. A riportokban ezt látjuk a leggyakrabban: a szerver 200 ms alatt válaszol, mégis 4 másodperc a hasznos tartalom.

Mit néz ebből a riport

Az audit megszámolja a <head>-ben található, attribútum nélküli scripteket és a blokkoló stíluslapokat. Ez nyers darabszám, nem szimulált betöltés, ezért a hatása alacsony besorolású. Irányjelző: ha a szám magas, a valódi mérést érdemes elvégezni.

Röviden: minden <head>-ben lévő, attribútum nélküli script és stíluslap addig tartja fehéren a képernyőt, amíg le nem töltődik.

Miért fontos

Sebesség és rangsorolás

A LCP (Largest Contentful Paint) a Core Web Vitals egyik mért mutatója. A jó küszöb 2,5 másodperc. A render-blokkoló erőforrások közvetlenül tolják felfelé ezt az értéket, mert a képernyő kirajzolása csak utánuk kezdődik.

Üzleti következmény

A fehér képernyő a legrosszabb fajta várakozás: a látogató nem lát visszajelzést arról, hogy egyáltalán történik valami. Mobilon, hirdetésből érkező forgalomnál ez mérhető visszalépési arányt okoz. Webshopban ez közvetlenül kevesebb kosár.

AI-szempont

A generatív keresők crawlerei ritkán futtatnak teljes JavaScriptet. Ha a tartalmad csak a blokkoló JS lefutása után kerül a DOM-ba, az AI-crawlerek egy része üres oldalt lát. A blokkoló erőforrás így nemcsak lassít, hanem tartalmat is rejthet a gépek elől.

A lassú oldal ritkán kapja meg az első helyet a találati oldalon azonos tartalmi minőség mellett. A sebesség önmagában nem rangsorol előre, de a lassúság visszafog.

Kikre vonatkozik

Kikre vonatkozik

  • Minden publikus weboldalra, amely HTML-t szolgál ki böngészőnek
  • Különösen a sok pluginos WordPress-oldalakra, ahol 15-30 külön CSS- és JS-fájl is betöltődhet
  • Webshopokra, ahol a termékoldal betöltése közvetlenül pénzben mérhető
  • Egyoldalas kampányoldalakra, ahol a fizetett forgalom a fehér képernyő alatt pereg le

Kikre vonatkozik kevésbé

  • Zárt, bejelentkezés mögötti admin-felületekre, ahol a felhasználó amúgy is vár
  • Staging és fejlesztői környezetekre, bár ott is érdemes mérni
  • Statikus, CSS-ben minimális oldalakra, ahol egyetlen kis stíluslap van

A harmadik feles mérőkódok külön eset. A Google Tag Manager és a Meta Pixel alapértelmezés szerint aszinkron, de a konténerben elhelyezett egyedi HTML-tagek könnyen blokkolóvá válnak.

Hogyan ellenőrzöd

Lépések

  1. Nyisd meg az oldalt a PageSpeed Insights eszközben, és keresd az "Eliminate render-blocking resources" tételt. Itt fájlonként látod a becsült megtakarítást.
  2. Futtass Lighthouse auditot a böngésző devtools Lighthouse fülén. Ugyanez a tétel a Performance blokkban jelenik meg.
  3. Nézd meg a Network fület. Kapcsold be a "Slow 4G" throttlingot, töltsd újra, és figyeld, mi töltődik az első rajzolás előtt.
  4. Ellenőrizd a nyers HTML-t: curl -s https://pelda.hu | head -100. A </head> előtti <script src="..."> sorokat nézd meg egyesével.
  5. A Coverage fülön (devtools, Ctrl+Shift+P, "Show Coverage") látod, hogy a betöltött CSS hány százaléka használatlan.

Jó jel

  • A <head>-ben legfeljebb 1-2 stíluslap van
  • Minden <script src> mellett ott az async vagy a defer
  • Az FCP 1,8 másodperc alatt van mobilon
  • A Coverage 50 százalék feletti CSS-kihasználtságot mutat

Rossz jel

  • 8-10 külön CSS-fájl a <head>-ben, mindegyik külön kéréssel
  • jQuery vagy slider-könyvtár attribútum nélkül, közvetlenül a <title> után
  • A PageSpeed 1 másodperc feletti becsült megtakarítást ír
  • A Network idővonalán hosszú, lépcsős lánc az első rajzolás előtt

Hogyan javítod

Az alapszabály mindenhol ugyanaz: tedd a scriptekre az async vagy defer attribútumot, és vond össze a CSS- és JS-fájlokat.

  • defer: a script a HTML feldolgozása után, sorrendhelyesen fut. Ez a jó alapértelmezés.
  • async: amint letöltődött, azonnal fut, tetszőleges sorrendben. Csak független mérőkódokra való.

WordPress

  1. Telepíts egy optimalizáló bővítményt (például WP Rocket, Autoptimize vagy LiteSpeed Cache). Egyszerre csak egyet.
  2. Kapcsold be a CSS- és JS-összevonást, valamint a "Load JavaScript deferred" opciót.
  3. Kapcsold be a kritikus CSS generálást, a többi stíluslapot pedig tedd aszinkronra.
  4. Tesztelj: a slider, a kosár és az űrlapok működését nézd meg kattintva, ne csak ránézésre.
  5. Ha valami eltörik, tedd kivétellistára az érintett handle-t, ne kapcsold ki az egész funkciót.

Saját sablonnál a wp_enqueue_script() ötödik paramétere ($in_footer) legyen true, vagy használj wp_script_add_data( 'handle', 'defer', true ) hívást.

Shopify

  1. A témában keresd meg a theme.liquid fájlt, és nézd át a <head> tartalmát.
  2. A saját scriptekre tedd rá a defer attribútumot.
  3. A nem használt appokat töröld, ne csak kapcsold ki. A maradék kódjuk gyakran ott marad.
  4. A Google Tag Manager (GTM) és a pixelek a Customer Events felületre kerüljenek, ne a sablonba.

Unas

  1. A Kinézet menüben, az egyedi HTML- és JS-mezőkben ellenőrizd a beillesztett kódokat.
  2. A külső scriptekre írd ki a defer attribútumot.
  3. A saját CSS-t egy fájlba fogd össze, ne több külön blokkba.
  4. A sablon beépített erőforrásait nem tudod átszervezni. Itt a saját kód takarítása hozza a nyereséget.

Shoprenter

  1. A sablonszerkesztőben nézd át a head részleget.
  2. A saját és a harmadik feles scriptekre tedd rá a defer attribútumot.
  3. Az egyedi CSS-t a témán belül kezeld, ne külön külső fájlként hívd be.
  4. A modulokat rendszeresen nézd át, a használaton kívülieket távolítsd el.

Egyedi fejlesztés

  1. Build-lépésben bundleld a CSS-t és a JS-t (Vite, esbuild vagy webpack).
  2. Generálj kritikus CSS-t, és tedd a <head>-be inline. A többit töltsd aszinkron módon.
  3. Minden scriptre defer, kivéve ha bizonyítottan a rajzolás előtt kell futnia.
  4. A fontos erőforrásokra tegyél <link rel="preload"> jelzést.
  5. Állíts be hosszú gyorsítótár-időt hash-elt fájlnevekkel.
  6. Mérj újra PageSpeeddel, és hasonlítsd a javítás előtti értékhez.

Gyakori hibák

  • Mindenre async kerül - a sorrendfüggő scriptek eltörnek, mert a függőségük még nem töltődött be.
  • Két optimalizáló bővítmény fut egyszerre - kétszer nyúlnak ugyanahhoz a fájlhoz, és kiszámíthatatlan hibákat okoznak.
  • Az összevonás után senki nem kattint végig az oldalon - a kosár vagy az űrlap hetekig törötten áll, mire kiderül.
  • A teljes CSS-t inline-ba teszik - a HTML megnő, és a cache (gyorsítótár) nem tudja külön tárolni a stíluslapot.
  • A fejlesztő csak asztali gépen mér - mobilhálózaton a blokkolás ideje többszörös, és ott dől el az LCP (Largest Contentful Paint).
  • A harmadik feles kódot érinthetetlennek tekintik - pedig a chat-widget vagy a hőtérkép gyakran a legnagyobb blokkoló tétel.
  • Javítás után nem mérnek újra - így nem derül ki, hogy a változtatás valójában rontott a FCP (First Contentful Paint) értékén.

Technikai példa

Rossz és jó <head>

<!-- Rossz: minden blokkol -->
<head>
  <link rel="stylesheet" href="/css/reset.css">
  <link rel="stylesheet" href="/css/grid.css">
  <link rel="stylesheet" href="/css/theme.css">
  <script src="/js/jquery.min.js"></script>
  <script src="/js/slider.js"></script>
</head>

<!-- Jó: egy bundle, defer scriptek -->
<head>
  <style>/* kritikus CSS, kb. 10-14 KB */</style>
  <link rel="preload" href="/dist/app.css" as="style"
        onload="this.rel='stylesheet'">
  <script src="/dist/app.js" defer></script>
  <script src="https://www.googletagmanager.com/gtag/js?id=G-XXXX" async></script>
</head>

A preload + onload minta aszinkronná teszi a nem kritikus stíluslapot. A defer megtartja a scriptek sorrendjét, az async csak a független mérőkódon van.

Blokkoló elemek listázása parancssorból

curl -s https://pelda.hu \
  | sed -n '/<head/,/<\/head>/p' \
  | grep -E '<script src|rel="stylesheet"'

A találatok közül minden olyan <script> sor gond, amelyben nincs async vagy defer. A stíluslapoknál a darabszám számít: háromnál több külön fájl már összevonásért kiált.

Gyakori kérdések

Mi a különbség az async és a defer között?
A defer megvárja a HTML teljes feldolgozását, és a scriptek az eredeti sorrendjükben futnak le. Az async azonnal lefuttatja a scriptet, amint letöltődött, tetszőleges sorrendben. Ha a kódod más scriptre épül, defer kell. Az async független mérőkódokra való.
A CSS-re is rátehetem a defer attribútumot?
Nem, a <link> elem nem ismeri a defer attribútumot. A stíluslapot preload + onload mintával vagy media="print" trükkel teheted nem blokkolóvá. A látható tartalomhoz tartozó kritikus CSS viszont maradjon inline a <head>-ben.
Miért tört el az oldalam a CSS-összevonás után?
A legtöbb optimalizáló bővítmény átrendezi a betöltési sorrendet, és egyes sablonok erre érzékenyek. A megoldás a kivétellista: vedd ki az összevonásból a problémás fájlt. Összevonás után mindig kattints végig a kosáron, az űrlapokon és a szűrőkön.
Mennyit javít ez a valóságban?
Jellemzően 0,5-2 másodpercet mobilon, ha sok különálló fájl volt a <head>-ben. A pontos nyereséget a PageSpeed Insights becsüli meg fájlonként. Ha a becsült megtakarítás 300 ms alatt van, van fontosabb tennivalód.
Elég ehhez egy gyorsítótárazó bővítmény?
Részben. A cache (gyorsítótár) a második betöltést gyorsítja, de az első látogató ugyanúgy megvárja a blokkoló fájlokat. A render-blokkolás megszüntetése az első betöltésre hat, ezért a kettő egymást kiegészíti, nem helyettesíti.

Források

Kapcsolódó fogalmak

A te oldaladon hogy áll a(z) „Render-blokkoló erőforrás”?

Futtass egy SEO-auditot: pontszám, fejlesztői ítélet, a leggyorsabb javítások, és minden tételhez bizonyíték.

Ingyenes SEO-audit indítása