Skip to content

Redirects · § 1.6.1

Bulk-Uploading Shopify Redirects via CSV

Published:

What the CSV import does

The URL Redirects panel under Online Store > Navigation accepts a CSV file containing rows of (Redirect from, Redirect to) pairs. Each row becomes a 301 redirect on the storefront. The import is asynchronous — for large files, Shopify processes the redirects in the background, with completed rows visible in the panel as they commit. Single redirects are still possible (Add URL redirect button), but for any operation touching more than ~20 URLs, CSV is the only practical path.

Shopify's primary URL-redirect detail docs resolved to Online Store overview content during the May 2026 verification window1, so the exact file size limits, row limits, and asynchronous processing behaviour below are based on observed admin behaviour rather than a verbatim doc quote. The CSV import feature itself is real and accessible — you can see and use the Import button in admin today.

CSV format

Two columns: Redirect from and Redirect to. UTF-8 encoding. Comma-separated. Header row required. The Redirect from value is a path relative to the storefront origin (with or without leading slash, but consistency matters). The Redirect to value can be a relative path on the same store or an absolute URL on an external domain.

csv Minimal CSV format — six redirect rows
 Redirect from,Redirect to
/old-product-handle,/products/new-product-handle
/blog/old-post-slug,/blogs/news/new-post-slug
/category/sale,/collections/sale
/about,/pages/about-us
/contact.html,/pages/contact
/dresses/red-summer,/collections/dresses?filter.color=red 

The Shopify Import UI also provides a downloadable template CSV with the column headers pre-filled. Use that template as the starting point — the column names must match exactly, and the template guarantees the right format.

The bulk-import workflow

Open Online Store > Navigation > URL Redirects. Click Import. Upload the CSV. Shopify validates the file structure (column names, encoding) and then processes the rows asynchronously. The panel shows progress; failed rows are listed with the reason. After import, completed redirects fire immediately on the storefront — no publish step required.

The order of operations on a typical migration: (1) build the redirect map in a spreadsheet (columns: legacy URL, new Shopify URL, notes); (2) export the map as CSV with just the two required columns; (3) test on a small batch (50-100 rows) and verify the redirects fire correctly; (4) import the full file; (5) verify a sample of imported redirects with curl -I from a terminal; (6) submit the new sitemap to GSC and request reindex on priority URLs.

Common silent-skip patterns

The CSV import will skip rows without explicit error messages in the following cases: (1) the Redirect from path already has an existing redirect — Shopify keeps the existing one; (2) leading whitespace or trailing whitespace in the From or To column; (3) inconsistent leading slashes between rows (some with /, some without); (4) double-URL-encoded paths (e.g. %252F instead of %2F); (5) Redirect to pointing to a URL that doesn't exist on the storefront — the import accepts the row but the redirect lands on a 404.

The skip patterns are tedious to debug because Shopify often shows the row as 'imported' without flagging the silent issue. The mitigation pattern: normalize the CSV before import. Trim whitespace on both columns. Ensure every From path starts with /. URL-decode any encoded characters before import; Shopify handles encoding on the server side. And verify the Redirect to URLs exist on the storefront before importing (use a crawler against the new site to confirm each target returns 200).

Verifying the import

Three verification steps. (1) Spot-check 10 imported redirects in the panel UI; confirm From and To columns are intact. (2) Run curl -I against five randomly-selected From paths from a terminal; confirm HTTP 301 status and Location header pointing to the right destination. (3) Submit the updated sitemap to Google Search Console and watch GSC's Pages report over the next 7-14 days for the 'Page with redirect' and 'Not found (404)' counts.

bash Verify a single redirect from the terminal
 curl -I https://yourstore.com/old-product-handle
# Expected response:
# HTTP/2 301
# Location: https://yourstore.com/products/new-product-handle 

Google's redirects guidance4 confirms 301 as the right status for permanent redirects and the type that passes PageRank cleanly. Shopify treats every URL redirect as a 301 by default. If the curl response shows 302 (temporary redirect), the redirect was not created through the URL Redirects panel — check whether a theme-side JavaScript redirect or a Shopify Markets country-routing rule is intercepting the request first.