Multistore: Wiele Sklepów, Jedna Instalacja
Magento 2 pozwala prowadzić dziesiątki sklepów, walut i języków z jednej bazy kodu i jednego panelu administracyjnego. To najpotężniejsza funkcja platformy – jeśli jest poprawnie skonfigurowana.
~60%
niższe koszty utrzymania vs osobne instalacje
1
baza danych i kod dla nieograniczonej liczby sklepów
50+
obsługiwanych walut i języków natywnie
Multistore to nie tylko oszczędność kosztów – to architektura, która pozwala na globalna ekspansję bez fragmentacji danych. Wspólna baza klientów, zsynchronizowane stany magazynowe MSI, jednorazowe aktualizacje bezpieczeństwa. Jednak błąd w konfiguracji hierarchii może spowodować, że sklepy zaczną "widzieć" nawzajem swoje zamówienia lub klienci trafią na nieprawidłowy język – dlatego fundamenty muszą być wykonane bezbłędnie.
Hierarchia Website – Store – Store View
Zrozumienie tej trójpoziomowej hierarchii to absolutna podstawa. Każdy poziom ma inną odpowiedzialność i inny zakres konfiguracji – błędne przypisanie ustawienia (np. ceny na poziomie Store zamiast Website) prowadzi do niespodzianych wyników.
| Poziom | Zakres konfiguracji | Typowe zastosowanie | Wspólny koszyk? |
|---|---|---|---|
| Website | Płatności, ceny, klienci | Różne kraje / marki | Nie |
| Store | Kategorie, katalog | Różne asortymentu w ramach jednej marki | W ramach Website |
| Store View | Język, tłumaczenia, waluta | Języki w ramach jednego sklepu | Tak |
MAGE_RUN_CODE i konfiguracja Nginx
Kluczem do działania Multistore jest przekazanie Magento informacji, który sklep ma obsłużyć dane żądanie. Robi się to przez zmienne środowiskowe MAGE_RUN_CODE i MAGE_RUN_TYPE ustawiane na poziomie serwera WWW (Nginx lub Apache). Bez tego wszystkie domeny będą wyswietlać domyślny sklep.
Konfiguracja Nginx i CLI dla Multistore
Fragment konfiguracji Nginx oraz komendy CLI do weryfikacji struktury sklepów i URLów bazowych.
# Fragment konfiguracji Nginx – przypisanie domeny do Store View:
server {
server_name sklep-de.pl;
fastcgi_param MAGE_RUN_CODE store_de;
fastcgi_param MAGE_RUN_TYPE store;
}
# CLI: lista wszystkich Website, Store i Store View:
php bin/magento store:list
# Sprawdzenie bazowego URL dla konkretnego Store View:
php bin/magento config:show web/unsecure/base_url --scope=stores --scope-code=store_de
# Ustawienie URL bazowego przez CLI (np. po migracji):
php bin/magento config:set --scope=stores --scope-code=store_de web/unsecure/base_url "https://sklep-de.pl/"
php bin/magento config:set --scope=stores --scope-code=store_de web/secure/base_url "https://sklep-de.pl/"
Hreflang i SEO Multistore – Google musi wiedzieć
Bez atrybutów hreflang Google może uznać Twoje wersje językowe za zduplikowaną treść i ukarze sklep duplikacją. Hreflang informuje robota wyszukiwarki, że strony są przetłumaczonymi odpowiednikami, nie kopiami. Magento 2 nie generuje hreflang natywnie – wymagany jest moduł lub manualna konfiguracja w blokach CMS.
Pro Tip: Hreflang i GeoIP w Nginx
Dwa uzupełniające się mechanizmy: hreflang dla Google, GeoIP dla użytkowników. GeoIP na poziomie Nginx – bez PHP, zero opóźnień.
<!-- Hreflang w <head> (np. przez CMS Block w layout XML): -->
<link rel="alternate" hreflang="pl" href="https://sklep.pl/" />
<link rel="alternate" hreflang="de" href="https://sklep-de.pl/" />
<link rel="alternate" hreflang="x-default" href="https://sklep.pl/" />
# GeoIP redirect w Nginx (wymaga modułu ngx_http_geoip2_module):
geoip2 /usr/share/GeoIP/GeoLite2-Country.mmdb { $geoip2_country_code country iso_code; }
map $geoip2_country_code $store_redirect {
DE https://sklep-de.pl$request_uri;
AT https://sklep-de.pl$request_uri;
}
if ($store_redirect) { return 302 $store_redirect; }
Wiele walut i języków – konfiguracja krok po kroku
Każdy Store View może używać innej waluty i pakietu językowego. Waluty są przeliczane automatycznie według kursów pobieranych z zewnętrznych serwisów (ECB, Yahoo Finance) przez Cron. Języki wymagają zainstalowania paczki językowej przez Composer oraz konfiguracji LOCALE dla Store View.
Instalacja paczki językowej
composer require mageplaza/magento-2-german-language-pack lub analogiczny pakiet. Następnie: bin/magento setup:upgrade && setup:static-content:deploy de_DE.
Kursy walut przez Cron
Stores → Currency → Currency Rates. Skonfiguruj automatyczną aktualizacją kursów (Scheduled Import). Cron musi działać poprawnie.
Ceny per-website
Stores → Configuration → Catalog → Price → Catalog Price Scope: Website. Dzięki temu możesz ustawić różne ceny dla różnych krajów.
Add Store Code to URLs
Stores → Configuration → Web → URL Options. Przy subdomain/subdirectory multistore zostaw wyłączone; przy multidomainowym – według strategii SEO.
Najczęstsze błędy konfiguracji Multistore
Wszystkie domeny pokazują domyślny sklep
Brak MAGE_RUN_CODE w konfiguracji Nginx lub niepoprawny MAGE_RUN_TYPE (website vs store).
Produkty nie widoczne w nowym sklepie
Produkt nie ma przypisanego Stock i Website w panelu. Każdy produkt musi być ręcznie przypisany do odpowiednich Website’ów w zakładce “Websites”.
Niepoprawny URL w e-mailach transakcyjnych
URL bazowy Store View nie jest ustawiony przez CLI/panel. E-maile generują linki do domyślnego sklepu zamiast właściwego.
Statyczny content nie jest wdrożony dla nowego locale
Po dodaniu Store View należy uruchomić setup:static-content:deploy de_DE – bez tego sklep wyświetla błędy CSS/JS.
Ceny takie same we wszystkich sklepach
Catalog Price Scope ustawiony na “Global” zamiast “Website”. Zmiana wymaga reindeksacji cen i może wpłynąć na istniejące zamówienia.
Google indeksuje zduplikowaną treść
Brak hreflang lub brak canonical tagów. Google traktuje wersje językowe jako duplicate content i obniża ranking wszystkich wersji.
Diagnostyka Multistore przez CLI
Szybka weryfikacja stanu konfiguracji wszystkich sklepów i indeksów – niezbędna po każdej zmianie struktury.
# Pełna lista sklepów z kodami i URL'ami:
php bin/magento store:list
# Weryfikacja URL bazowych wszystkich Store View:
php bin/magento config:show web/unsecure/base_url --scope=stores
# Wdrożenie statycznego contentu dla nowego języka:
php bin/magento setup:static-content:deploy pl_PL de_DE en_US -f
# Reindeksacja cen po zmianie Catalog Price Scope:
php bin/magento indexer:reindex catalog_product_price catalogrule_product catalogrule_rule
# Przebudowanie konfiguracji po zmianach w scope:
php bin/magento app:config:import && php bin/magento cache:flush
Multistore to jedna z najbardziej złożonych konfiguracji Magento – mały błąd w hierarchii potrafi sparaliżować sprzedaż na całym rynku. W Mage24.pl projektujemy architekturę Multistore od podstaw, konfigurujemy Nginx, hreflang, GeoIP i zapewniamy, że każdy sklep działa niezależnie i poprawnie.
Planujesz ekspansję na nowe rynki?
Zaprojektujemy i wdrożymy architekturę Multistore: domeny, języki, waluty i hreflang – gotowe do produkcji.