Kai robotas beldžiasi į dinaminių durų
Yra kažkas iš esmės paradoksalaus tame, kaip šiuolaikiniai naujienų portalai veikia: jie sukurti tam, kad informacija pasklitų kuo greičiau, tačiau technologinis jų pagrindas — vieno puslapio aplikacijos, arba SPA — dažnai veikia kaip savotiška užtvara tarp turinio ir tų, kurie tą turinį turėtų rasti. „Google News” robotas nėra kantrybės pavyzdys. Jis ateina, pamato tuščią HTML korpusą, JavaScript failų krūvą ir… eina toliau.
Problema ne nauja, bet naujienų kontekste ji ypač skausminga. Straipsnis apie rytinį įvykį, kuris nepateks į indeksą per kelias valandas, jau yra prarastas straipsnis. Naujienų ciklas nelaukia.
Server-side rendering — ne mada, o būtinybė
Pirmasis ir svarbiausias žingsnis — perkelti dalį darbo iš naršyklės į serverį. SSR, arba serverio pusės atvaizdavimas, reiškia, kad kai „Googlebot” pasibeldžia į jūsų URL, jis gauna jau užpildytą HTML, o ne tuščią šabloną, laukiantį JavaScript vykdymo.
Next.js, Nuxt ar SvelteKit — tai ne tik madingos priemonės, o praktiškas atsakas į konkretų klausimą: kaip užtikrinti, kad kiekvienas naujas straipsnis būtų matomas iš karto. getServerSideProps arba analogiški mechanizmai leidžia kiekvieną puslapį generuoti dinamiškai, su aktualia turinio versija, kiekvieną kartą kai robotas ar žmogus jo paprašo.
Tačiau SSR turi savo kainą — serverio apkrova auga. Todėl naujienų portalams verta apsvarstyti hibridinį modelį: naujausi straipsniai — per SSR, archyviniai — per ISR (inkrementinį statinį regeneravimą), kur puslapis atnaujinamas kas kelias minutes ar valandas pagal poreikį.
Struktūrizuoti duomenys — kalba, kurią „Google” myli
Vien teisingai atvaizduotas HTML dar negarantuoja, kad „Google News” supras, jog tai naujienų straipsnis, o ne bet koks tekstas internete. Čia į sceną žengia schema.org žymėjimas — specifiškai NewsArticle tipas.
Kiekviename straipsnio puslapyje turėtų būti JSON-LD blokas su tiksliai užpildytais laukais:
{
"@context": "https://schema.org",
"@type": "NewsArticle",
"headline": "Straipsnio antraštė",
"datePublished": "2025-01-15T08:00:00+02:00",
"dateModified": "2025-01-15T09:30:00+02:00",
"author": {
"@type": "Person",
"name": "Vardas Pavardenis"
},
"publisher": {
"@type": "Organization",
"name": "Leidinio pavadinimas",
"logo": {
"@type": "ImageObject",
"url": "https://example.com/logo.png"
}
},
"image": "https://example.com/straipsnio-nuotrauka.jpg"
}
datePublished laukas yra kritinis — jis turi atitikti tikrąjį publikavimo laiką, ne puslapio generavimo ar kešavimo momentą. „Google News” labai jautrus chronologijai, ir netikslūs laikai gali nustumti straipsnį į antrą planą arba visai išbraukti iš aktualijų srauto.
Sitemap kaip šauklys
Laukti, kol „Googlebot” pats suras naują straipsnį, naujienų portalo kontekste — prabanga, kurios negali sau leisti. Naujienų sitemap (Google News Sitemap) yra aktyvus signalas: „čia, dabar, šis turinys egzistuoja.”
Naujienų sitemap skiriasi nuo įprasto — jame turėtų būti tik paskutinių 48 valandų straipsniai, ne visas archyvas. Formatas reikalauja <news:news> elemento su publikavimo data ir kalba:
<url>
<loc>https://example.com/straipsnis-apie-ivyki</loc>
<news:news>
<news:publication>
<news:name>Leidinio pavadinimas</news:name>
<news:language>lt</news:language>
</news:publication>
<news:publication_date>2025-01-15T08:00:00+02:00</news:publication_date>
<news:title>Straipsnio antraštė</news:title>
</news:news>
</url>
SPA aplinkoje šis sitemap turi būti generuojamas dinamiškai — kiekvieną kartą, kai publikuojamas naujas straipsnis, failas atsinaujina. Tai galima pasiekti per webhook’us, kurie paleidžia sitemap regeneravimą kiekvieno publikavimo metu.
URL struktūra ir navigacija be JavaScript
SPA dažnai naudoja hash-based maršrutizavimą — URL’ai atrodo kaip example.com/#/straipsnis/123. „Google” tokius URL’us indeksuoja nenoriai ir nepatikimai. Naujienų portale kiekvienas straipsnis privalo turėti tikrą, valų URL be grotelių: example.com/kategorija/straipsnio-pavadinimas.
HTML5 History API (pushState) yra teisingas kelias — jis leidžia SPA veikti sklandžiai vartotojui, tačiau kiekvienam URL atitinka realus serverio maršrutas, kurį gali pasiekti ir robotas. Kartu su SSR tai sudaro pilną paveikslą: robotas gauna teisingą URL, teisingą HTML, teisingus metaduomenis.
Greitis — ne tik vartotojo patirties reikalas
„Google News” indeksavimas yra susijęs ir su puslapio greičiu. Core Web Vitals — LCP, CLS, INP — nėra abstrakčios metrikos. Lėtai užsikraunantis straipsnio puslapis reiškia, kad robotas gali palikti jį neapdorotą arba sumažinti jo prioritetą.
SPA kontekste ypač svarbu: kritinis CSS turi būti įkeltas iš karto, o JavaScript — atidėtas arba padalintas į mažesnius gabalus (code splitting). Straipsnio tekstas neturėtų priklausyti nuo didelių JavaScript paketų įkėlimo — jis turi būti matomas iš karto, SSR dėka.
Kai viskas susideda į vieną paveikslą
Naujienų SPA konfigūravimas „Google News” indeksavimui — tai ne vienas nustatymas ir ne vienas failas. Tai architektūrinių sprendimų grandinė, kurioje kiekviena grandis turi laikytis. SSR užtikrina, kad turinys egzistuoja prieš JavaScript vykdymą. Struktūrizuoti duomenys paaiškina, kas tas turinys yra. Dinaminis sitemap šaukia robotą laiku. Teisingi URL’ai leidžia visam tam veikti nuosekliai. O greitis garantuoja, kad robotas nepaliks puslapio pusiaukelėje.
Naujienų portalas, kuris tai supranta, ne tik geriau indeksuojamas — jis iš esmės kitaip galvoja apie savo turinį: ne kaip apie puslapius, kuriuos mato žmonės, bet kaip apie signalus, kuriuos turi suprasti ir mašinos. Ir kai tas supratimas ateina, straipsniai pradeda pasirodyti ten, kur jiems vieta — laiku, teisingai, be vėlavimo.