Case Study · WordPress Migration · SEO
Case Study: How I Rebuilt a Slow WordPress Site and Tripled Its Google Rankings
A real case study of migrating a slow WordPress site to Next.js — the performance audit, migration approach, SEO preservation strategy, and ranking results 3 months after launch.
Jatinder Sandhu
Client
Local Services Business
Platform Before
WordPress + Elementor
Platform After
Next.js on Vercel
Timeline
5 weeks
The Brief
This client had been running a WordPress site built on Elementor for about four years, with a stack of page-builder addons, a slider plugin, three different caching plugins layered on top of each other, and a contact-form plugin nobody remembered installing. The business itself was healthy, but the site had quietly become a liability — mobile PageSpeed scores in the low 20s, a homepage that took over 6 seconds to become interactive, and rankings that had been sliding for over a year despite the content itself being decent.
The client's ask was simple: “make it fast again.” What made this project interesting is that fixing WordPress in place was a real option on the table, and part of my job was proving — with data, not opinion — that a rebuild was the better call.
The Performance Audit
Before touching anything, I ran a full audit across PageSpeed Insights, GTmetrix, and Chrome DevTools to find out exactly where the time was going, not just that the site was slow.
| Metric | Before (WordPress) | Root Cause |
|---|---|---|
| Mobile PageSpeed | 22/100 | Unoptimised hero images, render-blocking CSS from 3 plugins |
| LCP | 6.4s | Hero slider loading full-size uncompressed JPGs |
| Total Blocking Time | 2,100ms | jQuery + Elementor animation scripts loading on every page |
| Page Weight | 6.8MB | No image compression, unused CSS/JS shipped site-wide |
| HTTP Requests | 148 | Plugin bloat — most pages only needed a fraction of what loaded |
None of this was a hosting problem — the client was already on decent managed WordPress hosting. It was architectural: a page-builder rendering approach fighting against every performance best practice at once.
Why Rebuild Instead of Optimise In Place
I always try optimisation first before recommending a rebuild — a rebuild carries real SEO risk if it's not handled carefully. In this case, I still spent a day testing standard WordPress optimisation: a proper caching plugin, image compression, deferred JS, removing unused plugins. It moved the mobile score from 22 to about 48. Better, but nowhere near good enough, because the bottleneck wasn't configuration — it was Elementor itself generating bloated markup and depending on jQuery for every interaction.
- Elementor renders deeply nested divs for layout that a hand-built component tree avoids entirely — this alone was adding hundreds of KB of unnecessary markup per page.
- The client wanted to keep adding service pages going forward — doing that on a slow foundation just compounds the problem with every new page.
- Core Web Vitals are a confirmed Google ranking factor, and this client competes in a market where three competitors were already outranking them despite thinner content — speed was a realistic lever to pull.
The Migration Approach
Content export before anything else
Every page, post, image, and meta title/description was exported from WordPress into a structured spreadsheet first. This became the single source of truth for the rebuild and made it easy to spot content that was thin or duplicate and worth consolidating rather than porting as-is.
URL structure preserved exactly
The single biggest SEO risk in any platform migration is changing URLs. Every existing URL path was mapped 1:1 to the new Next.js routes. Where a handful of URLs genuinely needed to change, permanent 301 redirects were set up before launch, not after.
Static generation for every content page
Service pages, blog posts, and the homepage are all statically generated at build time with next/image handling responsive, compressed, lazy-loaded images. There is no client-side page-builder logic left to slow anything down.
Metadata parity, then improvement
Title tags, meta descriptions, and structured data were first replicated exactly as they existed on WordPress, then improved incrementally after launch once rankings had stabilised — changing everything at once makes it impossible to isolate what helped or hurt.
Tech Stack
Framework
Next.js 14 (App Router)
Styling
Tailwind CSS
Content
MDX + typed frontmatter
Images
next/image (WebP/AVIF)
Forms
Server Actions
Redirects
next.config.js 301 map
Hosting
Vercel (Edge Network)
SEO
Next.js Metadata API
Monitoring
Google Search Console
Handling the Redirect Map
Where URL paths did change — mostly a handful of category-style URLs that WordPress generates automatically — every one was mapped and shipped as a permanent redirect in the Next.js config, not left to a plugin or manual .htaccess edits:
// next.config.js
async redirects() {
return [
{ source: '/category/services/plumbing', destination: '/services/plumbing', permanent: true },
{ source: '/blog/category/tips', destination: '/blog', permanent: true },
// ...full mapped list from the export spreadsheet
];
}
After launch, Google Search Console was checked daily for the first two weeks specifically for 404 spikes and coverage errors — catching a broken redirect on day two is a five-minute fix, catching it a month later after Google has re-crawled and dropped the page is a much bigger problem.
Results (3 Months Post-Launch)
97/100
Mobile PageSpeed
1.1s
LCP (down from 6.4s)
3x
Organic Rankings Growth
0
Lost Ranking Pages
Three months after launch, keyword positions that had been stuck between page 2 and page 3 for over a year started moving into the top 10, and the site's tracked keyword count in the top 3 roughly tripled. None of the pre-existing ranking pages were lost during the transition, which was the top priority going in — a faster site that tanks rankings during migration is not a win. Organic traffic for the core service pages was up meaningfully, and the client stopped getting complaints from customers about the site “taking forever to load on their phone.”
Key Lessons
Always try optimisation first, even when you suspect a rebuild is coming
Testing in-place optimisation first isn’t wasted time — it builds the data-backed case for a rebuild and rules out the cheaper fix before committing the client to a bigger project.
URL preservation is the make-or-break detail of any migration
Rankings, speed improvements, and better content mean nothing if the migration itself drops pages from the index because a redirect was missed. Build the redirect map before writing a single line of the new site.
Ship metadata parity first, improve it after
Changing rankings-affecting factors (URLs, titles, content) all at once after a migration makes it impossible to know what caused a ranking change. Match the old site first, then iterate with data.
Conclusion
A slow WordPress site is rarely a hosting problem — it's usually an architecture problem, and page builders are often the biggest contributor. This project is a good reminder that the fastest path to better rankings isn't always more content or more backlinks; sometimes it's removing everything standing between a visitor and a fast, working page.
If your WordPress site has slowed down over the years and optimisation plugins aren't moving the needle, it's worth getting an honest audit before assuming a rebuild is necessary — and if it is necessary, doing it in a way that protects the rankings you've already earned.
Is your WordPress site slowing down your rankings?
I audit and migrate slow WordPress sites to fast, SEO-safe Next.js builds. Get in touch for a free performance audit of your site.
Get in Touch →