Skip to content
SecurityPHP2Shell affects most WordPress sites. Am I affected? →
presscomet

How to migrate WordPress to Next.js without rewriting your site.

Most “WordPress to Next.js” guides mean rebuilding your theme in React and keeping WordPress around as a headless backend. This one doesn’t. You keep wp-admin, the block editor and every URL — and drop PHP and MySQL entirely.

Check my site free Updated Oct 23, 2026 · 9 min read

TL;DR

In a Presscomet admin, open Tools › Import › WordPress and enter your site’s address. Content, users, the look of your theme and your plugin settings move into a Next.js app backed by one SQLite file. Check the fidelity report, then switch DNS. Editors keep the admin they know.

Three ways to move WordPress to Next.js

There are really only three approaches. They differ in what your editors have to give up.

Three ways to move WordPress to Next.js
TopicRewriteHeadless WPPresscomet
Editors keep wp-adminNo — new CMSYesYes
PHP & MySQL removedYesNo — two stacksYes
Theme rebuildFullFullCaptured automatically
Live preview worksDependsNeeds a bridgeBuilt in
Plugins’ outputRebuilt by handRebuilt by handBundled equivalents

Weighing headless? Read why headless WordPress doubles your stack.

Step by step

  1. Step 1: Audit what you have

    Run the free site check. It reads your site’s public REST index from your browser and lists the plugins Presscomet has bundled equivalents for. For a full report, run the importer with --analyze.

    ✓ Runs in your browser✓ Read-only: your site is never touched✓ Free and open source
  2. Step 2: Create an application password

    In wp-admin open Users → Profile → Application Passwords. Presscomet uses it to read drafts, private posts, users and settings over the REST API. You can revoke it once you’ve switched.

    No REST API, or the old site is already offline? There are other ways in:

    • Live site — REST API, with or without an application password
    • Companion plugin — for hosts that block the REST API
    • WXR export — the file from Tools › Export
    • SQL dump — mysqldump or wp db export, plain or .gz
  3. Step 3: Run the importer

    In the admin it’s Tools › Import › WordPress (or Migrate an existing WordPress site in the installer). From a terminal, the same pipeline runs from your Presscomet checkout:

    $ pnpm --filter @presscomet/importer exec \
        tsx src/cli.ts --url https://yoursite.com \
        --user admin --app-password "xxxx xxxx xxxx"
    ✓ Activated SEO (replaces Yoast SEO)
    ▲ Migration complete in 84s.
    All CLI options
    --url URL
    The old site’s address (also used for media and theme capture with a file source)
    --user U --app-password P
    Include drafts, private posts, users and settings
    --key KEY
    Read through the companion plugin
    --wxr FILE | --sql FILE
    Import from a WXR export or an SQL dump
    --analyze
    Report what would be imported and mapped, then stop
    --merge
    Update existing items and add new ones instead of replacing
    --no-media --no-theme --no-plugins
    Skip media, theme capture or plugin mapping
    --theme SLUG
    Use a bundled theme instead of capturing the current one
    --limit N
    Import only the first N items, for a trial run

    Prefer clicking? Here’s a recreation of the wizard:

    newsite.example/wp-admin/admin.php?import=wordpress

    Migrate to Presscomet

    Where is the WordPress site you are moving?

    Connect over the REST API with an application password. Best when the old site is still online.

  4. Step 4: Compare side by side

    The wizard’s last step runs a fidelity check: it crawls the old site and compares every URL on the new one — status codes and redirects, titles, meta descriptions, canonicals, content, menus, images and feeds — and lists the pages that differ. From a terminal, pnpm --filter @presscomet/importer verify adds desktop and mobile screenshot diffs. Fix, re-import, repeat.

  5. Step 5: Switch DNS

    Import once more just before you switch: a re-import merges, so anything published since the first run comes across. Then point your domain at Presscomet. URLs keep their paths, and moved slugs get 301 redirects.

What transfers

Content
Posts, pages, custom post types, revisions, blocks, reusable blocks
Media
Every attachment and its sizes, alt text, files linked from content
People
Users, roles, capabilities and password hashes
Structure
Menus, widgets, taxonomies, permalink rules
SEO
Titles, meta descriptions, noindex flags, old-slug and Redirection redirects
Settings
Options, theme mods and the settings of plugins with a bundled equivalent

What doesn’t

  • PHP code. Plugins and themes don’t execute. A theme’s output is captured; common plugins are replaced by bundled ones.
  • WooCommerce. Stores are out of scope. Presscomet is for content sites.
  • Multisite. Each site in a network migrates on its own.

From MySQL to SQLite

WordPress spreads a site across a dozen MySQL tables and a server you have to run. Presscomet keeps the same tables and columns — posts, postmeta, options and the rest — inside one SQLite file, nextpress.db. The admin, the REST API and the bundled plugins read those same rows; you just stop administering a database server. A backup is a copy of that file and the uploads folder.

Already have a dump? Point the importer at it, plus the live site for media and theme capture:

$ pnpm --filter @presscomet/importer exec tsx src/cli.ts \
    --sql backup.sql.gz --url https://yoursite.com

Launch checklist

Tick things off as you go. Progress is saved in this browser.

0/7 done

FAQ

Do I need to know React?

No. Your current theme is captured during the import, so pages look the same without writing any code. React is there when you want to build a theme or a plugin, not before.

How long does a migration take?

Content and settings import quickly; most of the time goes on downloading media. The import runs in the background, and your live site stays up throughout because it is only ever read.

Will my SEO rankings drop?

URLs keep their paths, moved slugs get 301 redirects, and titles, meta descriptions and noindex flags come across. The fidelity report shows any URL that differs before you switch. We can’t promise rankings, but nothing about the move should cost you any.

What happens to my plugins?

PHP plugins don’t run. Active plugins with a bundled equivalent (SEO, forms, redirects, custom fields, security and more) are switched on with their settings imported. The importer log lists everything it couldn’t map.

Is my old site changed during migration?

No. The importer only reads from it. WordPress keeps running until you point DNS at Presscomet.

See your site on Next.js.

Check it free from your browser. Your live WordPress site is never touched.

Check my site free