Powrót do bazy wiedzy

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.

PoziomZakres konfiguracjiTypowe zastosowanieWspólny koszyk?
WebsitePłatności, ceny, klienciRóżne kraje / markiNie
StoreKategorie, katalogRóżne asortymentu w ramach jednej markiW ramach Website
Store ViewJęzyk, tłumaczenia, walutaJęzyki w ramach jednego sklepuTak

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.

Rozpocznij Ekspansję Multistore