SEO migration

You've decided to move. Now: how do you actually do it?

This covers the complete migration process, from auditing your WordPress site to going live on Framer. Whether you're migrating a 20-page marketing site or a 500-post blog with custom post types, every step is here.

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:

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.

Ship faster.
Build smarter.

Apply advanced practices to build and run sites, without slowing down.

Ship faster.
Build smarter.

Apply advanced practices to build and run sites, without slowing down.

Ship faster.
Build smarter.

Apply advanced practices to build and run sites, without slowing down.

0