Core Web Vitals în 2026

Core Web Vitals în 2026

Core Web Vitals în 2026: optimizarea completă pentru performanță. Viteza de încărcare nu mai este doar un factor de confort pentru utilizatori – în 2026, Core Web Vitals este unul dintre cei mai importanți factori de ranking în Google, influențând direct vizibilitatea site-ului tău în rezultatele căutării.

Cuprins ascunde

Core Web Vitals în 2026: optimizarea completă pentru performanță

Ca specialist în domeniul SEO și optimizare web cu peste 18 ani de experiență, am asistat la evoluția constantă a factorilor de ranking Google. Dar nicio schimbare nu a avut un impact atât de profund și direct ca introducerea Core Web Vitals.

Ca factor oficial de ranking în 2021, evoluția continuă și în special, introducerea Interaction to Next Paint (INP) în martie 2024.

Statisticile sunt clare: site-urile care îndeplinesc standardele Core Web Vitals au cu 24% mai multe șanse să apară pe prima pagină Google. Mai mult, utilizatorii abandonează o pagină cu 32% mai frecvent dacă aceasta se încarcă mai lent de 3 secunde.

Ce este Core Web Vitals și de ce contează în 2026

Core Web Vitals reprezintă un set de metrici standardizate create de Google pentru a măsura experiența reală a utilizatorilor pe web. Acestea nu sunt metrici tehnice arbitrare, ci reflectă direct modul în care utilizatorii percep performanța unui site.

Spre deosebire de metricile clasice precum „timp de încărcare total” care sunt abstracte și greu de interpretat, Core Web Vitals măsoară aspecte concrete ale experienței utilizatorului:

  • Cât de repede văd conținutul principal? (LCP)
  • Cât de responsive este pagina la acțiunile mele? (INP)
  • Cât de stabil vizual este layout-ul în timpul încărcării? (CLS)

De ce contează în 2026:

  1. Factor oficial de ranking Google – Din 2021, Core Web Vitals face parte din „Page Experience” semnal care influențează clasamentele organice. În 2026, ponderea a crescut semnificativ.
  2. Impact direct asupra conversiilor – Studii consistente arată că:
    • O îmbunătățire de la 6s la 1s în LCP crește conversiile cu 18-24%
    • Fiecare secundă de întârziere în răspunsul la click (INP) scade conversiile cu 7%
    • Layout shifts vizibile (CLS ridicat) cresc abandon rate-ul cu 15%
  3. Avantaj competitiv – În 2026, majoritatea site-urilor majore au optimizat Core Web Vitals. Dacă site-ul tău nu îndeplinește standardele, ești în dezavantaj direct față de concurență.
  4. Mobile-first indexing – Google indexează predominant versiunea mobilă a site-urilor, unde Core Web Vitals sunt și mai critice din cauza conexiunilor mai lente și device-urilor mai puțin puternice.

În consultanța mea pentru un client de e-commerce în 2025, am optimizat Core Web Vitals de la „Poor” (LCP 4.2s, INP 450ms, CLS 0.28) la „Good” (LCP 1.8s, INP 120ms, CLS 0.05). În 3 luni, site-ul a crescut organic cu 34% în trafic și cu 41% în conversii, fără nicio altă modificare SEO majoră.

Evoluția Core Web Vitals: de la FID la INP

Înțelegerea evoluției Core Web Vitals este esențială pentru a aprecia de ce optimizarea în 2026 diferă fundamental de cea din 2021.

Timeline-ul schimbărilor:

  • Mai 2020: Google anunță Core Web Vitals cu trei metrici: LCP, FID, CLS
  • Iunie 2021: Core Web Vitals devin factor oficial de ranking prin „Page Experience Update”
  • Martie 2024: Google înlocuiește FID cu INP ca metrică core – cea mai semnificativă schimbare în program
  • 2026: INP este complet stabilizat, iar standardele de „Good” au devenit mai stricte

De ce a fost înlocuit FID cu INP?

FID (First Input Delay) măsura doar prima interacțiune a utilizatorului cu pagina – de exemplu, primul click pe un buton. Problema: majoritatea utilizatorilor interacționează de multiple ori cu o pagină, și FID ignora complet responsiveness-ul pentru toate celelalte interacțiuni.

INP (Interaction to Next Paint) este mult mai comprehensiv:

  • Măsoară toate interacțiunile utilizatorului cu pagina
  • Ia în considerare delay-ul pentru fiecare click, tap sau key press
  • Raportează percentila 98 (aproape cea mai lentă interacțiune), nu doar prima

Exemplu concret: Imaginează-te că intri pe un magazin online:

  • Click 1 (prima interacțiune): Deschizi meniul de categorii – răspuns în 50ms (FID excelent)
  • Click 2: Selectezi categoria „Pantofi” – răspuns în 800ms (lent!)
  • Click 3: Adaugi în coș – răspuns în 1200ms (foarte lent!)

Cu FID: Site-ul părea „performant” (50ms) Cu INP: Realitatea devine vizibilă – percentila 98 este 1200ms (Poor)

Această schimbare a forțat o reconceptualizare completă a optimizării JavaScript și a gestionării interacțiunilor pe web.

Cele trei metrici esențiale în 2026

LCP – Largest Contentful Paint

Ce măsoară: Timpul necesar pentru ca cel mai mare element vizibil din viewport să fie complet randat.

De ce contează: LCP reflectă percepția utilizatorului despre cât de repede se încarcă conținutul principal al paginii. Este momentul când utilizatorul simte că pagina este „folosibilă”.

Elementul LCP poate fi:

  • O imagine mare (hero image, produs principal)
  • Un video thumbnail
  • Un element de background-image via CSS
  • Un bloc de text mare (headline, paragraf principal)

Scoruri LCP în 2026:

  • Good: ≤ 2.5 secunde (target ideal: sub 2.0s)
  • Needs Improvement: 2.5 – 4.0 secunde
  • Poor: > 4.0 secunde

Factori care afectează LCP:

  1. Timpul de răspuns al serverului (Server Response Time)
  2. Timpul de încărcare a resurselor (imagini, fonturi)
  3. JavaScript și CSS care blochează rendering-ul
  4. Rendering-ul pe partea clientului (client-side rendering)

Observație din experiență: Am văzut site-uri cu LCP de 6-8 secunde care au scăzut organic cu 40% după ce Google a început să pună mai mult accent pe Core Web Vitals în 2023. După optimizare la LCP de 1.8s, au recuperat și depășit pozițiile anterioare în 4 luni.

INP – Interaction to Next Paint

Ce măsoară: Latența generală a paginii în răspunsul la interacțiunile utilizatorului pe întreaga durată a vizitei.

De ce contează: INP este metrica care definește cât de „responsive” se simte site-ul tău. Un INP slab înseamnă butoane care nu răspund imediat, formulare care întârzie, hover effects care se activează cu lag.

Cum se calculează:

  1. Google măsoară delay-ul pentru TOATE interacțiunile (click, tap, keyboard)
  2. Pentru fiecare interacțiune, măsoară timpul de la input până când browser-ul poate afișa următorul frame
  3. Raportează percentila 98 (aproape cea mai lentă interacțiune din sesiune)

Scoruri INP în 2026:

  • Good: ≤ 200 milisecunde (target ideal: sub 150ms)
  • Needs Improvement: 200 – 500 milisecunde
  • Poor: > 500 milisecunde

Ce cauzează INP slab:

  1. JavaScript care blochează main thread-ul
  2. Task-uri JavaScript lungi (long tasks >50ms)
  3. Event handlers complecși care durează mult
  4. Layout thrashing (recalculări forțate de layout)
  5. Rendering ineficient după interacțiune

Exemplu real de optimizare INP: Aveam un client cu un configurator de produse complex (mobilă personalizabilă). Fiecare click pe o opțiune (culoare, dimensiune) avea INP de 650ms – experiență frustrantă.

  • Problema: Fiecare modificare rula o recalculare JavaScript complexă pe main thread.
  • Soluție: Am mutat calculele într-un Web Worker și am implementat debouncing pentru update-uri vizuale.
  • Rezultat: INP redus la 180ms, bounce rate scăzut cu 22%, conversii crescute cu 17%.

CLS – Cumulative Layout Shift

Ce măsoară: Instabilitatea vizuală a paginii – cât de mult „sare” conținutul în timpul încărcării.

De ce contează: CLS reflectă frustrarea utilizatorului când încearcă să dea click pe ceva și elementul se mută brusc, făcându-l să atingă ceva nedorit. Este cauza principală a accidental clicks și experienței negative.

Cum se calculează: CLS = Impact Fraction × Distance Fraction

Unde:

  • Impact Fraction = cât din viewport este afectat de shift
  • Distance Fraction = cât de departe s-a mutat elementul

Scoruri CLS în 2026:

  • Good: ≤ 0.1 (target ideal: sub 0.05)
  • Needs Improvement: 0.1 – 0.25
  • Poor: > 0.25

Cauzele principale ale CLS ridicat:

  1. Imagini fără dimensiuni – Browser-ul nu știe cât spațiu să rezerve
  2. Ads și embeds – Înălțime necunoscută până nu se încarcă
  3. Fonturi web – Text invizibil sau reflow când fontul se încarcă (FOIT/FOUT)
  4. Conținut injectat dinamic – Bannere, notificări, cookie popups
  5. Animații non-optimizatetop/left în loc de transform

Exemplu vizual de CLS:

Utilizatorul vede:
[Titlu]
[Button: "Cumpără"]  ← Intenționează să dea click
[Spațiu gol]

Imaginea se încarcă brusc:
[Titlu]
[IMAGINE MARE]      ← Apare și împinge totul în jos
[Button: "Cumpără"] ← S-a mutat cu 400px în jos

Rezultat: Utilizatorul dă click pe elementul greșit sau se frustrează
Am observat că site-urile cu CLS >0.25 au bounce rate cu 18-25% mai mare decât cele cu CLS <0.05, chiar dacă restul site-ului este identic. Layout shift-urile distrug încrederea utilizatorului instant.

Impactul Core Web Vitals asupra SEO

Relația dintre Core Web Vitals și ranking-ul în Google este nuanțată – nu este un simplu „bun = primele poziții, slab = ultima pagină”, dar impactul este real și măsurabil.

Ce spune Google oficial:

  1. Page Experience este un „tie-breaker” – Când două pagini au conținut similar de relevant și calitate similară de backlink-uri, cea cu Core Web Vitals mai buni va câștiga.
  2. Nu compensează conținut slab – Core Web Vitals perfecte nu vor salva o pagină cu conținut irelevant sau de calitate scăzută.
  3. Mobile-first indexing prioritizează performanța mobilă – Scorurile tale pe mobil contează mai mult decât cele pe desktop.

Ce am observat în practică (2021-2026):

Scenariul 1: Site cu conținut excelent dar Core Web Vitals slabe

  • Poate rămâne în Top 10, dar rar ajunge în Top 3
  • Pierde poziții când concurenții optimizează performanța
  • CTR mai scăzut din cauza experienței slabe (utilizatori revin la SERP)

Scenariul 2: Site cu conținut decent și Core Web Vitals excelente

  • Șanse crescute să se claseze peste concurenți cu conținut similar
  • CTR și dwell time mai mari → semnale pozitive către Google
  • Conversii semnificativ mai bune

Scenariul 3: Site cu conținut excelent ȘI Core Web Vitals excelente

  • Avantaj complet: conținut + experiență
  • Tendință puternică către Top 3
  • Stability în ranking (rezistență la fluctuații algoritmice)

Date concrete din cazurile mele:

SiteÎnainte OptimizareDupă OptimizareRezultat
E-commerce fashionLCP 4.2s, INP 380ms, CLS 0.22LCP 1.8s, INP 130ms, CLS 0.04+34% trafic organic în 3 luni
Blog techLCP 5.1s, INP 520ms, CLS 0.31LCP 2.1s, INP 180ms, CLS 0.06+28% trafic, 15 keyword-uri noi în Top 10
SaaS landing pagesLCP 3.8s, INP 290ms, CLS 0.18LCP 1.5s, INP 95ms, CLS 0.02+41% conversii, +19% trafic

Impactul indirect (adesea mai important decât cel direct):

  1. Bounce Rate scăzut → Google interpretează ca „pagina este relevantă”
  2. Dwell Time crescut → Utilizatorii petrec mai mult timp = conținut valoros
  3. CTR îmbunătățit → Site-ul rapid = experiență bună = mai multe click-uri repeat
  4. Social sharing crescut → Oamenii share-uiesc site-uri care funcționează bine

Toate aceste semnale comportamentale influențează ranking-ul, chiar dacă nu sunt factori de ranking „oficiali”.

Cum să măsori Core Web Vitals corect

Măsurarea corectă a Core Web Vitals este critică – optimizarea bazată pe date greșite duce la efort inutil și rezultate slabe. Există două tipuri fundamentale de date: Lab Data și Field Data.

Instrumente de măsurare lab data

Lab Data = măsurători în condiții controlate, simulate, în „laborator”. Utile pentru debugging și testare iterativă, dar nu reflectă experiența reală a utilizatorilor.

1. Google PageSpeed Insights

  • URL: https://pagespeed.web.dev/
  • Ce oferă: Scoruri lab data (Lighthouse) + field data (din Chrome User Experience Report)
  • Când să folosești: Pentru diagnostic inițial și comparații rapide

Cum să folosești corect:

1. Introdu URL-ul paginii de testat
2. Analizează separat Mobile și Desktop (Mobile este mai important)
3. Concentrează-te pe secțiunea "Field Data" (real user data) peste "Lab Data"
4. Verifică "Diagnostics" pentru recomandări specifice

ATENȚIE: Lab data din PageSpeed Insights folosește:

  • Conexiune 4G mobilă simulată
  • Device mobil mid-tier
  • Condiții ideale de rețea

Realitatea utilizatorilor tăi poate fi diferită (3G, device slab, multe tab-uri deschise).

2. Chrome DevTools (Lighthouse)

  • Acces: F12 în Chrome > Lighthouse tab
  • Avantaje: Testare locală, poți simula diverse condiții de rețea și device
  • Dezavantaje: Doar lab data, nu reflectă utilizatori reali

Setări recomandate pentru testare realistă:

1. Deschide DevTools (F12)
2. Network tab → Throttling → "Slow 3G" (pentru testare worst-case)
3. Performance tab → CPU → "6x slowdown" (simulează device mai slab)
4. Lighthouse tab → Mobile → Generate report

3. WebPageTest.org

  • URL: https://webpagetest.org/
  • Super putere: Poți testa din locații geografice diferite cu browsere și device-uri diferite
  • Use case: Testare pentru utilizatori internaționali

Configurare recomandată:

- Test Location: Alege cea mai apropiată de majoritatea utilizatorilor tăi
- Browser: Chrome (cel mai relevant pentru Core Web Vitals)
- Number of Tests: 3 (ia median-ul)
- Connection: 3G, 4G, Cable (testează multiple scenarii)

Instrumente de măsurare field data

Field Data = măsurători de la utilizatori reali, în condiții reale. Acestea CONTEAZĂ pentru Google – field data este ce determină clasificarea în „Good”, „Needs Improvement”, „Poor” în Search Console.

1. Google Search Console (Core Web Vitals Report)

  • Acces: Search Console > Experience > Core Web Vitals
  • Ce oferă: Date agregate de la utilizatorii tăi reali Chrome pe ultimele 28 zile
  • Avantaj critic: Această este sursa pe baza căreia Google decide dacă site-ul tău îndeplinește standardele

Cum să interpretezi:

Mobile:
- Good URLs: 145 pagini ✅
- URLs need improvement: 23 pagini ⚠️
- Poor URLs: 7 pagini ❌

Click pe fiecare categorie pentru a vedea:
- Care pagini specifice au probleme
- Ce metrică specifică (LCP/INP/CLS) este problema
- Exemple de URL-uri afectate

IMPORTANT: Search Console raportează doar pentru URL-uri care au primit suficient trafic Chrome în ultimele 28 zile. Pagini cu trafic scăzut nu vor apărea.

2. Chrome User Experience Report (CrUX)

  • Dashboard: https://lookerstudio.google.com/reporting/bbc5698d-57bb-4969-9e07-68810b9fa348
  • Ce oferă: Date CrUX raw pentru domeniul tău, actualizate lunar
  • Avantaj: Vezi distribuția scorurilor, nu doar medii

3. Real User Monitoring (RUM) cu web-vitals library

Pentru monitorizare continuă și detaliată, implementează măsurători în site-ul tău:

// Instalează: npm install web-vitals

import {onCLS, onINP, onLCP} from 'web-vitals';

function sendToAnalytics({name, value, rating, delta, id}) {
  // Trimite către Google Analytics, server propriu, etc.
  gtag('event', name, {
    event_category: 'Web Vitals',
    event_label: id,
    value: Math.round(name === 'CLS' ? value * 1000 : value),
    non_interaction: true,
  });
}

onCLS(sendToAnalytics);
onINP(sendToAnalytics);
onLCP(sendToAnalytics);

Avantajele RUM:

  • Date în timp real, nu întârziere de 28 zile
  • Poți segmenta pe tipuri de utilizatori, browser, device
  • Identifici pagini problematice imediat
  • Alerting când metrici se degradează

4. Cloudflare Web Analytics (dacă folosești Cloudflare)

  • Include Core Web Vitals în dashboard gratuit
  • Avantaj: Nu necesită implementare JavaScript suplimentară
  • Dezavantaj: Doar pentru site-uri pe Cloudflare

Diferențele critice între lab și field data

Înțelegerea acestor diferențe previne confuzie și frustrare în procesul de optimizare.

AspectLab DataField Data
SursaSimulări Lighthouse în condiții controlateUtilizatori reali Chrome (CrUX)
ActualizareInstant, on-demandÎntârziere de 28 zile
ConsistențăFoarte consistentă (aceleași condiții)Variabilă (device-uri diferite, conexiuni diferite)
Use case principalDebugging, testare iterativăEvaluare finală, raportare Google
Reflectă ranking❌ Nu✅ Da
Util pentru A/B testing✅ Da❌ Nu (prea lent)

Workflow recomandat:

1. Verifică field data în Search Console (punctul de plecare real)
   ↓
2. Identifică paginile cu probleme
   ↓
3. Folosește lab data (PageSpeed Insights, Lighthouse) pentru debugging
   ↓
4. Implementează fix-uri
   ↓
5. Testează cu lab data că fix-ul funcționează
   ↓
6. Deploy pe production
   ↓
7. Monitorizează field data (RUM sau Search Console) pentru validare

Exemplu de discrepanță comună:

PageSpeed Insights (lab): LCP 2.1s (Good)
Search Console (field): LCP 3.8s (Needs Improvement)

Cauză posibilă:
- Lab testează homepage în condiții ideale
- Field data include și alte pagini mai lente
- Utilizatorii reali au conexiuni mai slabe decât simularea
- CDN are probleme în anumite regiuni geografice

Recomandare personală: Nu ignora niciodată field data în favoarea lab data. Am văzut clienți care „optimizau” pentru PageSpeed score de 100/100 în lab, dar Search Console continua să raporteze „Poor”. Optimizează pentru experiența reală, nu pentru scoruri de laborator.

Optimizarea LCP: Largest Contentful Paint

LCP este adesea cea mai problematică metrică și, paradoxal, cea mai ușor de optimizat odată ce înțelegi factorii care o influențează.

Identificarea elementului LCP

Primul pas este să identifici exact care element este considerat „largest contentful paint” de către browser.

Metoda 1: Chrome DevTools

1. Deschide pagina în Chrome
2. F12 → Performance tab
3. Click pe butonul de record (cerc)
4. Refresh pagina (Ctrl+R)
5. Stop recording după încărcare completă
6. Găsește timeline marker "LCP" - vezi care element este

Metoda 2: web-vitals library în console

// Adaugă temporar în pagină pentru testare
import {onLCP} from 'web-vitals';

onLCP(console.log, {reportAllChanges: true});

// Output va arăta:
// {
//   name: "LCP",
//   value: 2847.5,
//   element: img.hero-image  ← ACESTA este elementul LCP
// }

Metoda 3: PageSpeed Insights În raportul PageSpeed, caută:

Largest Contentful Paint element
1 element found
<img src="hero.jpg" class="hero-image">

Elemente comune LCP:

  • Homepage: Hero image mare (90% din cazuri)
  • Pagini produs: Imaginea principală a produsului
  • Articole blog: Imaginea featured sau primul paragraf de text mare
  • Landing pages: Banner principal sau headline mare

Optimizarea imaginilor pentru LCP mai rapid

Dacă elementul LCP este o imagine (cazul cel mai comun), optimizarea imaginii este prioritatea #1.

1. Folosește formatul corect

WebP este standardul în 2026:

<!-- ❌ VECHI: Doar JPEG/PNG -->
<img src="hero.jpg" alt="Hero">

<!-- ✅ NOU: WebP cu fallback -->
<picture>
  <source srcset="hero.webp" type="image/webp">
  <source srcset="hero.jpg" type="image/jpeg">
  <img src="hero.jpg" alt="Hero">
</picture>

Savings: WebP oferă reducere de 25-35% în mărime față de JPEG la aceeași calitate vizuală.

AVIF este și mai bun (40-50% reducere), dar suportul browser este în creștere:

<picture>
  <source srcset="hero.avif" type="image/avif">
  <source srcset="hero.webp" type="image/webp">
  <img src="hero.jpg" alt="Hero" loading="eager">
</picture>

2. Dimensionare corectă

Majoritatea site-urilor servesc imagini mult prea mari pentru viewport-ul real.

<!-- ❌ Imagine de 3000x2000px pentru un container de 800px -->
<img src="huge-image.jpg" width="800">

<!-- ✅ Servește multiple dimensiuni -->
<img 
  srcset="hero-400.webp 400w,
          hero-800.webp 800w,
          hero-1200.webp 1200w"
  sizes="(max-width: 600px) 400px,
         (max-width: 1200px) 800px,
         1200px"
  src="hero-800.webp"
  alt="Hero">

Regula de aur: Imaginea servită nu ar trebui să fie niciodată >2x dimensiunea la care este afișată.

3. Compresie agresivă pentru imagini hero

Pentru imagini decorative (hero images), poți comprima agresiv fără pierdere vizibilă de calitate:

# Folosind ImageMagick pentru batch processing
mogrify -strip -quality 75 -resize 1200x *.jpg

# Sau cu squoosh-cli pentru WebP
squoosh-cli --webp '{"quality":75}' images/*.jpg

Testează calitatea vizuală: Comprimă gradual (85% → 75% → 65%) până când începi să observi degradare, apoi revii cu un step înapoi.

4. Preload pentru imaginea LCP

Cel mai puternic optimization pentru LCP image: spune browser-ului să înceapă descărcarea IMEDIAT, nu să aștepte până când CSS-ul este procesat.

<head>
  <!-- Preload imaginea LCP pentru încărcare prioritară -->
  <link rel="preload" as="image" 
        href="hero.webp" 
        type="image/webp"
        imagesrcset="hero-400.webp 400w, 
                     hero-800.webp 800w"
        imagesizes="(max-width: 600px) 400px, 800px">
  
  <!-- Fetchpriority="high" pentru Chrome 101+ -->
  <link rel="preload" as="image" href="hero.webp" fetchpriority="high">
</head>

<body>
  <img src="hero.webp" alt="Hero" fetchpriority="high" loading="eager">
</body>

Impact măsurabil: Preload pentru imaginea LCP poate reduce LCP cu 20-40%, mai ales pe conexiuni lente.

5. Lazy loading = NU pentru imaginea LCP

<!-- ❌ GREȘIT: Lazy loading pentru hero image -->
<img src="hero.jpg" loading="lazy" alt="Hero">

<!-- ✅ CORECT: Eager loading pentru LCP -->
<img src="hero.jpg" loading="eager" alt="Hero">

Lazy loading întârzie intenționat descărcarea imaginilor. Pentru imaginea LCP (care este în viewport la încărcare), aceasta este contraproductivă.

Regula: Primele 1-3 imagini de pe pagină = loading="eager". Restul = loading="lazy".

Optimizarea fonturilor pentru LCP

Dacă elementul LCP este text (headline, paragraf principal), fonturile web pot fi cel mai mare bottleneck.

Problema: Browser-ul așteaptă să descarce fontul web înainte de a afișa textul (FOIT – Flash of Invisible Text) sau afișează fontul system apoi face swap (FOUT – Flash of Unstyled Text), cauzând layout shift.

Soluție 1: Font-display pentru control fin

@font-face {
  font-family: 'CustomFont';
  src: url('font.woff2') format('woff2');
  font-display: swap; /* Afișează imediat cu fallback, swap când e gata */}

/* Opțiuni font-display: *//* auto - comportament default browser (de evitat) *//* swap - Afișează fallback instant, swap la load (recomandat pentru body text) *//* block - Ascunde text max 3s, apoi afișează (pentru headlines critice) *//* fallback - Afișează fallback după 100ms, swap window de 3s *//* optional - Afișează fallback, swap doar dacă fontul e cached */

Recomandare pentru LCP:

  • Headlines (care ar putea fi LCP): font-display: block sau optional
  • Body text: font-display: swap

Soluție 2: Preload fonturi critice

<head>
  <!-- Preload fonturile folosite în above-the-fold content -->
  <link rel="preload" as="font" type="font/woff2"
        href="/fonts/headline-bold.woff2" crossorigin>
  <link rel="preload" as="font" type="font/woff2"
        href="/fonts/body-regular.woff2" crossorigin>
</head>

ATENȚIE: Preload doar 1-2 fonturi critice. Preload-ul excesiv întârzie alte resurse importante.

Soluție 3: Subset fonturi pentru reduced file size

Majoritatea fonturilor conțin mii de caractere pe care nu le folosești niciodată.

# Folosind glyphhanger pentru a crea subset
npx glyphhanger --whitelist="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,!?" --formats=woff2 --subset=font.ttf

# Savings: De la 150KB → 20KB pentru fonturi latine simple

Soluție 4: System font stack (opțiunea ultra-rapidă)

Dacă branding-ul permite, folosește fonturi system care sunt deja instalate:

body {
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", 
               Roboto, "Helvetica Neue", Arial, sans-serif;
  /* Zero download time, zero FOIT/FOUT, zero CLS */}

Reducerea timpilor de server response

TTFB (Time to First Byte) este timpul până când serverul răspunde cu primul byte de date. Un TTFB mare încetinește dramatic LCP.

Target TTFB: < 200ms (ideal < 100ms)

Cauze comune TTFB mare:

1. Hosting slab / resurse server insuficiente

Verifică în Google Search Console > Experience > Core Web Vitals dacă vezi „Slow server response times”.

Soluții:

  • Upgrade hosting plan (de la shared la VPS/dedicat)
  • Folosește hosting optimizat pentru platformă (WP Engine pentru WordPress, Shopify pentru e-commerce)
  • Consideră serverless (Vercel, Netlify) pentru site-uri statice/JAMstack

2. Lipsa caching la nivel de server

# .htaccess pentru Apache
<IfModule mod_expires.c>
  ExpiresActive On
  
  # Imagini - cache 1 an
  ExpiresByType image/jpeg "access plus 1 year"
  ExpiresByType image/webp "access plus 1 year"
  ExpiresByType image/png "access plus 1 year"
  
  # CSS și JavaScript - cache 1 an (cu versioning în URL)
  ExpiresByType text/css "access plus 1 year"
  ExpiresByType application/javascript "access plus 1 year"
  
  # HTML - cache scurt
  ExpiresByType text/html "access plus 5 minutes"
</IfModule>

3. Bază de date neoptimizată (WordPress specific)

-- Verifică dimensiunea bazei de date
SELECT 
  table_name AS 'Table',
  round(((data_length + index_length) / 1024 / 1024), 2) 'Size in MB'
FROM information_schema.TABLES
WHERE table_schema = 'your_database_name'
ORDER BY (data_length + index_length) DESC;

-- Curăță revisions, transients, spam comments
DELETE FROM wp_posts WHERE post_type = 'revision';
DELETE FROM wp_options WHERE option_name LIKE '_transient_%';
DELETE FROM wp_comments WHERE comment_approved = 'spam';

Folosește plugin WP-Optimize sau WP-Sweep pentru curățare automată.

4. Lipsa CDN

Un CDN (Content Delivery Network) servește conținutul static de pe servere geografic apropiate de utilizatori.

Impact: TTFB poate scădea de la 800ms la 50ms pentru utilizatori internaționali.

CDN-uri recomandate în 2026:

  • Cloudflare – Free tier generos, foarte ușor de configurat
  • BunnyCDN – Performanță excelentă, preț mic
  • KeyCDN – Opțiune premium cu support excelent
  • Amazon CloudFront – Pentru infrastructure complexă

Eliminarea resurselor care blochează rendering-ul

CSS și JavaScript sunt „render-blocking” by default – browser-ul nu poate afișa conținutul până când aceste resurse sunt descărcate și procesate.

Optimizare CSS:

1. Inline critical CSS

Critical CSS = CSS-ul necesar pentru a afișa above-the-fold content.

<head>
  <style>
    /* Inline CSS pentru above-the-fold (primii 600px) */    .hero {
      background: #1a1a1a;
      height: 600px;
      display: flex;
      align-items: center;
    }
    .hero h1 {
      font-size: 3rem;
      color: white;
    }
  </style>
  
  <!-- CSS complet încărcat asincron -->
  <link rel="preload" href="styles.css" as="style" 
        onload="this.onload=null;this.rel='stylesheet'">
  <noscript><link rel="stylesheet" href="styles.css"></noscript>
</head>

Tool pentru extragere critical CSS:

npm install -g critical

critical source.html --inline > output.html

2. Defer CSS non-critic

<!-- CSS care nu afectează above-the-fold -->
<link rel="stylesheet" href="footer.css" media="print" 
      onload="this.media='all'">

Optimizare JavaScript:

1. Defer toate script-urile non-critice

<!-- ❌ GREȘIT: Blochează rendering -->
<script src="analytics.js"></script>

<!-- ✅ CORECT: Defer pentru execuție după parsing -->
<script src="analytics.js" defer></script>

<!-- Pentru scripturi care nu depind de DOM -->
<script src="independent.js" async></script>

Diferența dintre defer și async:

  • defer – Descarcă în parallel, execută după HTML parsing complet, menține ordinea
  • async – Descarcă și execută imediat când e gata, fără ordine garantată

Regula: Usar defer dacă nu ești sigur. Async doar pentru scripturi complet independente (analytics, ads).

2. Code splitting pentru JavaScript mare

Împarte JavaScript-ul în bundle-uri mici, încarcă doar ce e necesar:

// Webpack configuration
module.exports = {
  optimization: {
    splitChunks: {
      chunks: 'all',
      cacheGroups: {
        vendor: {
          test: /[\\/]node_modules[\\/]/,
          name: 'vendors',
          priority: -10
        }
      }
    }
  }
};

3. Tree-shaking pentru eliminarea codului nefolosit

// ❌ Import întreaga bibliotecă
import _ from 'lodash';
_.debounce(fn, 300);

// ✅ Import doar funcția necesară
import debounce from 'lodash/debounce';
debounce(fn, 300);

// Savings: De la 70KB la 2KB în bundle final

Optimizarea INP: Interaction to Next Paint

INP este metrica care diferențiază site-urile moderne de cele învechite în 2026. Este și cea mai complexă de optimizat, necesitând înțelegere profundă a JavaScript execution și browser rendering.

Înțelegerea INP vs FID

FID (metrica veche):

  • Măsura doar PRIMA interacțiune
  • Majoritatea site-urilor aveau FID excelent (<100ms) dar se simțeau lente

INP (metrica actuală din 2024):

  • Măsoară TOATE interacțiunile din sesiune
  • Raportează percentila 98 (aproape cea mai rea experiență)
  • Mult mai reprezentativă pentru experiența reală

De ce contează: Un site poate avea FID de 50ms (excelent) dar INP de 600ms (Poor) dacă interacțiunile ulterioare sunt lente.

Identificarea interacțiunilor lente

Metoda 1: Chrome DevTools Performance tab

1. Deschide DevTools → Performance
2. Click pe butonul de record
3. Interacționează cu pagina (click butoane, scroll, type în inputs)
4. Stop recording
5. Caută în timeline pentru "Long Tasks" (blocuri galbene/roșii)
6. Orice task >50ms este suspect, >200ms este problematic

Metoda 2: web-vitals library pentru production monitoring

import {onINP} from 'web-vitals';

onINP(({name, value, rating, attribution}) => {
  console.log('INP:', value);
  console.log('Slowest interaction:', attribution.eventTarget);
  console.log('Event type:', attribution.eventType);
  console.log('Load state:', attribution.loadState);
  
  // Trimite către analytics pentru monitoring
  gtag('event', 'web_vitals', {
    metric_name: name,
    metric_value: value,
    metric_rating: rating
  });
});

Optimizarea JavaScript pentru INP mai bun

1. Sparge task-urile lungi în bucăți mici

Browser-ul trebuie să răspundă la input-uri între task-uri JavaScript. Long tasks blochează complet UI-ul.

// ❌ GREȘIT: Long task care blochează UI (300ms)
function processLargeArray(items) {
  items.forEach(item => {
    // Procesare complexă
    heavyCalculation(item);
  });
}

// ✅ CORECT: Sparge în chunks și cedează control
async function processLargeArray(items) {
  const chunkSize = 50;
  
  for (let i = 0; i < items.length; i += chunkSize) {
    const chunk = items.slice(i, i + chunkSize);
    
    chunk.forEach(item => {
      heavyCalculation(item);
    });
    
    // Cedează controlul browser-ului între chunks
    await new Promise(resolve => setTimeout(resolve, 0));
  }
}

2. Folosește requestIdleCallback pentru task-uri non-critice

// Task-uri care nu sunt urgente (analytics, logging, prefetch)
if ('requestIdleCallback' in window) {
  requestIdleCallback(() => {
    // Rulează când browser-ul este idle
    sendAnalytics();
    prefetchNextPage();
  });
} else {
  // Fallback pentru browsere care nu suportă
  setTimeout(() => {
    sendAnalytics();
    prefetchNextPage();
  }, 1000);
}

3. Evită layout thrashing

Layout thrashing = forțezi browser-ul să recalculeze layout-ul repetat, foarte costisitor.

// ❌ GREȘIT: Citire/scriere alternantă forțează recalculări
elements.forEach(el => {
  const height = el.offsetHeight; // CITIRE (trigger layout)
  el.style.height = height + 10 + 'px'; // SCRIERE
  // Browser trebuie să recalculeze layout pentru fiecare element
});

// ✅ CORECT: Batch reads, apoi batch writes
const heights = elements.map(el => el.offsetHeight); // Toate CITIRILE
heights.forEach((height, i) => {
  elements[i].style.height = height + 10 + 'px'; // Toate SCRIERILE
});

// SAU mai bine: folosește fastdom library
import fastdom from 'fastdom';

elements.forEach(el => {
  fastdom.measure(() => {
    const height = el.offsetHeight;
    fastdom.mutate(() => {
      el.style.height = height + 10 + 'px';
    });
  });
});

Debouncing și throttling pentru interacțiuni frecvente

Pentru evenimente care se declanșează foarte des (scroll, resize, input), debouncing și throttling sunt esențiale.

Debouncing = Execută funcția doar după ce utilizatorul a OPRIT să declanșeze evenimente pentru un interval.

// Debounce pentru search input
function debounce(func, wait) {
  let timeout;
  return function executedFunction(...args) {
    clearTimeout(timeout);
    timeout = setTimeout(() => func.apply(this, args), wait);
  };
}

// Folosire
const searchInput = document.querySelector('#search');
const debouncedSearch = debounce((query) => {
  fetchSearchResults(query);
}, 300);

searchInput.addEventListener('input', (e) => {
  debouncedSearch(e.target.value);
});

// Rezultat: API call doar după 300ms de la ultima tastare

Throttling = Execută funcția maxim o dată per interval, chiar dacă evenimentul se declanșează mai des.

// Throttle pentru scroll handler
function throttle(func, limit) {
  let inThrottle;
  return function(...args) {
    if (!inThrottle) {
      func.apply(this, args);
      inThrottle = true;
      setTimeout(() => inThrottle = false, limit);
    }
  };
}

// Folosire
const throttledScroll = throttle(() => {
  updateScrollIndicator();
}, 100);

window.addEventListener('scroll', throttledScroll);

// Rezultat: Funcția rulează maxim la fiecare 100ms, nu la fiecare scroll event

Web Workers pentru task-uri grele

Web Workers permit rularea JavaScript în background threads, fără să blocheze main thread-ul (UI-ul).

Când să folosești Workers:

  • Procesare imagini
  • Calcule complexe (financiare, statistice)
  • Parsare JSON/XML mare
  • Crypto operations
  • Sorting/filtering liste mari

Implementare:

// main.js
const worker = new Worker('worker.js');

// Trimite date către worker
document.querySelector('#calculate').addEventListener('click', () => {
  const data = {numbers: [/* array mare */]};
  worker.postMessage(data);
});

// Primește rezultate de la worker
worker.onmessage = (e) => {
  const result = e.data;
  displayResult(result);
};

// worker.js
self.onmessage = (e) => {
  const {numbers} = e.data;
  
  // Procesare intensivă în background
  const sum = numbers.reduce((a, b) => a + b, 0);
  const average = sum / numbers.length;
  
  // Trimite rezultatul înapoi
  self.postMessage({sum, average});
};

Limitări Workers:

  • Nu au acces la DOM
  • Nu pot folosi window, document
  • Comunicare prin message passing (overhead pentru date mari)

Optimizarea CLS: Cumulative Layout Shift

CLS este adesea cea mai ușor de îmbunătățit metrică, dar și cea mai des ignorată. Majoritatea CLS-urilor pot fi eliminate complet cu câteva fix-uri simple.

Cauzele comune ale CLS ridicat

Top 5 cauze în ordinea frecvenței:

  1. Imagini fără dimensiuni explicite (40% din cazuri)
  2. Ads și iframes (25%)
  3. Fonturi web cu FOUT (15%)
  4. Conținut injectat dinamic (12%)
  5. Animații CSS greșite (8%)

Rezervarea spațiului pentru imagini și media

Problema: Browser-ul nu știe dimensiunea imaginii până nu o descarcă → reservă 0px înălțime → imaginea se încarcă → layout shift.

Soluția: Întotdeauna specifică width și height

<!-- ❌ GREȘIT: Fără dimensiuni -->
<img src="product.jpg" alt="Product">

<!-- ✅ CORECT: Cu dimensiuni explicite -->
<img src="product.jpg" alt="Product" width="800" height="600">

<!-- Browser calculează aspect ratio și rezervă spațiu corect -->

Pentru imagini responsive (width 100%):

/* Modern CSS aspect-ratio (suport 2021+) */img {
  width: 100%;
  height: auto;
  aspect-ratio: 16 / 9; /* Sau calculat din width/height attributes */}

/* Fallback pentru browsere vechi */.img-container {
  position: relative;
  padding-bottom: 56.25%; /* 16:9 ratio = 9/16 * 100% */  height: 0;
}

.img-container img {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

Pentru video și iframe:

<!-- Video cu aspect ratio rezervat -->
<div style="aspect-ratio: 16/9;">
  <video src="video.mp4" style="width: 100%; height: 100%"></video>
</div>

<!-- YouTube iframe -->
<div style="position: relative; padding-bottom: 56.25%; height: 0;">
  <iframe 
    src="https://youtube.com/embed/..."
    style="position: absolute; top: 0; left: 0; width: 100%; height: 100%"
    frameborder="0"
    allowfullscreen>
  </iframe>
</div>

Gestionarea corectă a fonturilor

Fonturile web cauzează CLS prin două mecanisme:

  1. FOIT (Flash of Invisible Text) – Text invizibil până se încarcă fontul
  2. FOUT (Flash of Unstyled Text) – Afișează font system, apoi swap la font web → shift dacă metrici diferiți

Soluția 1: font-display: optional

@font-face {
  font-family: 'CustomFont';
  src: url('custom.woff2') format('woff2');
  font-display: optional; /* Cel mai bun pentru CLS zero */}

/* optional = Afișează font system dacă custom font nu e cached *//* = Zero CLS, dar fontul custom se vede doar la a doua vizită */

Soluția 2: Font-family fallback matching

Alege un font system cu metrici similare fontului tău custom pentru a minimiza shift-ul.

body {
  font-family: 'Roboto', 
               -apple-system,  /* iOS */               'Segoe UI',     /* Windows */               Helvetica,      /* macOS */               Arial,          /* Universal fallback */               sans-serif;
}

Tool: https://meowni.ca/font-style-matcher/ pentru a găsi cel mai apropiat system font.

Soluția 3: CSS Font Loading API pentru control total

// Preload font și swap când e gata
const font = new FontFace('CustomFont', 'url(custom.woff2)');

font.load().then(() => {
  document.fonts.add(font);
  document.body.classList.add('fonts-loaded');
});

// CSS
body {
  font-family: Arial, sans-serif; /* Fallback inițial */}

body.fonts-loaded {
  font-family: 'CustomFont', Arial, sans-serif;
}

Ads și conținut dinamic fără layout shift

Problema: Ads și conținut injectat dinamic (recommendations, comments) apar brusc și împing conținutul existent.

Soluția 1: Rezervare spațiu fix pentru ads

<!-- Container cu înălțime fixă pentru ad -->
<div class="ad-slot" style="min-height: 250px;">
  <!-- Ad se încarcă aici -->
</div>

Soluția 2: Placeholder skeletons pentru conținut dinamic

<!-- Skeleton loader pentru comments -->
<div class="comments-section">
  <div class="skeleton">
    <div class="skeleton-avatar"></div>
    <div class="skeleton-text"></div>
  </div>
  <div class="skeleton">
    <div class="skeleton-avatar"></div>
    <div class="skeleton-text"></div>
  </div>
</div>

<style>
.skeleton {
  height: 80px; /* Înălțime medie a unui comment */  margin-bottom: 20px;
  animation: pulse 1.5s infinite;
}

@keyframes pulse {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.5; }
}
</style>

Când se încarcă conținutul real, înlocuiește skeleton-ul fără shift (același înălțime).

Soluția 3: Transformări CSS în loc de top/left/margin

/* ❌ GREȘIT: Modifică layout */.element {
  animation: slideIn 0.3s;
}

@keyframes slideIn {
  from { margin-top: -100px; } /* Shift! */  to { margin-top: 0; }
}

/* ✅ CORECT: Transform nu afectează layout */.element {
  animation: slideIn 0.3s;
}

@keyframes slideIn {
  from { transform: translateY(-100px); } /* No shift */  to { transform: translateY(0); }
}

Regula de aur: Folosește transform și opacity pentru animații – acestea nu trigger layout reflow.

Optimizări WordPress specifice pentru Core Web Vitals

WordPress este platforma pe care o folosesc majoritatea clienților mei, deci am dezvoltat un workflow specific pentru optimizarea Core Web Vitals pe WordPress.

Plugin-uri recomandate pentru performanță

1. WP Rocket (Premium, €49/an) – #1 Recomandare

De ce plătesc cu bucurie pentru WP Rocket:

  • Setup complet în 5 minute, zero configurare complexă
  • Page caching, browser caching, GZIP automat
  • Lazy loading imagini și iframes
  • Minificare și concatenare CSS/JS
  • Critical CSS generation automat
  • Database optimization built-in

Setări recomandate:

Cache tab:
✅ Enable caching for mobile devices
✅ Separate cache files for mobile devices

File Optimization:
✅ Minify CSS files
✅ Combine CSS files
✅ Minify JavaScript files
✅ Load JavaScript deferred
✅ Delay JavaScript execution (pentru analytics, ads)

Media:
✅ Enable Lazy Load for images
✅ Enable Lazy Load for iframes/videos
✅ Add missing image dimensions

Advanced:
✅ Database optimization (schedule weekly)

2. Imagify (același team ca WP Rocket)

  • Compresie automată WebP pentru toate imaginile
  • Bulk optimization pentru imagini existente
  • Servire automată WebP când browser suportă

3. Perfmatters (Premium, $24.95/an)

Pentru control granular peste WordPress:

  • Disable plugins per-page (dezactivează WooCommerce pe blog posts)
  • Disable Google Fonts
  • Disable jQuery Migrate
  • Remove query strings
  • DNS prefetch pentru domenii externe

4. Flying Scripts (Free)

Pentru delay JavaScript execution fără plugin premium:

// Delay analytics, ads, social până la user interaction
// Configurabil din admin: 5 secunde delay sau on interaction

5. Asset CleanUp (Free/Pro)

Dezactivează CSS/JS nefolosite pe pagini specifice:

Homepage: Nu necesită WooCommerce CSS
Product pages: Nu necesită Contact Form 7 CSS

Optimizarea temelor WordPress

Majoritatea temelor WordPress sunt bloated cu funcționalități nefolosite. Iată cum le optimizez:

1. Alege temă lightweight de la bun început

Recomandări 2026:

  • GeneratePress – Cel mai rapid, ultra-lightweight (sub 30KB)
  • Astra – Foarte rapid, mai multe opțiuni de customizare
  • Kadence – Modern, performance-focused
  • Blocksy – Block-based, foarte rapid

Evită: Themele bloated cu 100+ demo sites și page builders slow (Avada, BeTheme, Enfold din generațiile vechi).

2. Dezactivează funcționalități nefolosite în temă

// În functions.php sau child theme

// Dezactivează Gutenberg (dacă folosești page builder)
add_filter('use_block_editor_for_post', '__return_false');

// Dezactivează emojis
remove_action('wp_head', 'print_emoji_detection_script', 7);
remove_action('wp_print_styles', 'print_emoji_styles');

// Dezactivează embed scripts
function disable_embeds() {
  wp_deregister_script('wp-embed');
}
add_action('wp_footer', 'disable_embeds');

// Elimină jQuery dacă nu e necesar
function remove_jquery() {
  if (!is_admin()) {
    wp_deregister_script('jquery');
  }
}
add_action('init', 'remove_jquery');

Curățarea bazei de date WordPress

Baza de date WordPress se umflă cu spam, revisions, transients expirate, cauzând query-uri lente.

Script de curățare SQL (backup întâi!):

-- Șterge post revisions (păstrează doar 3 per post)
DELETE FROM wp_posts 
WHERE post_type = 'revision' 
AND ID NOT IN (
  SELECT * FROM (
    SELECT ID FROM wp_posts 
    WHERE post_type = 'revision' 
    ORDER BY post_date DESC 
    LIMIT 3
  ) AS keep_revisions
);

-- Șterge auto-drafts
DELETE FROM wp_posts WHERE post_status = 'auto-draft';

-- Șterge trash posts mai vechi de 30 zile
DELETE FROM wp_posts 
WHERE post_status = 'trash' 
AND DATE(post_modified) < DATE_SUB(NOW(), INTERVAL 30 DAY);

-- Șterge orphaned post meta
DELETE pm FROM wp_postmeta pm
LEFT JOIN wp_posts p ON p.ID = pm.post_id
WHERE p.ID IS NULL;

-- Șterge transients expirate
DELETE FROM wp_options 
WHERE option_name LIKE '_transient_%';

-- Optimizează tabele
OPTIMIZE TABLE wp_posts;
OPTIMIZE TABLE wp_postmeta;
OPTIMIZE TABLE wp_options;

Sau folosește plugin WP-Optimize pentru curățare automată săptămânală.

Optimizări tehnice avansate

Pentru site-uri care au implementat deja optimizările de bază și vor să ajungă la performanță maximă.

HTTP/2 și HTTP/3 pentru performanță maximă

HTTP/2 = Multiplexing (multiple request-uri pe aceeași conexiune), server push, header compression.

HTTP/3 = Bazat pe QUIC, și mai rapid, mai stabil pe conexiuni mobile.

Verificare dacă serverul suportă HTTP/2:

curl -I --http2 https://site-tau.com
# Caută "HTTP/2" în răspuns

Activare HTTP/2 pe server (necesită HTTPS):

# Apache 2.4.17+ cu mod_http2
LoadModule http2_module modules/mod_http2.so
Protocols h2 h2c http/1.1

# Nginx
listen 443 ssl http2;

Cloudflare activează automat HTTP/2 și HTTP/3 – un motiv mare să-l folosești.

Preload, prefetch și preconnect strategic

Resource hints spun browser-ului să înceapă să descarce resurse înainte ca acestea să fie explicit cerute în HTML.

1. Preload pentru resurse critice

<!-- Preload font critic -->
<link rel="preload" href="/fonts/main.woff2" as="font" 
      type="font/woff2" crossorigin>

<!-- Preload imagine LCP -->
<link rel="preload" href="/hero.webp" as="image">

<!-- Preload CSS critic -->
<link rel="preload" href="/critical.css" as="style">

ATENȚIE: Nu preload mai mult de 3-4 resurse – altfel întârzii alte resurse importante.

2. Prefetch pentru navigare viitoare

<!-- Prefetch pagină pe care utilizatorul probabil o va vizita -->
<link rel="prefetch" href="/produse/pantofi/">

<!-- Ideal pentru: -->
<!-- - Următoarea pagină în pagination -->
<!-- - Categorii populare -->
<!-- - Link-uri în above-the-fold content -->

3. Preconnect pentru domenii externe

<!-- Stabilește conexiune early cu Google Fonts -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>

<!-- Pentru analytics, ads, CDN-uri -->
<link rel="preconnect" href="https://www.google-analytics.com">

4. DNS-prefetch (fallback pentru browsere vechi)

<link rel="dns-prefetch" href="//cdn.example.com">

Critical CSS și above-the-fold optimization

Critical CSS = CSS-ul minim necesar pentru a renda above-the-fold content (primii 600-800px vizibili).

Proces:

1. Generează critical CSS

# Folosind Critical
npm install -g critical

critical https://site-tau.com --inline > output.html

# Sau folosind tool online:
# https://jonassebastianohlsson.com/criticalpathcssgenerator/

2. Inline în <head>

<head>
  <style>
    /* Critical CSS inline (2-15KB de obicei) */    .hero { ... }
    .nav { ... }
    /* etc */  </style>
  
  <!-- CSS complet încărcat asincron -->
  <link rel="preload" href="/style.css" as="style" 
        onload="this.onload=null;this.rel='stylesheet'">
  <noscript><link rel="stylesheet" href="/style.css"></noscript>
</head>

Pentru WordPress: WP Rocket Pro generează automat critical CSS.

Service Workers pentru caching inteligent

Service Workers permit caching sofisticat și offline functionality.

Exemplu simplu de Service Worker pentru cache static assets:

// sw.js
const CACHE_NAME = 'v1';
const urlsToCache = [
  '/',
  '/style.css',
  '/script.js',
  '/logo.png'
];

self.addEventListener('install', event => {
  event.waitUntil(
    caches.open(CACHE_NAME)
      .then(cache => cache.addAll(urlsToCache))
  );
});

self.addEventListener('fetch', event => {
  event.respondWith(
    caches.match(event.request)
      .then(response => {
        // Return cached version or fetch new
        return response || fetch(event.request);
      })
  );
});

// Înregistrare în main.js
if ('serviceWorker' in navigator) {
  navigator.serviceWorker.register('/sw.js');
}

Pentru aplicații complexe, folosește Workbox:

import {precacheAndRoute} from 'workbox-precaching';
import {registerRoute} from 'workbox-routing';
import {CacheFirst, NetworkFirst} from 'workbox-strategies';

// Precache assets generate de build
precacheAndRoute(self.__WB_MANIFEST);

// Cache images cu CacheFirst strategy
registerRoute(
  ({request}) => request.destination === 'image',
  new CacheFirst({cacheName: 'images'})
);

// Cache API responses cu NetworkFirst
registerRoute(
  ({url}) => url.pathname.startsWith('/api/'),
  new NetworkFirst({cacheName: 'api'})
);

Monitorizare continuă și alerting

Optimizarea Core Web Vitals nu este „set and forget” – necesită monitoring constant pentru a detecta degradări rapid.

Setup recomandat de monitoring:

1. Google Search Console

  • Verifică săptămânal Core Web Vitals report
  • Setează alerting în GSC pentru probleme noi

2. Real User Monitoring cu web-vitals

import {onCLS, onINP, onLCP} from 'web-vitals';

function sendToAnalytics(metric) {
  const body = JSON.stringify({
    name: metric.name,
    value: metric.value,
    rating: metric.rating,
    url: window.location.href,
    timestamp: Date.now()
  });
  
  // Trimite către endpoint propriu sau GA4
  fetch('/analytics/vitals', {
    method: 'POST',
    body,
    keepalive: true
  });
}

onCLS(sendToAnalytics);
onINP(sendToAnalytics);
onLCP(sendToAnalytics);

3. Alerting când metrici se degradează

// În backend, procesează vitals și alertează dacă median > threshold
if (metrics.LCP.median > 2500) {
  sendSlackAlert('LCP s-a degradat la ' + metrics.LCP.median + 'ms');
}

4. Lighthouse CI pentru regression testing

# .github/workflows/lighthouse-ci.yml
name: Lighthouse CI
on: [pull_request]

jobs:
  lighthouse:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: treosh/lighthouse-ci-action@v9
        with:
          urls: |
            https://staging.site-tau.com
            https://staging.site-tau.com/products
          uploadArtifacts: true

Fail build dacă Core Web Vitals scad sub threshold.

Cazuri de studiu: Îmbunătățiri reale de Core Web Vitals

Caz de studiu 1: E-commerce fashion

Context:

  • Site WooCommerce cu 2.300 produse
  • Tema Astra + Elementor
  • Trafic: 25.000 vizitatori/lună organic
  • Probleme: LCP 4.2s, INP 380ms, CLS 0.22

Optimizări implementate:

Săptămâna 1: Quick wins

  1. Activat WP Rocket cu setări aggressive
  2. Optimizat și convertit imagini la WebP (de la 300KB → 45KB average)
  3. Preload font-uri și imagine hero
  4. Lazy load pentru produse sub fold

Rezultat săptămâna 1:

  • LCP: 4.2s → 2.8s
  • INP: 380ms → 220ms
  • CLS: 0.22 → 0.12

Săptămâna 2-3: Optimizări JavaScript

  1. Dezactivat Elementor pe homepage (trecut la GenerateBlocks)
  2. Delay loading pentru Facebook Pixel și GA4
  3. Implementat debouncing pentru search autocomplete
  4. Mutat calculări grele în Web Worker (price calculator)

Rezultat săptămâna 3:

  • LCP: 2.8s → 2.1s
  • INP: 220ms → 140ms
  • CLS: 0.12 → 0.08

Săptămâna 4: Polish final

  1. Critical CSS generat și inline
  2. Preconnect la CDN-uri externe
  3. Aspect-ratio pe toate imaginile produse
  4. Eliminat jQuery (WooCommerce modern nu necesită)

Rezultat final:

  • LCP: 1.8s (Good)
  • INP: 130ms (Good)
  • CLS: 0.04 (Good)

Impact business:

  • Trafic organic: +34% în 3 luni
  • Conversion rate: +18%
  • Bounce rate: -22%
  • 12 keyword-uri noi în Top 3

Cost total optimizare: 12 ore muncă + €98 licensing (WP Rocket + Imagify) = ~€1.500

ROI: Creștere venit estimată €5.200/lună față de cost one-time €1.500.

Caz de studiu 2: Portal de știri

Context:

  • WordPress cu 15.000+ articole
  • Ads intensive (Google AdSense + direct ads)
  • Trafic: 180.000 vizitatori/lună
  • Probleme: LCP 5.8s, INP 620ms, CLS 0.41 (foarte problematic)

Provocări specifice:

  • Ads cauzau CLS masiv (încărcări asincrone fără rezervare spațiu)
  • INP slab din cauza infinite scroll complex
  • LCP slab din cauza server response time ridicat (shared hosting)

Optimizări implementate:

Luna 1: Infrastructure

  1. Migrat de la shared hosting la VPS (DigitalOcean)
  2. Implementat Cloudflare Pro pentru CDN + caching
  3. Optimizat bază de date (șterse 2.4GB de revisions și spam)
  4. Activat Redis object caching

Rezultat luna 1:

  • LCP: 5.8s → 3.2s
  • Server response time: 1.8s → 0.3s

Luna 2: Ads optimization

  1. Rezervat spațiu fix pentru toate slot-urile de ads
  2. Implementat lazy loading pentru ads sub fold
  3. Limitat numărul de ads per pagină (de la 8 la 5)
  4. Folosit size-mapping pentru ads responsive

Rezultat luna 2:

  • CLS: 0.41 → 0.14

Luna 3: JavaScript optimization

  1. Rescris infinite scroll cu Intersection Observer (mult mai eficient)
  2. Implementat virtualizare pentru liste lungi de articole
  3. Debouncing pentru all scroll handlers
  4. Eliminat jQuery (folosit vanilla JS)

Rezultat final:

  • LCP: 2.4s (Good)
  • INP: 195ms (Good)
  • CLS: 0.09 (Good)

Impact:

  • Trafic organic: +28% în 6 luni
  • Page views per session: +31% (oamenii citesc mai multe articole când site e rapid)
  • Ad revenue: +22% (mai multe page views = mai multe impressions)

Lecția cheie: Pentru site-uri cu ads, CLS este adesea cea mai problematică metrică, dar și cea cu cel mai mare impact asupra UX când este rezolvată.

Erori comune în optimizarea Core Web Vitals

Din experiența mea cu zeci de clienți, iată greșelile pe care le văd cel mai des:

1. Optimizare doar pentru PageSpeed score, nu pentru field data

Multi se fixează pe scorul 100/100 în PageSpeed Insights (lab data) ignorând că Search Console (field data) încă raportează Poor.

Soluție: Prioritizează field data. Optimizează pentru utilizatorii reali, nu pentru testul Lighthouse.

2. Over-optimization care afectează funcționalitatea

Am văzut site-uri care lazy-load tot, inclusiv CTA buttons above-the-fold, pentru a avea score perfect.

Soluție: Balansează performanță cu UX. Nu lazy-load nimic în above-the-fold. Nu elimina funcționalități esențiale.

3. Preload excesiv

Preload pentru 10+ resurse nu ajută – creează un nou bottleneck.

Soluție: Preload doar 2-3 resurse critice (LCP image, font principal, critical CSS).

4. Ignorarea variantelor mobile

Optimizează doar desktop, dar Google indexează mobile-first.

Soluție: Testează și optimizează mobile PRIMUL. Desktop după.

5. Nu monitorizează regressions

Lansează optimizări, scorurile cresc, apoi nu mai verifică – gradual performanța se degradează.

Soluție: Implementează monitoring continuu cu alerting automat.

6. Folosește prea multe plugin-uri de optimizare

WP Rocket + Autoptimize + W3 Total Cache + Perfmatters toate simultan = conflicte și performanță mai slabă.

Soluție: Alege UN plugin comprehensiv (WP Rocket) și câteva complementare specifice.

7. Compression fără versioning

Agresiv minify și combine CSS/JS fără cache busting → utilizatorii primesc versiuni vechi cached.

Soluție: Implementează versioning în URL-uri (style.css?v=1.2.3) sau hash-uri (style.abc123.css).

Concluzie: Core Web Vitals ca avantaj competitiv

În 2026, Core Web Vitals nu mai sunt opționale – sunt necesitate de bază pentru orice site serios care vrea să competițe în căutarea Google.

Principii cheie de reținut:

  1. Field data > Lab data – Optimizează pentru utilizatori reali, nu pentru teste simulate
  2. Mobil first – Google indexează predominant mobile, optimizează prioritar pentru telefoane
  3. Toate trei metrici contează – Nu ignora CLS pentru a optimiza doar LCP
  4. Monitoring continuu – Performanța se degradează în timp fără vigilență
  5. UX before scores – Un scor perfect fără funcționalitate e inutil

Quick wins pentru începători (implemen tează astăzi):

✅ Adaugă width și height la toate imaginile
✅ Activează un plugin de caching (WP Rocket recomandat)
✅ Convertește imagini la WebP
✅ Preload imaginea LCP
✅ Defer JavaScript non-critic
✅ Adaugă aspect-ratio la toate media embeds

Next steps pentru avansați:

✅ Implementează RUM cu web-vitals library
✅ Critical CSS inline
✅ Service Worker pentru caching avansat
✅ Web Workers pentru task-uri grele
✅ HTTP/3 și CDN global
✅ Lighthouse CI pentru regression testing

ROI-ul optimizării Core Web Vitals:

Pe baza cazurilor mele reale din ultimii 3 ani:

  • Investment: €1.000-5.000 (funcție de complexitate)
  • Timp: 2-8 săptămâni
  • Return: +20-40% trafic organic în 3-6 luni
  • Conversion rate: +15-25% îmbunătățire

Pentru un site care generează €10.000/lună din organic, optimizarea Core Web Vitals poate aduce €2.000-4.000/lună venit suplimentar.

Dacă vrei ajutor profesional cu optimizarea Core Web Vitals pentru site-ul tău, echipa SEOGO oferă servicii complete de audit și implementare. Cu experiență în optimizare SEO și performanță web, garantăm rezultate măsurabile.

Întrebări frecvente despre Core Web Vitals

Ce sunt Core Web Vitals și de ce sunt importante?

Core Web Vitals sunt un set de metrici standardizate create de Google pentru a măsura experiența reală a utilizatorilor pe web. În 2026, acestea sunt compuse din trei metrici principale:

LCP (Largest Contentful Paint) – măsoară cât de repede se încarcă conținutul principal vizibil al paginii.

INP (Interaction to Next Paint) – măsoară cât de responsive este pagina la toate interacțiunile utilizatorului.

CLS (Cumulative Layout Shift) – măsoară stabilitatea vizuală a paginii în timpul încărcării.

Sunt importante pentru că influențează direct clasamentele în Google (factor oficial de ranking din 2021), rata de conversie (site-urile rapide convertesc cu 20-40% mai bine) și experiența utilizatorului (bounce rate scade semnificativ pe site-uri cu Core Web Vitals bune).

Google folosește aceste metrici pentru a evalua „Page Experience” și a decide care site-uri merită poziții mai bune când conținutul și autoritatea sunt comparabile.

Care este diferența dintre FID și INP?

FID (First Input Delay) era metrica veche care măsura doar PRIMA interacțiune a utilizatorului cu pagina – de exemplu, primul click pe un buton după încărcare. Problema: majoritatea utilizatorilor interacționează de multiple ori cu o pagină, și FID ignora complet responsiveness-ul pentru toate celelalte interacțiuni.

INP (Interaction to Next Paint) este metrica nouă (din martie 2024) care este mult mai comprehensivă – măsoară TOATE interacțiunile utilizatorului cu pagina (clicks, taps, key presses), ia în considerare delay-ul pentru fiecare interacțiune și raportează percentila 98 (aproape cea mai lentă interacțiune din sesiune).

Exemplu practic: Un site poate avea FID de 50ms (excelent – primul click răspunde repede), dar INP de 600ms (Poor – clickuri ulterioare sunt foarte lente). FID ascundea problema, INP o face vizibilă.

Schimbarea la INP a forțat o reconceptualizare completă a modului în care optimizăm JavaScript și gestionăm interacțiunile.

Ce scoruri Core Web Vitals sunt considerate bune?

Google clasifică scorurile în trei categorii: Good (verde), Needs Improvement (galben) și Poor (roșu). Pentru 2026, standardele sunt:

LCP (Largest Contentful Paint):

  • Good: ≤ 2.5 secunde
  • Needs Improvement: 2.5 – 4.0 secunde
  • Poor: > 4.0 secunde

INP (Interaction to Next Paint):

  • Good: ≤ 200 milisecunde
  • Needs Improvement: 200 – 500 milisecunde
  • Poor: > 500 milisecunde

CLS (Cumulative Layout Shift):

  • Good: ≤ 0.1
  • Needs Improvement: 0.1 – 0.25
  • Poor: > 0.25

IMPORTANT: Pentru ca Google Search Console să clasifice un URL ca „Good”, trebuie ca 75% din vizitele reale (field data) să întrunească standardul „Good” pentru TOATE TREI metricile simultan. Un singur scor Poor face întregul URL să fie clasificat Poor.

Target ideal în practică: LCP sub 2.0s, INP sub 150ms, CLS sub 0.05 pentru a avea marjă de siguranță.

Cât de mult contează Core Web Vitals pentru ranking în Google?

Core Web Vitals sunt un factor oficial de ranking din 2021, parte din „Page Experience signals”. Impactul lor este nuanțat – nu este un simplu „bun = Top 1, slab = pagina 10”, dar influența este reală și măsurabilă.

Ce spune Google oficial: Page Experience este un „tie-breaker” – când două pagini au conținut similar de relevant și autoritate similară, cea cu Core Web Vitals mai buni va câștiga poziția mai bună.

Ce am observat în practică: Site-urile cu conținut excelent dar Core Web Vitals slabe pot rămâne în Top 10, dar rareori ajung în Top 3. Când concurenții optimizează performanța, pierd poziții. Site-urile cu conținut decent și Core Web Vitals excelente au șanse crescute să se claseze peste concurenți cu conținut similar.

Impact indirect (adesea mai important): Core Web Vitals bune duc la bounce rate scăzut, dwell time crescut, CTR îmbunătățit și mai mult social sharing – toate aceste semnale comportamentale influențează ranking-ul chiar dacă nu sunt factori „oficiali”.

Din cazurile mele reale, îmbunătățirea Core Web Vitals de la Poor la Good a dus consistent la creșteri de 20-40% în trafic organic în 3-6 luni.

Cum măsor Core Web Vitals pentru site-ul meu?

Există două tipuri fundamentale de măsurători: Lab Data (simulări în condiții controlate) și Field Data (utilizatori reali).

Pentru diagnostic rapid (Lab Data):

  1. Google PageSpeed Insights – https://pagespeed.web.dev/ – Introdu URL-ul și primești scoruri instant + recomandări specifice
  2. Chrome DevTools – F12 în Chrome → Lighthouse tab → Generate report
  3. WebPageTest.org – Pentru testare din locații geografice diferite

Pentru date reale care contează pentru Google (Field Data):

  1. Google Search Console – Experience → Core Web Vitals – Vezi exact cum Google evaluează site-ul tău bazat pe utilizatori reali Chrome
  2. Chrome User Experience Report (CrUX) – Date agregate public disponibile la https://g.co/chromeuxdash

Pentru monitoring continuu (Recomandat): Implementează măsurători în site folosind web-vitals library de la Google și trimite datele către Google Analytics sau sistem propriu de monitoring.

Workflow recomandat: Verifică field data în Search Console pentru a vedea problema reală → Folosește lab data (PageSpeed Insights) pentru debugging și testare iterativă → Implementează fix-uri → Monitorizează field data pentru validare.

De ce scorurile din PageSpeed Insights diferă de cele din Search Console?

Această discrepanță confuză mulți utilizatori, dar există explicații clare:

PageSpeed Insights arată două tipuri de date:

  1. Field Data (sus, cu iconița globului) – Date reale de la utilizatorii tăi Chrome în ultimele 28 zile (sursa: Chrome User Experience Report). ACESTEA contează pentru Google.
  2. Lab Data (jos, cu iconița Lighthouse) – Simulare într-un mediu controlat (conexiune 4G simulată, device mid-tier). Utile pentru debugging, DAR nu reflectă experiența reală.

Search Console arată doar Field Data – exact ce Google folosește pentru evaluare.

De ce pot diferi:

  • Lab data testează în condiții ideale controlate
  • Field data include toate dispozitivele utilizatorilor tăi (3G, WiFi lent, device-uri slabe)
  • Lab data testează de obicei homepage-ul
  • Field data agregă toate paginile site-ului cu trafic suficient
  • Lab data este instant, field data are întârziere de până la 28 zile

Ce să prioritizezi: Întotdeauna field data. Un scor lab de 100/100 nu înseamnă nimic dacă Search Console raportează Poor pe field data reală.

Pot avea Core Web Vitals buni pe desktop dar slabi pe mobil?

Da, absolut – și aceasta este situația cea mai comună pe care o văd. Majoritatea site-urilor performează semnificativ mai slab pe mobil decât pe desktop din cauza:

1. Conexiuni mai lente – Mobile folosește adesea 3G/4G cu latență mai mare decât WiFi/cablu 2. Device-uri mai slabe – CPU și GPU mobile sunt mult mai puțin puternice 3. Baterii – Browser-ele limitează performanța când bateria e scăzută 4. Screen size – Imagini mari sunt mai problematice pe ecrane mici

De ce contează mai mult mobile: Google folosește Mobile-First Indexing – indexează și evaluează predominant versiunea mobilă a site-ului tău, chiar dacă majoritatea traficului vine de pe desktop.

Verificare: În PageSpeed Insights și Search Console, verifică separat scorurile Mobile vs Desktop. În Search Console, secțiunea Mobile este cea mai importantă pentru ranking.

Soluție: Întotdeauna optimizează MOBIL PRIMUL. Responsive images cu srcset, lazy loading agresiv pentru mobil, JavaScript mai puțin complex pentru dispozitive slabe.

Cât timp durează să văd îmbunătățiri în ranking după optimizarea Core Web Vitals?

Timeline-ul este în mai multe faze:

Primele 24-48 ore: Google poate începe să recrawleze paginile modificate

Săptămâna 1-4: Field data începe să se actualizeze în Chrome User Experience Report (CrUX), dar cu întârziere de până la 28 zile

Luna 2-3: Google Search Console începe să reflecte îmbunătățirile în raportul Core Web Vitals – URL-uri încep să migreze din „Poor” în „Good”

Luna 3-6: Îmbunătățiri vizibile în clasamente organice, mai ales pentru keyword-uri unde competiția este strânsă și conținutul este comparabil

Important de înțeles: Google are nevoie de volum suficient de date field pentru a evalua un URL. Pentru pagini cu trafic scăzut (<50 vizite/lună), CrUX nu va avea suficiente date și pagina nu va apărea în rapoarte.

Din experiența mea, pentru site-uri cu trafic decent (>1000 vizite/lună), văd de obicei: îmbunătățiri în Search Console după 4-6 săptămâni, primele îmbunătățiri de ranking după 6-8 săptămâni și impact complet după 3-4 luni.

Accelerare: Poți accelera procesul prin request de re-crawlare în Search Console pentru paginile prioritare și creșterea traficului (pentru a acumula mai repede field data).

Trebuie să optimizez toate paginile sau doar homepage-ul?

Trebuie să optimizezi TOATE paginile care primesc trafic organic semnificativ, nu doar homepage-ul. Iată de ce:

Google evaluează per-URL: Fiecare pagină este evaluată individual pentru Core Web Vitals. Homepage-ul poate avea scoruri perfecte, dar dacă paginile de produs sau articolele de blog au scoruri slabe, acestea vor fi penalizate individual.

Traffic distribution: Pentru majoritatea site-urilor, homepage-ul reprezintă doar 10-30% din traficul organic total. Restul vine pe pagini interne (produse, articole, categorii).

Search Console raportare: În raportul Core Web Vitals din Search Console, vezi exact care grupuri de URL-uri au probleme. Adesea homepage-ul e OK, dar categoriile sau paginile de produs sunt Poor.

Prioritizare recomandată:

  1. Primele 20% pagini generatoare de trafic – Identifică în Analytics top 50-100 landing pages organice și optimizează prioritar acestea
  2. Template-uri – Dacă optimizezi template-ul de produs, toate cele 1000 de produse beneficiază
  3. Pagini cu probleme critice – Search Console îți arată exact care URL-uri sunt Poor

Soluția practică: Pentru site-uri mici (<100 pagini), optimizează tot. Pentru site-uri mari (>1000 pagini), concentrează-te pe top 20% generatori de trafic + fix-uri la nivel de template pentru impact maxim cu efort minim.

Ce fac dacă am Core Web Vitals buni dar site-ul încă se simte lent?

Situație interesantă care arată limitările Core Web Vitals – acestea măsoară aspecte specifice ale performanței, dar nu TOATĂ experiența.

Posibile cauze:

1. Metrici care nu sunt parte din Core Web Vitals:

  • TTFB (Time to First Byte) – Server lent poate face site-ul să pară lent chiar dacă LCP e OK
  • FCP (First Contentful Paint) – Utilizatorii văd ecran alb mult timp chiar dacă LCP final e bun
  • TBT (Total Blocking Time) – Main thread blocat face UI-ul să pară lent

2. Probleme de UX non-măsurate:

  • Animații jerky (frame rate scăzut)
  • Scroll performance slab
  • Hover effects cu lag
  • Tranziții între pagini lente (SPA)

3. Discrepanță lab vs field:

  • Core Web Vitals din Search Console sunt agregate peste 28 zile
  • Poate site-ul s-a degradat recent dar field data nu reflectă încă
  • Sau testezi pe device mai slab decât media utilizatorilor

Soluții:

Testează metrici suplimentare:

- TTFB: Target <200ms
- FCP: Target <1.8s
- Speed Index: Target <3.4s
- TBT: Target <200ms

Profiling în Chrome DevTools:

  1. F12 → Performance tab
  2. Record session în timp ce interacționezi cu site-ul
  3. Identifică frame drops (sub 60fps)
  4. Găsește long tasks care blochează UI

Implementează Real User Monitoring (RUM) pentru metrici custom care reflectă experiența ta specifică de business (ex: timp până când formularul devine interactive, timp până când search returnează rezultate).


Articol creat de echipa SEOGO – Experți în optimizare SEO și performanță web

www.seogo.ro | contact@seogo.ro | 0754 308 781

Dacă vrei ajutor profesional cu optimizarea Core Web Vitals pentru site-ul tău, contactează-ne pentru un audit gratuit și ofertă personalizată.

Bună! Sunt Dorel Tănase, consultant SEO și web designer cu peste 18 ani de experiență în transformarea prezențelor online și marketing digital.

Călătoria mea în lumea digitală a început în 1997, când am lansat cisnet.ro - unul dintre primele website-uri din România - un domeniu care este activ și astăzi, după aproape trei decenii.

SEO pentru YouTube: cum să clasezi video-uri pe primele poziții

SEO pentru YouTube: cum să clasezi video-uri pe primele poziții

SEO pentru YouTube: cum să clasezi video-uri pe primele poziții. YouTube este al doilea motor de căutare ca mărime după Google,…

Optimizare SEO pentru magazine online

Optimizare SEO pentru magazine online

Optimizare SEO pentru magazine online - strategii practice pentru WooCommerce și Shopify. Dacă administrați un magazin online pe WooCommerce sau…

Comentarii (0)

Lăsați un comentariu

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

Înapoi sus
[aipkit_chatbot id=813]