Field notes
Shopify URL Structure: Rules, Traps, and Migration in 2026
November 15, 2025
In the last 18 months we have audited 47 Shopify stores doing between $500K and $40M a year. On 41 of them, the single biggest technical SEO problem was not thin content, not Core Web Vitals, and not schema. It was the URL structure, specifically the redirects that were created when someone renamed a collection or a product handle without thinking about it. One DTC apparel brand we worked with lost 38 percent of their organic traffic in 11 days because a new merchandiser "cleaned up" 62 product handles. No 301s, no logs, just silence.
URL structure on Shopify is one of those topics where the platform gives you just enough rope. You can edit handles, you can build redirects, you can point custom domains, and you can serve multiple markets from the same store. What you cannot do is remove /collections/ from collection URLs, flatten the /products/ path, or fully control canonical behavior on tagged collection pages. Knowing where the fence is saves you from fighting it.
TL;DR
- Shopify forces the
/collections/,/products/,/pages/, and/blogs/prefixes. You cannot remove them without a reverse proxy, and reverse proxies are not worth it for 99 percent of brands. - Handles are editable but every edit creates a 301 redirect automatically. Shopify keeps those redirects forever, which is good, but the chain can get ugly if you rename the same handle three times.
- Subfolders beat subdomains for international. Shopify Markets supports both, pick subfolders unless you have a real legal or logistics reason.
- The safest URL migration on Shopify is a 4-step loop: inventory, map, redirect, monitor. Skip any step and you will lose rankings.
What Shopify controls vs what you control
The first thing to internalize is that Shopify is an opinionated platform. Unlike WooCommerce or a headless build on Next.js, you do not get to design the URL tree from scratch. Shopify has a fixed set of resource prefixes and a fixed set of places where handles appear. You can edit the slug, never the prefix.
Here is what that looks like in practice.
You control:
- The handle on every product, collection, page, blog, and article
- The custom domain that sits in front of the store (the apex plus any subdomains)
- URL redirects (bulk import, manual, or automatic on handle edits)
- Whether a collection is filtered by tag or by rule (affects whether you get parameterized URLs)
- The canonical tag inside the theme (you can override it)
- The robots.txt.liquid file (editable since 2021)
Shopify controls:
- The
/collections/,/products/,/pages/,/blogs/,/policies/,/cart,/checkoutpath prefixes - The trailing slash behavior (no trailing slash on canonical URLs, redirects enforced)
- The way variants and tagged collections generate URLs like
/collections/sale/products/blue-shirt - The
.myshopify.comdevelopment URL (permanent, not removable) - The structure of the sitemap.xml (auto-generated, split by resource type)
- URLs for automatic pages like
/account,/search,/cart/change
This split matters because every optimization idea you see on Reddit or in some LinkedIn post needs to be filtered through it. If someone tells you "flatten your Shopify URLs for SEO," they are either wrong or they are selling you a reverse proxy build that will cost more than the SEO gain is worth for the next three years.
For most of the brands we work with through our Shopify development service, the right answer is to accept the structure, focus obsessively on handles and redirects, and move on.
The handle rules
A handle in Shopify is the URL slug for a resource. royal-blue-silk-scarf is the handle for a product at /products/royal-blue-silk-scarf. The rules around handles are where most brands leak SEO equity without noticing.
How Shopify generates handles by default:
When you create a product named "Royal Blue Silk Scarf (Limited Edition)", Shopify generates the handle royal-blue-silk-scarf-limited-edition. It lowercases, removes special characters and parentheses, and replaces spaces with hyphens. Good defaults.
Where it goes wrong:
-
Long product names become bloated handles. "Royal Blue Silk Scarf Limited Edition Hand Painted Made in Italy 2026 Collection" becomes a 78-character handle. Google will index it, but it is ugly and it dilutes keyword focus.
-
Merchandisers rename products for inventory reasons, not SEO reasons. If you rename "Royal Blue Silk Scarf" to "Scarf - SKU 4502 - Blue" because your ops team wants tidy admin lists, Shopify will offer to update the handle. If someone clicks yes, the URL changes to
/products/scarf-sku-4502-blue. Handles should reflect the public-facing product name, never internal SKUs. -
Underscores vs hyphens. Use hyphens. Always. Google has been explicit for over a decade that hyphens are word separators and underscores are not. Shopify defaults to hyphens. Do not fight it.
-
Handles with numbers are fine, handles with dates are risky.
2026-spring-collectionwill look stale by October.spring-collectionplus a meta refresh of content each season keeps the equity compounding. -
Duplicate handles get
-1suffixes. If you already haveblue-shirtand create another product called "Blue Shirt," Shopify createsblue-shirt-1. That is an inventory tell, not a content strategy. Rename the original or the new one to something specific.
The handle character limit:
Shopify allows up to 255 characters in a handle. Google truncates URL display in the SERP around 64 characters of visible path. Aim for handles under 60 characters, not counting the prefix. Short enough to read in one breath, long enough to include the primary keyword and one modifier.
Rule of thumb we use with clients:
For products, the handle should be: [primary keyword]-[color or variant differentiator]. Skip brand name unless it is load-bearing to search intent. Skip collection year. Skip SKU.
For collections, the handle should be: [category]-[subcategory if needed]. /collections/silk-scarves is better than /collections/scarves-silk-luxury-womens.
For blog articles, the handle should be: [primary keyword phrase]. Skip filler words if the phrase is long. how-to-wash-silk-scarves not the-ultimate-complete-guide-to-washing-silk-scarves-at-home-in-2026.
/collections/ and /products/ prefixes — can you remove them?
Short answer: no, not without a reverse proxy.
Longer answer: Shopify hardcodes /collections/, /products/, /pages/, and /blogs/ into the routing layer. These prefixes cannot be changed, removed, or aliased through any admin setting, theme edit, or app. Shopify Plus merchants have asked for this since 2016. It has not changed. It will not change.
Why this bothers people:
The argument against prefixed URLs is that /products/royal-blue-silk-scarf is three characters longer than /royal-blue-silk-scarf, and that the prefix is not a keyword. Fair. But the SEO impact is negligible. Google has said repeatedly that URL structure has a small ranking influence, and that users and algorithms both handle prefixed URLs fine.
The reverse proxy workaround:
Brands that really want flat URLs put Cloudflare or Vercel in front of Shopify, rewriting URLs at the edge. The proxy maps /royal-blue-silk-scarf to Shopify's /products/royal-blue-silk-scarf on every request. It works. It also introduces:
- A dependency on the proxy never going down
- Canonical tag rewriting (Shopify serves the prefixed canonical, which has to be stripped and rewritten)
- Every Shopify app that generates URLs (reviews, wishlists, related products) has to be audited because they output prefixed URLs into the HTML
- Checkout stays on Shopify's domain and Shopify's URLs no matter what, so the experience becomes inconsistent
- Debugging becomes two layers instead of one
For a brand doing $50M+ a year with a dedicated engineering team, a reverse proxy is a reasonable call. For anyone smaller, the time and risk cost is higher than the SEO upside. Stop trying to remove the prefix.
What you can actually do:
- Make handles short and keyword-rich so the full URL still reads cleanly
- Keep collection and product names aligned so users do not see jarring mismatches
- Use breadcrumb schema to make the SERP display the category tree instead of the prefixed URL
If you are still early in deciding whether Shopify is the right platform at all, our D2C ecommerce SEO guide for 2026 walks through the platform tradeoffs in more detail.
Migrating URLs without losing rankings
URL migrations on Shopify fail for one of three reasons: the team underestimated the scope, the 301 map was incomplete, or nobody monitored after the switch.
Here is the framework we use for every migration, whether it is a handle rename of 20 products or a full domain change.
The 4-step URL migration
Step 1: Inventory.
Before anything changes, export a complete list of every URL that currently exists and has any traffic, backlinks, or internal links pointing to it.
Pull from four sources:
- Shopify admin: export products, collections, pages, blog articles as CSV. Handle column is your source of truth.
- Google Search Console: export "Pages" from the Performance report for the last 16 months. Filter by clicks > 0 and impressions > 50. These are the URLs Google actually knows about.
- Ahrefs or Semrush: export Top Pages and Backlinks. You want any URL with referring domains, even if GSC shows low traffic.
- Internal crawl: Screaming Frog the live site. You are looking for URLs that exist but are not in the sitemap, often old blog posts or discontinued products.
Deduplicate into one spreadsheet. Typical D2C store with 200 SKUs ends up with 800 to 1,500 URLs worth tracking.
Step 2: Map.
For every old URL, decide where it goes post-migration. Four outcomes:
- Unchanged. URL stays the same. Most URLs should fall here.
- 301 to a new URL. Handle changed, product consolidated, collection renamed.
- 301 to a parent category. Product discontinued but the category still exists. Send the URL to the collection, not the homepage.
- 410 Gone. Product and intent are both dead. Used sparingly. Do not 410 anything with current organic traffic or backlinks.
Never 301 to the homepage as a default. Google now treats homepage-only redirects as soft 404s when the old page had distinct content. You lose the link equity.
Step 3: Redirect.
Shopify has a built-in URL Redirects feature under Online Store > Navigation > URL Redirects. You can add redirects manually, bulk import via CSV, or rely on automatic redirects that Shopify creates when you change a handle.
A few rules we enforce on every migration:
- Never rely solely on automatic redirects. Shopify creates them, but if someone deletes a product before the redirect is set up manually, it is gone. Build the CSV first, import it, then change handles.
- Watch for redirect chains. If
/products/old-nameredirects to/products/middle-namewhich redirects to/products/final-name, Google will eventually follow it, but link equity attenuates at each hop. Edit the first redirect to point directly to the final URL. - Case sensitivity. Shopify URLs are case-insensitive at the server level, but external tools often send mixed-case URLs. Redirect rules are case-sensitive in the admin. If you import
/Products/Blue-Shirtas a source URL, it will not fire on/products/blue-shirt. Normalize to lowercase on import. - Keep redirects forever. There is no SEO reason to delete old redirects. Shopify allows up to 100,000 redirects per store, plenty of room.
Step 4: Monitor.
The migration is not done when the redirects are live. It is done when you have 6 weeks of post-migration data and can confirm traffic and rankings held.
Week 1 after launch:
- Check GSC Coverage report daily. Watch for spikes in "Not found (404)" or "Redirect error."
- Check the URL Inspection tool on 10 high-value URLs to confirm Google sees the new destination.
- Run Screaming Frog again on the live site and verify no broken internal links.
Weeks 2 to 6:
- Compare clicks and impressions in GSC week-over-week against the 6 weeks before migration. A 5 to 10 percent dip in week 1 is normal. A 20 percent dip that does not recover by week 3 means something is wrong.
- Watch rankings on your top 50 commercial keywords. If a keyword drops more than 3 positions and does not recover within 2 weeks, investigate the specific URL for a broken redirect or a content mismatch.
We have done this for brands migrating from other platforms to Shopify and for brands staying on Shopify but restructuring. The pattern is the same. Our SEO service includes this framework as the default migration playbook. Related migration reading: migrating from Etsy to Shopify.
301 redirect patterns on Shopify
A few specific redirect patterns that come up on almost every Shopify store.
Pattern 1: Collection handle changes.
You rename /collections/summer-2025 to /collections/summer-collection. Shopify creates the 301 automatically when you edit the handle. Verify it appears in Online Store > Navigation > URL Redirects. If it does not, add it manually.
Pattern 2: Product discontinued, new version exists.
Old: /products/blue-shirt-v1
New: /products/blue-shirt-v2
Manual 301 from v1 to v2. Do this before you delete v1, because deleting first kills any equity the old handle had accumulated.
Pattern 3: Entire category restructure.
Old: /collections/mens-shirts-blue, /collections/mens-shirts-red
New: /collections/mens-shirts with color filters
Bulk import a CSV mapping every old collection to the new one, ideally to the new URL with the color filter applied: /collections/mens-shirts?filter.p.color=blue. Shopify accepts query strings in the destination column.
Pattern 4: Blog URL structure change.
Old: /blogs/news/how-to-wash-silk
New: /blogs/silk-care/how-to-wash-silk
The blog handle (news vs silk-care) is part of the URL. Migrating blog categories requires 301s on every article inside. Bulk import is mandatory here, doing it manually is a nightmare.
Pattern 5: Variant URL cleanup.
Shopify sometimes generates URLs like /collections/sale/products/blue-shirt when a product is accessed from within a collection. These URLs are canonicalized to /products/blue-shirt automatically, but some themes still generate internal links to the long version. Audit your theme. Fix the internal links. Do not redirect — the canonical handles it.
For more on indexation cleanup after migrations, see fixing Shopify indexation issues.
International URL structure: ccTLD vs subfolder vs subdomain
If you sell into multiple countries, you have three structural choices. Shopify Markets (launched 2021, overhauled 2024) changed the answer for most D2C brands.
Option 1: ccTLDs (country-code top-level domains).
brand.com, brand.co.uk, brand.de, brand.fr.
- Each country gets its own domain.
- Strongest geo-targeting signal to Google.
- Most expensive and complex to run. You are buying and maintaining multiple domains, renewing registrations, handling DNS, sometimes running separate Shopify stores per country.
- Shopify supports this but it is friction-heavy.
Use ccTLDs if you have a real business reason. Regulatory (cosmetics in EU, food in Japan), pricing differences that must be invisible between markets, or brand localization so deep that each country has its own identity.
Option 2: Subfolders.
brand.com/us/, brand.com/uk/, brand.com/de/.
- One domain, one Shopify store, paths differentiate markets.
- Shopify Markets natively supports subfolder structure since 2022.
- All domain authority concentrates on one domain. Easier to rank a new country once the main domain has equity.
- Simpler to operate. One admin, one catalog, currency and language handled by Markets.
This is the default we recommend for 90 percent of D2C brands expanding internationally.
Option 3: Subdomains.
us.brand.com, uk.brand.com, de.brand.com.
- Technically separate properties in Google's eyes.
- Equity does not flow as freely between subdomains as between subfolders.
- Shopify supports subdomain structure through Markets as well, but it is not the default.
Subdomains made sense 10 years ago when subfolder routing was harder. They rarely make sense now. Use them only if you have a technical reason (different tech stack per region) or a corporate structure reason (regional entities that need clear separation).
hreflang matters more than structure.
Whatever structure you pick, hreflang tags in the HTML head are non-negotiable. Shopify Markets generates them automatically when configured. Audit your live pages after launch. We have seen stores where Markets was set up correctly but a theme customization stripped the hreflang block. Google then treated every market as duplicate content in English.
Shopify URL element cheat sheet
| URL element | Shopify default | Editable? | Recommendation |
|---|---|---|---|
| Domain apex | store-name.myshopify.com | Yes, add custom domain | Always point a custom apex; never use .myshopify for public traffic |
| Collection prefix | /collections/ | No | Accept it, move on |
| Product prefix | /products/ | No | Accept it, move on |
| Page prefix | /pages/ | No | Accept it |
| Blog prefix | /blogs/[blog-handle]/ | Blog handle only | Keep blog handles semantic (/blogs/guides/, not /blogs/news/) |
| Product handle | Auto from title | Yes, per product | Keep under 60 chars, primary keyword first, no SKUs or dates |
| Collection handle | Auto from title | Yes, per collection | Use category terms users search for, not internal taxonomy |
| Trailing slash | No trailing slash | No | Accept — Shopify 301s trailing slashes to non-trailing |
| URL case | Lowercase enforced | No | Never link to mixed-case URLs from marketing |
| Variant URL | ?variant=123456 | No | Canonical points to parent product — do not try to index variant URLs |
| Collection filter URL | ?filter.p.color=blue | No | Use canonical tag to parent collection; do not index every filter combo |
robots.txt | Auto-generated | Yes, via robots.txt.liquid | Edit only when you know the exact rule you need |
| Sitemap | /sitemap.xml, auto | No structure edit, can exclude via theme | Submit the root sitemap to GSC, let Shopify handle the rest |
| Redirect limit | 100,000 per store | Yes, via admin | Never delete old redirects; they cost nothing |
| International paths | Configured via Markets | Yes | Default to subfolders unless you have a real reason otherwise |
What to do this week
- Export your current URL list from Shopify admin, GSC, and Ahrefs. Deduplicate into one spreadsheet. This becomes your baseline for any future migration.
- Audit the 20 product handles with the most organic traffic. If any contain SKUs, dates, or are longer than 60 characters, rewrite them and let Shopify create the 301 automatically.
- Open Online Store > Navigation > URL Redirects. Look at the list. If you see chains (A to B to C), edit A to point directly to C.
- Check hreflang on any international market URLs. View source, search for
hreflang, confirm every market is listed and self-references. - If you are on the fence about flattening URLs with a reverse proxy, put the idea down for 6 months. Focus on handles, redirects, and content instead. The ROI is higher.
FAQ
Does Shopify let you remove the .myshopify.com URL entirely?
No. The .myshopify.com URL is permanent and cannot be removed. Shopify does set the canonical tag on all public pages to your primary custom domain, so Google should not index the .myshopify.com version. Verify this in GSC by inspecting a product URL. If the .myshopify.com version appears in search results, check your theme for canonical tag issues.
Can I use underscores in Shopify handles?
Technically yes, but Shopify defaults to hyphens and will auto-convert spaces to hyphens. Do not manually override with underscores. Google treats hyphens as word separators and underscores as character concatenation, which means blue_shirt is read as one word and blue-shirt as two. Hyphens every time.
What happens to old URLs when I delete a product in Shopify?
Shopify creates an automatic 301 redirect from the product URL to the store's fallback (usually the homepage) when you delete the product. Homepage redirects are treated as soft 404s by Google. Always manually redirect deleted products to a relevant collection or a replacement product before deleting.
Should I use subfolders or subdomains for a blog on Shopify?
Shopify only offers subfolders (/blogs/blog-name/article-handle). You cannot run a blog on blog.yourstore.com natively. This is fine. Subfolders concentrate domain authority and are the preferred structure for content SEO on ecommerce sites.
How long do Shopify URL redirects last?
Forever, unless you delete them manually. Shopify has no expiration on redirects. The store-level limit is 100,000 redirects, which is more than enough for even large catalogs. Never clean up old redirects as housekeeping — they cost nothing and they still serve old backlinks and old search index entries.
One-page resource
Get the Vendor Recovery Checklist.
The 12 steps every displaced maker should take in the next 30 days. Delivered in your inbox.