Case study
Migrating a WordPress shop to Shopify: 330 posts moved, SEO intact
Three hundred and thirty blog posts, eleven years of backlinks and a catalogue that had to keep selling during the move. Here is the runbook we used.
Written by Oleksandr Martyniuk, CEO & Software Engineer · · 2 min read
The client sold on WordPress for eleven years. The catalogue had outgrown the platform, but the blog was the reason customers arrived in the first place: 330 posts, most of them ranking, many of them linked from elsewhere.
A migration that loses the backlinks costs more than the platform it saves. Ranking recovery after a botched move takes six to nine months.
What actually had to move
- 330 blog posts, with their images, internal links and publication dates.
- 1,240 products with variants, metafields and a decade of reviews.
- Every URL that had ever been indexed, including the ones nobody remembered.
The redirect map came first
Before touching content we exported every indexed URL from Search Console, the sitemap and the server logs, then reconciled the three lists. The logs found 190 URLs the other two sources had lost.
awk '{print $7}' access.log | sort -u > crawled.txt
comm -23 crawled.txt sitemap-urls.txt > orphans.txt
Every orphan got a decision: redirect, keep, or deliberately retire with a 410.
Results after one quarter
| Metric | Before | After |
|---|---|---|
| Indexed pages | 1,486 | 1,502 |
| Organic sessions | 41,200/mo | 43,900/mo |
| Conversion rate | 2.1% | 3.2% |
| Largest contentful paint | 4.1s | 1.6s |
We expected to lose traffic for a month and budgeted for it. We never spent that budget.
The checks that caught the gaps
- A crawl diff between staging and production, run nightly until launch.
- A canary set of fifty high value URLs verified by hand.
- Structured data validation on every template, not every page.
Redirects are not the last step of a migration. They are the first artefact you build, and everything else is validated against them.
- migration
- seo
- e-commerce