Engineering Notes · SEO & Web · 7 min read
The SEO migration checklist for moving from HTML to Next.js
A practical way to preserve old URLs, consolidate canonicals, and give search engines one clean version of your site.

Moving from static HTML to Next.js is a routing change, not just a frontend rewrite. Here is the checklist we use to protect search visibility during the move.
The risky part is not the JSX
A migration can look perfect in the browser and still lose organic traffic. Search engines remember the old URLs, old canonicals, old internal links, and old sitemap entries long after a new app is deployed.
The safest migration treats every URL as a contract. If a page still has a useful equivalent, redirect it permanently. If it has no equivalent, return a deliberate 404 instead of sending every visitor to the homepage.
- Inventory old URLs before changing the route tree.
- Map every valuable URL to its closest real replacement.
- Keep redirects, canonicals, internal links, and the sitemap aligned.
Make one URL the source of truth
A common migration mistake is allowing both /home and / to render the same content. That splits signals and makes Search Console reports harder to interpret.
Choose one canonical route, redirect the duplicate, and update every navigation link to point directly to the canonical URL. Do the same for legacy .html paths.
- Return a permanent redirect for moved pages.
- Use absolute canonical URLs generated from one metadata base URL.
- Never include redirected URLs in the XML sitemap.
Metadata is part of the page architecture
Next.js makes page metadata easy to generate, but the content still needs editorial decisions. Each important route should have a unique title, description, H1, Open Graph title, and canonical URL.
For content pages, add publication and modification dates, a real author, a representative image, and Article structured data. These fields help crawlers understand what changed and who stands behind the work.
- Write titles for people first, with the main topic near the front.
- Keep the description specific to the page instead of repeating a site-wide slogan.
- Use Article or BlogPosting schema only when the visible page supports it.
The post-launch crawl is the real test
A deployment is not the end of a migration. Inspect the homepage, key service pages, old URLs, robots.txt, and sitemap.xml after release. Then watch the index coverage report for several crawl cycles.
The useful signal is not whether Search Console changes immediately. It is whether old URL impressions decline while the canonical replacements accumulate impressions and clicks.
- Test status codes from a clean browser or HTTP client.
- Submit the sitemap and validate fixes in Search Console.
- Compare page-level clicks, impressions, CTR, and position after 28 days.