Dlaczego Astro i Sanity działają tak dobrze razem
Każde z tych narzędzi robi dokładnie jedną rzecz znakomicie, a ich role się nie nakładają. Sanity dostarcza ustrukturyzowaną treść, a Astro zamienia ją w czysty HTML — bez zbędnego JavaScriptu.
Sekret tkwi w Architektura wysp (Islands Architecture) to wzorzec, w którym większość strony jest statycznym HTML-em, a interaktywne fragmenty hydratują się jako niezależne wyspy. (Astro Islands). Klasyczny framework typu SPA (Single Page Application) to aplikacja webowa, w której cała strona renderuje się i działa po stronie przeglądarki w jednym dokumencie HTML — typowe podejście Reacta, Vue czy Angulara bez SSR. wysyła do przeglądarki cały JavaScript potrzebny do zbudowania strony, nawet jeśli to zwykły artykuł, który nic nie robi po załadowaniu. Astro odwraca tę logikę: domyślnie renderuje wszystko do statycznego HTML-a i nie wysyła żadnego JavaScriptu. Interaktywność dokładasz tylko punktowo — jako wyspy (np. menu mobilne czy formularz), które się Hydratacja to dołączenie JavaScriptu do wyrenderowanego HTML, dzięki czemu statyczny komponent staje się interaktywny. (hydrate), podczas gdy reszta strony pozostaje czystym, lekkim HTML-em.
Dla strony contentowej to idealne dopasowanie. Treść z Sanity i tak nie potrzebuje interaktywności — to tekst, obrazy, nagłówki. Astro pobiera te dane raz, podczas builda, i wypala je w gotowe pliki HTML. Efekt: strona ładuje się błyskawicznie, a Lighthouse pokazuje wyniki w okolicach 100/100 praktycznie z pudełka, bo nie ma czego ładować poza HTML-em i CSS-em.
Jak zainstalować integrację Astro z Sanity
Sanity utrzymuje oficjalną integrację @sanity/astro, więc nie wymyślasz koła na nowo. Instalacja to jedna komenda:
@astrojs/react jest potrzebny, jeśli chcesz korzystać z wizualnej edycji albo osadzić Sanity Studio na trasie w projekcie Astro. Warto przy okazji dograć pakiety pomocnicze:
astro-portabletext— renderuje Portable Text (format tekstu sformatowanego z Sanity) do HTML-a@sanity/image-url— buduje URL-e obrazów z transformacjami z CDN, czyli Content Delivery Network, to rozproszona sieć serwerów dostarczająca zasoby z węzła najbliższego użytkownikowi; CDN do obrazów dodatkowo transformuje je w locie.-u Sanitygroq— eksportujedefineQuerydo typowanych zapytań
Konfigurację dodajesz w astro.config.mjs:
Integracja wystawia gotowego klienta Sanity jako wirtualny moduł sanity:client, którego importujesz w dowolnym komponencie. Nie musisz ręcznie konfigurować połączenia w każdym pliku.
Jak pobierać dane z Sanity w Astro przez GROQ
Tu wkracza GROQ to język zapytań Sanity służący do pobierania i filtrowania treści z datasetu. — język zapytań Sanity. Jest trochę jak SQL dla grafu dokumentów JSON: filtrujesz, sortujesz, robisz projekcje i joiny w jednym zapytaniu. (Sanity wystawia też GraphQL to język zapytań do API, w którym klient precyzyjnie określa, jakie pola chce pobrać — zamiast sztywnych endpointów REST zwracających całe obiekty., jeśli wolisz, ale GROQ jest natywny i zwykle zwięźlejszy.)
W Astro pobierasz dane bezpośrednio we Frontmatter to blok metadanych na początku pliku Markdown/MDX, zapisany zwykle w YAML między liniami ---. komponentu — czyli w bloku między ---, który wykonuje się na serwerze podczas builda i nigdy nie trafia do przeglądarki:
To zapytanie GROQ czyta się prosto: weź wszystkie dokumenty typu post, które mają sluga, posortuj od najnowszego i zwróć tylko te cztery pola. Cała ta logika wykonuje się raz, podczas builda — użytkownik dostaje gotowy HTML.
Statycznie czy serwerowo? Dwa tryby renderowania
Astro ma dwa tryby, a wybór wpływa na to, kiedy treść z Sanity trafia na stronę:
SSG (Static Site Generation) to generowanie kompletnego HTML podczas budowania strony. Gotowe pliki serwujesz z CDN bez renderowania na żądanie — najszybszy i najtańszy model dla treści, która nie zmienia się przy każdej wizycie. (domyślny) — każde zapytanie GROQ wykonuje się raz, podczas builda, a strony serwowane są jako statyczne pliki. Idealny, gdy treść nie zmienia się co minutę i możesz pozwolić sobie na chwilę zwłoki między publikacją a przebudową (zwykle wyzwalaną Webhook to automatyczne powiadomienie HTTP wysyłane przez Stripe do Twojej aplikacji po wystąpieniu zdarzenia, np. udanej płatności. z Sanity). To wybór dla większości blogów i stron firmowych — najszybszy i najtańszy.
SSR, czyli Server-Side Rendering, to generowanie HTML na serwerze przy żądaniu — komponent client:only je pomija i renderuje się wyłącznie w przeglądarce. (SSR) — strony renderują się na każde żądanie, więc zapytania GROQ działają w czasie rzeczywistym i zmiany widać natychmiast, bez przebudowy. Potrzebujesz do tego adaptera pod swój hosting (np. Vercel). Sięgasz po niego, gdy potrzebujesz podglądu draftów, wizualnej edycji albo treści personalizowanej.
Czego ta integracja NIE potrafi — uczciwie
@sanity/astro jest lżejsze niż next-sanity i celowo nie ma kilku jego funkcji.
Nie ma odpowiednika Live Content API — w Next.js next-sanity daje automatyczne aktualizacje treści na żywo i rewalidację Cache przechowuje gotową odpowiedź lub zasób, żeby nie generować go od zera przy każdym wejściu użytkownika.. W Astro tego nie ma out of the box: aktualizacje wymagają przebudowy (tryb statyczny) albo odświeżenia strony (SSR). Nie ma też wbudowanej rewalidacji cache zintegrowanej z frameworkiem.
Dla bloga czy strony firmowej to zwykle nie problem. Jeśli jednak budujesz coś, gdzie liczy się natychmiastowość i interaktywność na poziomie aplikacji, warto rozważyć Next.js z Payload zamiast Astro.
Ultraszybkie projekty, łączące lekkość ze skalowalnością.
Astro