seoSEOMigrationWordPress

SEO Checklist for Migrating from WordPress (Don't Lose Rankings)

SEO Checklist for Migrating from WordPress (Don't Lose Rankings)

Migrating from WordPress can dramatically improve performance, but done wrong, you could lose years of SEO value. This checklist ensures you preserve your rankings.


Pre-Migration Phase

1. Document Current State

Before touching anything:

Export current URLs:

Using Screaming Frog or similar

Export all URLs to spreadsheet

Document:

  • [ ] All page URLs
  • [ ] All blog post URLs
  • [ ] Category/tag URLs
  • [ ] Media URLs
  • [ ] Current rankings for top keywords
  • [ ] Current traffic levels (GA baseline)

Tools:

  • Screaming Frog (crawl all URLs)
  • Google Search Console (export performance data)
  • Ahrefs/Semrush (export rankings)

2. Export SEO Settings

From Yoast, Rank Math, or similar:

  • [ ] Meta titles
  • [ ] Meta descriptions
  • [ ] Focus keywords
  • [ ] Canonical URLs
  • [ ] Robots directives (noindex pages)
  • [ ] Schema markup settings

Store in spreadsheet matched to URLs.

3. Map URL Structure

Compare old URLs to new:

Old (WordPress)New (Static Site)
/blog/post-name//blog/post-name
/category/seo//blog/category/seo
/2026/01/post//blog/post

Identify:

  • URLs that stay the same ✅
  • URLs that change (need redirects) ⚠️
  • URLs being removed (need redirect plan) ❌

URL Preservation & Redirects

4. Match URL Structure (When Possible)

Best case: keep URLs identical.

WordPress:

/blog/my-awesome-post/

New site:

/blog/my-awesome-post/

(Or /blog/my-awesome-post without trailing slash—pick one consistently)

5. Set Up 301 Redirects

For any URLs that change, create 301 (permanent) redirects.

In Next.js (next.config.js):

module.exports = {

async redirects() {

return [

{

source: '/old-url/',

destination: '/new-url',

permanent: true,

},

// Category example

{

source: '/category/:slug*',

destination: '/blog/category/:slug*',

permanent: true,

},

];

},

};

In Vercel (vercel.json):

{

"redirects": [

{ "source": "/old-url/", "destination": "/new-url", "permanent": true }

]

}

In Netlify (_redirects):

/old-url/ /new-url 301

/category/* /blog/category/:splat 301

6. Handle Common WordPress URLs

Redirect these automatically:

// WordPress patterns that need redirects

const redirects = [

// Paginated archives

{ source: '/page/:num', destination: '/blog' },

// Author archives

{ source: '/author/:slug', destination: '/about' },

// Date archives (if not preserving)

{ source: '/:year/:month/:slug', destination: '/blog/:slug' },

// Feed URLs

{ source: '/feed/', destination: '/rss.xml' },

// Search

{ source: '/\\?s=:query', destination: '/search?q=:query' },

];

7. Verify All Redirects Work

After setup, test every redirect:

Using curl

curl -I https://newsite.com/old-url/

Should show: 301 Moved Permanently

Location: /new-url

Or use redirect checker tools.


Metadata Migration

8. Transfer Meta Titles

Every page needs its meta title preserved.

In Next.js (page.tsx):

export const metadata = {

title: 'Your Preserved Meta Title',

description: 'Your preserved meta description',

};

For blog posts (MDX frontmatter):

---

title: "Post Title"

seo:

title: "Your SEO Title | Site Name"

description: "Your meta description here"


9. Transfer Meta Descriptions

Every indexed page needs its description.

Checklist:

  • [ ] Homepage meta description
  • [ ] All blog posts
  • [ ] All pages
  • [ ] Category pages
  • [ ] Any custom post types

10. Preserve Open Graph Tags

For social sharing:

// Next.js metadata

export const metadata = {

openGraph: {

title: 'Page Title',

description: 'Description',

images: ['/og-image.jpg'],

type: 'article',

publishedTime: '2026-02-05',

},

twitter: {

card: 'summary_large_image',

title: 'Page Title',

description: 'Description',

images: ['/og-image.jpg'],

},

};


Technical SEO

11. Create XML Sitemap

Next.js (app/sitemap.ts):

import { getAllPosts } from '@/lib/posts';

export default async function sitemap() {

const posts = await getAllPosts();

const postUrls = posts.map((post) => ({

url: https://yoursite.com/blog/${post.slug},

lastModified: post.updatedAt || post.publishedAt,

changeFrequency: 'weekly',

priority: 0.8,

}));

return [

{

url: 'https://yoursite.com',

lastModified: new Date(),

changeFrequency: 'daily',

priority: 1,

},

...postUrls,

];

}

12. Set Up Robots.txt

// app/robots.ts

export default function robots() {

return {

rules: [

{

userAgent: '*',

allow: '/',

disallow: ['/api/', '/admin/'],

},

],

sitemap: 'https://yoursite.com/sitemap.xml',

};

}

13. Implement Canonical URLs

Every page needs a canonical URL:

export const metadata = {

alternates: {

canonical: 'https://yoursite.com/this-page',

},

};

14. Preserve Structured Data (Schema)

Transfer your schema.org markup:

// BlogPosting schema

const jsonLd = {

'@context': 'https://schema.org',

'@type': 'BlogPosting',

headline: post.title,

description: post.excerpt,

image: post.featuredImage,

datePublished: post.publishedAt,

dateModified: post.updatedAt,

author: {

'@type': 'Person',

name: post.author.name,

url: 'https://yoursite.com/about',

},

publisher: {

'@type': 'Organization',

name: 'Your Site',

logo: {

'@type': 'ImageObject',

url: 'https://yoursite.com/logo.png',

},

},

};

return (

<>

type="application/ld+json"

dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}

/>

...

);


Content Migration

15. Preserve All Content

Nothing should be lost:

  • [ ] All blog posts with full content
  • [ ] All pages
  • [ ] All images (with same URLs or redirected)
  • [ ] Internal links updated
  • [ ] External links preserved

16. Update Internal Links

After migration, internal links need to work:

Search and replace:

  • Old domain → New domain
  • Old URL patterns → New URL patterns

Example in content:


Read more

Read more

17. Preserve Image URLs

Images affect SEO too:

Option A: Keep same paths

/wp-content/uploads/2026/01/image.jpg

→ /wp-content/uploads/2026/01/image.jpg

Option B: Redirect to new paths

/wp-content/uploads/2026/01/image.jpg

→ /images/image.jpg

Don't forget: Alt text preservation!


Launch Checklist

18. Pre-Launch Verification

  • [ ] All pages accessible
  • [ ] All redirects working
  • [ ] Sitemap accessible at /sitemap.xml
  • [ ] Robots.txt accessible at /robots.txt
  • [ ] No duplicate content
  • [ ] SSL working (HTTPS)
  • [ ] Page speed improved (or at least maintained)

19. Submit to Search Engines

Immediately after launch:

1. Google Search Console:

- Submit new sitemap

- Request indexing for key pages

- Use URL Inspection tool

2. Bing Webmaster Tools:

- Submit sitemap

- Request indexing

20. Update External References

  • [ ] Update Google Business Profile
  • [ ] Update social media links
  • [ ] Update directory listings
  • [ ] Notify backlink partners of any URL changes

Post-Migration Monitoring

21. Monitor Search Console (Daily for 2 Weeks)

Watch for:

  • Crawl errors (404s)
  • Coverage issues
  • Mobile usability problems
  • Core Web Vitals changes

22. Track Rankings

Compare to pre-migration baseline:

  • Top 10 keywords
  • Top 20 landing pages
  • Overall organic traffic

Timeline expectations:

  • Week 1-2: Minor fluctuations normal
  • Week 3-4: Should stabilize
  • After 4 weeks: Should match or exceed baseline

23. Monitor 404 Errors

Check analytics and Search Console for 404s:

  • Sign of missing redirects
  • Fix immediately
  • Add to redirect list

24. Check Indexed Pages

In Search Console:

site:yoursite.com

Compare count to pre-migration. All pages should be indexed.


Common Migration Mistakes

Mistake 1: Missing Redirects

Result: 404 errors, lost rankings, broken backlinks

Prevention: Comprehensive URL mapping before migration

Mistake 2: Redirect Chains

Bad:

/old-url → /middle-url → /final-url

Good:

/old-url → /final-url

Mistake 3: Losing Meta Data

Result: Generic titles/descriptions in search results

Prevention: Export all SEO data before migration

Mistake 4: Changing Too Much at Once

Result: Can't diagnose what caused issues

Prevention: Minimal URL changes, focus on platform only

Mistake 5: Forgetting About Images

Result: Broken images, lost image search traffic

Prevention: Preserve or redirect image URLs


Quick Checklist

Before Migration

  • [ ] Export all URLs
  • [ ] Export all meta titles/descriptions
  • [ ] Document current rankings
  • [ ] Map URL changes
  • [ ] Plan redirect strategy

During Migration

  • [ ] Implement all redirects
  • [ ] Transfer all content
  • [ ] Preserve all metadata
  • [ ] Update internal links
  • [ ] Test every page

After Migration

  • [ ] Submit new sitemap
  • [ ] Verify redirects work
  • [ ] Monitor Search Console
  • [ ] Track rankings for 4+ weeks
  • [ ] Fix any 404s immediately

FAQ

Q: How long until rankings stabilize?

Usually 2-4 weeks. Minor fluctuations are normal in week 1. Major drops that persist need investigation.

Q: Should I change URLs during migration?

Minimize changes. Every URL change needs a redirect. More changes = more risk.

Q: What if I see a traffic drop?

Check: 404 errors, redirect loops, missing metadata, indexing issues. Most issues are fixable. Learn more about WordPress performance →

Q: Can I improve SEO during migration?

Yes—better performance and Core Web Vitals often improve rankings. But focus on preservation first.

Q: What's the best hosting for SEO?

Modern static hosts like Vercel, Netlify, and Cloudflare Pages offer excellent performance that benefits SEO. Compare hosting platforms →


Conclusion

SEO preservation is achievable with proper planning:

1. Document everything before migrating

2. Preserve URLs when possible, redirect when not

3. Transfer all metadata and structured data

4. Monitor closely for 4+ weeks

The good news: modern platforms often improve SEO through better performance and Core Web Vitals.

Related guides:

Start your migration with our free export tool →

Share:

Related Articles

View all

Ready to Migrate Your WordPress Site?

Use our free tool to export your WordPress content in minutes.

Start Free Migration