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.
| Topic | Rewrite | Headless WP | Presscomet |
|---|---|---|---|
| Editors keep wp-admin | No — new CMS | Yes | Yes |
| PHP & MySQL removed | Yes | No — two stacks | Yes |
| Theme rebuild | Full | Full | Captured automatically |
| Live preview works | Depends | Needs a bridge | Built in |
| Plugins’ output | Rebuilt by hand | Rebuilt by hand | Bundled equivalents |
Weighing headless? Read why headless WordPress doubles your stack.
Step by step
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 sourceStep 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
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=wordpressMigrate 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.
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 verifyadds desktop and mobile screenshot diffs. Fix, re-import, repeat.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.comLaunch checklist
Tick things off as you go. Progress is saved in this browser.
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.