Organic search traffic is the single most vulnerable asset during a website migration. Google Search Central documentation explicitly warns that site moves with URL changes will cause temporary ranking fluctuations. A rigorous SEO preservation strategy minimizes traffic loss and accelerates recovery.
URL Mapping and Redirect Implementation
The redirect map is the most critical artifact in an SEO migration:
Building the URL Map
- Crawl the legacy site: Use a crawler to generate a complete list of every indexable URL, including paginated pages, filtered views, and parameterized URLs.
- Cross-reference with analytics: Overlay Google Analytics data to identify the highest-traffic URLs. These are your priority-one redirects.
- Cross-reference with Search Console: Export the full list of indexed URLs from Google Search Console's Pages report. URLs that are indexed but not in your crawl may indicate orphaned content that still receives traffic.
- Map every URL: Create a one-to-one mapping from every legacy URL to its corresponding new URL. Where exact matches do not exist, map to the closest relevant page. Never redirect to the homepage as a fallback unless no relevant content exists.
Redirect Implementation
- Use 301 (permanent) redirects: Google Search Central confirms that 301 redirects pass link equity (PageRank) to the destination URL. Implement redirects server-side, not via JavaScript or meta refresh tags.
- Avoid redirect chains: Google will follow up to 10 hops in a redirect chain, but recommends keeping chains to fewer than 3. Each hop adds latency and risks link equity dilution. Redirect directly to the final destination URL.
- Implement at the edge: On Vercel, configure redirects in next.config.js or vercel.json for optimal performance. Edge-level redirects execute before the application layer, minimizing time to first byte (TTFB).
- Handle trailing slashes consistently: Choose a trailing slash convention and enforce it with redirects. Inconsistency creates duplicate content signals.
Redirect Verification
- Test every redirect: Programmatically verify that every legacy URL returns a 301 status code pointing to the correct destination. Use a script or tool to validate the entire map before launch.
- Monitor 404 errors: After launch, monitor Google Search Console's Pages report daily for new 404 errors. These indicate missing redirects that need immediate attention.
Canonical Tags and Metadata
- Set canonical tags on every page: Every page on the new site must include a self-referencing canonical tag. This signals to Google which URL is the authoritative version.
- Migrate title tags and meta descriptions: Extract and migrate all page-level title tags, meta descriptions, and Open Graph metadata. Do not rely on auto-generation for pages that had manually optimized metadata.
- Preserve heading hierarchy: Maintain the H1-H6 heading structure from the legacy site. Changes to heading hierarchy can affect how Google interprets page content and topical relevance.
Structured Data Migration
Structured data (JSON-LD) directly impacts search appearance through rich results:
- Audit existing structured data: Crawl the legacy site and extract all structured data markup. Common types include Organization, Product, Article, FAQ, BreadcrumbList, and LocalBusiness.
- Migrate to JSON-LD format: If the legacy site uses Microdata or RDFa, convert to JSON-LD during migration. Google recommends JSON-LD as the preferred format.
- Validate with Rich Results Test: After migration, test representative pages using Google's Rich Results Test to confirm structured data is valid and eligible for rich results.
Core Web Vitals Optimization
A migration to Next.js on Vercel is an opportunity to dramatically improve Core Web Vitals:
LCP (Largest Contentful Paint) - Target: Under 2.5 Seconds
- Use Next.js Image component with priority attribute on above-the-fold hero images to enable preloading.
- Implement static generation (getStaticProps) or incremental static regeneration (ISR) to serve pre-rendered HTML.
- Configure Vercel's Edge Network to serve cached responses globally.
CLS (Cumulative Layout Shift) - Target: Under 0.1
- Set explicit width and height attributes on all images and media embeds.
- Use CSS aspect-ratio or the Next.js Image component's built-in dimension handling to reserve space before assets load.
- Avoid injecting dynamic content above the fold after initial render.
INP (Interaction to Next Paint) - Target: Under 200 Milliseconds
- Minimize main-thread JavaScript execution. Use dynamic imports and React.lazy to code-split heavy components.
- Defer non-critical third-party scripts (analytics, chat widgets, ad tags) using the Next.js Script component with strategy="lazyOnload".
- Use React Server Components in Next.js App Router to reduce client-side JavaScript bundle size.
XML Sitemap and Robots.txt
- Submit a new sitemap: Generate and submit an XML sitemap containing all new URLs to Google Search Console immediately after launch.
- Keep the old sitemap temporarily: Maintain the legacy sitemap (with redirecting URLs) for 180 days to help Google discover and follow all redirects.
- Update robots.txt: Ensure the new robots.txt does not block any pages that were previously accessible and indexed.
Sources
- Google Search Central - Site Moves with URL Changes: https://developers.google.com/search/docs/crawling-indexing/site-move-with-url-changes
- Google Search Central - Redirects: https://developers.google.com/search/docs/crawling-indexing/301-redirects
- Google Core Web Vitals Thresholds: https://web.dev/articles/defining-core-web-vitals-thresholds
- Google Rich Results Test: https://search.google.com/test/rich-results
- Next.js Image Optimization: https://nextjs.org/docs/app/building-your-application/optimizing/images
- Vercel Edge Network Documentation: https://vercel.com/docs/edge-network/overview