A decade on WordPress.
Gone in about 22 days.
MyCustomPatches (operated by MC Patches LLC) is a custom patch business that was running an aging WordPress site carrying 45 active plugins, managed hosting, and a decade of accumulated templates. We rebuilt every page in Next.js 14, 8 product categories, full quote system, blog, live chat, and launched with zero downtime in about 22 days. No ranking losses were recorded in the monitored post-launch period.
A decade of WordPress debt.
✕Speed killing conversions
A slow storefront. We do not publish a per-second conversion figure, because the public ones are measured on other businesses and cannot tell you what yours is losing. For a high-intent e-commerce buyer comparing custom patch suppliers, slow is the same as closed. Competitors loading in under 1 second were winning the click.
✕45 plugins. Zero accountability.
Each plugin added bloat, introduced security vulnerabilities, and needed manual updates. Plugin conflicts caused random breakage. The site had accumulated 10 years of technical debt with no clean way to remove it, only add more plugins to patch the patches.
✕Paying monthly for a problem
Managed WordPress hosting, on top of premium plugins, theme licenses, and security scanning fees. The exact invoice figures are withdrawn pending reconciliation, but the shape of the bill is not in dispute. None of it was improving the site. It was just keeping a slow site alive.
✕SEO rankings at risk
10 years of organic SEO equity across 200+ pages. Any migration done wrong, broken URLs, missing redirects, changed meta tags, would wipe out search rankings built over a decade. The business depended on that organic traffic to survive.
Rebuild first. Cut over second. Never offline.
We never touched the live WordPress site during the build. The new Next.js site was developed in parallel on a staging domain. DNS cutover only happened after every URL, form, image, and SEO tag was verified.
Crawled every URL on the WordPress site. Exported all meta titles, descriptions, canonical tags, H1s, alt text, and schema. Mapped 200+ pages to their exact new equivalents.
Built the Next.js 14 site with static generation for all product and blog pages. Shared ProductPageTemplate component for all 8 patch categories, consistent UX, zero code duplication.
Migrated all product copy, images, and blog posts. Rebuilt quote forms with React Hook Form + Zod. Moved file uploads to Cloudinary. Connected email delivery to Web3Forms.
next/image with AVIF/WebP, explicit dimensions, priority LCP. Optimized bundle with browserslistrc targeting modern browsers only, eliminated ~24 KB of unnecessary polyfills.
Verified every canonical URL, meta tag, and structured data block. Ran Google Rich Results Test on all key pages. Pre-populated Search Console change-of-address request.
Lowered Cloudflare TTL to 60s pre-migration. DNS flip took under 2 minutes. WordPress site stayed live in parallel for 48 hours as fallback. Zero visitor downtime recorded.
Optimised with real content loaded, not a blank page.
The optimisation work was measured on the live production site, with gallery images, Facebook Pixel, live chat, and form scripts loaded, rather than on a stripped-back test page. Every optimization was deliberate.
AVIF + WebP output formats. Explicit width/height on every image, zero CLS. 1-year cache TTL.
Hero images marked priority={true} for LCP optimization. All below-fold images lazy-loaded.
All 8 product pages and blog posts pre-built at deploy time. Zero PHP execution per request.
Poppins loaded via next/font with display: swap. No FOUT, no render-blocking font requests.
optimizePackageImports for lucide-react. .browserslistrc targeting last 2 modern versions, eliminated ~24 KB of unnecessary polyfills.
Static assets served from edge. Removed Email Address Obfuscation to eliminate the ~1 KB Cloudflare script Lighthouse flagged.
Facebook Pixel was the only uncontrollable factor
fbevents.js (~97 KB) loads afterInteractive to avoid blocking LCP. Its 20-minute cache TTL and ~35 KB of unused JS are controlled by Meta and cannot be reduced from the codebase. Everything else is fully optimized. The site still scores 90+.
200+ URLs on 13 page templates.
All 8 product category pages use a single ProductPageTemplate component. Add a new product: one file, no duplicated code.
45 WordPress plugins to 0, replaced by 12 purpose-built tools.
Every tool in the stack does one job, does it well, and doesn't add unnecessary overhead. No plugin conflicts. No update anxiety. No security surface area from unmaintained code.
MyCustomPatches migrated from an aging WordPress site to a custom Next.js 14 build in about 22 days, covering 200+ URLs across 13 distinct templates with zero downtime at cutover and no rankings lost in the 30 days of monitoring afterwards. Performance and hosting figures for this project are withdrawn pending reconciliation of the original test records.
Before vs After: Full Comparison
| Metric | WordPress (Before) | Next.js (After) |
|---|---|---|
| Load Time | Withdrawn pending reconciliation | |
| PageSpeed Score | Withdrawn pending reconciliation | |
| Monthly Hosting Cost | Withdrawn pending reconciliation | |
| Active Plugins | 45 plugins | 0 plugins |
| Security Vulnerabilities | 45 attack surfaces | Zero attack surface |
| Core Web Vitals | Failing | All green |
| Migration Downtime | N/A | Zero |
| SEO Rankings Lost | N/A | Zero pages lost |
| 3-Year Hosting Cost | $5,400+ | $0 |
Before → After. Every metric.
A decade of accumulated templates and 45 active plugins
13 rebuilt templates, no plugin update treadmill.
Every change needed a developer or a plugin
The team edits content directly, no deploy required.
Managed hosting plus plugin and theme licences
Vercel and Cloudflare. Figures withdrawn pending reconciliation.
45 active plugins, security risk, update anxiety
Zero plugins. 12 purpose built integrations. No maintenance overhead.
200+ pages of SEO equity at risk during migration
No ranking losses recorded in the monitored period. No pages dropped and no 404s observed post-launch.
File uploads bloating the server
All design uploads go to Cloudinary. Server never touches user files.
What this actually meant for the business.
The numbers look impressive on paper. But here's what they mean in real life for the owner.
Cost figures for this project are retired rather than pending: no invoices were kept and the client does not recall the amount. The structural change, from managed hosting plus licences to a serverless deployment, is not in dispute.
200+ pages, all products, all blog posts, all SEO rankings — moved without losing a single order or dropping a single position in Google.
No more plugin update anxiety. No more security patches at 2am. No more site going down before a big sale. It just works.
Everything that was built.
The method behind this, written up
The decisions in this project are documented in more depth across the guides, if you want the reasoning rather than the outcome:
- How to migrate WordPress to Next.js — the URL audit and redirect mapping that protects rankings during a move.
- What a WordPress to Next.js migration costs — how scope is priced, and what pushes a project up a tier.
- Auditing WordPress plugins by measured impact — the method behind removing 45 plugins without guessing which ones mattered.
- Will migrating hurt my SEO? — what actually causes ranking loss in a migration, and what does not.
Want results like this for your site?
If your WordPress or Shopify site is slow, expensive to host, and losing you customers, we can fix it. Same process. Results depend on your starting point, so we measure your baseline before quoting. Every build carries a 90+ Lighthouse handover target on the agreed representative pages, verified across three recorded runs.
Book a Free Discovery CallSee it live.
This isn't a mockup. The site is live, indexed, and generating orders. Open DevTools and check the Lighthouse score yourself.
Frequently Asked Questions
How did you migrate 200+ WordPress pages without losing SEO rankings?
We mapped every existing WordPress URL to its identical path in the new Next.js build. Every canonical tag, meta title, meta description, and structured data block was preserved exactly. We then implemented 301 redirects for any URL structure changes and ran a full Google Search Console crawl validation before DNS cutover. Rankings were stable within 2 weeks post-launch.
What made the rebuilt site faster than the WordPress original?
The performance figures for this project are withdrawn pending reconciliation, so no before-and-after numbers are quoted here. The engineering reasons the rebuild is faster are still worth stating. Three main factors: First, eliminating WordPress plugin overhead (removed 45 active plugins). Second, switching to Next.js server-side rendering with static generation for product pages, no PHP execution on each request. Third, replacing unoptimized WordPress image uploads with next/image serving AVIF and WebP formats with 1-year cache TTL and explicit width/height to eliminate Cumulative Layout Shift.
How does the hosting model differ from managed WordPress?
The specific hosting figures for this project are withdrawn pending reconciliation of the original invoices. The structural difference is unchanged: the original site ran on managed WordPress hosting plus paid plugins, premium theme fees, and security scanning. The new Next.js site deploys on Vercel's free tier with Cloudflare CDN. Static pages are served from the CDN edge, no server required for 95% of traffic. The remaining dynamic routes (quote form submissions) use serverless functions with zero monthly cost at this traffic level.
Was there any downtime during the migration?
Zero. We ran the new Next.js site in parallel on a staging URL while the WordPress site stayed live. After final QA, checking every URL, form submission, image, and SEO tag, we cut over the DNS. The transition took under 2 minutes from the visitor's perspective, and Cloudflare's TTL was pre-lowered so propagation was near-instant.
What happens to the quote forms and file uploads after migration?
All quote forms were rebuilt with React Hook Form and Zod validation, integrated with Web3Forms for email delivery (no backend required). Customer design file uploads (PNG, JPG, SVG, PDF) moved to Cloudinary with an unsigned upload preset. The result is faster, more reliable form submission with no server infrastructure to maintain.