SHORT ANSWER
Shopify imports redirects from a csv with the header Redirect from,Redirect to: admin, Content, Menus, URL redirects, import. Both columns are paths starting with a slash, the target may be a full url when it points at another site, and there is no wildcard of any kind, so every redirected url is its own row. Silentfrog’s shopify format is that file, with directory rules already written out as the individual urls they cover.
Which file do I start from?
In Silentfrog, pick shopify under for in the export and the download is already this file: the Redirect from,Redirect to header, paths with a leading slash, and every directory rule written out row by row, because Shopify has no wildcards. Pages that kept their url, rows still unmatched and unverified needs-review rows are left out of it, so nothing gets imported that nobody looked at (the two downloads). The rest of this page says what is in the file and how the import behaves, and it works just as well for a two-column csv of path pairs from anywhere else.
The generic csv next to it is the audit trail: absolute urls, confidence, match type, the unmatched rows with an empty target. Keep it with the project, do not import it.
site settings → publishing → 301 redirects, or the data api
the two export buttons — webflow csv and generic csv — next to the option that includes needs-review matches.
From another csv to Shopify's csv
Redirect from,Redirect to /pages/about-us,/pages/about /blogs/news/old-post,/blogs/journal/old-post /products/discontinued-lamp,/collections/lamps
- Replace the header with
Redirect from,Redirect to. - Delete any row with
(.*)on the left. Shopify has no wildcards, so a directory rule has to be expanded into the urls it covers, which is what Silentfrog’s shopify format does on its own. - Check the left column for the store’s own prefixes (next section).
EXAMPLE
a map with 380 rows and one wildcard rule covering 412 blog posts: the shopify file has 792 rows, all of them importable.
Paths Shopify will not redirect
The store’s own routes are fixed. A row whose Redirect from is one of these is refused or ignored:
/products /collections /collections/all /collections/vendors /collections/types /cart /checkout /account /orders /search /apps /application /services /shop /a /community /tools
A single product or collection url is fine, /products/old-handle to /products/new-handle is the most common redirect in a store. It is the bare prefix that cannot be moved. If the old site had a folder called /shop or /services, those urls need a target on the new store that is not under a reserved prefix, and they need it one by one.
Redirects the store already has
Shopify creates a redirect automatically whenever a handle is changed, so most stores already carry hundreds. The import dialog has a checkbox to overwrite existing redirects with the same Redirect from path. Tick it when the new map is the truth. Leave it unticked and rows that collide are skipped, and the old rule keeps winning.
Export the existing list first, from the same page, and look for chains: an old rule whose target is a Redirect from in your new file. Change the old rule to the final target, or the first url takes two hops.
After the import
- The page shows how many rows were imported. If the number is lower than the file, the difference is reserved prefixes or collisions.
- Crawl the old url list against the live store. One 301, then 200, for each row. Shopify also adds its own redirects for the
wwwand https forms, so a second hop there is normal; a second hop between two of your own paths is not. - A redirect for a product that is still published does nothing; unpublish or delete the product first.
- Watch Search Console for the following weeks: pages with redirect up, not found flat.
In short
- Content, Menus, URL redirects, import; header Redirect from,Redirect to; paths with a leading slash.
- No wildcards: the shopify format writes directory rules out row by row.
- The store's own prefixes cannot be redirected; single product and collection urls can.
- Tick overwrite existing redirects when the new map should win; flatten chains in the old list first.
- Compare the imported count to the file, then crawl the old urls against the live store.