Shopify redirect CSV upload failed? Check your bulk redirects before you import
Paste the CSV you are about to upload under Online Store, Navigation, URL redirects. You get every row Shopify would reject or quietly skip, with the line number and the fix, and a cleaned file to upload instead. Free up to 500 rows, no signup. Load an example.
| Line | Level | Row | Problem | Fix |
|---|
Fixed CSV
Why the import fails without telling you
Shopify's importer reads the file, creates what it can, and sends the result by email. The admin shows a count, not a row list. If 766 redirects went in as 740, the 26 that did not are somewhere in that email, and the usual reasons are boring: a spreadsheet export that put the full URL in Redirect from, a path without its leading slash, a row that points at /cart, or the same old path listed twice with two different targets.
The linter reads the file the way the importer does and stops on each of those. Red rows would not import or would not work. Amber rows import but deserve a look: a query string in Redirect from, a trailing slash, a target that redirects again. The fixed CSV applies the safe fixes and drops the rest, with each dropped row listed so nothing disappears without a reason.
Check every URL live
The file can be perfect and the redirects still wrong. Pro requests each old URL and each new one on your store.
Old paths that still return 200, targets that 404, targets that redirect again
With a Pro key, POST /api/lint/live takes the CSV and your store domain, fetches every Redirect from and Redirect to (8 at a time, 5 second timeout each, up to 2,000 rows per call) and reports the status of each. You see the old pages you are about to redirect while they still work, the targets that do not exist yet, and the targets that bounce once more, which the importer cannot see and which cost you a second 301 on every visit.
curl -X POST https://redirectforge.thememend.com/api/lint/live \
-H "x-api-key: YOUR_KEY" -H "Content-Type: application/json" \
-d '{"csv":"Redirect from,Redirect to\n/old-page,/new-page","host":"shop.example.com"}'
Frequently asked questions
Why did my Shopify redirect import fail?
Shopify's admin does not show which rows failed; it emails a result after the import. The usual causes are a Redirect from that contains the store domain, a missing leading slash, a reserved path such as /cart or /products, the same path listed twice with different targets, or an Excel export with stray spaces and a byte-order mark. The linter finds all of these before you upload.
What does Shopify require in the redirect CSV?
Two columns with the header Redirect from,Redirect to. Redirect from is a path on your store such as /old-page. Redirect to is a path or a full URL. There is no status column: every Shopify redirect is a 301. The format page has every rule with its source.
Which paths can't be redirected on Shopify?
Shopify's help lists /apps, /application, /cart, /carts, /orders, /services and /shop as prefixes that cannot be redirected, and /products, /collections and /collections/all as fixed paths. The linter marks these as errors. /admin, /checkout and /account are not on Shopify's list, so they get a warning.
What is in the fixed CSV?
Every row with a safe fix applied: the domain stripped from Redirect from, a leading slash added, spaces and hidden characters removed, chains pointed at their final target. Exact duplicates are removed. Rows that cannot be fixed, such as loops, reserved paths and conflicting targets, are dropped and listed so you can decide.
Is my file stored?
No. The CSV is parsed in memory inside the request and the report is returned. There is no database, no account and no model call. Free up to 500 rows; Pro removes the cap and checks every URL live on your store.
Moving to Shopify from another host? The converter turns an .htaccess, nginx, Netlify, Vercel or Cloudflare redirect file into a Shopify CSV, and back.