Part 2: SEO Migration Checklist
Platform migrations are where SEO goes to die if you're not careful.
The data is sobering: domain migrations that go wrong average 523 days to recover lost traffic, and 17% never recover at all (Search Engine Journal, 2024 study of 892 migrations). Platform migrations on the same domain carry less risk, since your domain authority stays intact. But the fundamentals are the same: skip your redirects or botch your metadata and you'll lose rankings. Well-executed same-domain migrations typically recover traffic within weeks, and many teams see rankings improve after, because Framer's performance advantages (faster load times, stronger Core Web Vitals) are ranking signals in Google's algorithm. The difference is entirely in the planning.
This checklist covers everything you need to protect and improve your organic search presence during a WordPress-to-Framer migration.
Before the migration
1. Crawl your current site
Use Screaming Frog, Ahrefs Site Audit, or Sitebulb to crawl your WordPress site. Export:
All URLs with HTTP status codes
Page titles and meta descriptions for every page
H1 tags
Canonical URLs
Internal link structure
Hreflang tags (if you have localized versions)
Structured data / schema markup
Pages ranked by organic traffic (Google Search Console → Performance → Pages)
Pages ranked by backlink count (Ahrefs, Moz, or Semrush)
This crawl is your source of truth for the entire migration. Store it. You'll reference it repeatedly.
2. Build your URL map
Create a spreadsheet: Old URL, New URL, Status (redirect / keep / retire), Organic Sessions (monthly), Backlinks (count), Priority (high / medium / low).
Key decisions:
Keep URLs identical where possible. If your WordPress blog lives at /blog/post-title, keep that exact structure in Framer. Less change = less risk.
Clean up ugly URLs. If WordPress generated date-based permalinks (/2024/03/15/post-title) or default parameter URLs (/?p=1234), use migration as the opportunity to simplify. Redirect old patterns to clean new paths.
Every URL that receives organic traffic must have a redirect. No exceptions. Prioritize by traffic volume and backlink count.
Decide what happens to pages you're not migrating: redirect to the most relevant alternative (preferred), or allow a 410 (Gone) if the content is truly obsolete with no relevant replacement.
WordPress-specific URLs to account for:
/feed and /rss → redirect to blog index or 410. If you have active RSS subscribers, note that Framer doesn't generate RSS feeds natively. Consider setting up an external RSS feed (via a service like RSS.app or a custom solution) and redirecting your old feed URL there, rather than losing subscribers.
/wp-admin, /wp-login.php → let these 404 (or redirect to homepage)
/category/[name] → redirect to blog index or Framer filtered view
/tag/[name] → redirect to blog index or 410
/author/[name] → redirect to team page or 410
Paginated archives (/blog/page/2, /page/3) → redirect to main blog page
/wp-content/uploads/[file] → re-upload to Framer or redirect
Trailing slash variations: if WordPress used /about/ and Framer uses /about, that's a different URL. Set up the redirect.
3. Export all metadata
From your WordPress SEO plugin (Yoast, Rank Math, All in One SEO), export:
Page titles for every page and post
Meta descriptions
Open Graph titles, descriptions, and images
Twitter Card metadata
Custom canonical URLs
Focus keywords or primary keyword targets
Schema / structured data (if managed through the SEO plugin)
Hreflang annotations (if multi-language)
Export systematically. Don't rely on recreating from memory. Use your SEO plugin's export or your crawl data from step 1.
4. Benchmark current performance
Record baseline metrics before migration:
Organic traffic (monthly sessions from GA / Search Console)
Keyword rankings for your top 50 terms
Core Web Vitals scores (PageSpeed Insights on your top 10–20 pages)
Click-through rates for top pages (Search Console → Performance)
Indexed page count (Search Console → Pages → Indexed)
During the migration
5. Implement 301 redirects in Framer
The single most important step for SEO. Every old URL with organic traffic, backlinks, or internal links must 301 redirect to its new equivalent.
In Framer: Site Settings → Redirects. Use your URL map from step 2. For bulk imports, the Redirect Sync plugin (built by Framer, available in the Marketplace) lets you upload redirects in bulk rather than adding them one by one.
Rules:
Every page that changes URL gets a 301 (old → new)
Removed pages redirect to the most relevant existing page, not the homepage. Redirecting everything to the homepage gets treated as a soft 404 by Google.
Category and tag archives redirect to filtered views or blog index
Paginated archives redirect to the main blog page
Feed URLs (/feed, /rss) redirect to blog index
WordPress system URLs (/wp-admin, /wp-login.php, /xmlrpc.php) can 404
Use wildcards for patterns:
/category/* → /blog
/tag/* → /blog
/author/* → /team
/blog/page/* → /blog
/?p=* → /blog
Redirect limits:
Pro: 100
Scale: 500
Enterprise: unlimited
Max 2,500 rules per project
If you exceed your limit, prioritize: (1) pages with the most organic traffic, (2) pages with the most backlinks, (3) remaining indexed pages. Consider upgrading if you have hundreds of essential redirects.
Important: keep redirects in place for at least one year (Google's recommendation). Don't remove them early even if you think search engines have re-indexed everything. Also: redirected URLs should not appear in your XML sitemap. They waste crawl budget and confuse search engines.
A common mistake: using 302 (temporary) redirects instead of 301 (permanent). Only 301s pass full link equity. Double-check every redirect is a 301. For step-by-step setup instructions, see framer.com/help/articles/how-to-setup-redirects-to-maintain-seo-ranking.
A warning on redirect volume: uploading thousands of redirects at once can cause project performance issues. If you're migrating a large site with thousands of old URLs, use wildcard patterns to consolidate where possible, and stay within your plan's limits. If you've inherited a massive redirect list from a previous CMS, audit it first. Many of those redirects may no longer be needed.
6. Recreate all metadata in Framer
For every page and CMS item:
Page title. Keep identical to WordPress unless you're intentionally optimizing. Set per page in Page Settings → SEO (framer.com/help/articles/guide-to-seo-features-and-tools). For CMS items, set in the collection field or per-item override (framer.com/help/articles/how-can-i-add-meta-titles-and-descriptions-to-each-cms-item).
Meta description. Transfer existing descriptions verbatim. If pages lacked descriptions in WordPress, write them now. Migration is the time.
Open Graph metadata. Set OG title, description, and image for every page (framer.com/help/articles/how-to-update-page-titles-descriptions-and-social-images). This controls how links appear on LinkedIn, Twitter/X, Facebook, and Slack.
Canonical URLs. Framer uses the page URL as canonical by default. If you used custom canonicals in WordPress (for syndicated or duplicate content), set them explicitly.
Structured data. If your WordPress site used schema markup (Article, FAQ, Product, Organization, BreadcrumbList), recreate it as JSON-LD in Custom Code → Head (framer.com/help/articles/structured-data-through-json-ld). Framer doesn't have a built-in schema editor, but you have two options: add JSON-LD manually via Custom Code (using CMS field variables with {{}} syntax to generate unique structured data per page), or use a schema plugin from the Framer Marketplace that simplifies implementation through a visual interface. For all SEO-related help, see framer.com/help/seo.
Framer's markup is clean and structured by default. Answer-engine optimized (AEO) out of the box. Metadata, Open Graph tags, and semantic HTML are built into the publishing flow, not bolted on through plugins. This matters more than ever: Google AI Overviews now appear in over half of all Google searches as of early 2026 (up from single digits a year ago), and AI tools like ChatGPT and Perplexity are increasingly citing structured, well-marked-up content. A platform migration is the ideal time to implement answer-oriented content structure. See Framer's guide: framer.com/guides/answer-oriented-pages.
7. Set up your sitemap
Framer generates an XML sitemap automatically at yourdomain.com/sitemap.xml (framer.com/help/articles/how-can-i-access-the-sitemap-xml-file). Verify:
All published pages are included
All CMS collection pages are included
No draft, hidden, or password-protected pages appear
The URL is accessible (test by visiting it directly)
If your WordPress site used image or video sitemaps: Framer generates a standard URL sitemap. For most sites, this is sufficient. Google discovers media through page crawling and structured data.
8. Review robots.txt
Framer auto-generates robots.txt with the sitemap URL included (framer.com/help/articles/how-can-i-access-the-robots-txt-file). Access at yourdomain.com/robots.txt.
Note: Framer doesn't allow direct editing of robots.txt. Control indexing per page using the "Show page in search engines" toggle in Page Settings (framer.com/help/articles/how-do-i-prevent-specific-pages-from-getting-indexed-by-search-engines), which adds a noindex meta tag. For llms.txt and other well-known files, see framer.com/help/articles/well-known-files.
Verify:
No important pages are set to noindex unintentionally
Your sitemap URL appears in robots.txt (automatic)
Pages you want hidden from search have the toggle disabled
No leftover Disallow rules from a staging environment (a common migration mistake: carrying over a staging Disallow: / that blocks all crawlers)
9. Update all internal links
As you rebuild pages, make sure every internal link points to the correct new URL, not the old WordPress URL:
Navigation menus (header, footer, mobile)
In-content links within blog posts (especially important for CSV imports, since links in post bodies will still reference old WordPress URLs unless updated)
CTA buttons and banners
Footer links and secondary navigation
Image links
For CSV-imported blog content: find-and-replace in your CSV before importing to update internal URLs. Or use Framer's CMS editor after import.
10. Optimize images during migration
Migration is a natural opportunity to improve image performance, and image handling directly affects your largest contentful paint (LCP), the most impactful Core Web Vital for rankings.
Convert images to modern formats (WebP or AVIF) before importing. WordPress sites often serve unoptimized JPEGs and PNGs that are 2–5x larger than necessary. Framer also optimizes images automatically on upload (framer.com/help/articles/how-are-images-optimized-in-framer).
Verify lazy loading behavior. Framer lazy-loads images by default (framer.com/help/articles/how-to-natively-lazy-load-videos-or-images), but above-the-fold images (hero sections, first visible content) should load eagerly. Check that your hero images aren't lazy-loaded. This delays LCP and hurts performance scores.
Compress aggressively. Run images through a tool like Squoosh, TinyPNG, or ImageOptim before upload. Target under 200KB for most content images, under 500KB for full-width heroes.
Check image dimensions. Don't serve a 4000px-wide image in a container that's 800px wide. Resize to match display size at 2x for retina screens. For more on performance, see framer.com/help/articles/site-optimization.
11. Preserve structured data and rich results
If your WordPress site generated rich results in Google (FAQ dropdowns, article cards, product snippets, breadcrumbs, review stars), recreate the underlying structured data.
Common schema types to migrate:
Article (blog posts)
FAQPage (FAQ sections)
Organization (your company)
BreadcrumbList (navigation)
Product (product pages)
LocalBusiness (if applicable)
Two options for adding schema in Framer:
Manual JSON-LD: Per page in Page Settings → Custom Code → Head (framer.com/help/articles/how-to-add-custom-code). Site-wide in Site Settings → Custom Code → Head. For CMS pages, use {{}} field variables to dynamically generate unique structured data per item (framer.com/help/articles/structured-data-through-json-ld), or use code overrides (framer.com/developers/overrides-introduction — requires developer involvement).
Schema plugins: The Framer Marketplace includes plugins that provide a visual interface for schema implementation without writing JSON-LD manually.
Validate with Google's Rich Results Test after migration. Test both individual pages and CMS collection pages.
While you're rebuilding structured data, consider going beyond what your WordPress site had. Add FAQPage schema to key landing pages, ensure every blog post has Article schema, and structure content for AI discoverability. These signals help your pages surface in Google AI Overviews and get cited by AI search tools. Increasingly important alongside traditional rankings. Framer's AEO guide covers this: framer.com/guides/answer-oriented-pages.
After the migration
12. Submit your sitemap to Google Search Console
Once your Framer site is live:
Google Search Console → Sitemaps → submit yourdomain.com/sitemap.xml (framer.com/help/articles/how-to-connect-google-search-console-to-your-framer-site)
Use URL Inspection to request indexing for your 10–20 most important pages
If you changed domains (not just platforms), use the Change of Address tool
Monitor the Pages report for crawl errors daily for the first 4 weeks
13. Monitor for crawl errors
First 30 days. Check Search Console daily:
404 errors. Pages Google can't find. A redirect is missing. Fix immediately.
Redirect chains. A → B → C. Simplify to A → C. Chains waste crawl budget and dilute link equity.
Redirect loops. A → B → A. Blocks indexing entirely. Fix by correcting the target.
Soft 404s. Pages returning 200 but with thin or no content. Add content or redirect.
Server errors (5xx). Shouldn't happen on Framer's static hosting, but monitor anyway.
14. Track rankings and traffic
Monitor keyword rankings for 8–12 weeks minimum. Fluctuation in the first 4 weeks is normal as Google recrawls and reindexes. Rankings should stabilize, and often improve, once Google processes Framer's performance signals.
Track weekly:
Organic sessions (GA or your analytics platform)
Keyword rankings for your top 50 terms
Click-through rates (Search Console → Performance)
Core Web Vitals (PageSpeed Insights or Search Console)
Indexed page count (Search Console → Pages)
Crawl stats (Search Console → Settings → Crawl Stats)
If rankings drop for specific pages after 4 weeks: check the redirect, verify metadata, confirm the content is indexed (URL Inspection), and ensure no accidental noindex tag.
15. Update external links
If you control any backlink sources (other company sites, partner pages, directory listings, social profiles, Google Business Profile, Crunchbase), update them to point directly to new URLs. Redirects handle discovery, but direct links are always better for link equity and crawl efficiency.
16. Validate Core Web Vitals improvement
One of the primary benefits of migrating to Framer is better performance. After migration:
Run PageSpeed Insights on your top 10–20 pages (framer.com/help/articles/how-to-optimize-pagespeed-insights)
Compare LCP, CLS, and INP to your pre-migration baseline
Check the Core Web Vitals report in Search Console (field data appears after ~28 days)
Don't panic if CWV data temporarily disappears from Search Console after migration. Google needs time to recollect field data from real users on the new platform. Previously "good" URLs may vanish from the report. This doesn't mean performance degraded. It means Google is rebuilding its dataset. The data typically repopulates within 28 days.
If scores improved (they typically do), that's a compelling data point for stakeholders, and it contributes positively to rankings over time
Note: PageSpeed Insights lab scores and Core Web Vitals field data measure different things. A page can score 55 in PSI but still pass all CWV thresholds with real users. Don't optimize for the PSI number. Optimize for the field data. For guidance on interpreting Lighthouse scores, see framer.com/help/articles/guide-to-lighthouse-scores. For an overview of Framer's performance architecture, see framer.com/performance.
17. Verify mobile rendering
Google uses mobile-first indexing. The mobile version of your site is what gets indexed and ranked. After migration, verify every page renders correctly on mobile. Check for: layout shifts, tap targets that are too close together, text that requires horizontal scrolling, and images that break their containers. Test with Chrome DevTools device emulation and real devices. Even minor layout issues on mobile can affect rankings more than equivalent issues on desktop.
