Lepsza dokumentacja pomocy
Napisana i utrzymywana dla marek i agencji, które przeprowadzają migrację witryny. Zwłaszcza jeśli jesteś małym zespołem, który musi wykorzystać każdą godzinę. Ten przewodnik pomoże Ci zbudować strategię precyzyjnego wykonania przekierowań 301, jeśli migrujesz na Shopify. Konkretnie, ten dokument pomoże Ci, jeśli migrujesz:
- Z Wordpressa
- Z Magento
- Z Salesforce
- Z Sitecore
- Z BigCommerce
- Z Webflow
- Z własnoręcznie zbudowanej witryny w PHP
Jeśli podejmujesz projekt obejmujący złożone mapowania przekierowań 301 i potrzebujesz zespołu, który żyje tym konkretnym rodzajem pracy, odezwij się do nas.
Logika przekierowań URL w Shopify: przegląd
Oficjalną dokumentację pomocy Shopify o przekierowaniach URL znajdziesz tutaj. To zwięzły dokument z ogólnymi wskazówkami, po które menedżer sklepu Shopify może sięgnąć, żeby dodać pojedyncze i masowe przekierowania 301. Brakuje w nim szczegółów o tym, jakie typy adresów URL sklep Shopify obsługuje natywnie, a ten raport ma wypełnić te luki.
Podsumowanie ustaleń o działaniu przekierowań URL w Shopify
- Logika przekierowań URL w Shopify jest bardzo solidna.
- W naszym teście 100 różnych formatów ciągów URL Shopify obsłużył funkcjonalnie 99 ze 100 typów.
- Prawdziwa trasa witryny zawsze wygrywa z przekierowaniem, po cichu.
- Natywny system nie obsługuje symboli wieloznacznych w przekierowaniach URL.
- Aktualizowanie istniejących ścieżek przekierowań było łatwe za pomocą narzędzia importu, o ile trzymasz się nieudokumentowanych zasad Shopify.
- Istnieją limity łącznej liczby przekierowań, którymi zarządzają sklepy Shopify i Shopify Plus.
- Istnieją limity łącznej liczby znaków w ciągu przekierowania URL.
- Zapobieganie łańcuchom jest częściowe. Shopify blokuje jeden kierunek, a kolejność tworzenia i tak może zostawić działający łańcuch.
- Dla adresów URL z parametrami istnieje wiele wyjątków i reguł.
- Interfejs zarządzania przekierowaniami URL jest przyjazny, ale przydałoby mu się więcej szczegółów.
- Testy nie objęły opcji przekierowań dostępnych dla Hydrogen i Oxygen.
- Obecnemu systemowi przekierowań URL w Shopify dajemy ocenę przydatności 85%.
Ocenę obniżyliśmy o 5% za brak obsługi symboli wieloznacznych, o 1% za jedyny typ ciągu URL, którego nie obsłużył, o 2% za limity długości znaków w URL, o 3% za dziwne zachowanie przy adresach z parametrami i o 4% za brak istotnych informacji o zarządzaniu danymi w interfejsie przekierowań.
Pierwsze testy 19 czerwca 2024. Ponowne testy 27 lipca 2026 na działającym sklepie Shopify w planie standardowym, przez Admin GraphQL API i na żywych żądaniach do witryny. To, co zmieniło się między nimi, znajdziesz w dzienniku zmian.
Nasza metodyka testowania przekierowań
Naszymi testami chcieliśmy odpowiedzieć na kilka pytań, żeby pomóc uniknąć pułapek w zasadach przekierowań 301 w Shopify:
- Jakich znaków albo kombinacji ciągów system przekierowań URL nie obsługuje?
- Czy istnieją limity długości ciągu URL?
- Czy jest maksymalna liczba rekordów w importach masowych?
- Czy system obsługuje przekierowania z symbolami wieloznacznymi?
- Czy po imporcie następuje jakieś automatyczne formatowanie albo konwersja ciągów, która zmienia oryginalne dane?
Dla odniesienia, oto nasza pełna lista adresów URL, której użyliśmy do przetestowania tych warunków. Testy przeprowadziliśmy w planie standardowym Shopify (nie ShopifyPlus).
11 ustaleń, które pomogą przy przekierowaniach w Shopify
Shopify nie radzi sobie z tymi typami ciągów URL
Jeden format ciągu ze stu, które przetestowaliśmy, nie da się niezawodnie przekierować. Shopify przyjmuje rekord i zapisuje go, ale przeglądarka, która o niego prosi, dostaje 404. Chodzi o ciąg ze średnikiem po znaku równości, na przykład:
/page?param=;semicolon
Godne uwagi jest to, że system Shopify zamieni znak specjalny średnika na wartość zakodowaną w URL, tak jak poniżej w tabeli przekierowań:
/page?param=%3Bsemicolon
Kiedy wpiszesz niezakodowany ciąg URL w pasku adresu przeglądarki, zwróci on błąd 404.
/page?param=;semicolon
/page?param=%3Bsemicolon
Takie działanie odbiega od obsługi innych znaków specjalnych. Jeśli w pasku adresu wpiszesz ciąg URL z niezakodowanymi znakami, na przykład z prawym nawiasem klamrowym:
/page?param=}
Shopify automatycznie go zakoduje przy odbiorze żądania i żaden błąd 404 nie wystąpi.
/page%7Drightbrace
Warto też odnotować, że inne warianty ciągu URL z niezakodowanym średnikiem przechodzą walidację w systemie przekierowań Shopify, na przykład:
/page;semicolon
Błąd 404 pojawia się wyłącznie wtedy, gdy niezakodowany średnik stoi po znaku równości, a awaria następuje w momencie żądania, a nie przy imporcie. Shopify zapisuje rekord ze średnikiem zakodowanym procentowo jako %3b, a przychodzący adres URL z surowym średnikiem nigdy nie pasuje do zakodowanego rekordu. Żądanie formy zakodowanej zwraca normalnie 301, więc tam, gdzie kontrolujesz linki przychodzące, kodowanie procentowe średnika rozwiązuje problem. Tam, gdzie surowy średnik przychodzi z zewnętrznych linków poza Twoją kontrolą, tego formatu nie da się niezawodnie przekierować.
Brak obsługi przekierowań z symbolami wieloznacznymi w Shopify
Przekierowania wieloznaczne nadal są na liście życzeń wielu użytkowników Shopify. Fora wsparcia są zalane prośbami o tę funkcję. Do dziś Shopify milczy o tym, gdzie miałaby się znaleźć w planie rozwoju produktu.
Na razie właściciele witryn planujący przejście na Shopify powinni wiedzieć, że natywne Shopify i ShopifyPlus tej opcji nie oferują.
Czym są przekierowania z symbolami wieloznacznymi?
Przekierowania wieloznaczne to rodzaj przekierowania URL, który pozwala skierować wiele adresów pasujących do określonego wzorca do jednego celu. Przydaje się to szczególnie przy migracji witryny, reorganizacji treści albo zarządzaniu dużą liczbą podobnych adresów. Zamiast ustawiać osobne przekierowanie dla każdego adresu, używasz znaku wieloznacznego (zwykle *), który reprezentuje dowolną sekwencję znaków.
Załóżmy, że przebudowujesz bloga i przenosisz wszystkie wpisy z katalogu /blog/ do /articles/. Zamiast ustawiać osobne przekierowania dla każdego wpisu, możesz użyć przekierowania wieloznacznego:
From: /blog/*
To: /articles/*
This wildcard redirect will automatically map:
/blog/post1 to /articles/post1
/blog/post2 to /articles/post2
/blog/post3 to /articles/post3
Upraszcza to proces przekierowania i zapewnia, że wszystkie adresy spod /blog/ trafią płynnie do nowej lokalizacji pod /articles/. Domyślne sklepy Shopify i ShopifyPlus nie mają tej możliwości bez wsparcia aplikacji.
Częścią, która kosztuje ludzi ruch, jest to, że Shopify przyjmuje składnię wieloznaczną bez słowa sprzeciwu. Rekord utworzony jako /old-blog/* zapisuje się, pojawia w tabeli przekierowań i nie zgłasza błędu. Gwiazdka jest zapisywana jako zwykły znak, więc jedynym adresem URL, jaki kiedykolwiek dopasuje, jest ten, który dosłownie zawiera gwiazdkę. To gorsze niż wprost odrzucenie, bo nic nie sygnalizuje awarii, dopóki prawdziwy ruch nie zacznie zwracać 404. Rozwiń wszystkie symbole wieloznaczne w pliku przekierowań do jawnych ścieżek, zanim go zaimportujesz.
Shopify robi, co może, żeby nie tworzyć łańcuchów przekierowań
Shopify ma zabezpieczenie przed łańcuchami i warto poznać jego granice, zanim mu zaufasz. Odrzuca przekierowanie, którego cel jest już źródłem innego przekierowania, komunikatem Target can't redirect to another redirect. Odrzuca przekierowanie wskazujące na samo siebie, komunikatem Target can't be the same as path, i blokuje bezpośrednie pętle dwukierunkowe.
W tym teście rekordy URL, które próbowaliśmy utworzyć, wyglądały tak, i nie zostały dopuszczone:
/BOTH redirects to /SHORT/SHORT redirects to /homepage
Czego zabezpieczenie nie robi, to sprawdzenia kierunku odwrotnego. Utwórz /a do /b, kiedy pod /b nic nie ma, a później utwórz /b do /c, a oba zostaną przyjęte. Shopify nigdy nie wraca do pierwszego rekordu i masz działający łańcuch:
GET /a
301 to /b
301 to /
final: 200, 2 hops
O powstaniu łańcucha decyduje sama kolejność tworzenia. Importy masowe stosują wiersze w kolejności z pliku, a pliki migracyjne rzadko są sortowane pod tym kątem, więc na tym zabezpieczeniu nie da się budować planu. Po każdym dużym imporcie weź próbkę przekierowań i policz skoki:
curl -sIL https://yourstore.com/old-path -o /dev/null -w "hops: %{num_redirects}
"
Wszystko powyżej 1 to łańcuch.
Czym są łańcuchy przekierowań?
Łańcuchy przekierowań powstają wtedy, gdy adres URL przekierowuje na inny adres, który z kolei przekierowuje na jeszcze inny, tworząc sekwencję, czyli “łańcuch” przekierowań. Może się to zdarzyć nieumyślnie, kiedy z czasem powstaje wiele przekierowań bez właściwego zarządzania.
Łańcuchy przekierowań są kłopotliwe, bo potrafią spowolnić ładowanie stron, zaszkodzić SEO i pogorszyć doświadczenie użytkownika. Każde kolejne przekierowanie dokłada opóźnienie, bo przeglądarka musi przejść przez każdy krok łańcucha, zanim dotrze do celu.
Na przykład, jeśli masz ustawione takie przekierowania:
/old-page redirects to /new-page
/new-page redirects to /latest-page
Kiedy użytkownik wejdzie na /old-page, najpierw zostanie przekierowany na /new-page, a potem natychmiast jeszcze raz na /latest-page, co daje łańcuch przekierowań.
Nowe zasady, których trzeba się trzymać przy ustawianiu przekierowań w Shopify
Naszym największym odkryciem w testach jest to, że dokumentacja Shopify jest nieaktualna, a reguła leżąca pod spodem jest prostsza niż udokumentowana lista zarezerwowanych prefiksów.
Prawdziwa trasa witryny zawsze wygrywa z przekierowaniem. Tam, gdzie pod adresem naprawdę istnieje strona, Shopify serwuje stronę i ignoruje przekierowanie. Rekord zostaje przyjęty, leży w tabeli przekierowań i nic nie robi. Bez błędu, bez ostrzeżenia. Zmienną nie jest prefiks. Zmienną jest istnienie trasy:
/products/ai-skillset-package-001 -> 200, the product page
/products/zz20260727 -> 301, the redirect fires
Ten sam prefiks, przeciwny wynik. Obejmuje to każdy działający produkt, kolekcję, stronę i wpis blogowy w Twoim sklepie, a nie tylko cztery ścieżki, które Shopify dokumentuje. Przekierowanie na opublikowanym adresie produktu jest bezczynne, dopóki ten produkt przestanie się otwierać, przez co kolejność ma znaczenie podczas migracji: najpierw wycofaj z publikacji albo usuń stary zasób, potem potwierdź, że przekierowanie działa.
Według Shopify, jeśli próbujesz przekierować cokolwiek, co zaczyna się od tych zarezerwowanych prefiksów, Twoje reguły przekierowań nie zostaną utworzone:
/apps
/application
/cart
/carts
/orders
/services
/products
/collections
/collections/all
Ustaliliśmy, że to nieprawda.
/apps/application/carts/orders/services/cart/people
Wyjątkiem był cart. Sam w sobie jest zarezerwowany, a działa dopiero wtedy, gdy występuje po nim podkatalog.
/cart/products/collections/collections/all
/cart/people/carts/people/products/people/collections/people
/cart/products/collections/collections/all
/services jest w tej grupie wyjątkiem i zachowuje się odwrotnie niż reszta. Przekierowanie na samym /services zwraca 301. Przekierowanie na czymkolwiek pod nim, na przykład /services/consulting, zwraca 404, mimo że rekord zapisuje się bez zastrzeżeń. Powtórzyliśmy ten test cztery razy w ciągu około 45 sekund, żeby wykluczyć opóźnienie propagacji, a rekord przez cały czas był obecny w tabeli. Każdy inny prefiks z tej grupy działał z podkatalogami.
Prawdopodobną przyczyną jest to, że Shopify routuje /services/* wewnętrznie na potrzeby proxy aplikacji i punktów systemowych, więc te żądania nigdy nie docierają do tabeli przekierowań, choć nie zweryfikowaliśmy tego mechanizmu bezpośrednio. Jeśli migrujesz witrynę z sekcją /services/, żadne z tych przekierowań nie zadziała. Przemapuj je na inną strukturę ścieżek albo obsłuż je w warstwie DNS lub proxy.
Tworzenie i aktualizowanie przekierowań URL jest w Shopify łatwe
Utworzenie nowego przekierowania jest w Shopify proste. Użytkownicy mają dwie opcje:
- Tworzenie pojedynczych przekierowań URL, po jednym naraz
- Masowe tworzenie przekierowań z pliku CSV - tutaj jest najnowszy szablon tego importu.
Dodając adresy URL do systemu Shopify, w polu źródłowym (from) możesz podać względne ścieżki URL, bez domeny najwyższego poziomu, a w polu docelowym (to) ścieżki bezwzględne albo względne. Przykład:
/example_product.php
Tworzenie pojedynczych przekierowań URL
Reguły przekierowań, które ma Shopify, nie pozwolą Ci utworzyć tego samego przekierowania URL dwa razy przy użyciu interfejsu pojedynczego przekierowania.
Kiedy adres znajdzie się już w tabeli “Redirect from”, próba dodania go ponownie skończy się błędem.
Jeśli chcesz zaktualizować pojedynczy rekord URL, musisz znaleźć go w tabeli przekierowań albo skorzystać z metody importu masowego. Jeśli adres, który już istnieje, znajdzie się w pliku importu masowego, pole “Redirect to” tego rekordu zostanie zaktualizowane wartością z pliku CSV.
Radzimy zawsze importować przekierowania w rozsądnych, wydajnych partiach. Na przykład, jeśli masz 10 000 przekierowań URL, importuj po 1000 naraz i sprawdzaj je, jeśli masz na to czas. Lepiej wyłapać błędy w mniejszych zbiorach danych, niż tropić je w większych.
Podchodź rozważnie do masowych przekierowań URL w Shopify
Żeby utworzyć przekierowania masowo, wypełnij plik CSV nagłówkami, których wymaga Shopify, stwórz mapowania 1:1 i upewnij się, że wszystkie adresy mają postać ścieżek względnych. Jeśli stworzysz plik ze ścieżkami bezwzględnymi w polu “Redirect from” albo “Redirect to”, Shopify weźmie sprawy w swoje ręce. Oto kilka scenariuszy:
https://www.wislr.com/path/to/resource%20with
/path/to/resource%20with
www.wislr.com/unicode/test?value=%E2%9C%93%20co.wislr.com/mix/of%20encoded
/www.wislr.com/unicode/test?value=%E2%9C%93%20/co.wislr.com/mix/of%20encoded
wislr.com/nested/directory/structure?param1=value1
/wislr.com/nested/directory/structure?param1=value1
Wniosek jest taki, żeby dwa razy sprawdzić plik importu, zanim go użyjesz. Inaczej stworzysz reguły przekierowań URL, które nie działają tak, jak potrzebujesz.
Jeśli rekord przekierowania już jest w tabeli, a te same wartości znajdą się w pliku importu, Shopify zaktualizuje rekord najświeższymi danymi z pliku. Naszym zdaniem jest to bardzo pomocne, o ile chcesz, żeby ten rekord się zaktualizował. Tym bardziej warto dwa razy sprawdzić dane.
Shopify nie egzekwuje pułapu wierszy na plik. Jeden import z 1051 wierszami przeszedł bez ani jednej awarii w 48 sekund, co daje mniej więcej 1300 wierszy na minutę.
Partie po około 1000 wierszy nadal warto stosować, ale z innego powodu niż twardy limit. Mniejsze pliki psują się czytelniej. Jeśli import 20 000 wierszy pójdzie źle, masz znacznie mniejsze pojęcie, które wiersze go zepsuły, niż gdybyś puścił dwadzieścia plików i obserwował liczniki. Po każdym imporcie odczytaj createdCount, updatedCount i failedCount, bo niezerowy failedCount to jedyny sygnał, jaki dostaniesz, że wiersze zostały pominięte.
Ścieżka, która już jest w tabeli przekierowań, dostaje nadpisany cel i jest raportowana w updatedCount, zachowując swoje pierwotne id rekordu. Dzięki temu import CSV można bezpiecznie powtarzać, co przydaje się w trakcie migracji. Oznacza to też, że nieaktualny plik po cichu nadpisze poprawki, które wprowadziłeś ręcznie od czasu ostatniego importu.
Zlecić nam budowę mapy przekierowań.
Zmapowaliśmy przekierowania w ponad 100 migracjach, w tym w przenosinach 27 000 adresów URL na Shopify Plus. Budujemy plik i sprawdzamy go pod kątem każdego limitu z tej strony, zanim trafi do importu. Po przełączeniu sami odczytujemy żywe odpowiedzi, zamiast ufać temu, co mówi tabela przekierowań.
Limit rekordów przekierowań URL w Shopify
Wszystko, co dobre, ma swoje granice, a reguły przekierowań w Shopify nie są wyjątkiem. Dla przekierowań URL istnieją dwa progi.
Plany Shopify (nie Plus):
Maksymalnie 100 000 przekierowań URL
Plany ShopifyPlus:
Maksymalnie 20 000 000 przekierowań
Nie testowaliśmy tych limitów, to byłoby szaleństwo! To aktualne udokumentowane specyfikacje platformy. Miej je na uwadze, planując przekierowania i ustawiając priorytety dla adresów o największym ruchu i przychodzie. Z tego, co wiemy, Shopify tych limitów nie podnosi, mimo nieustannych próśb na forach wsparcia.
Limit znaków w adresach URL w Shopify
Tu robi się ciekawie z systemem przekierowań Shopify. Oficjalne wytyczne Shopify nie podają ścisłych limitów znaków.
Żeby zweryfikować limity znaków w adresie URL przekierowania, najpierw zbudowaliśmy i spróbowaliśmy zaimportować bardzo długie ciągi. Zaczęliśmy od adresu o długości 2000 znaków, bo przeglądarki obsługują żądania URI do 2083 znaków. Oto ta piękność w całej okazałości:
/2000aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBcccccccccccccccccccccccccccccccccccccccccccccccccccDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
Naszą początkową metodą był import adresu URL o długości 2000 znaków przez szablon masowych przekierowań i wtedy w Shopify zawyły alarmy. Progiem, który oficjalnie odkryliśmy, jest limit 1024 znaków dla ciągów przekierowań URL, wliczając w to prefiks w postaci ukośnika ‘/’.
- Passed Adres URL o długości 300 znaków
- Passed Adres URL o długości 600 znaków
- Passed Adres URL o długości 1000 znaków
- Failed Adres URL o długości 2000 znaków
Kilka ważnych i nieudokumentowanych zasad przekierowań, które warto znać w Shopify
Shopify normalizuje litery w Twoich ciągach URL. Oznacza to, że niezależnie od tego, czy wpiszesz wielką, czy małą literę, żądania tych różnych wzorców zostaną obsłużone tak samo. Wszystkie poniższe adresy trafią na tę samą stronę, nawet jeśli istnieją osobne rekordy:
/CASE/TEST.html
/case/test.html
/Case/Test.html
Pierwszeństwo przed pozostałymi ma ciąg zapisany małymi literami:
/case/test.html
W naszych testach, mimo że istnieją dwa unikalne rekordy “Redirect from” z różnymi wartościami “Redirect to”, dla obu rekordów zawsze serwowana jest strona /about.html:
#1
/Case/Test.html [redirect to] /homepage
#2
/case/test.html [redirect to] /about.html
Intrygujące i potencjalnie irytujące jest to, że Shopify pozwala wpisać wszystkie te unikalne wartości do tabeli przekierowań, a serwuje tylko jedną z nich. Radzimy uważnie przejrzeć dane, jeśli podejrzewasz, że Twoja taksonomia adresów URL może wpadać w takie wzorce, zanim zaimportujesz je do Shopify.
W przekierowaniach Shopify możesz używać bezwzględnych ścieżek URL
Nasz test wykazał, że bezwzględne ścieżki URL w przekierowaniach są w porządku, jeśli znajdują się w polu “Redirects to”. Mogą prowadzić do dowolnego adresu. Oto przykład, w którym ścieżka URL po zażądaniu przekierowuje na profil LinkedIn:
[Redirect from]
/Case/Test.html
[Redirect to]
https://www.linkedin.com/wislr
Poza tym w polu “Redirect to” Shopify nie usuwa domen najwyższego poziomu, nawet jeśli chodzi o Twój własny sklep Shopify.
Adresy URL z parametrami
W naszych testach Shopify zachowywał adresy URL z parametrami, z pewnymi wyjątkami. Jeśli masz adresy zaindeksowane z wieloma unikalnymi ciągami parametrów, te unikalne ciągi można dodać do tabel przekierowań Shopify i skierować je do osobnych celów. Ten test przeprowadziliśmy na powszechnej taksonomii tego typu adresów, czyli na parametrach UTM. Na przykład:
Ten ciąg URL jest w polu “Redirect from” w tabeli przekierowań i trafił do zamierzonego celu:
/how-is-pkl?utm_campaign=301s+in+2024&utm_content=blue&utm_id=3012024&utm_medium=display&utm_source=google&utm_term=redirects
Zmodyfikowaliśmy ciąg URL i usunęliśmy ostatni parametr ‘&utm_term=redirects’, co dało 404:
/how-is-pkl?utm_campaign=301s+in+2024&utm_content=blue&utm_id=3012024&utm_medium=display&utm_source=google
To zachowanie odtworzyliśmy w innych testach z innymi parametrami jako wartościami, co potwierdziło, że Shopify traktuje adresy z parametrami jak dosłowne ciągi. Nie skracają adresu do wersji bazowej, jeśli usuniesz parametr z adresu przekierowania, o ile ten adres nie istnieje w witrynie Shopify.
Żeby to dodatkowo potwierdzić, skierowaliśmy adres URL na samego siebie, na co Shopify domyślnie nie pozwala. Dostaniesz taki komunikat:
Ten wpis jest dopuszczalny, kiedy parametry znajdują się w polu “Redirect from”. Nie stanowi pętli przekierowań, ale na podstawie zachowania w przeglądarce nasz test pokazał, że Shopify ignoruje ten rekord. Kiedy żądany jest adres z pola “Redirect from”, Shopify serwuje pełny ciąg URL z parametrami, a nie stronę główną, której oczekiwałaby tabela:
Ten wpis jest dopuszczalny, ale Shopify nie dołączy parametrów do wczytywanej strony, tak jak zakłada reguła. Wczyta się tylko adres bazowy.
Dotyczy to ścieżek źródłowych z parametrami. Tam, gdzie ścieżka źródłowa przekierowania nie ma własnych parametrów, wszystko, co przyjdzie w żądaniu, zostaje przeniesione do celu:
GET /old-page -> 301 to /new-page
GET /old-page?utm_source=x -> 301 to /new-page?utm_source=x
Przekierowania nie usuną parametrów za Ciebie. Usuwanie musi się odbywać w warstwie nad Shopify.
Dopasowanie też nie jest dosłownym porównaniem ciągów. Shopify normalizuje zapisany rekord i przychodzące żądanie, zanim je porówna, więc wielkość liter i kolejność parametrów nie mają znaczenia. Wobec rekordu zapisanego jako /page?doe&name=john wszystkie warianty ?name=John&Doe, ?Doe&name=John i ?name=john&doe zwracają 301. Znaczenie ma to, które parametry są obecne: każdy parametr z zapisanej ścieżki musi pojawić się w żądaniu, a pominięcie jednego zwraca 404, a nie częściowe dopasowanie.
Nasza ostatnia obserwacja o adresach z parametrami jest taka, że Shopify w pewnych przypadkach przepisze dane, które mu dasz. Tak, Shopify przepisze dane URL, które mu przekażesz, dla niektórych parametrów.
Oto przykłady, w których nasze testy wychwyciły ten wzorzec.
Oryginalne dane przekierowania wczytane przez Shopify:
/test?name=John&Doe
Shopify przepisał ciąg tak, żeby ‘doe’ było pierwsze, i zamienił je na małe litery:
/test?doe&name=john
Wartości są zamieniane na małe litery razem z kluczami, więc tabela przekierowań porównana z plikiem, z którego powstała, wygląda tak, jakby import uszkodził dane.
Oryginalne dane przekierowania wczytane przez Shopify:
/user?name=John&age=30&active=true
Shopify przepisał ciąg, ustawiając nową kolejność wypisanych parametrów:
/user?active=true&age=30&name=John
Nasze testy sugerują, że Shopify stara się ustawić parametry w kolejności alfabetycznej. Zastanawialiśmy się, czy to nie błąd, skoro ustaliliśmy, że Shopify traktuje adresy z parametrami jak dosłowne ciągi, więc po co podważać tę regułę, przepisując kolejność parametrów. Obecnie nigdy nie uda Ci się zachować struktury ciągów URL z wieloma wartościami parametrów. Dla niektórych systemów zarządzania treścią może to mieć poważne konsekwencje.
Interfejs przekierowań URL w Shopify wymaga odświeżenia
Przy intensywnym korzystaniu z narzędzia przekierowań w Shopify jedne elementy doceniliśmy, a innych nam brakowało.
Doceniamy te funkcje:
- Przyciski i funkcjonalność masowego importu przekierowań
- Filtrowanie i szybkie wyszukiwanie w taksonomii adresów URL
- Eksport adresów URL
- Łatwość utworzenia pojedynczego adresu URL
Stwierdziliśmy, że narzędziu brakuje tych danych i funkcji:
- Łącznej liczby zaimportowanych adresów URL
- Łatwiejszego sposobu na skopiowanie i wklejenie więcej niż jednego adresu URL do systemu. Jeśli dodajesz więcej niż jeden adres naraz, musisz użyć dokumentu importu. Jednym z przypadków, w których kopiowanie i wklejanie by się przydało, jest zestaw adresów, które mają wszystkie wskazywać na ten sam cel.
Import jest szybki, cofnięcie importu już nie
Tworzenie przekierowań masowo idzie szybko. Usuwanie ich masowo już nie, a różnica jest na tyle duża, że zmienia sposób planowania importu.
| Operacja | Metoda | Zmierzony czas |
|---|---|---|
| Utworzenie 1051 przekierowań | Import CSV, jeden plik | 48 sekund |
| Usunięcie 1051 przekierowań | urlRedirectDelete, po jednym |
226 sekund |
Szybkie mutacje usuwania masowego są zablokowane. urlRedirectBulkDeleteBySearch, urlRedirectBulkDeleteByIds i urlRedirectBulkDeleteAll wymagają zakresu write_online_store_navigation oraz aktywnej sesji użytkownika. Aplikacja uwierzytelniająca się poświadczeniami klienta, a tak działa większość skryptów migracyjnych, nie może ich wywołać i zostaje z usuwaniem po jednym rekordzie.
Planuj importy tak, jakby były trudne do cofnięcia, bo takie są. Najpierw zweryfikuj plik na sklepie deweloperskim albo importuj w transzach, które jesteś gotów rozplątać ręcznie. Nie wypychaj pliku z 50 000 wierszy, którego nie przetestowałeś, w założeniu, że da się go szybko wycofać.
Import CSV i Admin API inaczej traktują duplikaty
Ten przewodnik jest napisany wokół przepływu z plikiem CSV, gdzie duplikat ścieżki aktualizuje istniejący rekord. API robi odwrotnie:
create /existing-path -> /pages/about
(where /existing-path already redirects to /)
REJECTED: "Path has already been taken"
Kto przenosi przepływ z CSV na Admin API, musi odpytać o istniejący rekord i wywołać urlRedirectUpdate albo usunąć rekord i utworzyć go na nowo. Prosty przeport logiki importu polegnie na każdej ścieżce, która już istnieje.
Jak przetestować przekierowania w Shopify po starcie
Wszystko powyżej opisuje, co Shopify przyjmie. Nic z tego nie mówi, czy zaimportowane przekierowania faktycznie działają na żywym sklepie, a to inne pytanie. Przekierowanie może zaimportować się czysto, pojawić się w panelu i wciąż nie robić tego, czego oczekiwałeś, gdy na drodze stanie motyw, aplikacja albo proxy.
Testuj spoza sklepu, a nie klikając po przeglądarce, bo przeglądarka ukrywa to, co musisz zobaczyć: kod statusu. Zażądaj starego adresu URL i odczytaj nagłówki odpowiedzi.
curl -sIL https://yourstore.example/old-product-url
W wyniku odczytaj trzy rzeczy:
- Kod statusu na pierwszym skoku. Chcesz
301.302jest tymczasowe i przekazuje wartość inaczej, co ma znaczenie, kiedy chodzi właśnie o trwałą przeprowadzkę. - Liczbę skoków. Każda linia
HTTP/w wyniku to jeden skok. Dwie albo więcej oznacza, że zbudowałeś łańcuch, a poprawką jest przestawienie pierwotnego źródła na cel końcowy, zamiast zostawiania kroku pośredniego. - Status końcowy. Ostatnia linia powinna mieć
200. Przekierowanie kończące się na404jest gorsze niż brak przekierowania, bo w arkuszu wygląda na załatwione.
Potem przetestuj kształty, o które łatwo zapomnieć. Zrób to samo sprawdzenie na adresie z parametrem śledzącym, żeby potwierdzić, że ciąg zapytania dotrze do celu, na domenie głównej oraz na www, a także po zwykłym http, a nie tylko po https. Przetestowaliśmy dokładnie to na żywym sklepie i parametr dotarł do celu w nienaruszonej postaci, ale chodzi o to, żeby zweryfikować to na swoim sklepie, a nie ufać ogólnej odpowiedzi, bo motyw albo aplikacja mogą zmienić wynik.
Jedno zachowanie, o którym warto wiedzieć, zanim wpadniesz w panikę: po zmianie albo usunięciu przekierowania węzeł brzegowy Shopify potrafi jeszcze przez około trzydzieści sekund serwować starą odpowiedź, podczas gdy wersja tego samego adresu z obejściem cache już zwraca nową. Daj temu minutę i przetestuj ponownie z dopisanym unikalnym ciągiem zapytania, zanim uznasz, że przekierowanie nie weszło.
Po pełną sekwencję wokół migracji, a nie pojedynczego przekierowania, sięgnij do listy kontrolnej migracji witryny, która obejmuje mapowanie, dzień startu i monitoring po starcie, w które to wszystko się wpisuje.
Podsumowanie
System zarządzania przekierowaniami 301, który ma Shopify, jest dobry dla większości firm, ale nie jest jeszcze na poziomie enterprise. Mamy nadzieję, że z czasem dojrzeje do przekierowań wieloznacznych i do większej liczby rekordów przekierowań w planach standardowym i plus. Możliwość korzystania z ich systemu przekierowań oraz różne typy formatów URL, które obsługuje, sprawiają, że oceniamy je wysoko pod względem przydatności.
Jeśli podejmujesz projekt obejmujący złożone mapowania przekierowań 301 i potrzebujesz zespołu, który żyje tym konkretnym rodzajem pracy, odezwij się do nas.
Dziennik zmian
Ten przewodnik został pierwszy raz opublikowany na podstawie testów z 19 czerwca 2024 i przetestowany ponownie 27 lipca 2026 na działającym sklepie Shopify w planie standardowym, przez Admin GraphQL API i na żywych żądaniach do witryny. Większość pierwotnych ustaleń się utrzymała. Dziewięć nie. Treść powyżej opisuje, co Shopify robi teraz, a tutaj jest to, co się ruszyło.
2024 Shopify nie pozwala Ci tworzyć łańcuchów przekierowań.
2026 Zabezpieczenie sprawdza tylko jeden kierunek. Odrzuca przekierowanie, którego cel jest już źródłem innego, ale nie odwrotnie, więc utworzenie /a do /b, a później /b do /c, zostawia działający łańcuch o dwóch skokach. O powstaniu łańcucha decyduje sama kolejność tworzenia.
/services2024 /services działa jako przekierowanie, tak jak /apps, /carts i /orders.
2026 /services działa samodzielnie i zawodzi z każdym podkatalogiem. /services/consulting zwraca 404, mimo że rekord się zapisuje. Każdy inny prefiks z tej grupy działa z podkatalogami.
2024 Cztery zarezerwowane prefiksy są ignorowane, gdy użyje się ich samodzielnie: /cart, /products, /collections, /collections/all.
2026 Obserwacje się trzymają, wyjaśnienie nie. Prawdziwa trasa witryny zawsze wygrywa z przekierowaniem, co obejmuje każdy działający produkt, kolekcję, stronę i wpis blogowy, a nie listę czterech ścieżek.
2024 Parametry nigdy nie są dodawane do wczytywanego adresu URL.
2026 Prawda tylko dla ścieżek źródłowych z parametrami. Tam, gdzie ścieżka źródłowa nie ma własnych parametrów, parametry z żądania są przenoszone do celu.
2024 Shopify traktuje adresy URL z parametrami jak dosłowne ciągi.
2026 Obie strony są normalizowane przed porównaniem, więc wielkość liter i kolejność nie mają znaczenia. Ścisły jest tylko zestaw parametrów, a pominięcie jednego zwraca 404.
2024 Parametry są układane alfabetycznie, a /test?name=John&Doe zapisuje się jako /test?Doe&name=John.
2026 Układanie alfabetyczne potwierdzone, a wielkość liter nie jest zachowywana. Ta sama ścieżka zapisuje się jako /test?doe&name=john, z wartościami zamienionymi na małe litery razem z kluczami.
2024 Shopify nie potrafił wczytać ciągu z niezakodowanym średnikiem po znaku równości.
2026 Wczytuje go bez problemu i zapisuje średnik jako %3b. Awaria następuje w momencie żądania, a żądanie formy zakodowanej zwraca 301.
2024 Importuj po 1000 wierszy naraz.
2026 To nie jest pułap. Jeden plik z 1051 wierszami zaimportował się bez ani jednej awarii w 48 sekund. Partie nadal są dobrą praktyką, bo mniejsze pliki psują się czytelniej.
2024 Shopify nie obsługuje przekierowań z symbolami wieloznacznymi.
2026 Nadal prawda, a przy tym przyjmuje tę składnię bez żadnego błędu. Gwiazdka jest zapisywana jako zwykły znak, więc nic nie sygnalizuje awarii, dopóki ruch nie zacznie zwracać 404.
2026 Utworzenie 1051 przekierowań zajęło 48 sekund. Usunięcie tych samych 1051 zajęło 226 sekund, bo mutacje usuwania masowego wymagają aktywnej sesji użytkownika, a token skryptowy nie może ich wywołać.
2026 Import CSV aktualizuje ścieżkę, która już istnieje. Admin API odrzuca ją komunikatem Path has already been taken, więc prosty przeport logiki importu polegnie na każdej istniejącej ścieżce.
Każde przekierowanie zwraca 301. Limit 1024 znaków ścieżki obejmuje początkowy ukośnik, przy czym 1027 zostało odrzucone, a 1015 przyjęte. Wielkość liter jest normalizowana, a pierwszeństwo mają małe litery. Import masowy usuwa protokół i domenę, zostawiając ścieżkę względną, natomiast pole celu zachowuje bezwzględny zewnętrzny adres URL w nienaruszonej postaci. Węzeł brzegowy potrafi serwować nieaktualną odpowiedź przez około trzydzieści sekund po zmianie.
Limity rekordów, 100 000 w planach standardowych i 20 000 000 w Plus, nie zostały powtórzone. Osiągnięcie ich jest technicznie możliwe teraz, gdy potok importu jest zmierzony, ale usuwanie idzie z prędkością mniej więcej 280 rekordów na minutę i bez skryptowego masowego cofania, więc potwierdzenie udokumentowanej liczby zostawiłoby żywy sklep ze śmieciowymi przekierowaniami na sześć godzin albo dłużej.
Najczęściej zadawane pytania
Komu ma pomóc baza wiedzy WISLR o przekierowaniach URL w Shopify?
Nasza baza wiedzy służy przede wszystkim markom i agencjom przeprowadzającym migracje witryn na Shopify. Szczególnie przydaje się małym zespołom, które muszą wykorzystać każdą godzinę, i pomaga klientom sprawnie dopasować oraz wykonać nawet 100 000 przekierowań URL.
Czy Shopify ma oficjalny dokument pomocy o przekierowaniach URL?
Tak, Shopify utrzymuje oficjalny dokument pomocy o przekierowaniach URL pod adresem help.shopify.com. Zawiera on ogólne wskazówki dotyczące dodawania pojedynczych i masowych przekierowań 301, a nasz przewodnik uzupełnia go o szczegółowe informacje o typach adresów URL i ograniczeniach platformy.
Jakich ciągów URL Shopify nie obsługuje?
Shopify ma tylko jeden nieobsługiwany format ciągu URL: ciągi z niezakodowanym znakiem średnika po znaku równości (np. /page?param=;semicolon). Wszystkie pozostałe formaty URL, łącznie z zakodowanymi średnikami i średnikami w innych miejscach, są obsługiwane.
Czy Shopify obsługuje przekierowania z symbolami wieloznacznymi albo wyrażeniami regularnymi?
Nie, Shopify obecnie nie obsługuje przekierowań z symbolami wieloznacznymi ani wzorców wyrażeń regularnych w swoim natywnym systemie przekierowań. To ograniczenie dotyczy zarówno standardowych sklepów Shopify, jak i Shopify Plus.
Czym są przekierowania z symbolami wieloznacznymi?
Przekierowania wieloznaczne pozwalają przekierować wiele adresów URL pasujących do określonego wzorca do jednego celu. Na przykład przekierowanie wszystkich adresów spod /blog/* do /articles/*. Choć ta funkcja jest często wyczekiwana, w natywnej funkcjonalności Shopify obecnie nie jest dostępna.
Czy Shopify potrafi uniknąć tworzenia łańcuchów przekierowań?
Tak, Shopify ma wbudowane zabezpieczenia przed łańcuchami przekierowań. System nie pozwoli Ci utworzyć przekierowania na adres URL, który jest już przekierowywany gdzie indziej.
Czym są łańcuchy przekierowań?
Łańcuchy przekierowań powstają wtedy, gdy adresy URL przekierowują przez kilka kroków, zanim dotrą do celu (np. A→B→C). Takie łańcuchy potrafią spowolnić ładowanie stron i pogorszyć wyniki SEO. System Shopify z założenia pomaga im zapobiegać.
Czy tworzenie i aktualizowanie przekierowań URL w Shopify jest łatwe?
Tak, Shopify daje dwie proste metody: tworzenie pojedynczych przekierowań URL w interfejsie oraz import masowy z pliku CSV. Obie obsługują ścieżki względne i bezwzględne.
Jak tworzyć masowe przekierowania URL w Shopify?
Masowe przekierowania można tworzyć narzędziem do importu CSV w Shopify. Zalecamy import w partiach po 1000 wierszy, bo łatwiej wtedy sprawdzać błędy i zarządzać całością. Szablon importu jest dostępny tutaj.
Czy Shopify ma maksymalny limit rekordów przekierowań URL?
Tak. Standardowe plany Shopify są ograniczone do 100 000 przekierowań URL, a sklepy Shopify Plus obsłużą do 20 000 000 przekierowań. Te limity są sztywne i nie da się ich podnieść.
Czy Shopify ma limity liczby znaków w przekierowaniach?
Tak, Shopify egzekwuje limit 1024 znaków dla ciągów przekierowań URL, wliczając w to prefiks w postaci ukośnika (’/’). Adresy dłuższe niż ten limit nie zostaną przyjęte przez system.
Czy istnieje narzędzie do walidacji adresów URL pod kątem zgodności z Shopify?
Shopify nie udostępnia oficjalnego narzędzia do walidacji, ale nasze szeroko zakrojone testy pokazały, że 99% standardowych formatów URL jest obsługiwane. Główne rzeczy do rozważenia to limit 1024 znaków i unikanie niezakodowanych średników po znaku równości.