← All guides9 min read

Preserving SEO during a Shopify replatform with Graftport

How Graftport's redirects mapping captures source URL structure, what makes it onto the destination Shopify store as 301 redirects, the staging verification routine, and the launch-week Search Console checklist that protects your rankings.

The fastest way to take an SEO hit on a replatform is to launch with a redirect table that is 80% right. This guide walks through how Graftport models the redirects resource for every supported source platform, what to verify on staging, and the launch-week checklist that protects your organic rankings during the re-crawl window.

The redirects resource

Every migration in Graftport has a redirects resource by default. The wizard seeds it on Step 3. It is a normal mapping like products or customers — versioned, dry-runnable, re-runnable.

What it captures depends on the source platform:

SourceRedirect sources
Magentourl_key per entity, category path prefix, url_rewrite table
ShopifyAll existing URLRedirect rows, plus old handle history
WooCommercePermalink structure, post and product slugs, manual redirects from common plugins

What it produces on the destination:

  • A row per source URL in Shopify's URL Redirects (Online Store → Navigation → URL Redirects), 301-ing to the corresponding destination URL.
  • Where a single source URL points at a record that has multiple destination paths (a product in two collections, for instance), Graftport picks the canonical destination URL — usually the product page, not the collection-prefixed alias.

This is the same redirect machinery Shopify exposes natively. We do not need a third-party app for redirects on the destination side; we use Shopify's first-party storage.

Verifying on staging

The redirect verification step happens after the build and before launch. The drill:

  1. Pull the top 200 ranking URLs from Search Console. Go to the source store's Search Console property → Performance → Pages → sort by clicks descending → Export. CSV.
  2. Sample 50 URLs at random. Whole-list verification is overkill; stratified sampling catches everything that a whole pass would.
  3. Hit each URL on staging. Append the path to your destination domain: <staging>.myshopify.com<path>. Confirm Shopify 301s you to a real product / collection / page that matches the original.
  4. Note any 404s or surprise destinations. That list is your manual fix queue.
  5. Add the missing redirects on the destination. Either directly in Shopify Admin's URL Redirects screen, or by editing the redirects mapping in Graftport and re-running that resource. The mapping path is the right one if the gap is a pattern; the manual path is the right one for one-off bespoke URLs.

What does not need a redirect

  • Admin paths. Anything inside /admin/, /customer/, /sales/. Shopify owns those paths on the destination; the source equivalents were always platform-internal.
  • Search and faceted-navigation result URLs. Query-driven, not indexed by Google in any meaningful way.
  • Session and tracking query strings. Magento's ?___store=, ?SID=, and the like. They carry no SEO signal.
  • Tag pages on WooCommerce. They tend to be thin-content duplicates; many merchants disable them post-launch.

Things that go wrong, when they do

A category was renamed in the source and the rewrite was deleted. The historical URL is no longer in the source's rewrites table. Solution: tell us the URL and the new destination, we add it as a manual redirect in the mapping override.

A custom plugin produced URLs we cannot see. A bespoke catalogue extension storing routes in its own table outside the standard rewrite tables. Solution: dump the routes from that table to CSV, send it to support, we add them in bulk.

The destination Shopify product handle is different from the source slug. This is by design — Shopify normalises handles (lowercase, dash-separated, trim repeats). The redirect from old to new still works; only the new canonical differs. Search engines follow the 301.

/products/<handle> returns the right product, but /collections/<x>/products/<handle> 404s. Shopify supports both URL shapes; some themes use one, some the other. The redirects mapping captures the alias automatically. If yours does not, re-run the redirects resource — the default template was updated in template version 2.x to capture this.

The launch-week Search Console checklist

When you flip DNS to the destination Shopify store, your old ranking URLs start returning 301 to the new ones. Google re-crawls within days. To shorten the ranking-recovery window:

  1. Day of DNS flip — add the new property in Search Console. The "domain" property type, not URL-prefix. Verify ownership via DNS.
  2. Submit Shopify's auto-generated sitemap. Shopify writes /sitemap.xml for free. In Search Console → Sitemaps, paste https://www.<your-domain>.com/sitemap.xml and hit submit.
  3. URL-inspect your top 20 ranking pages. Paste each URL into the URL inspection tool, hit Request indexing. This is the single highest-leverage move you can make in week one.
  4. Watch Coverage → Not Found for the first two weeks. Anything that surfaces is a missed redirect. Add it to the destination's URL Redirects manually.
  5. Watch Performance → clicks and impressions. Most replatforms see ranking dips of 10–20% for a week, recovery to baseline within 14 days, and a small bump above baseline within 30 days as Google re-evaluates the new architecture.

What Graftport gives you that prior platforms did not

  • A dry-runnable redirects resource. Every prior load tool treats redirects as a one-shot CSV import. In Graftport, the redirects mapping is dry-runnable, versioned, and re-runnable exactly like product or customer mappings. Test before you ship.
  • A proper destination preview. The staging Shopify store has the full redirect table loaded before DNS flips. You can hit every URL and see the 301 behaviour, in advance, on the actual destination.
  • Re-run safety on launch night. Re-running the redirects resource on go-live night is idempotent. Anything already in Shopify's URL Redirects is not duplicated. New rewrites since the rehearsal load are added.

Related reading

A staging review of the redirect table is the highest-leverage hour you will spend on the entire migration. Spend it.

Ready to migrate?

Connect a source store, dry-run a migration, see the exact Shopify result before a single record lands. The same platform your team will use on go-live night.

Get started See the calculator
Related guides
Using the Graftport CLI with Claude Code: install to first publish
Set up the Graftport CLI and migration-engineer skill in Claude Code, then drive a real Shopify migration through the validate and publish l
Human approval gates for AI Shopify migrations: the Graftport contract
Why an AI coding agent should never push to Shopify on its own, and how Graftport's two-tier CLI contract enforces a human gate on every cos
Automating JSONata Shopify mapping with an AI coding agent
How the Graftport CLI lets an AI agent investigate source rows, fix JSONata mapping errors against structured validation codes, and publish