October 18, 2026
WordPress to Shopify redirects: mapping every WordPress URL
Shopify can't keep your WordPress URLs. Posts move under /blogs/, pages under /pages/, WooCommerce products under /products/, so every old URL that matters needs a 301 redirect to its closest Shopify equivalent. You add those redirects in Shopify's URL redirects screen, one at a time or by CSV import.
This guide covers the WordPress side of the move: every URL type a WordPress or WooCommerce site produces, and where each one should go. For Shopify's own URL patterns, handle rules and the paths it refuses to redirect, see Shopify URL structure and how to redirect into it.
Find out which permalink structure the site uses
WordPress sets post URLs under Settings > Permalinks. The WordPress docs list six options:
| Setting | Post URL looks like |
|---|---|
| Plain | /?p=123 |
| Day and name | /2024/05/28/glaze-guide/ |
| Month and name | /2024/05/glaze-guide/ |
| Numeric | uses the post ID instead of the name |
| Post name | /glaze-guide/ |
| Custom structure | built from tags such as %year%, %category%, %postname% |
Plain is the default on a fresh WordPress install, per the same page. A custom structure that includes %category% puts the category in the path, and nested sub-categories appear as nested directories, so one post can sit at /glazes/stoneware/glaze-guide/.
The setting matters because Shopify redirects match on the path. With plain permalinks, every post and page URL is the home page plus a query string, and Shopify says URLs containing query strings "might not work as expected" with URL redirects. If the old site used ?p= URLs, create two or three test redirects and load them in a private window before you build the rest of the map around them.
Get the full list of old URLs before you switch
Pull the list while WordPress is still online. Once the domain points at Shopify, the old site can't tell you what it had.
- The core sitemap. Since WordPress 5.5, core publishes a sitemap index at
/wp-sitemap.xmlcovering public post types, public taxonomies, author archives and the home page. It is disabled if the site is set to discourage search engines. If an SEO plugin replaced it, use the plugin's sitemap instead. - WooCommerce products. WooCommerce can export products from Products > All Products > Export. Its documentation doesn't say the export includes product URLs or slugs, so open the file and check the columns before you rely on it for the "redirect from" side. Check whether the sitemap lists product URLs too.
- Search Console. Google's site-move guide suggests starting from the URLs in your sitemaps, then checking server logs for URLs visited recently and the Links report for pages with internal and external links. The Performance report has a Pages tab and an export button, which gives you the URLs that earn search traffic. Map those first.
WordPress URL to Shopify URL
The table uses WordPress and WooCommerce defaults. Your bases may differ, because the category and tag bases are editable under Settings > Permalinks (they default to category and tag and can't be removed) and WooCommerce lets you change its product, category and tag bases.
| WordPress URL | Example | Shopify destination | Redirect? |
|---|---|---|---|
| Post | /glaze-guide/ or /2024/05/glaze-guide/ |
/blogs/news/glaze-guide |
1:1 |
| Post, plain permalinks | /?p=123 |
/blogs/news/glaze-guide |
1:1, test first |
| Page | /about-us/ |
/pages/about-us |
1:1 |
| Page with more than one path segment | /about/team/ |
/pages/team (one handle) |
1:1 |
| WooCommerce product | /product/blue-mug/ |
/products/blue-mug |
1:1 |
| WooCommerce product, shop base | /shop/blue-mug/ or /shop/mugs/blue-mug/ |
/products/blue-mug |
1:1, test first |
| WooCommerce shop page | /shop/ |
/collections/all |
1:1, test first |
| Product category | /product-category/mugs/ |
/collections/mugs |
1:1 |
| Nested product category | /product-category/mugs/stoneware/ |
/collections/stoneware-mugs |
1:1 to a flattened handle |
| Product tag | /product-tag/gift/ |
a matching collection, if you build one | Only if it earns traffic |
| Post category | /category/glazes/ |
/blogs/news/tagged/glazes or /blogs/news |
Nearest parent |
| Post tag | /tag/stoneware/ |
/blogs/news |
Nearest parent, or 404 |
| Author archive | /author/sam/ |
/blogs/news |
Nearest parent, or 404 |
| Date archive | /2024/05/ |
none | 404 |
| Pagination | /category/glazes/page/2/ |
none | 404 |
| Comment pages | /glaze-guide/comment-page-2/ |
the post's new URL | 1:1 to the post, or 404 |
| Feed | /feed/, /glaze-guide/feed/ |
none | 404, or the blog if you have subscribers |
| Attachment page | the attachment's own page | the post or product that uses the file | Only if it earns traffic |
| Media file | /wp-content/uploads/2024/05/mug.jpg |
none | 404 unless it earns links |
Notes on the rows:
- Posts go to
/blogs/news/. Shopify stores get a default blog called News, and a post's URL is/blogs/{blog-handle}/{article-handle}. If you create a blog with a different name, or rename News, use that blog's handle instead. Shopify has no date folders, so/2024/05/glaze-guide/and/glaze-guide/both end up at the same handle. - Pages lose their parent. With pretty permalinks, WordPress appends a page's slug to the site URL, so a page sits directly under the domain. Shopify pages live at
/pages/{page-handle}, one handle per page. A WordPress page path with two segments needs a single handle on Shopify, and if two child pages share a slug under different parents, one of them gets a-1handle. Copy the "redirect to" value from the new store, not from a guess. - Nested categories flatten. Shopify collection URLs hold one handle, so
/product-category/mugs/stoneware/can't become/collections/mugs/stoneware. Pick a flattened handle such asstoneware-mugs. Don't redirect a nested category to its parent collection unless the parent really is the closest replacement. - Shop URLs share a prefix with a reserved path. WooCommerce's shop base options produce
/shop/{product}and/shop/{category}/{product}, and a shop page with the slugshopsits at/shop/. Shopify lists/shopamong the prefixes it won't redirect. Test one before you build the map. If it fails, those URLs can't be redirected from inside Shopify. - Post categories. WordPress categories don't have a direct Shopify equivalent. Shopify blogs can be filtered by article tag by appending
/tagged/{tag-handle}to the blog URL, so one option is to tag the imported posts with the old category name and redirect/category/glazes/to/blogs/news/tagged/glazes. Otherwise, send the category to the blog index. - Pagination, comment pages and feeds. WordPress builds these from fixed bases:
page,comment-pageandfeed. Shopify has no wildcard redirects (its redirect docs describe only exact "redirect from" paths), so each paginated URL would need its own row. They rarely deserve one. - Attachment pages may not exist. WordPress 6.4 turned attachment pages off for new sites, redirecting them to the attachment URL. Sites that upgraded kept them. Check your sitemap before mapping any.
What to leave as a 404
Not every WordPress URL deserves a redirect. Google's site-move guide says to make sure content you aren't moving returns a 404 or 410, and warns against redirecting many old URLs to one irrelevant page such as the home page, which may be treated as a soft 404. On Shopify, an old path with no page and no redirect stays broken, so leaving a URL out of the CSV is how you choose that outcome. Check a few after launch to confirm they return 404 rather than a page.
A sensible split:
- Redirect 1:1: every post, page, product and product category, plus anything in your Search Console export with clicks.
- Redirect to the nearest parent: post categories, tags and author archives that earned traffic or links.
- Leave to 404: date archives, pagination, feeds, empty tags, attachment pages and media files nobody links to.
Importing the redirects into Shopify
Shopify's help page puts redirects under Content > Menus, then URL redirects. From there:
- One at a time: click Create URL redirect, enter the old path in Redirect from and the new one in Redirect to, then save.
- In bulk: click Import, upload a CSV, review it, then click Import redirects.
Shopify's sample redirect CSV has two columns:
Redirect from,Redirect to
/glaze-guide/,/blogs/news/glaze-guide
/about-us/,/pages/about-us
/product/blue-mug/,/products/blue-mug
/product-category/mugs/stoneware/,/collections/stoneware-mugs
The sample uses paths starting with / in both columns. Shopify says to use a relative URL for targets on your primary domain and a full URL for anything outside it.
Three rules from the same page decide whether a row works:
- The old path must be broken. A redirect only fires when the "redirect from" URL would otherwise not load a page. If a Shopify page already lives at that path, the page wins.
- Each row is one exact path. The page describes no wildcard or pattern matching, so a WordPress rule like "everything under
/2024/" has to be written out as individual rows or left to 404. - There is a cap. A store can hold 100,000 redirects, or 20,000,000 on Shopify Plus.
WordPress structures such as /%postname%/ end in a slash, and Shopify's URL patterns don't. Test one redirect both with and without the slash before you import thousands.
Same domain, new domain, or a WordPress subdomain
- Same domain. If
example.commoves from WordPress to Shopify, Shopify serves the redirects once the domain points at the store. Google's Change of Address tool doesn't apply, because it is only for moves from one domain or subdomain to another, not for path changes within the same domain. - New domain. If the Shopify store uses a new domain, the old domain still has to redirect each URL to its new address. Shopify lets you connect extra domains and redirect them to your primary domain, but the page doesn't say whether the path is kept, so test a deep URL on the old domain after you connect it. This is a domain move, so Google's Change of Address tool applies.
- Blog stays on WordPress at a subdomain. If the store moves to Shopify but the blog stays on WordPress at
blog.example.com, add redirects in Shopify from each old post path to its full new URL. Shopify accepts a full URL as the target when it is outside your primary domain.
Whichever case applies, Google's advice is to keep redirects for as long as possible, generally at least one year.
If you'd rather not build the spreadsheet by hand, RedirX starts from your old and new URL inventories, proposes a Shopify destination for each WordPress URL, keeps every proposal in review until it is confirmed, and exports the approved redirects.