WhatsApp Us

React to Next.js migration · CRA and Vite single-page apps

React to Next.js migration: fix indexing and slow first load without a rewrite

A React to Next.js migration moves a client-side React app, usually built with Create React App or Vite, onto Next.js so pages arrive as real HTML, load faster and get indexed properly. BtechWaleTech is three freelance developers in India who plan these moves route by route, keep your URLs and logins working, and ship in stages so the app never goes dark. Small public-facing apps start at ₹10,000; larger apps with logins and APIs start at ₹60,000. See our Next.js work or read on for the full plan.

  • Small public appFrom ₹10,000 · US$150
  • App with logins and APIsFrom ₹60,000 · US$900
  • ApproachRun as SPA inside Next.js first, then convert routes
  • Router targetApp Router for most new migrations
  • QuoteAfter a code review, in about 2 working days
  • Aftercare2 months free once live
  • CRA and Vite apps
  • App Router planning
  • SSR, SSG and ISR by route
  • URLs and redirects kept
  • Auth and API moved
  • Staged, no big-bang
  • Code stays yours

Three freelance developers in India · replies on WhatsApp 7 days a week

  • 3Developers on each migration, with code review
  • 2Working days to a route-by-route quote
  • 2Months of free fixes after the switch-over
  • 7Days a week you can reach us on WhatsApp

The short answer

How does a React to Next.js migration work, and what does it cost?

A React to Next.js migration first runs your existing React app inside Next.js as a single-page app, then converts routes one at a time to server or static rendering, keeping URLs, auth and APIs working. With BtechWaleTech a small public-facing app starts at ₹10,000; an app with logins, dashboards and APIs starts at ₹60,000, typically over 6–12 weeks.

Coming from WordPress rather than React? See WordPress to Next.js migration. Still deciding on a framework? Astro may suit content-only sites better.

Last updated

React to Next.js migration in brief
Who needs itReact SPAs whose public pages are not indexed, preview badly or load slowly
Starting pointCreate React App, Vite or a custom webpack React build
MethodWrap the app in Next.js as an SPA, then move routes to server or static rendering
RouterApp Router for most projects; Pages Router only for specific constraints
SEO safetySame URLs, 301s where they change, metadata per route, sitemap resubmitted
Starting price₹10,000 (small public app) · ₹60,000 (app with logins)
OwnershipRepository and hosting stay in your name throughout

Why choose us

Three ways to fix a React SPA's SEO and first-load problem

Not every React app needs a full React to Next.js migration. Here is how the realistic options compare.

Three ways to fix a React SPA's SEO and first-load problem
Consideration Keep the SPA, add a prerender layer Rewrite from scratch in Next.js Staged migration with BtechWaleTech
Time before first improvement Short Long; nothing ships until the end Short; public pages move first
Risk of breaking features Low, but adds a moving part High; everything is new at once Low; one route group at a time
First-load speed Crawlers helped; users still wait for the bundle Best, if done well Improves route by route
Ongoing cost Extra service or server to maintain Normal Next.js upkeep Normal Next.js upkeep
Reuse of existing components All Little Most, moved as client components
URL and SEO continuity Unchanged Easy to break without a plan Planned and tested against a crawl
Feature work during the project Continues Usually frozen Continues between stages
Starting price with us Quoted case by case From ₹60,000 From ₹10,000 (small) or ₹60,000 (app)

If only a logged-in dashboard is affected and no page needs to rank, a React to Next.js migration may not be worth it; tuning the existing Vite build can be enough.

Pricing

React to Next.js migration pricing

A migration is priced on what has to move, not on lines of code. The main drivers are the number of distinct route types, how data is fetched today, how authentication works, how many third-party libraries assume a browser, and whether your API lives inside the React project or separately. A small marketing-style app with a handful of templates sits near the static-site floor; an app with logins, roles and dashboards is priced as custom software. We review your repository before quoting, then send an itemised estimate in about two working days. Nothing is billed until you approve it in writing. Overseas clients are quoted in USD, for example US$900 for app-level work.

Starting prices in INR and USD
ServiceIndia (INR)Worldwide (USD)Typical timelineWhat is included
Static website from ₹10,000 from US$150 1 to 2 weeks Up to 100 pages, Responsive design, Contact form and enquiry setup, Basic SEO tags and sitemap
SEO website (299+ pages) from ₹20,000 from US$300 3 to 5 weeks 299+ SEO pages, Keyword and page planning, Schema, sitemap, and internal linking, Design to deployment included
Ecommerce store from ₹50,000 from US$750 4 to 8 weeks Product and category pages, Payment gateway setup, Order and inventory basics, Performance tuning
Android & iOS app from ₹40,000 from US$600 6 to 10 weeks Android and iOS app (Flutter or React Native), Login, forms and push notifications, Admin panel and API connection, Google Play and App Store publishing
Custom web app or software from ₹60,000 from US$900 6 to 12 weeks Custom features and APIs, User accounts and roles, Admin panel, Deployment and handover
AI automation from ₹40,000 from US$600 2 to 4 weeks Workflow mapping, Tool and CRM integrations, AI agent or automation build, Testing and handover
Monthly SEO from ₹10,000/mo from US$150/mo Ongoing, monthly Technical fixes, On-page and content work, Local SEO and listings, Search Console reporting
Maintenance and support from ₹8,000/mo from US$120/mo Ongoing, monthly Content updates, Bug fixes, Backups and security checks, Speed and uptime checks

All prices are starting points, quoted in INR for India and USD for international clients, not fixed quotes. Final cost depends on the number of pages, features, integrations, content, and timelines. Share your requirement and you get an itemised estimate with nothing hidden. See full pricing.

When does a React to Next.js migration make sense?

Migrate when pages that should bring in search traffic are missing from Google, when first load is slow on mobile, or when shared links show blank previews. Those three symptoms share one cause: the browser receives an empty HTML shell and has to download and run your JavaScript before anything appears.

You can check this yourself in a minute. Open one of your public pages, right-click and choose “View page source”. If the source shows a near-empty body with a single root div and script tags, your content is built entirely in the browser. Now paste the URL into a WhatsApp chat: if the preview shows a generic title or none at all, link-preview bots see the same empty shell.

A React to Next.js migration is not always the answer. If your app is a private dashboard behind a login, with no page that needs to rank or be shared, the benefits are smaller and a tuned Vite build may do. The strongest cases are apps where public and private pages live together: marketplaces, listing portals, SaaS products with feature pages, and content sites that were built as SPAs years ago.

  • Public pages missing or marked “Crawled – currently not indexed” in Search Console
  • Largest Contentful Paint on mobile far above 2.5 seconds
  • Blank or wrong link previews on WhatsApp, LinkedIn or X
  • A Create React App project that no longer receives updates

Why does a client-side React app struggle with SEO and first load?

Because search engines and browsers both have to run your JavaScript before they see any content. For people, that means waiting; for crawlers, it means an extra step that some of them skip.

Google's Search Central documentation describes three phases for JavaScript pages: crawling, rendering in a headless Chromium, and indexing. Pages wait in a rendering queue, which the documentation says can take a few seconds or longer. It also states that server-side rendering or pre-rendering is still a great idea because it is faster for users and crawlers and not all bots can run JavaScript. Many AI crawlers and social preview bots fall into that last group.

First load suffers for a related reason. The Next.js migration guides for Create React App and Vite both point out that a purely client-side app must download and run the whole bundle before it can even start requesting data, and that fetching in useEffect creates waterfalls where each component waits for its parent. On a budget Android phone over mobile data, that chain is what users feel as a white screen.

A React to Next.js migration addresses both by sending HTML that already contains the content, then hydrating it. Our React developer page covers the cases where staying client-side is fine.

Create React App is deprecated: what does that mean for your app?

It means your build tool will not get new features or fixes, so the longer you wait, the more outdated dependencies pile up. On 14 February 2025 the React team announced it was deprecating Create React App for new apps.

In that announcement the team recommends moving to a framework such as Next.js, React Router or Expo, and lists Vite, Parcel and Rsbuild as build tools for cases where a framework does not fit. It names the problems it wanted to solve: no built-in routing, no integrated data fetching (leading to network waterfalls), manual code splitting and no server-side rendering.

Your CRA app will not stop working overnight. The risk is gradual: security advisories on old transitive dependencies, React upgrades that become harder, and developers who are less willing to work on the setup. If your app is also public-facing, a React to Next.js migration fixes the tooling and the SEO issue at once. If it is purely internal, moving to Vite may be the cheaper modernisation.

Teams already on Vite have the same SEO limitation if they use the default client-only React setup; the Next.js documentation has a separate Vite migration guide for exactly that case.

App Router or Pages Router: which should your migration target?

Target the App Router for almost every new React to Next.js migration. It is where Next.js development is focused, it supports React Server Components, streaming and nested layouts, and the official CRA and Vite migration guides use it.

The Pages Router still works and is simpler to learn for developers used to classic React. The Next.js docs say both routers can coexist in one project, so larger codebases sometimes move in two hops. There is a cost to mixing them: navigating between a page served by one router and a page served by the other is a full page load, and link prefetching does not cross between them.

Choose the App Router when

You are starting the migration now, want server components to cut client JavaScript, need nested layouts for dashboards, or plan to fetch data on the server.

Consider the Pages Router when

A key library only supports it, your team knows it well and needs a short migration, or an existing Next.js Pages app is being extended.

What changes in code

Data fetching moves from getServerSideProps and getStaticProps to async server components; getStaticPaths becomes generateStaticParams; useRouter comes from next/navigation; API routes become Route Handlers.

Planning SSR, SSG and ISR route by route

Every route in your app gets one rendering decision before migration starts. That plan decides the SEO outcome, the hosting bill and the order of work.

The rule we use: if a page must rank and its content is the same for everyone, build it statically or cache it; if it must rank but changes often, cache it with a revalidation time; if it depends on who is logged in, render it on the server or keep it as a client component behind auth. The route-planning table below maps common page types to strategies.

Put numbers on it early. How many product or listing pages exist today, and how often do they change? That decides whether generateStaticParams can prebuild them all or whether most should render on demand and then be cached. It also shapes the timeline, because public page groups are usually migrated first: that is where the traffic gain is.

This planning step is where a React to Next.js migration succeeds or fails. A migration that simply wraps the old SPA in Next.js and stops there changes the tooling but not what Google sees. The JAMstack page explains static-first thinking in more depth if most of your site is content.

Step one: run your existing React app inside Next.js

Start by getting the current app running inside Next.js unchanged, as a single-page app. The official Next.js guides for Create React App and Vite both recommend this first step, because it reduces risk and merge conflicts.

In practice that means installing Next.js, adding a root layout that replaces your old index.html, and creating an optional catch-all route (a folder named [[...slug]]) that loads your existing App component on the client with server rendering switched off. The guides set output to “export” at this stage, producing a static SPA much like the old build.

A few mechanical changes happen here. Environment variables exposed to the browser change prefix: REACT_APP_ for Create React App and VITE_ for Vite both become NEXT_PUBLIC_. Static image imports return an object in Next.js rather than a URL string, so img tags use the object's src property. CRA's proxy setting is replaced with rewrites in next.config. Next.js now uses Turbopack for local development by default, with webpack still available for projects that need a custom config.

At the end of this step nothing has visibly improved, but the app builds and deploys on Next.js, the old tooling can be removed, and every later step becomes a small, reviewable change.

Replacing React Router with Next.js file-based routes

Move routes out of React Router one group at a time, starting with public pages. Each group becomes folders in the app directory with a page file, and is removed from the catch-all as it moves.

A typical order: marketing and landing pages, then listing and detail pages, then blog or help content, then the logged-in area last. For each page, the old component is usually moved into a client component first, because it uses hooks and browser APIs. The new page file, a server component, fetches data and passes it down as props. Over time, parts that do not need interactivity are pulled back into server components to cut the JavaScript sent to the browser.

Routing hooks change. useNavigate, useParams and useLocation from React Router map to useRouter, useParams, usePathname and useSearchParams from next/navigation, which work in client components only. Links become next/link. Nested layouts replace wrapper components that used to render an Outlet.

We keep the catch-all SPA route alive until the last route is moved, so any page not yet migrated still works exactly as before. That is what lets feature work continue during a React to Next.js migration.

How do you keep URLs and rankings during the migration?

Keep every public URL identical wherever possible, and add a permanent redirect for any that must change. Before touching code, we crawl the live app and export every URL it exposes, along with titles and Search Console click data.

Three URL problems come up often in React to Next.js migrations. Hash routes (/#/products/42) are invisible to Google as separate pages; its documentation advises the History API instead of fragments. Moving to real paths is an SEO gain, but links shared in the past still carry the hash, so a small client-side script on the home page forwards them to the new paths. Trailing slashes may differ between your old host and Next.js; pick one form, configure it, and redirect the other. Renamed or merged pages need entries in the redirects list in next.config.

Soft 404s are the quiet problem. An SPA often returns a 200 status with a “not found” message, which Google treats as a soft 404. In Next.js, calling notFound() returns a real 404 status, which cleans up your index. After launch we test a sample of old URLs, resubmit the sitemap and watch coverage in Search Console. If a past migration already cost you traffic, see traffic drop after website migration.

Moving data fetching from useEffect to the server

Move data fetching for public pages into server components, so the HTML already contains the data when it reaches the browser. This is where most of the first-load improvement comes from.

In a typical SPA, a product page mounts, shows a spinner, calls the API in useEffect, then renders. After migration, the page file awaits the same API on the server and renders the finished markup. The Next.js migration guide explains the equivalents: a fetch cached by default behaves like the old getStaticProps; a fetch with no-store behaves like getServerSideProps; a revalidate time gives incremental static regeneration.

Client-side libraries such as React Query or SWR still have a place for data that changes while the user is on the page, like notifications or live stock. A common pattern is to fetch the initial data on the server and let the client library take over for updates.

Watch for code that assumes a browser. Anything that reads window, document or localStorage at import time will fail on the server. Those parts stay in client components, or are loaded with dynamic imports that skip server rendering. Hydration mismatch warnings (server and client rendering different output, often from dates or random IDs) are fixed as they appear.

Moving authentication without logging everyone out

Move tokens from localStorage to secure, HTTP-only cookies and check them on the server before a private page renders. The server cannot read localStorage, so an SPA's usual auth pattern has to change for server rendering to work.

The Next.js documentation describes Proxy (the convention formerly called middleware) as a way to run code before a request completes, for instance redirecting to the login page before an authenticated-only page loads. That removes the flash of private content, or the flash of a login screen, that many SPAs show while checking a token.

We plan a transition so existing users stay signed in: during a short overlap the app accepts the old token, issues the new cookie, and then drops the old path. If you use a hosted auth provider, we check its Next.js support and follow its recommended setup; if auth is custom, the cookie flags, expiry, refresh logic and CSRF protection are reviewed as part of the migration.

Role checks move to the server as well, which is more secure than hiding buttons in the browser. Pages that show data for one user render on the server with that user's session, and their responses are marked so no CDN caches them.

API routes, backend calls and hosting after migration

Keep your existing backend where it is unless there is a clear gain in moving it. Next.js can call it from server components, or proxy it through rewrites so browser code keeps using the same paths.

Small endpoints that only serve the web app (form handlers, webhook receivers, API proxies that hide a key) often move into Route Handlers, the App Router's replacement for pages/api. Heavier logic, and any API shared with Android and iOS apps, usually stays a separate service built in Node, NestJS or another stack; our Node.js hiring guide covers that side.

Hosting changes with the rendering plan. A static export can sit on any CDN, but the Next.js guides note that output: “export” gives up server features such as SSR and API routes. Once routes render on the server, you need a platform that runs Next.js, such as Vercel, another serverless host with Next.js support, or a Node server or container you manage. We open the account in your name and set caching headers so static and cached pages are served from the edge.

  • Mostly static after migration: CDN or static host, lowest cost
  • Some server-rendered routes: serverless platform with Next.js support
  • Heavy server work or data residency needs: Node server or containers in your chosen region

SEO checklist for a React to Next.js migration

Treat SEO as a migration deliverable, not an afterthought. The framework makes good SEO possible; the checklist makes sure it happens on every route.

  • Crawl of the old app saved, with URLs, titles, descriptions and canonicals
  • Unique title and description per route through the Metadata API or generateMetadata
  • Canonical tags and one consistent trailing-slash policy
  • Real 404 status for missing items via notFound()
  • 301 redirects for every changed or hash-based URL
  • XML sitemap and robots file generated by the app
  • Structured data (Organisation, Product, Article, FAQ where genuine)
  • Open Graph images and titles so WhatsApp and LinkedIn previews work
  • Core Web Vitals checked on a mid-range Android phone
  • Search Console coverage and performance watched for several weeks after launch

For ongoing technical work after the move, see our technical SEO freelancer service. Nobody can guarantee rankings; what a React to Next.js migration removes is a technical barrier.

How much does a React to Next.js migration cost?

With us, a small public-facing React app (a few templates, no logins) starts at ₹10,000; an app with logins, roles, dashboards and API work starts at ₹60,000 as custom software. If the migration also adds hundreds of new SEO pages generated from data, that part starts at ₹20,000.

What drives the figure is predictable once the route plan exists. Each route type needs its own rendering decision and testing. Auth changes take care because they touch every private page. Browser-only libraries (rich text editors, chart libraries, maps) may need client-only wrappers. Custom webpack or Babel configuration, service workers and unusual build steps each add work. The number of individual pages matters much less than the number of distinct templates.

Across the market, quotes for a React to Next.js migration vary widely. When you compare them, check that each includes the route plan, URL crawl and redirects, auth migration, a staged release and post-launch monitoring; a low quote that leaves these out is quoting a different job. Our web app cost guide explains how app features are priced.

How long does a React to Next.js migration take?

A small public-facing app can move in one to two weeks; an app with logins, dashboards and APIs typically takes six to twelve weeks, delivered in stages so you see improvements long before the end.

The first days go on the audit: reading the code, crawling the live URLs, listing libraries and building the route plan. The first stage, running the old app inside Next.js as an SPA, usually follows within the first week or two. Public page groups are converted next, one group per release, each tested on staging and then deployed. Auth and the logged-in area come after, then the clean-up that removes the catch-all route and the old tooling.

What slows migrations down is rarely Next.js itself. It is untested legacy code that hides surprises, libraries that assume a browser, and unclear ownership of decisions. A named decision-maker on your side and access to a staging copy of your API save more time than anything we can do in code. The phase table below gives a typical breakdown.

React to Next.js migration for teams across India

We run migrations remotely for businesses anywhere in India: code access through your Git host, calls on Google Meet or WhatsApp in English or Hindi, payments by UPI or bank transfer. Location does not change the price.

Different cities bring different apps. Property and listing portals in Hyderabad and Noida need thousands of listing pages indexed. SaaS teams in Bengaluru and Chennai want feature and pricing pages that rank while the product stays a React app. Ed-tech and coaching platforms in Jaipur and Indore want course pages crawlable. D2C brands in Ahmedabad and Surat built early storefronts as React SPAs and now want product pages that search engines can read, and travel businesses in Kochi want itinerary pages indexed without losing their booking flow.

International teams can work with us in USD; see hiring developers in India for how overlap hours work.

Worked example and red flags: a property portal moving off Vite

Here is a hypothetical case. Say a property portal in Hyderabad runs a React app built with Vite and React Router: a home page, locality pages, around 3,000 listing pages, a blog, and a logged-in area where agents post listings. Search Console shows most listing pages as discovered but not indexed, and mobile LCP is poor.

The route plan would make locality and blog pages static, with regeneration when content changes; listing pages rendered on demand and cached with a short revalidation window, returning a real 404 once a listing is removed; and the agent dashboard as client components behind a cookie session checked by Proxy. Stage one wraps the Vite app in Next.js. Stage two moves locality and listing pages, with the Metadata API writing titles like “2 BHK in Gachibowli” from data and structured data for each listing. Stage three moves the blog. Stage four migrates auth and the dashboard. Old hash links from early marketing campaigns are forwarded to real paths. This would be quoted as custom software from ₹60,000.

Red flags to watch in any proposal: a plan to rewrite everything before shipping anything; no crawl or redirect list; auth left in localStorage with server rendering bolted on; hosting on the developer's account; and no Search Console monitoring after launch.

Route planning

Rendering strategy by page type after a React to Next.js migration

Use this as a starting point for your route plan. For Vue apps facing the same issue, see Nuxt JS developer.

Rendering strategy by page type after a React to Next.js migration
Page typeStrategyNext.js mechanismWhy
Home and marketing pages StaticServer component, no dynamic dataFastest; changes only on deploy
Blog and help articles Static, regenerate on changegenerateStaticParams plus revalidationMust rank; content changes occasionally
Product or listing pages Cached with revalidationfetch with a revalidate timeMust rank; data changes during the day
Search and filter results Server-rendered per requestDynamic server componentOutput depends on the query
Account and dashboard pages Server-checked, client-interactiveProxy auth check plus client componentsPrivate, per-user, no SEO value
Removed or unknown items Real 404notFound()Avoids soft 404s in Search Console

Timeline

Typical phases of a React to Next.js migration

Durations assume an app with logins and APIs. Small public apps compress these into one to two weeks.

Typical phases of a React to Next.js migration
PhaseWorkYou see
Audit Code review, URL crawl, library check, route planWritten plan and itemised quote
SPA inside Next.js Root layout, catch-all route, env and image changes, old tooling removedSame app, now building on Next.js
Public routes Marketing, listing and content pages moved to server or static renderingReal HTML in page source; faster first load
Auth and private area Cookie sessions, Proxy checks, dashboard routesNo login flash; users stay signed in
APIs and clean-up Route Handlers or rewrites, catch-all removedOne consistent Next.js codebase
Launch and monitoring Redirect tests, sitemap, Search Console watchCoverage and speed tracked after switch-over

Starting prices

React to Next.js migration cost by scope

All figures are starting prices; the final quote follows the route plan.

React to Next.js migration cost by scope
ScopeTypical contentsStarts atUsual timeline
Small public app A few templates, no logins, forms and metadata₹10,000 · US$1501–2 weeks
App with logins and APIs Auth migration, dashboards, API wiring, staged releases₹60,000 · US$9006–12 weeks
New SEO pages added during migration 299+ pages generated from data with schema₹20,000 · US$3003–5 weeks
React storefront migration Product and category pages rendered, checkout kept working₹50,000 · US$7504–8 weeks
Monthly SEO after launch Search Console monitoring, fixes, content₹10,000/mo/monthOngoing
Care after 2 free months Next.js and dependency updates, small changes₹8,000/mo/monthOngoing

Migration clients around India

React to Next.js migration work by city

All work is remote. These notes describe the kind of React apps businesses in each city typically ask us to migrate.

  • Listing portal migrations in Hyderabad

    Property, jobs and classifieds portals built as React SPAs need thousands of listing pages rendered on the server so they can be indexed.

  • SaaS marketing pages in Bengaluru

    Product companies want feature, pricing and docs pages that rank, while the core product stays an interactive React app behind login.

  • B2B platforms in Chennai

    Industrial marketplaces and supplier portals want public catalogue pages crawlable and fast for buyers, with the ordering area kept private.

  • Real-estate apps in Noida

    Builders and brokers with React project sites want tower, floor-plan and locality pages to show real content in search and link previews.

  • Ed-tech platforms in Jaipur

    Course and test-series platforms need course and exam pages that search engines can read, while practice tests stay client-side.

  • Coaching and learning apps in Indore

    Learning platforms built on Create React App want to leave deprecated tooling and get public course pages indexed at the same time.

  • D2C storefronts in Ahmedabad

    Brands that launched with a React SPA store want product pages with real HTML, structured data and fast first paint on mobile.

  • Textile catalogues in Surat

    Wholesalers with React catalogue apps want product pages shareable on WhatsApp with correct previews, and indexed for buyer searches.

  • Travel booking sites in Kochi

    Tour operators with React booking apps want itinerary and destination pages ranked, keeping the booking flow unchanged for customers.

  • Healthcare portals in Lucknow

    Hospitals and clinic chains with React patient portals want doctor and treatment pages public and fast, with records behind secure login.

  • Manufacturer portals in Coimbatore

    Engineering firms with React dealer portals want public product and spare-part pages indexed for search, separate from dealer ordering.

  • Fintech and D2C apps in Mumbai

    Teams with React web apps want public product and help pages server-rendered, with auth moved to secure cookies during the migration.

  • Service marketplaces in Pune

    Home-service and B2B service platforms want city and category pages crawlable so customers find them before downloading any app.

  • Start-up web apps in Chandigarh

    Young product teams on Vite or CRA want to move to Next.js early, before the app grows and the migration gets bigger.

  • Agri-tech and marketplace apps in Nagpur

    Agri-input and produce marketplaces want product and mandi-price pages indexed, while seller dashboards remain client-side behind login.

How it works

How we run a React to Next.js migration

  1. Share the repository and live URL

    Give us read access and tell us which pages must rank. We crawl the live app, read the code and list every route and library.

  2. Route plan and itemised quote

    You get a rendering decision for each route, the risks we found and an itemised quote in about two working days. Nothing is billed before approval.

  3. Wrap the app in Next.js

    Your current app runs inside Next.js as an SPA, deployed to staging on your account, so every later step is small and reversible.

  4. Move public routes in stages

    Page groups move to server or static rendering one release at a time, each checked for HTML output, metadata and speed.

  5. Migrate auth, APIs and clean up

    Sessions move to secure cookies with Proxy checks, API calls are wired or moved, and the old catch-all and tooling are removed.

  6. Launch, redirect tests and monitoring

    Redirects are tested against the old crawl, the sitemap is resubmitted, and two months of free maintenance begin.

Questions

React to Next.js migration: questions teams ask

Why migrate a React app to Next.js?

Mainly to fix search indexing, slow first load and broken link previews. A client-side React app sends an almost empty HTML page and builds everything with JavaScript, which delays users and some crawlers. Next.js can send finished HTML for each route. It also replaces Create React App, which the React team deprecated for new apps in February 2025.

How much does a React to Next.js migration cost?

With BtechWaleTech, a small public-facing React app starts at ₹10,000, and an app with logins, dashboards and APIs starts at ₹60,000. The main cost drivers are the number of distinct route types, the auth setup, browser-only libraries and custom build configuration. We review your code before quoting and send an itemised estimate in about two working days.

How long does a React to Next.js migration take?

A small app with a few public templates can move in one to two weeks. An app with logins, dashboards and API work usually takes six to twelve weeks, delivered in stages. The first stage runs your current app inside Next.js unchanged, and public pages move next, so improvements arrive well before the whole migration is finished.

Will I lose Google rankings when migrating from React to Next.js?

Not if URLs are preserved and changes are redirected. We crawl the old app, keep every public URL where possible, add permanent redirects for any that change, carry titles and descriptions across, and watch Search Console after launch. Because the new pages contain real HTML, indexing often improves, though nobody can guarantee a ranking outcome.

Should I use the App Router or the Pages Router?

Use the App Router for most migrations started today. It supports server components, streaming and nested layouts, and it is the router used in the official Create React App and Vite migration guides. The Pages Router still works and can coexist with the App Router, but navigating between the two causes full page loads.

Do I have to rewrite my whole React app?

No. Most components move across as client components with little change. The recommended first step is to run your existing app inside Next.js as a single-page app, then convert routes one group at a time. Rewriting everything at once is slower and riskier, and it freezes feature work for the whole project.

How do I migrate from Create React App to Next.js?

Install Next.js, create a root layout from your index.html, add an optional catch-all route that loads your App component on the client, rename REACT_APP_ environment variables to NEXT_PUBLIC_, adjust static image imports and replace CRA scripts. That gets the app running on Next.js. Then move routes out of React Router into file-based routes with server rendering.

Is migrating from Vite to Next.js different from CRA?

The approach is the same: run the app as an SPA inside Next.js first, then convert routes. Details differ slightly. VITE_ environment variables become NEXT_PUBLIC_, TypeScript settings from the Vite template need a few changes, and Vite-specific config is removed. The Next.js documentation has a dedicated Vite migration guide.

What happens to React Router during the migration?

React Router keeps handling unmigrated routes through a catch-all page while file-based routes take over one group at a time. Hooks such as useNavigate, useParams and useLocation are replaced with useRouter, useParams, usePathname and useSearchParams from next/navigation. When the last route moves, React Router and the catch-all are removed.

How is authentication handled after moving to Next.js?

Tokens usually move from localStorage to secure, HTTP-only cookies so the server can read them. A Next.js Proxy check can redirect unauthenticated visitors before a private page renders, removing the login flash common in SPAs. We plan an overlap period so existing users stay signed in while the new cookies are issued.

Do I need to move my backend into Next.js?

No. Your existing API can stay where it is, called from server components or proxied through rewrites. Small endpoints that only serve the web app, such as form handlers and webhooks, can move into Route Handlers. APIs shared with mobile apps or heavy business logic usually stay as separate services.

Can hash URLs like /#/products be preserved?

Hash fragments never reach the server, so they cannot be redirected with normal server redirects. We replace them with real paths, which Google can index, and add a small script that forwards any old hash link to its new path. Google's documentation recommends the History API over fragment-based routing for exactly this reason.

Where should a migrated Next.js app be hosted?

If every page can be static, a CDN or static host works. Once routes render on the server or use Route Handlers, you need a platform that runs Next.js, such as Vercel, another serverless host with Next.js support, or a Node server or container. We set up hosting in your name with caching so static pages come from the edge.

Will a React to Next.js migration fix Core Web Vitals?

It usually improves Largest Contentful Paint because content arrives in the first HTML response rather than after scripts run. It does not fix everything automatically: large images, late web fonts and heavy third-party scripts still hurt scores. We handle those in a speed pass and measure against the thresholds web.dev publishes.

Can you migrate our React app while we keep shipping features?

Yes. Because the old app keeps running inside Next.js through a catch-all route, unmigrated pages work as before and your team can keep adding features. We agree which areas are frozen during each stage to avoid conflicts, and merge often so both streams of work stay in sync.

Freelancer or agency for a React to Next.js migration?

A small freelance team suits most migrations: you talk to the people reading your code, and the work is well defined once the route plan exists. An agency fits better if you need a large team, formal procurement or on-site staff. We are three developers, so a migration needing twenty people in parallel is not our fit.

Do you convert the code to TypeScript at the same time?

If you want, yes. We can convert the files we touch to TypeScript as they move, with strict checks on new code, leaving untouched files in JavaScript until later. It adds some time to each stage but makes the migrated code safer to change. We list it as a separate line in the quote so you can decide.

Who owns the code and hosting during the migration?

You do. The repository, hosting account, domain and any third-party services stay in your name, and we work as collaborators. At the end you receive documentation covering the route plan, rendering choices, environment variables, deployment and redirects, so your team or another developer can maintain the Next.js app.

React se Next.js migrate karna hai, shuru kaise karein?

WhatsApp par live URL aur repository ka read access bhejiye, aur batayein kaunse pages Google par rank hone chahiye. Hum code aur URLs check karke lagbhag do working days mein route plan aur itemised quote dete hain. Written approval se pehle koi payment nahi hota, aur code aur hosting aapke naam par hi rehte hain.

What support do we get after the migration goes live?

Two months of free maintenance: bug fixes, redirect corrections, Next.js and dependency updates, and help reading Search Console as the new pages are indexed. After that, care plans start at ₹8,000/mo a month, or your own team can take over using the handover documents. Support scope is written into the quote.

How do payments work for a migration project?

Indian clients pay by UPI or bank transfer, and international clients in USD by Wise, bank wire or PayPal. Payments are staged against releases you can see, such as the app running on Next.js or public pages migrated. Terms such as confidentiality are agreed in your written quote before work starts.

Next step

Plan your React to Next.js migration

Send us the live URL, repository access and the pages that must rank. You get a route-by-route plan and an itemised quote in about two working days.