Een beter helpdocument
Geschreven en onderhouden voor de merken en bureaus die een sitemigratie uitvoeren. Zeker als je een klein team bent dat elk uur moet laten tellen. Deze gids helpt je een strategie te bouwen om 301-redirects nauwkeurig af te ronden als je naar Shopify migreert. Dit document helpt je specifiek als je:
- Migreert vanaf Wordpress
- Migreert vanaf Magento
- Migreert vanaf Salesforce
- Migreert vanaf Sitecore
- Migreert vanaf BigCommerce
- Migreert vanaf Webflow
- Migreert vanaf een zelfgebouwde PHP-site
Werk je aan een project met complexe 301-redirectmappings en heb je een team nodig dat precies dit soort werk dagelijks doet? Neem contact met ons op.
De URL-redirectlogica van Shopify: overzicht
Het officiële helpdocument van Shopify over URL-redirects vind je hier. Het is een strak document met algemene richtlijnen waar een Shopify-winkelbeheerder op kan terugvallen bij het toevoegen van losse en bulkmatige 301-redirects. Het mist details over de typen URL’s die een Shopify-winkel van huis uit aankan, en dit rapport is bedoeld om die gaten te vullen.
Samengevatte bevindingen over de URL-redirectfunctionaliteit van Shopify
- De URL-redirectlogica van Shopify is zeer robuust.
- Van de 100 verschillende URL-stringformaten die we testten, ondersteunde Shopify er functioneel 99 van de 100.
- Het eigen systeem ondersteunt geen wildcards voor URL-redirects.
- Bestaande URL-redirectpaden bijwerken ging eenvoudig met de importtool, zolang je de ongedocumenteerde regels van Shopify volgt.
- Er gelden limieten voor het totale aantal redirects dat Shopify- en ShopifyPlus-winkels beheren.
- Er gelden limieten voor het totale aantal tekens in een URL-redirectstring.
- Je kunt gelukkig geen ketens van 301-redirects aanmaken. (Gecorrigeerd in de hertest van 2026. De beveiliging controleert maar één richting.)
- Er bestaan veel uitzonderingen en regels voor URL’s met parameters.
- De interface voor het beheren van URL-redirects is gebruiksvriendelijk, maar kan meer detail gebruiken.
- De tests hebben de redirectopties voor Hydrogen en Oxygen niet onderzocht.
- We geven het huidige URL-redirectsysteem van Shopify een bruikbaarheidsscore van 85%.
De beoordeling ging 5% omlaag omdat wildcards niet worden ondersteund, 1% voor het enige URL-stringtype dat niet werkte, 2% voor de limieten op het aantal tekens, 3% voor het eigenaardige gedrag bij URL’s met parameters, en 4% voor essentiële beheerinformatie die in de redirect-UX ontbreekt.
De tests zijn uitgevoerd op 19 juni 2024.
Elke claim hier is opnieuw gecontroleerd op een live Shopify-winkel met een standaardplan, via de Admin GraphQL API en met echte verzoeken aan de storefront. De meeste bevindingen uit 2024 hielden stand. Negen deden dat niet, en twee daarvan draaien om wat we hadden gepubliceerd: de ketenbeveiliging controleert maar één richting en de volgorde waarin je records aanmaakt bepaalt of er een keten ontstaat, en een redirect op /services werkt wel terwijl alles daaronder een 404 geeft.
De bevindingen uit 2024 blijven staan waar ze staan. Elke correctie is gemarkeerd bij de claim waar hij op slaat, zodat iedereen die op de oorspronkelijke versie heeft gehandeld kan zien wat er is verschoven.
Onze testmethode voor redirects
We wilden met onze tests een paar vragen beantwoorden, om valkuilen in de 301-redirectregels van Shopify te vermijden:
- Welke tekens of stringcombinaties ondersteunt het URL-redirectsysteem niet?
- Gelden er limieten voor de lengte van een URL-string?
- Bestaat er een maximumaantal records voor bulkimports?
- Ondersteunt het systeem wildcard-redirects?
- Vindt er na de import automatische opmaak of conversie van strings plaats die de oorspronkelijke data verandert?
Ter referentie: hier is onze volledige lijst met URL’s waarmee we deze verschillende situaties hebben getest. De tests zijn uitgevoerd op een Shopify-standaardplan (niet ShopifyPlus).
11 bevindingen die helpen bij Shopify-redirects
Shopify gaat niet goed om met deze typen URL-strings
De lijst met URL-stringformaten die Shopify niet aankon is kort, met slechts één type string dat het niet kon inlezen. Strings met een puntkomma na het gelijkteken, zoals:
/page?param=;semicolon
Opvallend aan deze string is dat het systeem van Shopify de puntkomma omzet naar de URL-gecodeerde waarde, zo weergegeven in de redirecttabel:
/page?param=%3Bsemicolon
Voer je de niet-gecodeerde URL-string in de adresbalk van een browser in, dan krijg je een 404-fout.
/page?param=;semicolon
/page?param=%3Bsemicolon
Dit gedrag wijkt af van de manier waarop andere speciale tekens worden behandeld. Wordt er een URL-string met niet-gecodeerde tekens in de adresbalk ingevoerd, zoals het rechteraccolade-teken:
/page?param=}
dan codeert Shopify het automatisch bij ontvangst van het verzoek en treedt er geen 404-fout op.
/page%7Drightbrace
Ook opvallend: andere varianten van een URL-string met een niet-gecodeerde puntkomma worden wel geaccepteerd in het redirectsysteem van Shopify, zoals:
/page;semicolon
De data wijst erop dat de 404-fout alleen wordt getriggerd wanneer een niet-gecodeerde puntkomma na het gelijkteken staat.
De 404 is bevestigd, maar "kon het niet inlezen" is niet wat er gebeurt. Shopify accepteert het record en slaat het op met de puntkomma percentgecodeerd als %3b. De mismatch ontstaat op het moment van het verzoek, omdat een binnenkomende URL met een rauwe puntkomma nooit matcht met het gecodeerde record.
Een verzoek om de gecodeerde vorm geeft gewoon een 301. Waar je de inkomende links zelf beheert, lost percentcodering van de puntkomma het op. Waar de rauwe puntkomma binnenkomt via externe links die je niet beheert, is dit formaat niet betrouwbaar te redirecten.
Geen ondersteuning voor wildcard-redirects bij Shopify
Wildcard-redirects staan nog steeds op het verlanglijstje van veel Shopify-gebruikers. De supportfora staan vol met verzoeken om deze functie. Tot op heden heeft Shopify zich niet uitgelaten over waar dit op de productroadmap zou vallen.
Voorlopig moeten site-eigenaren die een overstap naar Shopify plannen weten dat standaard Shopify en ShopifyPlus deze optie niet bieden.
Wat zijn wildcard-redirects?
Wildcard-redirects zijn een vorm van URL-doorverwijzing waarmee je meerdere URL’s die op een bepaald patroon matchen naar één bestemming stuurt. Dat is vooral handig bij het migreren van een website, het herindelen van content of het beheren van grote hoeveelheden vergelijkbare URL’s. In plaats van voor elke URL een aparte redirect in te stellen, gebruik je een wildcard-teken (meestal *) dat voor een willekeurige reeks tekens staat.
Stel dat je je blog herstructureert en alle berichten van de map /blog/ naar /articles/ verplaatst. In plaats van voor elk blogbericht een aparte redirect in te stellen, kun je een wildcard-redirect gebruiken:
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
Dat vereenvoudigt het doorverwijzen en zorgt ervoor dat alle URL’s onder /blog/ naadloos naar hun nieuwe locatie onder /articles/ gaan. Op de datum van dit artikel bieden standaardwinkels van Shopify en ShopifyPlus deze mogelijkheid niet zonder ondersteuning van een app.
Nog steeds geen ondersteuning voor wildcards, en de hertest legde het deel bloot dat mensen echt verkeer kost. Shopify accepteert wildcard-syntax zonder morren. Een record dat je aanmaakt als /old-blog/* wordt opgeslagen, verschijnt in de redirecttabel en meldt geen fout. De asterisk wordt opgeslagen als een letterlijk teken, dus de enige URL die er ooit mee matcht, is een URL die letterlijk een asterisk bevat.
Dat is erger dan een regelrechte weigering, want niets signaleert de fout totdat echt verkeer 404's begint op te leveren. Schrijf alle wildcards in je redirectspreadsheet uit naar expliciete paden voordat je importeert.
Shopify doet zijn best om redirectketens te voorkomen
In de redirecttabel van Shopify zit een prettige beveiliging die voorkomt dat je ketens van redirects aanmaakt. Probeer je een redirect aan te maken naar een pagina die al als waarde in het veld “Redirect from” staat, dan krijg je een foutmelding.
In deze test probeerden we de volgende URL-records aan te maken, wat niet werd toegestaan:
/BOTH redirects to /SHORT/SHORT redirects to /homepage
Er bestaat een beveiliging, en die is smaller dan we beschreven. Hij controleert één richting, en tijdens de hertest is er langs die beveiliging heen een actieve keten van twee hops ontstaan.
Shopify weigert een redirect waarvan de bestemming al de bron van een andere redirect is, met Target can't redirect to another redirect. Het weigert een redirect die naar zichzelf wijst, met Target can't be the same as path, en het blokkeert directe lussen tussen twee records.
De omgekeerde richting controleert het niet. Maak /a naar /b aan terwijl er nog niets op /b bestaat, maak later /b naar /c aan, en allebei worden geaccepteerd. Shopify kijkt nooit meer naar het eerste record om, en je hebt nu een actieve keten:
GET /a
301 to /b
301 to /
final: 200, 2 hops
De aanmaakvolgorde alleen al bepaalt of er een keten ontstaat. Bulkimports passen rijen toe in de volgorde van het bestand, en migratiespreadsheets zijn zelden zo gesorteerd dat dit wordt voorkomen, dus je kunt niet op deze beveiliging plannen. Neem na elke grote import een steekproef van je redirects en tel de hops:
curl -sIL https://yourstore.com/old-path -o /dev/null -w "hops: %{num_redirects}\n"
Alles boven 1 is een keten.
Wat zijn redirectketens?
Redirectketens ontstaan wanneer een URL doorstuurt naar een andere URL, die op zijn beurt weer doorstuurt naar nog een URL, waardoor er een reeks of “keten” van redirects ontstaat. Dat kan ongewild gebeuren wanneer er in de loop van de tijd meerdere redirects worden ingesteld zonder goed beheer.
Redirectketens zijn problematisch omdat ze pagina’s trager laden, de SEO schaden en een slechte gebruikerservaring opleveren. Elke extra redirect voegt latentie toe, omdat de browser elke stap in de keten moet volgen voordat de eindbestemming in beeld komt.
Stel bijvoorbeeld dat je de volgende redirects hebt ingesteld:
/old-page redirects to /new-page
/new-page redirects to /latest-page
Bezoekt iemand /old-page, dan gaat die eerst naar /new-page en meteen daarna nog een keer door naar /latest-page, wat een redirectketen oplevert.
Nieuwe regels om te volgen bij het instellen van redirects op Shopify
Onze grootste ontdekking tijdens de tests is dat de documentatie van Shopify verouderd is. Volgens Shopify worden je redirectregels niet aangemaakt als je iets probeert door te sturen dat met deze gereserveerde prefixen begint:
/apps
/application
/cart
/carts
/orders
/services
/products
/collections
/collections/all
Dat bleek niet te kloppen.
/apps/application/carts/orders/services/cart/people
Cart was de uitzondering. Op zichzelf is dat pad gereserveerd, en het werkt zodra er een submap achter staat.
/cart/products/collections/collections/all
/cart/people/carts/people/products/people/collections/people
/cart/products/collections/collections/all
De waarnemingen hierboven houden stand. De verklaring niet, en de echte regel bestrijkt veel meer terrein dan een lijstje van vier prefixen.
Een echte storefrontroute wint altijd van een redirect. Waar er op een URL daadwerkelijk een pagina bestaat, serveert Shopify die pagina en negeert het de redirect. Het record wordt geaccepteerd, staat in je redirecttabel en doet niets. Geen foutmelding, geen waarschuwing.
De prefix is niet de variabele. Het bestaan van een route wel. Een redirect op een live product-URL werd geaccepteerd en stilzwijgend genegeerd, terwijl dezelfde prefix met een handle die niet bestaat een 301 gaf:
/products/ai-skillset-package-001 -> 200, the product page
/products/zz20260727 -> 301, the redirect fires
Behandel de lijst hierboven dus als voorbeelden en niet als de regel. Hij dekt ook elk live product, elke collectie, elke pagina en elk blogartikel in je winkel. Een redirect op een gepubliceerde product-URL doet niets zolang dat product nog laadt.
Bij een migratie maakt dat de volgorde belangrijk. Haal de oude bron eerst offline of verwijder hem, en bevestig daarna dat de redirect werkt. Maak je hem aan terwijl de pagina nog live is, dan lijkt het alsof er niets gebeurt.
/services is de uitzondering, en die werkt precies andersom. Een redirect op /services zelf geeft een 301. Een redirect op alles daaronder, zoals /services/consulting, geeft een 404, ook al wordt het record zonder morren opgeslagen. Dat is vier keer opnieuw getest over ongeveer 45 seconden om propagatievertraging uit te sluiten, waarbij het record steeds aanwezig was. Elke andere prefix in deze groep werkte wel met submappen. De waarschijnlijke oorzaak is dat Shopify /services/* intern routeert voor app-proxies en systeemeindpunten, zodat die verzoeken de redirecttabel nooit bereiken, al hebben we dat mechanisme niet direct geverifieerd.
Wie een site met een sectie /services/ migreert, moet weten dat geen van die redirects zal werken. Zet ze om naar een andere padstructuur, of handel ze af op je DNS- of proxylaag.
URL-redirects aanmaken en bijwerken is eenvoudig op Shopify
Een nieuwe redirect aanmaken is simpel op Shopify. Gebruikers krijgen twee opties:
- Losse URL-redirects aanmaken, één voor één
- Bulkmatig redirects aanmaken via een CSV-bestand, hier is de nieuwste template voor die import.
Bij het toevoegen van URL’s aan het systeem van Shopify kunnen gebruikers relatieve URL-paden zonder topleveldomein invoeren voor de oorsprong (from) en absolute of relatieve URL-paden voor de bestemming (to). Bijvoorbeeld:
/example_product.php
Losse URL-redirects aanmaken
De redirectregels van Shopify staan niet toe dat je dezelfde URL-redirect twee keer aanmaakt via de interface voor losse redirects.
Zodra een URL in de tabel onder ‘Redirect from’ staat, krijg je een foutmelding als je hem nog een keer probeert toe te voegen.
Wil je een los URL-record bijwerken, dan moet je het opzoeken in de redirecttabel of de bulkimportmethode gebruiken. Staat een URL die al bestaat in een bulkimportbestand, dan wordt het veld ‘Redirect to’ van dat record bijgewerkt met de waarde uit het CSV-bestand.
Ons advies is om redirects altijd in behapbare, efficiënte batches te importeren. Heb je bijvoorbeeld 10.000 URL-redirects, importeer er dan 1.000 per keer en controleer ze als je de tijd hebt. Het is beter om fouten in kleine datasets op te vangen dan ernaar te zoeken in grote.
Wees zorgvuldig met bulk-URL-redirects in Shopify
Om bulkmatig redirects aan te maken vul je het CSV-bestand met de headers die Shopify vereist, maak je de 1-op-1-koppelingen en zorg je dat alle URL’s als relatieve paden zijn opgemaakt. Maak je een bestand met absolute paden in het veld ‘Redirect from’ of ‘Redirect to’, dan neemt Shopify het heft in eigen handen. Hier zijn een paar scenario’s:
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
De les is om je importbestand goed te controleren voordat je het gebruikt. Anders maak je URL-redirectregels aan die niet doen wat je nodig hebt.
Bestaat een redirectrecord al in de tabel en staan dezelfde waarden in het importbestand, dan werkt Shopify het record bij met de meest recente data uit het importbestand. Dat vinden wij bijzonder handig, zolang je dat record ook echt wilt bijwerken. Des te meer reden om de data te controleren.
Ons advies is om redirects altijd in behapbare, efficiënte batches te importeren. Heb je bijvoorbeeld 10.000 URL-redirects, importeer er dan 1.000 per keer en controleer ze als je de tijd hebt. Het is beter om fouten in kleine datasets op te vangen dan ernaar te zoeken in grote.
Shopify handhaaft geen plafond van 1.000 rijen per bestand. Eén import van 1.051 rijen liep zonder enige fout door in 48 seconden, wat neerkomt op ongeveer 1.300 rijen per minuut.
Batches van rond de 1.000 blijven verstandig, om een andere reden dan een harde limiet. Kleinere bestanden falen leesbaarder. Gaat een import van 20.000 rijen mis, dan heb je veel minder zicht op welke rijen dat veroorzaakten dan wanneer je twintig bestanden had gedraaid en de tellingen had bekeken.
Lees na elke import createdCount, updatedCount en failedCount af. Een failedCount die niet nul is, is het enige signaal dat je krijgt dat er rijen zijn afgevallen.
Het hierboven beschreven gedrag bij duplicaten is precies zo bevestigd. Een pad dat al in de redirecttabel staat, krijgt een nieuwe bestemming en wordt geteld onder updatedCount, met behoud van het oorspronkelijke record-id. Daardoor kun je een CSV-import veilig opnieuw draaien, wat midden in een migratie echt nuttig is. Het betekent ook dat een verouderde spreadsheet ongemerkt de correcties overschrijft die je sinds de vorige import met de hand hebt gemaakt.
Laat ons de redirectmap bouwen.
We hebben redirects gemapt voor meer dan 100 migraties, waaronder een verhuizing van 27.000 URL's naar Shopify Plus. We bouwen het bestand en toetsen het aan elke limiet op deze pagina voordat het wordt geïmporteerd. Na de overstap lezen we de live responses zelf, in plaats van te vertrouwen op wat de redirecttabel zegt.
De limiet van Shopify op het aantal URL-redirectrecords
Aan alle goede dingen komt een eind, en de redirectregels van Shopify vormen daarop geen uitzondering. Er gelden twee drempels voor URL-redirects.
Shopify-plannen (niet Plus):
Maximaal 100.000 URL-redirects
ShopifyPlus-plannen:
Maximaal 20.000.000 redirects
We hebben die limieten niet getest, dat zou nogal wat zijn. Dit zijn de huidige gedocumenteerde specificaties van het platform. Houd ze in gedachten bij het plannen van je redirects en geef voorrang aan de URL’s die het meeste verkeer en omzet opleveren. Voor zover wij weten verhoogt Shopify deze limieten niet, ondanks het aanhoudende smeken op de supportfora.
De limiet van Shopify op het aantal tekens in URL’s
Hier wordt het pittig met het redirectsysteem van Shopify. De officiële richtlijnen van Shopify noemen geen harde tekenlimieten.
Om de limieten voor URL-tekens in een redirect vast te stellen, hebben we eerst zeer lange strings gebouwd en geprobeerd te importeren. We begonnen met een URL van 2.000 tekens, omdat browsers URI-verzoeken tot 2.083 tekens aankunnen. Hier is de schoonheid in kwestie:
/2000aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBcccccccccccccccccccccccccccccccccccccccccccccccccccDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
Onze eerste aanpak was om een URL van 2.000 tekens te importeren met de bulkredirect-template, en toen gingen de alarmbellen bij Shopify af. De drempel die we officieel vaststelden is een limiet van 1.024 tekens voor URL-redirectstrings, inclusief de slash ‘/’ aan het begin.
- Passed URL van 300 tekens
- Passed URL van 600 tekens
- Passed URL van 1.000 tekens
- Failed URL van 2.000 tekens
Enkele belangrijke en ongedocumenteerde redirectregels van Shopify
Shopify normaliseert alfabetische tekens in je URL-strings. Of je nu een hoofdletter of een kleine letter invoert, het bedient URL-verzoeken voor die verschillende patronen op dezelfde manier. De volgende URL’s gaan allemaal naar dezelfde pagina, zelfs als er losse records voor bestaan:
/CASE/TEST.html
/case/test.html
/Case/Test.html
De string met kleine letters krijgt voorrang op de andere:
/case/test.html
In onze tests werd, hoewel er twee unieke records voor “Redirect from” bestaan met verschillende waarden voor “Redirect to”, voor beide records altijd de pagina /about.html geserveerd:
#1
/Case/Test.html [redirect to] /homepage
#2
/case/test.html [redirect to] /about.html
Het is intrigerend en mogelijk irritant dat Shopify je al deze unieke waarden in de redirecttabel laat invoeren en er maar één van bedient. Ons advies: controleer je data zorgvuldig als je vermoedt dat je URL-taxonomie in deze patronen kan vallen, voordat je in Shopify importeert.
Je kunt absolute URL-paden gebruiken voor Shopify-redirects
Absolute URL-paden voor je redirects zijn prima, bleek uit onze test, mits ze in het veld “Redirects to” staan. Ze mogen naar elke gewenste URL wijzen. Hier is een voorbeeld waarbij een URL-pad bij aanvraag doorstuurt naar een LinkedIn-profiel:
[Redirect from]
/Case/Test.html
[Redirect to]
https://www.linkedin.com/wislr
Ook verwijdert Shopify in het veld “Redirect to” geen topleveldomeinen, zelfs niet als het om je eigen Shopify-winkel gaat.
URL’s met parameters
In onze tests behield Shopify URL’s met parameters, met enkele uitzonderingen. Heb je URL’s die met veel unieke parameterstrings zijn geïndexeerd, dan kun je die unieke strings aan de redirecttabellen van Shopify toevoegen en naar unieke bestemmingen sturen. We deden deze test met een gangbare taxonomie voor dit type URL’s: UTM-parameters. Bijvoorbeeld:
Deze URL-string staat in het veld “Redirect from” van de redirecttabel en kwam op de bedoelde bestemming uit:
/how-is-pkl?utm_campaign=301s+in+2024&utm_content=blue&utm_id=3012024&utm_medium=display&utm_source=google&utm_term=redirects
We hebben de URL-string aangepast en de laatste parameter ‘&utm_term=redirects’ verwijderd, wat een 404 opleverde:
/how-is-pkl?utm_campaign=301s+in+2024&utm_content=blue&utm_id=3012024&utm_medium=display&utm_source=google
Dit gedrag is in andere tests met andere parameters als waarden gereproduceerd, wat bevestigde dat Shopify URL’s met parameters als letterlijke strings behandelt. Ze korten de URL niet in tot de basis-URL als je een parameter uit een redirect-URL weghaalt, zolang de URL niet op de Shopify-site bestaat.
Om dat verder te bevestigen lieten we een URL naar zichzelf wijzen, wat Shopify standaard niet toestaat. Dan krijg je deze melding:
Deze invoer is wel toegestaan wanneer de parameters in het veld “Redirect from” staan. Het vormt geen redirectlus, maar op basis van het gedrag in de browser bleek uit onze test dat Shopify dit record negeert. Wordt de URL uit “Redirect from” opgevraagd, dan serveert Shopify de volledige URL-string met parameters en niet de rootpagina die je op basis van de tabel zou verwachten:
Deze invoer is toegestaan, maar Shopify plakt de parameters niet achter de pagina die laadt, zoals de regel verwacht. Er laadt alleen de root-URL. Parameters worden nooit toegevoegd aan de URL die laadt:
Onze laatste waarneming over URL’s met parameters is dat Shopify de data die je aanlevert in sommige gevallen herschrijft. Ja, Shopify herschrijft de URL-data die je aanlevert voor sommige parameters.
Hier zijn voorbeelden waarin onze tests dit patroon vonden.
Oorspronkelijke redirectdata die Shopify inlas:
/test?name=John&Doe
Shopify herschreef de string zodat ‘Doe’ het eerste parameterattribuut in de string werd:
/test?Doe&name=John
Oorspronkelijke redirectdata die Shopify inlas:
/user?name=John&age=30&active=true
Shopify herschreef de string naar een nieuwe volgorde van de parameters:
/user?active=true&age=30&name=John
Uit onze tests blijkt dat Shopify de parameters alfabetisch probeert te ordenen. We vroegen ons af of dit een bug was, want we hadden vastgesteld dat Shopify URL’s met parameters als letterlijke strings behandelt, dus waarom die regel ondermijnen door de parametervolgorde te herschrijven? Op dit moment krijg je URL-strings met meerdere parameterwaarden nooit met hun structuur intact terug. Dat kan grote gevolgen hebben voor sommige contentmanagementsystemen.
Drie correcties op deze sectie.
Parameters op het binnenkomende verzoek worden meegenomen naar de bestemming. De oorspronkelijke formulering zegt dat ze nooit worden toegevoegd aan de URL die laadt, en dat geldt alleen voor de bronpaden met parameters die hierboven zijn beschreven. Draagt het bronpad van de redirect zelf geen parameters, dan wordt alles wat op het verzoek binnenkomt eraan geplakt:
GET /old-page -> 301 to /new-page
GET /old-page?utm_source=x -> 301 to /new-page?utm_source=x
Redirects verwijderen geen parameters voor je. Dat moet in een laag boven Shopify gebeuren.
Het herschrijven zet ook om naar kleine letters, niet alleen de volgorde. Het uitgewerkte voorbeeld hierboven behoudt de hoofdletters, en Shopify doet dat niet. Een pad dat je aanlevert als /test?name=John&Doe wordt opgeslagen als /test?doe&name=john. Waarden worden samen met de sleutels omgezet naar kleine letters, dus een redirecttabel die je naast de bronspreadsheet legt, wekt de indruk dat de import de data heeft beschadigd.
Matchen is geen letterlijke stringvergelijking. Shopify normaliseert zowel het opgeslagen record als het binnenkomende verzoek voordat het ze vergelijkt, dus hoofdlettergebruik en parametervolgorde maken niet uit. Tegen een record dat is opgeslagen als /page?doe&name=john geven ?name=John&Doe, ?Doe&name=John en ?name=john&doe allemaal een 301.
Wat wel uitmaakt, is welke parameters aanwezig zijn. Elke parameter in het opgeslagen pad moet in het verzoek voorkomen. Laat er één weg en je krijgt een 404 in plaats van een gedeeltelijke match, dus het oorspronkelijke punt blijft overeind: een redirect met parameters werkt alleen voor precies die combinatie van parameters.
De UX van de URL-redirects van Shopify is toe aan een update
Tijdens ons intensieve gebruik van de redirecttool van Shopify merkten we dat we sommige onderdelen waardeerden en andere misten.
Deze functies waarderen we:
- Knoppen en functionaliteit voor bulkimport van redirects
- Filteren en snel zoeken in de URL-taxonomie
- Export van URL’s
- Het gemak waarmee je één URL aanmaakt
We vonden dat de tool deze gegevens en functionaliteit mist:
- Het totale aantal geïmporteerde URL’s
- Een makkelijkere manier om meer dan één URL te kopiëren en plakken in het systeem. Voeg je meer dan één URL tegelijk toe, dan moet je het importdocument gebruiken. Een situatie waarin kopiëren en plakken zou helpen, is wanneer een set URL’s allemaal naar dezelfde bestemming moet wijzen.
Importeren gaat snel, een import terugdraaien niet
Toegevoegd na de hertest van 27 juli 2026.
Bulkmatig redirects aanmaken gaat snel. Ze bulkmatig verwijderen niet, en het verschil is groot genoeg om je planning van een import te veranderen.
| Handeling | Methode | Waargenomen |
|---|---|---|
| 1.051 redirects aanmaken | CSV-import, één bestand | 48 seconden |
| 1.051 redirects verwijderen | urlRedirectDelete, één voor één |
226 seconden |
De snelle mutaties voor bulkverwijdering zitten achter een slot. urlRedirectBulkDeleteBySearch, urlRedirectBulkDeleteByIds en urlRedirectBulkDeleteAll vereisen allemaal de scope write_online_store_navigation en een actieve gebruikerssessie. Een app die zich authenticeert met client credentials, de manier waarop de meeste migratiescripts draaien, kan ze niet aanroepen en moet record voor record verwijderen.
Plan je imports alsof ze moeilijk terug te draaien zijn, want dat zijn ze. Valideer het bestand eerst op een development store, of importeer in tranches die je met de hand wilt kunnen terugdraaien. Duw geen bestand van 50.000 rijen door dat je niet hebt getest, in de veronderstelling dat je het snel kunt terugdraaien.
CSV-import en de Admin API gaan anders om met duplicaten
Toegevoegd na de hertest van 27 juli 2026.
Deze gids is geschreven rond de CSV-workflow, waarin een dubbel pad het bestaande record bijwerkt. De API doet het omgekeerde:
create /existing-path -> /pages/about
(where /existing-path already redirects to /)
REJECTED: "Path has already been taken"
Wie een CSV-workflow overzet naar de Admin API, moet het bestaande record opvragen en urlRedirectUpdate aanroepen, of verwijderen en opnieuw aanmaken. Een rechtstreekse overzetting van de importlogica faalt op elk pad dat al bestaat.
Hoe je je Shopify-redirects test na de livegang
Alles hierboven beschrijft wat Shopify accepteert. Niets ervan vertelt je of de redirects die je hebt geïmporteerd ook echt werken op de live winkel, en dat is een andere vraag. Een redirect kan foutloos importeren, in de admin verschijnen en toch niet doen wat je verwachtte zodra een thema, een app of een proxy in het pad zit.
Test van buiten de winkel in plaats van door in een browser rond te klikken, want een browser verbergt precies wat je moet zien: de statuscode. Vraag de oude URL op en lees de responsheaders.
curl -sIL https://yourstore.example/old-product-url
Let in de uitvoer op drie dingen:
- De statuscode op de eerste hop. Je wilt
301. Een302is tijdelijk en geeft waarde anders door, wat uitmaakt als het hele punt een permanente verhuizing is. - Het aantal hops. Elke
HTTP/-regel in de uitvoer is één hop. Twee of meer betekent dat je een keten hebt gebouwd, en de oplossing is de oorspronkelijke bron rechtstreeks op de eindbestemming te richten in plaats van de tussenstap te laten staan. - De uiteindelijke status. De laatste regel moet
200zijn. Een redirect die op een404eindigt is erger dan geen redirect, want in je spreadsheet ziet hij eruit alsof hij is afgehandeld.
Test daarna de vormen die je makkelijk vergeet. Draai dezelfde controle op een URL met een trackingparameter om te bevestigen dat de querystring de bestemming haalt, op het apex-domein naast www, en over gewoon http en niet alleen https. We hebben precies dit op een live winkel getest en de parameter kwam intact op het doel aan, maar het punt is dat je het op je eigen winkel verifieert in plaats van te vertrouwen op een algemeen antwoord, omdat een thema of een app de uitkomst kan veranderen.
Eén gedrag is het weten waard voordat je in paniek raakt: nadat je een redirect hebt gewijzigd of verwijderd, kan een edge node van Shopify het oude antwoord ongeveer dertig seconden blijven serveren terwijl een cache-busted versie van dezelfde URL al het nieuwe antwoord geeft. Geef het een minuut en test opnieuw met een unieke querystring erachter voordat je concludeert dat de redirect niet is aangeslagen.
Voor de volledige volgorde rond een migratie in plaats van één losse redirect kun je de checklist voor sitemigraties doorlopen, die de mapping, de dag van livegang en de monitoring erna behandelt waar dit onderdeel van is.
Tot slot
Het systeem dat Shopify heeft voor het beheren van 301-redirects is goed voor de meeste bedrijven, maar is nog niet van enterprise-niveau. We hopen dat ze het na verloop van tijd uitbreiden met wildcard-redirects en meer redirectrecords voor hun standaard- en plus-plannen. Doordat het redirectsysteem bruikbaar is en de meeste URL-formaten aankan, geven we het een sterke bruikbaarheidsscore.
Werk je aan een project met complexe 301-redirectmappings en heb je een team nodig dat precies dit soort werk dagelijks doet? Neem contact met ons op.
Veelgestelde vragen
Voor wie is de kennisbank van WISLR over Shopify URL redirects bedoeld?
Onze kennisbank helpt vooral merken en bureaus die een sitemigratie naar Shopify uitvoeren. Hij is extra waardevol voor kleine teams die elk uur moeten laten tellen, en helpt klanten om tot 100.000 URL-redirects efficiënt te matchen en af te ronden.
Heeft Shopify een officieel supportdocument voor URL-redirects?
Ja, Shopify onderhoudt een officieel helpdocument voor URL-redirects op help.shopify.com. Dat document geeft algemene richtlijnen voor het toevoegen van losse en bulkmatige 301-redirects; onze gids vult het aan met gedetailleerde specificaties over URL-types en beperkingen van het platform.
Welke URL-strings ondersteunt Shopify niet?
Shopify kent maar één niet-ondersteund URL-stringformaat: strings met een niet-gecodeerde puntkomma na het gelijkteken (bijvoorbeeld /page?param=;semicolon). Alle andere URL-formaten worden ondersteund, ook gecodeerde puntkomma’s en puntkomma’s op andere posities.
Ondersteunt Shopify redirects met wildcards of regex?
Nee, Shopify ondersteunt op dit moment geen wildcard-redirects of regex-patronen in zijn eigen redirectsysteem. Die beperking geldt zowel voor standaard Shopify- als voor Shopify Plus-winkels.
Wat zijn wildcard-redirects?
Met wildcard-redirects stuur je meerdere URL’s die op een bepaald patroon matchen naar één bestemming. Bijvoorbeeld alle URL’s onder /blog/* doorsturen naar /articles/*. De functie wordt vaak gevraagd, maar zit op dit moment niet in de standaardfunctionaliteit van Shopify.
Kan Shopify voorkomen dat er redirectketens ontstaan?
Ja, Shopify heeft ingebouwde beveiligingen om redirectketens te voorkomen. Het systeem staat niet toe dat je een redirect aanmaakt naar een URL die elders al wordt doorgestuurd.
Wat zijn redirectketens?
Redirectketens ontstaan wanneer URL’s via meerdere stappen doorsturen voordat ze de eindbestemming bereiken (bijvoorbeeld A→B→C). Zulke ketens vertragen het laden van pagina’s en schaden de SEO-prestaties. Het systeem van Shopify helpt ze door zijn opzet te voorkomen.
Is het makkelijk om URL-redirects aan te maken en bij te werken op Shopify?
Ja, Shopify biedt twee eenvoudige methoden: losse URL-redirects aanmaken via de interface en bulkimport via een CSV-bestand. Beide methoden ondersteunen relatieve en absolute URL-paden.
Hoe maak je bulkmatig URL-redirects aan in Shopify?
Bulkmatige redirects maak je aan met de CSV-importtool van Shopify. We raden aan te importeren in batches van 1.000, zodat je fouten makkelijker opspoort en beheert. Een template voor de import vind je hier.
Kent Shopify een maximum aan het aantal URL-redirectrecords?
Ja. Standaardplannen van Shopify zijn beperkt tot 100.000 URL-redirects, terwijl Shopify Plus-winkels tot 20.000.000 redirects aankunnen. Die limieten liggen vast en kunnen niet worden verhoogd.
Hanteert Shopify een limiet op het aantal tekens in een redirect?
Ja, Shopify hanteert een limiet van 1.024 tekens voor URL-redirectstrings, inclusief de slash ‘/’ aan het begin. URL’s die langer zijn, worden door het systeem niet geaccepteerd.
Bestaat er een tool om URL’s te valideren op compatibiliteit met Shopify?
Shopify biedt geen officiële validatietool, maar uit onze uitgebreide tests blijkt dat 99 procent van de gangbare URL-formaten wordt ondersteund. Let vooral op de limiet van 1.024 tekens en vermijd niet-gecodeerde puntkomma’s na een gelijkteken.