Jak działa koszyk zakupowy w sklepie internetowym
Koszyk zakupowy to tymczasowy bufor, który zbiera wybrane produkty i przekazuje je do procesu zamówienia. Dowiedz się, jak działa mechanizm sesji koszyka i co powinien zawierać każdy poprawnie skonfigurowany koszyk w sklepie internetowym.
Kiedy klient klika "Dodaj do koszyka", w tle dzieje się więcej niż widać na pierwszy rzut oka. Nie jest to tylko wizualne dodanie produktu do listy - sklep musi zapamiętać ten wybór, powiązać go z konkretną osobą i przechować aż do momentu finalizacji zakupu. Cały ten mechanizm opiera się na sesjach i ciasteczkach, a jego działanie jest niemal identyczne od początków e-commerce.
W tym artykule tłumaczę, jak naprawdę działa koszyk zakupowy - od kliknięcia przycisku, przez przechowywanie danych, aż po przejście do zamówienia. To wiedza, która przyda Ci się niezależnie od platformy, na której stoi Twój sklep.
Koszyk to tymczasowy bufor, nie zamówienie
Najważniejsza rzecz na początku: koszyk zakupowy to tylko tymczasowy pojemnik na produkty, które klient rozważa kupienie. Nie jest jeszcze zamówieniem. Nie rezerwuje towaru z magazynu w żadnym wiążącym sensie. Nie generuje faktury. Jest dokładnie tym, czym fizyczny wózek w supermarkecie - możesz do niego wkładać produkty, odkładać je z powrotem na półkę, zmieniać ilości i finalnie zdecydować, czy w ogóle idziesz do kasy.
Ta analogia z wózkiem jest celna jeszcze z jednego powodu: sklep nie może Cię zmusić do kupienia tego, co wrzuciłeś do wózka. Koszyk internetowy daje ten sam komfort - klient może opuścić stronę, wrócić za godzinę i (jeśli sklep jest dobrze skonfigurowany) zastać swoje produkty dokładnie tam, gdzie je zostawił.
Co się dzieje po kliknięciu "Dodaj do koszyka"
Gdy klient klika przycisk dodania produktu, sklep wykonuje kilka kroków jednocześnie:
1. Sprawdza, czy produkt jest dostępny w wybranej ilości i wariancie.
2. Zapisuje wybrany produkt (ID produktu, wariant, ilość, cenę w tym momencie) do sesji lub bazy danych.
3. Przypisuje ten zapis do konkretnej sesji klienta, identyfikowanej przez ciasteczko w przeglądarce.
4. Aktualizuje licznik przy ikonie koszyka w nagłówku strony.
Wszystko to dzieje się w ułamku sekundy. Jeśli cokolwiek po drodze zawodzi - na przykład plugin cache błędnie serwuje stronę bez odczytu sesji - klient widzi "koszyk pusty" mimo właśnie dodanego produktu. To jeden z częstszych problemów technicznych, które widzę u klientów zlecających mi poprawki WooCommerce.
Jak sklep rozpoznaje, czyj to koszyk - sesje i ciasteczka
Serwer sklepu sam w sobie nie "pamięta" Ciebie między kolejnymi wejściami na stronę. HTTP jest protokołem bezstanowym - każde zapytanie do serwera jest technicznie niezależne. Żeby sklep wiedział, że to nadal Ty i że masz w koszyku te same produkty, potrzebny jest mechanizm identyfikacji.
Rozwiązaniem jest sesja. Po pierwszym wejściu na stronę sklep generuje unikalny identyfikator sesji (ciąg znaków, np. sess_ab7c93f12d) i zapisuje go w Twojej przeglądarce jako ciasteczko. Przy każdym kolejnym wejściu przeglądarka wysyła to ciasteczko do serwera, a serwer na tej podstawie odczytuje Twój koszyk.
Dane samego koszyka mogą być przechowywane na dwa sposoby:
- Sesja PHP - dane trzymane po stronie serwera, ciasteczko to tylko klucz identyfikujący. Szybkie, ale wygasają po czasie lub po restarcie serwera.
- Baza danych - koszyk zapisany trwale, powiązany z kontem użytkownika lub z trwałym ciasteczkiem. Działa nawet po zamknięciu przeglądarki.
W WooCommerce niezalogowani goście dostają sesję PHP. Zalogowani użytkownicy mają koszyk w bazie danych - dlatego po zalogowaniu produkty "wracają" nawet po kilku dniach.
Koszyk gościa vs. koszyk konta
| Cecha | Gość (niezalogowany) | Zalogowany klient |
|---|---|---|
| Przechowywanie danych | Sesja PHP + ciasteczko | Baza danych |
| Czas trwania | Kilka godzin do dni (zależy od ustawień) | Długotrwałe, nie wygasa |
| Po zamknięciu przeglądarki | Koszyk może zniknąć | Koszyk zostaje |
| Możliwość odzyskania | Tylko jeśli podał e-mail | Zawsze |
| Wielokrotne urządzenia | Nie (sesja jest lokalna) | Tak (konto jest jedno) |
Co koszyk musi pokazywać
Poprawnie zbudowany koszyk to nie tylko lista produktów. Klient podejmuje tu realną decyzję zakupową i potrzebuje konkretnych danych. Z praktyki - sklepy, które ukrywają część informacji (szczególnie koszty dostawy) do ostatniego kroku, mają wyraźnie wyższy wskaźnik porzuceń.
Minium, które powinien prezentować każdy koszyk:
Obowiązkowe elementy koszyka zakupowego
- Miniaturka zdjęcia produktu z linkiem do jego karty
- Pełna nazwa produktu i wybrany wariant (np. rozmiar, kolor)
- Cena jednostkowa produktu
- Pole zmiany ilości (edytowalne bezpośrednio w koszyku)
- Cena łączna dla każdej pozycji (cena x ilość)
- Suma całego koszyka (bez dostawy)
- Szacowany koszt dostawy lub widoczna informacja, kiedy zostanie naliczony
- Przycisk usunięcia produktu z koszyka
- Przycisk przejścia do finalizacji zamówienia
U jednego z klientów prowadzących sklep z akcesoriami dziecięcymi zauważyłem, że koszyk pokazywał sumę produktów, ale koszt dostawy ujawniał się dopiero na samym dole strony checkout - po wypełnieniu adresu. Przesunięcie informacji o koszcie wysyłki do widoku koszyka (jako kalkulator szacunkowy) zmniejszyło liczbę porzuceń o kilkanaście procent w ciągu miesiąca.
Jeśli oferujesz darmową dostawę od określonej kwoty, pokaż to wprost w koszyku: "Do darmowej dostawy brakuje Ci X zł". Ten jeden komunikat regularnie zwiększa średnią wartość zamówienia.
Koszyk a checkout - dwie różne rzeczy
Wielu właścicieli sklepów używa tych słów zamiennie, ale koszyk i checkout to dwa oddzielne etapy z różnymi celami.
Koszyk (cart) to miejsce przeglądania i edycji wybranych produktów. Klient może tu:
- sprawdzić co wybrał i za ile,
- zmienić ilości lub usunąć produkty,
- zastosować kod rabatowy,
- zobaczyć szacunkowy koszt całości.
Checkout (strona finalizacji zamówienia) to osobna strona, gdzie klient:
- podaje adres dostawy,
- wybiera metodę wysyłki i płatności,
- zatwierdza zamówienie.
Dopiero po potwierdzeniu checkoutu i opłaceniu (lub wybraniu płatności przy odbiorze) powstaje realne zamówienie. Samo przejście na stronę checkout bez zatwierdzenia niczego nie kupuje.
Koszyk vs. Checkout - czym się różnią
| Etap | Koszyk (Cart) | Finalizacja (Checkout) |
|---|---|---|
| Cel | Przeglądanie i edycja | Podanie danych i płatność |
| Edycja produktów | Tak, swobodna | Ograniczona lub brak |
| Dane klienta | Nie wymagane | Wymagane (adres, e-mail) |
| Powstanie zamówienia | Nie | Tak (po zatwierdzeniu) |
| Kod rabatowy | Tak (zwykle) | Czasem też |
| Klient może wyjść | Tak, bez konsekwencji | Tak, zamówienie nie powstaje |
Dlaczego koszyk wygasa i co z tym zrobić
Sesja koszyka ma ograniczony czas życia. To celowe zachowanie - serwer nie może trzymać nieskończonej liczby otwartych sesji dla wszystkich odwiedzających. Typowy czas wygaśnięcia sesji PHP to od kilkudziesięciu minut do kilku godzin, choć właściciel sklepu może to ustawić inaczej.
Co to znaczy dla klienta? Jeśli doda produkty do koszyka, wyjdzie na długi czas i wróci, może zastać pusty koszyk. Szczególnie często dzieje się to na urządzeniach mobilnych, gdzie użytkownicy przełączają aplikacje i wracają do sklepu po kilku godzinach.
Rozwiązania po stronie sklepu:
Plusy
- Trwały koszyk (persistent cart) dla zalogowanych użytkowników - produkty nie znikają
- Zachęcanie do zakładania konta lub podania e-maila przed zakupem
- Wysyłka e-maila z przypomnieniem o porzuconym koszyku
- Mini-koszyk pokazujący stan bez wchodzenia na osobną stronę
Minusy
- Zbyt długo przechowywany koszyk może sugerować klientowi nieaktualne ceny
- Przetrzymywanie wielu sesji obciąża serwer
- Produkty z koszyka mogą stać się niedostępne zanim klient wróci do zakupu
Koszyk nie rezerwuje produktów ze stanu magazynowego. Jeśli ktoś wrzuci do koszyka ostatnią sztukę towaru i nie dokończy zakupu, inny klient może ten towar kupić. Rezerwacja odbywa się dopiero w momencie złożenia zamówienia (i zwykle potwierdzenia płatności).
Typowe problemy z koszykiem w WooCommerce
Prawie każdy sklep na WooCommerce prędzej czy później natrafi na jeden z tych problemów. Wymieniam je, żebyś wiedział, co szukać, gdy coś przestaje działać.
Najczęstszy problem to znikający koszyk przy włączonym cache. Strony koszyka i checkout muszą być wykluczone z cache (np. WP Rocket, LiteSpeed Cache), bo inaczej serwer serwuje tę samą, statyczną wersję strony każdemu użytkownikowi - bez odczytu sesji. Klient widzi pusty koszyk mimo właśnie dodanych produktów.
Drugi częsty przypadek to konflikty z motywem lub pluginem, które ingerują w sesję PHP lub blokują ciasteczka. Jeśli koszyk działa w trybie bez pluginów, a przestaje po aktywacji konkretnego rozszerzenia - przyczyna jest tam.
Trzeci problem dotyczy sklepów z dużym ruchem: wyczerpanie limitu sesji na serwerze. Tani hosting współdzielony ma ograniczoną liczbę jednoczesnych sesji PHP. Przy dużej liczbie odwiedzających nowe sesje (i kosze) nie są tworzone.
Jeśli zastanawiasz się nad własnym sklepem internetowym i chcesz mieć pewność, że te mechanizmy działają poprawnie od początku - chętnie to omówimy.
Koszyk mobilny - dodatkowe wyzwania
Ponad połowa zakupów online odbywa się na smartfonach, a koszyk mobilny ma swoje specyficzne wymagania. Mniejszy ekran wymusza inne priorytety: miniaturki muszą być czytelne, pola ilości wystarczająco duże, żeby trafić w nie palcem, a przycisk przejścia do checkout powinien być zawsze widoczny - najlepiej przyklejony na dole ekranu.
Sesja mobilna wygasa częściej, bo użytkownicy przełączają aplikacje, blokują telefon i wracają po czasie. Dlatego na sklepach mobilnych szczególnie warto mieć włączoną opcję trwałego koszyka i zachęcać do logowania przed zakupem.
Warto też zadbać o to, żeby koszyk od razu pokazywał szacunkowy koszt dostawy - na małym ekranie każde dodatkowe kliknięcie zwiększa ryzyko rezygnacji.
Czym w ogóle jest sklep internetowy jako całość i co go odróżnia od zwykłej strony firmowej? Tłumaczę to w osobnym wpisie: co to jest sklep internetowy.
Jak ocenić koszyk we własnym sklepie
Krótka lista kontrolna do samodzielnego sprawdzenia, czy koszyk w Twoim sklepie działa poprawnie:
Audyt koszyka - sprawdź sam
- Dodaj produkt do koszyka i sprawdź, czy pojawia się natychmiast w liczniku w nagłówku
- Przejdź na inną podstronę i wróć - czy produkt nadal jest w koszyku?
- Zamknij i otwórz przeglądarkę - czy koszyk przetrwał (jeśli masz włączony persistent cart)?
- Sprawdź, czy koszyk pokazuje szacowany koszt dostawy bez konieczności wchodzenia w checkout
- Zmień ilość produktu bezpośrednio w koszyku i sprawdź, czy suma się aktualizuje
- Usuń produkt z koszyka - czy znika natychmiast, bez przeładowania całej strony?
- Wejdź na stronę koszyka z telefonu i oceń, czy przyciski są wystarczająco duże
- Sprawdź, czy strona koszyka jest wykluczona z cache (test: otwórz w trybie prywatnym)
Jeśli któryś z tych punktów nie działa prawidłowo, warto zlecić przegląd techniczny sklepu. Koszyk to jeden z najważniejszych elementów w całej ścieżce zakupowej - jeśli zawodzi, bezpośrednio obniża sprzedaż, nawet jeśli reszta sklepu działa bez zarzutów. Więcej o tym, jak działa cały sklep internetowy od strony technicznej, znajdziesz też w moim przewodniku po platformach e-commerce.
Koszyk gości opiera się na sesji PHP lub ciasteczku sesyjnym, które wygasa po zamknięciu przeglądarki lub po określonym czasie. Jeśli sklep nie ustawił trwałego ciasteczka (persistent cart), zawartość koszyka przepada. Rozwiązaniem jest zalogowanie się przed zakupami albo włączenie przez właściciela sklepu opcji zapamiętywania koszyka dla gości. Koszyk to etap zbierania i przeglądania produktów - można tu zmieniać ilości, usuwać pozycje i zobaczyć szacunkowy koszt. Checkout to osobna strona, na której klient podaje dane do wysyłki, wybiera metodę dostawy i opłaca zamówienie. Przejście do checkoutu nie tworzy jeszcze zamówienia - to dopiero potwierdzenie płatności. To zależy od ustawień sklepu. W WooCommerce domyślny czas sesji to godziny, ale przy włączonej opcji trwałego koszyka produkty mogą być zapamiętane przez kilka dni lub tygodni. Zalogowani użytkownicy mają koszyk zapisany w bazie danych, więc nie wygasa tak szybko jak u gości. Tak, ale tylko jeśli klient zostawił adres e-mail - na przykład zaczął wypełniać formularz zamówienia albo jest zalogowany. Wtedy sklep może wysłać automatyczną wiadomość z przypomnieniem o niedokończonych zakupach. Niezidentyfikowanego gościa bez e-maila nie da się odzyskać bezpośrednio. Nie - popularna alternatywa to mini-koszyk (side cart lub fly-out), który otwiera się jako panel boczny bez przechodzenia na osobną podstronę. Oba rozwiązania działają tak samo technicznie, różnią się tylko sposobem prezentacji. W urządzeniach mobilnych pełnoekranowy koszyk bywa wygodniejszy, na desktopie mini-koszyk przyspiesza zakupy. Strona koszyka nie jest zwykłą statyczną podstroną - jej zawartość zmienia się dla każdego użytkownika osobno, zależy od jego sesji, wybranych produktów, zastosowanych kuponów i adresu dostawy. Dlatego koszyk i checkout nie mogą być cachowane tak jak pozostałe strony sklepu - wymagają oddzielnej konfiguracji w systemach cache. Minimum to: nazwa produktu z linkiem do karty produktu, miniaturka zdjęcia, cena jednostkowa, ilość (edytowalna), cena łączna dla danej pozycji i suma całości. Dobrze jeśli koszyk pokazuje też szacowany koszt dostawy jeszcze przed przejściem do checkoutu - brak tej informacji jest jedną z głównych przyczyn porzucania zamówień.Najczęstsze pytania
Dlaczego produkty znikają z koszyka po zamknięciu przeglądarki?
Czym różni się koszyk od strony zamówienia (checkout)?
Ile czasu koszyk przechowuje wybrane produkty?
Czy sklep może odzyskać porzucone koszyki?
Czy koszyk zakupowy musi być osobną stroną?
Co to znaczy, że koszyk jest dynamiczny?
Jakie informacje musi pokazywać koszyk?
Potrzebujesz pomocy z projektem?
Robię strony WordPress i sklepy Shoper od 2500 zł. Partner Shoper, 120+ projektów.
- Odpowiedź w 24h
- Certyfikowany Partner Shoper
- 120+ zrealizowanych projektów
- Zgodność z RODO, pełna ochrona danych