Renderizare JS: cum te asiguri că Google citește

Tech · JS & SEO

Renderizare JS: cum te asiguri că Google citește

Framework-urile moderne sunt rapide pentru utilizatori, dar nu mereu clare pentru Google. Mai jos ai un ghid practic de seo javascript rendering: când e suficient CSR, când ai nevoie de SSR/ISR și cum eviți blocaje de crawl.

renderizare JavaScript SSR/ISR blocaje de crawl
Pe scurt: dacă „Vezi sursa” (view-source) arată conținutul tău cheie în HTML, ești pe drumul bun. Dacă vezi doar „skeleton”, treci la SSR (server trimite HTML complet) sau ISR (pagini pre-generate). Nu bloca JS/CSS în robots.txt, folosește <link rel="canonical"> corect și verifică totul cu Inspectare URL în Search Console. Pentru o verificare cap-coadă: audit tehnic SEO.

Două etape pe scurt

  • Crawl: ia HTML-ul inițial + resursele (JS/CSS/imagini).
  • Render: rulează JS și reconstruiește pagina pentru a „vedea” conținutul final.

Dacă HTML-ul inițial e gol, iar JS e greu sau blocat, Google poate rata conținut.

Tipuri de randare (pe înțeles)

  • CSR (doar client): serverul trimite un schelet, JS construiește conținutul.
  • SSR (server): serverul trimite HTML-ul gata „de citit”.
  • ISR (static re-generat): pagini pre-generate și reîmprospătate periodic.
Regulă simplă: paginile care trebuie să rankeze (landing-uri, blog, categorii) → SSR/ISR.

Semne că CSR nu ajunge

  • „view-source” nu conține textul principal/produsele
  • titlul/meta se setează doar din JS
  • conținutul apare la 3–5 secunde după încărcare

SSR/ISR aduce

  • HTML complet la primul răspuns
  • titlu & descriere livrate în HTML (nu doar din JS)
  • mai puține „retry-uri” la randare, indexare mai previzibilă

Check rapid în 3 pași (10 minute)

1) View-source

Deschide pagina → Click dreapta → „Vezi sursa”. Caută text unic din pagină.

Dacă lipsește, probabil ai nevoie de SSR/ISR sau pre-render.

2) Inspectare URL

În Search Console: „Testare URL live” → vezi HTML-ul randat și resursele blocate/erori.

3) Simulează Googlebot

curl -A "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" -I https://exemplu.ro/

Verifică 200 OK, cache-control, link rel="canonical".

Blocaje de crawl frecvente

  • robots.txt blochează /static/, /_next/, /assets/
  • erori CORS/CSP pe fișiere JS/CSS pentru Googlebot
  • router bazat pe # (hash) fără URLs reale
  • infinite scroll fără linkuri „Următoarea pagină”

Meta & head „capcane”

  • <meta name="robots" content="noindex"> injectat din JS accidental
  • canonical către altă limbă/varianta filtrată
  • redirect-uri client-side care „ascund” HTML-ul

Patron simplu pentru pagini care rankează

  • Servește HTML cu conținut (SSR/ISR) + hidratează componentele pe client.
  • Baza de navigație: linkuri reale <a href>, nu doar handlers JS.
  • Liste paginate: oferă linkuri către pag. 2, 3… (fallback la infinite scroll).

Optimizări de bun-simț

  • preload pentru fonturi critice și CSS principal
  • defer pentru JS non-critic, loading="lazy" la imagini
  • dimensiuni declarate pentru imagini (stabilitate)

Head minimal „SEO-safe”

<!doctype html>
<html lang="ro">
<head>
  <meta charset="utf-8">
  <title>Titlu clar al paginii</title>
  <meta name="description" content="Descriere scurtă și utilă.">
  <link rel="canonical" href="https://exemplu.ro/pagina/">
  <link rel="preload" href="/assets/styles.css" as="style">
  <link rel="stylesheet" href="/assets/styles.css">
  <script defer src="/assets/app.js"></script>
</head>

robots.txt — nu bloca resursele

User-agent: *
Disallow: /admin/
Allow: /assets/
Allow: /_next/
Sitemap: https://exemplu.ro/sitemap.xml

Verifică să nu blochezi folderele cu JS/CSS/imagini necesare randării.

Diagnoză rapidă: simptom → cauză → remediu

SimptomCauză probabilăRemediu
„view-source” gol, dar Inspectare URL arată conținut CSR pur; render întârziat Mută paginile care rankează pe SSR/ISR; servește titlu/descriere în HTML
Resurse „Blocked by robots.txt” Foldere JS/CSS blocate Allow pentru /assets, /_next etc.; re-testează
Indexate URL-uri ciudate cu # Router cu hash Treci pe History API (URL-uri reale) + rute server
Canonical către altă pagină Setare globală greșită Canonical „self” pentru fiecare pagină
„Alternative page with proper canonical” în rapoarte Pagini SSR vs CSR dublate Unifică rutarea; păstrează o singură versiune accesibilă
Scroll infinit, doar 20 produse indexate Fără linkuri către pag. următoare Adaugă paginare cu linkuri HTML (fallback), vezi și articolul despre pagination

Întrebări frecvente

E obligatoriu SSR pentru toate paginile?

Nu. Țintește SSR/ISR pentru paginile care trebuie să rankeze (landing-uri, categorii, articole). Pentru pagini pur aplicaționale, CSR e suficient.

„Dynamic rendering” mai e o idee bună?

Nu recomandăm să servești versiuni diferite pentru boți vs. oameni. Alege SSR/ISR sau pre-render — soluții stabile și curate.

Meta title/description din JS sunt ok?

Mai sigur este să fie servite în HTML-ul inițial. Dacă depinzi de JS, pot apărea întârzieri sau inconsistențe.

Ce fac cu filtrele infinite pe categorii?

Permite linkuri către paginile următoare (pag. 2, 3…) și păstrează o versiune „URL curat” indexabilă. JS poate îmbunătăți UX, dar să nu ascundă navigația.

Vrei o verificare a randării JS pe site-ul tău? Facem verificare renderizare JavaScript, identificăm blocaje de crawl și propunem migrarea la SSR/ISR pentru paginile critice.

Variază ancorele către pagina de serviciu (anti-canibalizare): „audit tehnic SEO”, „verificare renderizare JavaScript”, „blocaje de crawl”.