A practical walkthrough of moving a mid-size WordPress site to jekcms using the built-in WordPress importer: what transfers automatically, what needs manual attention, and what to check once the import finishes.
jekcms's WordPress migration path lives in the admin under Import, and it works differently from a typical WXR-file importer: instead of exporting an XML file from WordPress and uploading it, you copy a ready-made SQL query, run it against your WordPress database in phpMyAdmin (or any MySQL client), export the result as a CSV, and upload that CSV back into jekcms. There are three tabs — Posts, Pages, Comments — each with its own query and its own upload form. For anyone comfortable poking around phpMyAdmin, it's a fast path that doesn't require server-to-server access or exposing your database publicly.
What the Import Actually Pulls
The posts query selects title, slug, content, excerpt, status, and publish date directly from wp_posts, resolves the author's name/slug/email from wp_users, looks up the featured image through wp_postmeta's _thumbnail_id, and pulls categories and tags via wp_term_relationships/wp_term_taxonomy/wp_terms. Pages use the same shape minus the taxonomy. Comments pull author, content, date, and email from wp_comments, filtered to only approved ones by default. Whatever the query selects is what transfers — nothing more.
Custom Fields Are Not Included By Default
The stock query doesn't select arbitrary post meta — no ACF fields, no third-party plugin data, and no SEO plugin output. If you used Yoast or RankMath for meta titles and descriptions, those values simply aren't in the CSV; plan to re-enter the important ones through jekcms's own SEO fields rather than expecting them to carry over. If you rely on specific custom fields, you can extend the SQL query yourself before running it — it's a plain SELECT, not a black box — but the default query is deliberately minimal.
Categories, Tags, and Authors Merge Sensibly
Categories and tags are matched and created by slug, so if a category already exists on your jekcms site, imported posts are filed into it instead of creating a duplicate; WordPress's default "Uncategorized" bucket is skipped rather than imported as a real category. Authors are matched by email first, then by slug — if a match is found, jekcms only fills in empty profile fields (bio, website, avatar, social links) rather than overwriting anything you've already set; if no match exists, a new author is created with whatever profile data was in the source.
Images Are Downloaded, Not Just Referenced
With the "Import images" option checked, both the featured image and any images referenced inside post content are fetched from the original WordPress host and re-saved locally rather than left pointing at the old domain — this is the slowest part of any image-heavy migration, since it's fetching every file over HTTP rather than copying rows in a database. A "Set featured image" option will also auto-pick the first image found in the content as the featured image for posts that didn't have one explicitly set in WordPress.
Shortcodes Get a Best-Effort Cleanup, Not a Manual Pass for Everything
The optional "Format content" step runs a WordPress-content formatter that handles the common cases automatically: [caption] shortcodes become proper <figure>/<figcaption> markup, [gallery] shortcodes are stripped, [embed] blocks are unwrapped to a bare URL, and leftover Gutenberg block comments are removed. Shortcodes from page-builder plugins that don't follow this pattern — Elementor, Divi, and similar tools — aren't rendered and will need a manual pass through the affected posts after import.
Re-Running an Import Safely
If you need to import in batches, or re-run after fixing a data issue, jekcms can skip posts whose slug already exists rather than creating duplicates — which makes a partial or interrupted migration safe to pick back up rather than something you have to redo from scratch.
What's Not Handled Automatically
Themes and plugins are not part of the import — jekcms's theming architecture is different enough that there's no meaningful port. Widgets and sidebars need to be rebuilt in your jekcms theme's customizer. Redirects for your old WordPress URLs — date-based permalinks, /?p=123 query URLs, old category paths — aren't generated automatically; if preserving old URLs and their search rankings matters, plan to set those up by hand in jekcms's redirect manager once you know your final URL structure.
Post-Import Checklist
Once the import finishes, work through this before calling the migration done:
- Slug audit. Sort posts by slug and look for duplicates or odd transliterated characters — WordPress sometimes stores slugs that don't match your new theme's canonical URL rules.
- Featured image check. Spot-check posts for a missing featured image if image import was interrupted or a source URL had gone dead; retry the fetch or upload manually where needed.
- Comment review. If you imported comments, spot-check for spam WordPress missed — nothing catches everything automatically.
- Old-URL plan. Decide which old URLs are worth a manual redirect and add them before you point DNS at the new site.
- Resubmit your sitemap. Submit the new
/sitemap.xmlin Google Search Console so the new URLs get crawled rather than waiting for Google to find them on its own schedule.
As with any large import, take a full backup of your jekcms database before you start. Since the import runs off a CSV you control, it's easy to test with a trimmed-down file — a few dozen rows — before committing the full export.