StriveLab
Strony internetowe
Usługi
RealizacjeO mnieBlogPorozmawiajmy
PL
EN
StriveLab
Strony internetowe
Usługi
RealizacjeO mnieBlogPorozmawiajmy
PL
EN

Next.js

Elastyczne i wydajne narzędzia dla biznesu, które dotrzymają kroku Twojemu rozwojowi.

React

Połączenie intuicyjności z wydajnością, które zapewnia bezproblemową skalowalność kodu.

Astro

Ultraszybkie projekty, łączące lekkość ze skalowalnością.

Doradztwo produktowe

Połączenie perspektywy produktu, developera i marketingu w jednym miejscu

QA & Automation

Testy automatyczne komponentów i E2E w oparciu o Cypress.

SEO & Performance

Audyt techniczny i optymalizacja pod kątem SEO i GEO.

RealizacjeO mnieBlog
Porozmawiajmy
PL
EN

Nowoczesne strony internetowe dla firm, które myślą odważnie.

Przewiń do góry

Nazwa

StriveLab Maciej Sala

NIP

6772218995

REGON

524008527

E-mail

contact@strivelab.pl

Usługi główne
  • Tworzenie stron internetowych
  • Strony internetowe Next.js
  • Strony internetowe Astro
  • Strony internetowe React
Inne usługi
  • Usługi
  • SEO & Performance Sprint
  • QA & Stabilizacja
  • Konsultacje Product / Delivery
  • Aplikacje webowe Next.js
  • Współpraca ciągła
Strony
  • O mnie
  • Usługi
  • Realizacje
  • Blog

© 2026 StriveLab.pl

Polityka prywatności
AstroSEOCore Web Vitals

SEO w Astro — Core Web Vitals, dane uporządkowane i techniczny fundament rankingu w 2026

Jak zbudować stronę w Astro, która dominuje w SEO — Core Web Vitals, sitemap, robots.txt, metadane, dane uporządkowane i GEO/AEO. Przewodnik techniczny z konkretnymi implementacjami.

OpublikujLinkedInFacebookWyślij
Autor
Maciej Sala
Opublikowano
1 maja 2026 16:32
Czytanie
3 min czytania
Aktualizacja
30 kwietnia 2026 19:50

W skrócie

  • Astro daje mocny start SEO, bo domyślnie ogranicza JavaScript i renderuje treść jako HTML.
  • Najważniejsze techniczne obszary to LCP, CLS, INP, metadane, sitemap i dane uporządkowane.
  • FAQ i schema.org powinny wynikać z realnej treści, nie być sztucznym dodatkiem pod wyniki rozszerzone.
  • GEO/AEO wymaga jasnych odpowiedzi, definicji, tabel i semantycznych sekcji łatwych do zacytowania.

Astro ma reputację frameworka przyjaznego SEO i zasadniczo jest to uczciwa ocena. Architektura wysp oraz brak JavaScriptu domyślnie dają naturalną przewagę w Core Web Vitals to zestaw metryk Google mierzących realne doświadczenie użytkownika: LCP, INP i CLS.. Tyle że dobry fundament to jeszcze nie cała strategia. Widoczność w Google wymaga serii konkretnych decyzji technicznych, które trzeba podjąć świadomie.

W tym artykule rozbieram, co realnie wpływa na SEO strony w Astro: Core Web Vitals, metadane, dane uporządkowane, sitemapę, linkowanie wewnętrzne oraz GEO/AEO, czyli optymalizację pod systemy AI i wyszukiwarki oparte na odpowiedziach. Bez truizmów typu „pisz dobre treści”.

Punkt wyjścia — co Astro daje Ci za darmo

Zanim zaczniesz optymalizować, warto wiedzieć, co Astro daje już w standardzie:

  • Statyczny HTML — Google i inne roboty indeksujące dostają gotowy kod, bez zależności od JavaScriptu.
  • Zero JS domyślnie — LCP i TTI na poziomie, który w Next.js trzeba zdobyć optymalizacjami.
  • Natywna optymalizacja obrazów przez astro:assets — WebP/AVIF, responsywny srcset, lazy loading.
  • Routing oparty na plikach i czyste URL-e — /blog/moj-wpis/ zamiast ?page=123.
  • Content Collections z walidacją — spójne metadane na poziomie systemu (szerzej w osobnym wpisie).

To baza, dzięki której typowa strona Astro startuje z Lighthouse Performance 95+, bez żadnych dodatkowych optymalizacji.

Core Web Vitals — co konkretnie mierzyć

Google używa trzech metryk jako czynnika rankingowego:

  • LCP (Largest Contentful Paint) — czas do wyrenderowania największego elementu widocznego w obszarze roboczym (viewport). Dobra: < 2.5 s.
  • INP (Interaction to Next Paint) — czas reakcji strony na interakcję użytkownika. Dobra: < 200 ms. Zastąpiło FID w marcu 2024.
  • CLS (Cumulative Layout Shift) — sumaryczna niestabilność układu. Dobra: < 0.1.

Astro naturalnie dobrze sobie radzi z LCP i INP (zero JS = brak blokowania renderowania, brak opóźnień hydracji). CLS wymaga uwagi zawsze — niezależnie od frameworka.

Optymalizacja LCP w Astro

Najczęściej elementem LCP jest główny obraz (hero) na stronie głównej lub banner w nagłówku artykułu. Priorytety:

  1. Wstępne ładowanie (preload) kluczowego obrazu.
Code
<Image
  src={heroImage}
  alt="Hero"
  width={1200}
  height={630}
  loading="eager"
  fetchpriority="high"
/>

loading="eager" + fetchpriority="high" mówi przeglądarce: „to jest krytyczny obraz, pobierz go pierwszy, jeszcze przed innymi zasobami".

  1. Wstępne połączenie (preconnect) z siecią CDN obrazów.
Code
<link rel="preconnect" href="https://cdn.yoursite.com" />
  1. Optymalny format. Astro z astro:assets automatycznie generuje WebP/AVIF. Dla bardzo krytycznych obrazów rozważ ręczne sprawdzenie wagi — czasem JPEG z wyższą kompresją bije wagą AVIF.

  2. Hosting blisko użytkownika. Cloudflare, Vercel, Netlify mają globalne CDN. Self-hosting na VPS w Niemczech dla polskiej publiki — raczej nie.

Optymalizacja CLS w Astro

Głównym źródłem CLS są obrazy bez zdefiniowanych wymiarów i późno ładujące się fonty.

Obrazy — zawsze podawaj width i height:

Code
<Image src={img} alt="..." width={800} height={450} />

Przeglądarka rezerwuje przestrzeń jeszcze przed pobraniem obrazu i układ nie skacze.

Fonty — używaj Astro 6 Fonts API:

Code
export default defineConfig({
  fonts: [
    {
      provider: fontProviders.google(),
      name: 'Inter',
      cssVariable: '--font-inter',
      // Astro generuje optymalne fallbacki z podobnymi metrykami
    },
  ],
});

Astro automatycznie generuje font zastępczy z metrykami zbliżonymi do docelowego — tekst nie skacze, gdy właściwy krój pisma się załaduje.

Server Islands — dodawaj slot zastępczy (fallback slot) z tą samą wysokością co finalna zawartość. Szerzej o tym w artykule o Server Islands.

Optymalizacja INP w Astro

INP mierzy czas reakcji na kliknięcia, tapnięcia i input z klawiatury. W stronach Astro INP bywa bardzo dobry, bo minimalny JavaScript oznacza niższy koszt interakcji. Główne źródła problemów:

  • Ciężkie komponenty klienckie (Client Components) z dyrektywą client:load. Używaj client:visible gdzie to możliwe.
  • Skrypty zewnętrzne (analityka, widgety czatu, osadzone media społecznościowe). Wszystko, co możesz, ładuj asynchronicznie lub z atrybutem defer.
  • Długie zadania w funkcjach obsługi zdarzeń. React 18 z trybem współbieżnym częściowo to rozwiązuje, ale dla wysp bez Reacta najprostsza zasada brzmi: nie wykonuj ciężkich operacji synchronicznie.

Metadane — <head> jako strategiczny element

Każda strona powinna mieć:

Code
---
// src/layouts/Layout.astro
const { title, description, image, canonical } = Astro.props;
const canonicalURL = new URL(canonical ?? Astro.url.pathname, Astro.site);
---
 
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
 
  <title>{title} | StriveLab</title>
  <meta name="description" content={description} />
  <link rel="canonical" href={canonicalURL} />
 
  <!-- Open Graph -->
  <meta property="og:type" content="website" />
  <meta property="og:url" content={canonicalURL} />
  <meta property="og:title" content={title} />
  <meta property="og:description" content={description} />
  {image && <meta property="og:image" content={new URL(image, Astro.site)} />}
 
  <!-- Twitter Card -->
  <meta name="twitter:card" content="summary_large_image" />
  <meta name="twitter:title" content={title} />
  <meta name="twitter:description" content={description} />
  {image && <meta name="twitter:image" content={new URL(image, Astro.site)} />}
 
  <!-- Favicons i inne -->
  <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
  <meta name="generator" content={Astro.generator} />
</head>

Kluczowy element to <link rel="canonical">. Bez niego ryzykujesz powielenie treści (duplikację contentu), np. /blog/wpis/ vs /blog/wpis?ref=twitter traktowane jako osobne strony. Dzięki canonical Google wie, która wersja jest oryginalna.

Dla kolekcji treści (Content Collections) metadane naturalnie wiążą się ze schematem Zod — każdy artykuł ma wymagany title i description, które są walidowane podczas budowania projektu.

Dane uporządkowane (Schema.org)

Dane uporządkowane pomagają Google zrozumieć treść i generować wyniki rozszerzone, takie jak gwiazdki, przepisy, wydarzenia czy elementy produktowe. W 2026 roku są też sensownym fundamentem pod GEO/AEO, bo organizują informacje w formacie łatwym do maszynowej interpretacji. Nie traktuj ich jednak jako gwarancji cytowań w AI — to sygnał struktury, nie magiczny czynnik rankingowy.

Article / BlogPosting

Code
---
const { post } = Astro.props;
 
const jsonLd = {
  '@context': 'https://schema.org',
  '@type': 'BlogPosting',
  headline: post.data.title,
  description: post.data.description,
  datePublished: post.data.date.toISOString(),
  dateModified: (post.data.updated ?? post.data.date).toISOString(),
  author: {
    '@type': 'Person',
    name: 'Maciej Sala',
    url: 'https://strivelab.pl/o-mnie/',
  },
  publisher: {
    '@type': 'Organization',
    name: 'StriveLab',
    logo: {
      '@type': 'ImageObject',
      url: 'https://strivelab.pl/logo.png',
    },
  },
  image: post.data.image ? `https://strivelab.pl${post.data.image}` : undefined,
  mainEntityOfPage: {
    '@type': 'WebPage',
    '@id': new URL(Astro.url.pathname, Astro.site).toString(),
  },
};
---
 
<script type="application/ld+json" set:html={JSON.stringify(jsonLd)} />

FAQ

Jeśli na stronie znajduje się sekcja FAQ (jak w większości moich artykułów), możesz dodać FAQPage jako odpowiednią strukturę danych. Ważne zastrzeżenie: Google obecnie wyświetla wyniki rozszerzone dla FAQ głównie dla znanych, autorytatywnych domen rządowych i zdrowotnych, dlatego nie wdrażaj tego mechanizmu wyłącznie po to, by uzyskać widoczny element (snippet) w wynikach wyszukiwania.

Code
---
const faqs = [
  { question: 'Czy Astro jest lepsze od Next.js?', answer: 'To zależy od projektu...' },
  { question: 'Czy mogę używać Reacta w Astro?', answer: 'Tak, Astro obsługuje różne biblioteki UI...' },
];
 
const faqJsonLd = {
  '@context': 'https://schema.org',
  '@type': 'FAQPage',
  mainEntity: faqs.map((faq) => ({
    '@type': 'Question',
    name: faq.question,
    acceptedAnswer: {
      '@type': 'Answer',
      text: faq.answer,
    },
  })),
};
---
 
<script type="application/ld+json" set:html={JSON.stringify(faqJsonLd)} />

Organization (na stronie firmowej)

Code
{
  '@context': 'https://schema.org',
  '@type': 'Organization',
  name: 'StriveLab',
  url: 'https://strivelab.pl',
  logo: 'https://strivelab.pl/logo.png',
  sameAs: [
    'https://linkedin.com/in/maciej-sala',
    'https://github.com/strivelab',
  ],
  contactPoint: {
    '@type': 'ContactPoint',
    email: 'contact@strivelab.pl',
    contactType: 'customer service',
  },
}

Sitemap i robots.txt

Astro udostępnia oficjalną integrację @astrojs/sitemap, która podczas budowania projektu generuje pliki /sitemap-index.xml i /sitemap-0.xml.

Code
npx astro add sitemap

Konfiguracja:

Code
// astro.config.mjs
import sitemap from '@astrojs/sitemap';
 
export default defineConfig({
  site: 'https://strivelab.pl',
  integrations: [
    sitemap({
      filter: (page) => !page.includes('/private/'),
      changefreq: 'weekly',
      priority: 0.7,
      lastmod: new Date(),
      i18n: {
        defaultLocale: 'pl',
        locales: {
          pl: 'pl-PL',
          en: 'en-US',
        },
      },
    }),
  ],
});

robots.txt tworzysz ręcznie w public/robots.txt:

Code
User-agent: *
Allow: /

Sitemap: https://strivelab.pl/sitemap-index.xml

Dla robotów AI, jeśli chcesz je wykluczyć:

Code
User-agent: GPTBot
Disallow: /

User-agent: ClaudeBot
Disallow: /

Osobiście rekomenduję nie blokować robotów AI. To coraz ważniejszy kanał dystrybucji treści, więc odcinanie się od niego w 2026 roku zwykle działa na własną szkodę. Ostatecznie jest to jednak decyzja biznesowa, nie czysto techniczna.

GEO i AEO — widoczność w AI

Generative Engine Optimization (GEO) i Answer Engine Optimization (AEO) to nowe warstwy SEO, kierowane pod Perplexity, ChatGPT, Claude, Gemini czy SearchGPT. Podstawy są podobne do klasycznego SEO, ale kilka akcentów przesuwa się w inne miejsce.

Strukturalność ponad styl. AI lepiej rozumie treść z jasnymi nagłówkami (H2, H3), punktami, definicjami, zestawieniami. Artykuł „płaski" (duże bloki tekstu bez struktury) jest gorzej cytowany.

Pierwsze zdanie każdej sekcji musi być esencją. AI często cytuje otwarcie paragrafu. Pisz tak, żeby pierwsze zdanie odpowiadało na pytanie zawarte w nagłówku — reszta paragrafu to rozwinięcie.

Dane uporządkowane (Article, FAQ, HowTo tam, gdzie realnie pasuje do treści) porządkują znaczenie strony. Pomagają robotom i systemom wyszukiwania zrozumieć relacje między pytaniami, odpowiedziami, autorem i datami, ale nie gwarantują cytowań.

Czysty HTML bez zbędnego runtime'u. Astro zyskuje tu przewagę: mniej skryptów startowych, mniej hydracji i prostszy, semantyczny kod źródłowy. Roboty indeksujące AI otrzymują dokument bliższy klasycznej stronie HTML niż rozbudowanej aplikacji renderowanej po stronie klienta.

Świeża treść z dateModified. Modele AI faworyzują aktualne źródła. Zaktualizowanie artykułu i podbicie dateModified w danych uporządkowanych daje jasny sygnał: „ta treść wciąż obowiązuje”.

Nie blokuj robotów AI w robots.txt, jeśli zależy Ci na ruchu z tych źródeł. Perplexity, ChatGPT Search i podobne narzędzia zaczynają generować realne wejścia, ale tylko do stron, które da się wygodnie cytować.

Linkowanie wewnętrzne

Astro nie narzuca domyślnej strategii linkowania wewnętrznego, ale budowa klastrów tematycznych, czyli grup powiązanych artykułów linkujących do siebie nawzajem, to jedna z najskuteczniejszych technik SEO w 2026 roku.

Praktyczny przykład: wszystkie moje artykuły o Astro odsyłają do siebie nawzajem — architektura wysp, dyrektywy klienckie, Content Collections, Server Islands i Astro vs Next.js. Google rozpoznaje klaster „Astro” i traktuje całość jako silniejsze źródło tematyczne.

Dla Content Collections możesz to zautomatyzować — pole relatedPosts w schemacie Zod z referencjami do kolekcji blog, a w szablonie artykułu automatyczna sekcja „Zobacz też".

Audyt — narzędzia praktyczne

Po wdrożeniu, sprawdzaj regularnie:

  • Google Search Console — błędy indeksacji, Core Web Vitals z prawdziwego ruchu, zapytania wyszukiwawcze.
  • PageSpeed Insights — Core Web Vitals i sugerowane optymalizacje.
  • Lighthouse (w Chrome DevTools) — pełen audyt, łącznie z Accessibility i Best Practices.
  • Screaming Frog (dla większych stron) — crawl całej witryny, analiza metadanych, linków i duplikatów.
  • Ahrefs / Semrush — monitoring pozycji, analiza konkurencji.

Jeśli chcesz, żebym to zrobił profesjonalnie, mam pakiet SEO & Performance Sprint — pełen audyt techniczny i plan optymalizacji.

Lista kontrolna przed publikacją

Przed opublikowaniem nowej strony albo artykułu w Astro sprawdzam krótki zestaw techniczny. To nie zastępuje pracy redakcyjnej, ale łapie większość błędów, które potem kosztują widoczność.

  • title, description, canonical i Open Graph są ustawione na finalne wartości, bez tekstów zastępczych.
  • Jeśli strona jest wielojęzyczna, hreflang wskazuje poprawne odpowiedniki językowe.
  • Obraz LCP ma stałe wymiary, sensowny alt, właściwy format i priorytet ładowania.
  • Treść, która ma rankować, jest w HTML-u, a nie dopiero w klienckim komponencie.
  • Schema.org pasuje do realnej treści strony; FAQ wynika z sekcji faqs: i nie dubluje ręcznie dopisanych bloków.
  • Sitemap zawiera tylko kanoniczne, opublikowane URL-e, a robots.txt ich nie blokuje.
  • W artykule znajdują się linki wewnętrzne do powiązanych wpisów i usług, ale bez nienaturalnego upychania słów kluczowych w anchorach.
  • Po publikacji weryfikujesz losowy adres URL w Search Console URL Inspection albo przez curl, aby upewnić się, że renderowanie HTML działa poprawnie.
Notatka

Dla GEO/AEO najważniejsza jest przewidywalna struktura: konkretne nagłówki, krótkie odpowiedzi, tabele, definicje i FAQ generowane jednym mechanizmem.

Podsumowanie

Astro daje mocny fundament SEO już na starcie, ale prawdziwa pozycja w Google i widoczność w AI są sumą wielu świadomych decyzji: metadanych, danych uporządkowanych, Core Web Vitals, linkowania wewnętrznego i struktury treści przyjaznej GEO/AEO. Żaden z tych elementów osobno nie zmienia zasad gry. Razem tworzą efekt, który odróżnia stronę pracującą na widoczność od strony, która po prostu istnieje.

Jeśli masz stronę w Astro i chcesz, żeby realnie dominowała w swojej niszy — odezwij się, zrobimy to razem.

Często zadawane pytania

Pod względem Core Web Vitals Astro ma przewagę na starcie, bo domyślnie wysyła mniej JavaScriptu. Next.js z RSC, PPR i dobrą optymalizacją może dojść do bardzo podobnych wyników. Oba frameworki mogą mieć świetne SEO — różnica polega głównie na tym, ile pracy wymaga dojście do tego punktu. Szersza analiza jest w [artykule porównawczym](https://strivelab.pl/blog/astro-js-vs-next-js-porownanie-frameworkow/).

Pracuję z tym zawodowo.

Jeśli chcesz przełożyć ten temat na lepszą architekturę frontendu, uporządkować React lub Next.js i podnieść jakość pracy zespołu, skontaktuj się ze mną. Pomagam zamieniać wiedzę z artykułów w praktyczne decyzje technologiczne.

Skontaktuj się ze mną
Maciej Sala

O autorze

Maciej Sala

Maciej Sala — project manager i frontendowiec z doświadczeniem w marketingu internetowym. Na co dzień pracuję z Reactem, Next.js i TypeScriptem, łącząc perspektywę produktową z praktycznym podejściem do kodu. Przez kilka lat związany z branżą gier wideo jako project manager i game designer.

Absolwent historii na Uniwersytecie Jagiellońskim i studiów podyplomowych z marketingu internetowego na Akademii Górniczo-Hutniczej w Krakowie. Poza pracą trenuje na siłowni, maluje figurki i realizuje własne projekty.

Moje artykułyWięcej o mnie

Seria

Astro w praktyce 2026
Część 3 / 4
  1. 1Astro 6 — przewodnik po nowościach: Cloudflare Workers, Live Content Collections, Fonts API i CSP
  2. 2Architektura wysp w Astro — czym są wyspy i dlaczego zero JS domyślnie zmienia zasady gry
  3. SEO w Astro — Core Web Vitals, dane uporządkowane i techniczny fundament rankingu w 2026
  4. 4Migracja bloga z WordPress na Astro — eksport treści, przekierowania 301 i zachowanie pozycji w Google
Poprzedni wpisMigracja bloga z WordPress na Astro — eksport treści, przekierowania 301 i zachowanie pozycji w GoogleKompletny przewodnik po migracji bloga z WordPress na Astro. Eksport przez REST API i WXR, mapowanie URL, przekierowania 301, migracja obrazów do astro:assets i monitoring pozycji w Google.
Maciej Sala

Maciej Sala

Founder Strivelab

1 maja 2026

Spis treści

10 sekcji · 11 min

  • Punkt wyjścia — co Astro daje Ci za darmo1 min
  • Core Web Vitals — co konkretnie mierzyć2 min
  • Metadane — <head> jako strategiczny element1 min
  • Dane uporządkowane (Schema.org)1 min
  • Sitemap i robots.txt1 min
  • GEO i AEO — widoczność w AI1 min
  • Linkowanie wewnętrzne1 min
  • Audyt — narzędzia praktyczne1 min
  • Lista kontrolna przed publikacją1 min
  • Podsumowanie1 min

Biblioteka wiedzy

Czytaj dalej

Zobacz więcej wpisów
Astro.js vs Next.js — które narzędzie wybrać w 2026 roku?

Astro.js vs Next.js — które narzędzie wybrać w 2026 roku?

Fachowe porównanie Astro.js i Next.js z perspektywy programisty pracującego na co dzień w Next.js. Architektura, wydajność, SEO, DX, koszty i konkretne przypadki użycia — z benchmarkami i przykładami kodu.

Maciej Sala

Maciej Sala

Founder Strivelab

15 kwietnia 2026
Architektura wysp w Astro — czym są wyspy i dlaczego zero JS domyślnie zmienia zasady gry

Architektura wysp w Astro — czym są wyspy i dlaczego zero JS domyślnie zmienia zasady gry

Architektura wysp to fundament Astro. Wyjaśniam, czym są wyspy, jak działa selektywna hydracja, kiedy daje realną przewagę i gdzie jest jej granica — z przykładami kodu i benchmarkami.

Maciej Sala

Maciej Sala

Founder Strivelab

1 maja 2026
Astro 6 — przewodnik po nowościach: Cloudflare Workers, Live Content Collections, Fonts API i CSP

Astro 6 — przewodnik po nowościach: Cloudflare Workers, Live Content Collections, Fonts API i CSP

Co nowego w Astro 6: workerd jako środowisko uruchomieniowe w trybie programistycznym, Live Content Collections, wbudowane Fonts API, Content Security Policy i nowy kompilator Rust.

Maciej Sala

Maciej Sala

Founder Strivelab

1 maja 2026