Typowy scenariusz:
#root, a router odczytuje location.pathname.window.__INITIAL_DATA__ (dane z bootstrapu), albo przez wywołanie REST API.Kluczowy problem SEO: Aplikacja działa w trybie Client-Side Rendering (CSR). Chociaż Google potrafi indeksować JavaScript, to proces ten jest opóźniony, a błędy w API mogą sprawić, że robot zobaczy pustą stronę. Ponadto, app-shell jest zwracany dla każdej ścieżki, nawet jeśli produkt nie istnieje – to prowadzi do tzw. „soft 404” (strona zwraca kod 200, ale nie ma treści). Google wyraźnie odradza takie podejście .
API katalogu jest sensownie zaprojektowane: GET /api/productsGET /api/products/<slug>
Jednak są problemy:
stock jest na poziomie produktu, ale istnieją też variants. To prowadzi do niespójności: stan magazynowy powinien być przypisany do konkretnego wariantu (np. rozmiar M, kolor czarny), a nie do całego produktu.XXL, jak i 2XL, a także ink navyInk NavyWniosek: Nowy system powinien mieć scentralizowany model danych z wariantami, SKU i stanem magazynowym na poziomie wariantu.
Aplikacja wykorzystuje własny CMS do zarządzania stroną główną (/api/homepage) i layoutem (/api/layout). section_order i obiekty włącz/wyłącz wskazują, że strona główna jest kompozycją bloków (hero, trustbar, promocje, produkty), którą można zmieniać bez publikacji nowej wersji frontendu.
Zalety: Duża elastyczność dla marketingu.
Wady: Istnieją aliasy kluczy (np. ann i announcement), a struktura danych (kolejność, przełączniki, payload) może być niespójna. Nowy system powinien używać jednej, spójnej listy bloków z unikalnym ID, typem, stanem i danymi.
Endpoint /api/public/settings zwraca szeroki zakres konfiguracji: od kolorów marki po dane kontaktowe, progi darmowej wysyłki, a nawet tax_id. To wygodne, ale niebezpieczne. Nie wszystkie dane powinny być dostępne publicznie. tax_id, adres prawny czy wewnętrzne e-maile nie powinny trafiać do odpowiedzi API, którą każdy może odczytać. PayPal client_id może być publiczny, ale client secret
Przepływ płatności jest prawidłowo zaprojektowany: klient wysyła koszyk i kod rabatowy, serwer samodzielnie oblicza wartości, tworzy zamówienie w PayPal, a następnie je przechwytuje. To jedyna słuszna droga. Serwer nie może ufać danym z przeglądarki (cena, rabat, wysyłka).
Potencjalne problemy wymagające uwagi:
Sklep oferuje pełen zakres funkcji e-commerce. Warto zwrócić uwagę na:
POST /api/reviews/<id>| Kryterium | Custom React + REST | WooCommerce tradycyjny |
|---|---|---|
| UI/Doświadczenie marki | Bardzo elastyczne | Ograniczone motywem |
| SEO (domyślnie) | Ryzykowne (CSR) | Dobre (HTML serwerowy) |
| Nawigacja po załadowaniu | Bardzo szybka | Standardowa |
| Pierwsze wrażenie | Mogą wystąpić opóźnienia (JS, API) | Natychmiastowa treść HTML |
| Panel administracyjny | Należy zbudować samodzielnie | Dojrzały, gotowy |
| Utrzymanie | Wysokie koszty inżynieryjne | Koszty aktualizacji wtyczek |
| Skalowalność (wiele kanałów) | Doskonała | Wymaga warstwy headless |
| Odpowiedniość dla 16 produktów | Może być przerostem formy | Bardzo odpowiednie |
Wniosek: Custom daje pełną kontrolę, ale wymaga zespołu i budowy wszystkiego od zera. WooCommerce jest prostszy i szybszy we wdrożeniu, ale ogranicza elastyczność. Nie ma jednoznacznej odpowiedzi – wybór zależy od priorytetów (szybkość wdrożenia vs. unikalne UX).
Zamiast przepisywać aplikację na WooCommerce, zalecamy przepisanie jej od nowa, zachowując koncepcję customowego backendu, ale zmieniając strategię renderowania i model danych.
Zalecany stos technologiczny:
Kluczowe zmiany w projekcie:
section_order + toggles + payload) jedną, spójną listą bloków z własnym schematem.Obecna platforma jest solidna, ale ma poważne wady: model CSR jest problematyczny dla SEO, a model danych wymaga normalizacji. Przepisanie jej na Next.js z renderowaniem hybrydowym i solidniejszym backendem to inwestycja, która się opłaci, jeśli priorytetem jest unikalne doświadczenie marki i skalowalność. Dla małego sklepu z 16 produktami warto rozważyć, czy prostsze i tańsze w utrzymaniu WooCommerce nie będzie lepszym rozwiązaniem. Ostateczna decyzja należy do właściciela, ale kluczowe jest, aby podjąć ją świadomie, rozumiejąc kompromisy.