User Rating 0.0
Total Usage 0 times

Click to upload or drag your WXR (.xml) file here

Standard WordPress Export Format supported

Waiting for input...
Is this tool helpful?

Your feedback helps us improve.

About

Migrating from WordPress to Ghost can be complex because their data structures differ significantly. This tool automates the transformation of a WordPress WXR (XML) export file into a Ghost 2.0+ (JSON) import file.

The converter parses the XML DOM, extracting posts, pages, tags, and authors. It intelligently maps WordPress statuses (e.g., publishpublished), preserves publication dates, and attempts to link feature images if the attachment metadata is present in the export.

wordpress ghost migration xml converter json

Formulas

The conversion relies on specific mapping logic to ensure data integrity. The simplified logical flow for a single post entity is:

MapPost(wp_item) →
{
title = getText(wp_item, "title")slug = clean(getText(wp_item, "post_name"))status = (if wp_status = "publish" then "published" else "draft")

Users are deduplicated based on the dc:creator field. Since WordPress exports often lack email addresses (required by Ghost), we generate a placeholder: slug@example.com.

Reference Data

EntityWordPress Field (XML)Ghost Field (JSON)Notes
Post TitletitletitlePlain text copy
Contentcontent:encodedhtmlGhost parses HTML content
Slugwp:post_nameslugCleaned and normalized
DatepubDatepublished_atConverted to ISO 8601
Authordc:creatorusersMapped via lookup table
Image_thumbnail_idfeature_imageResolved via attachment URL
Tagscategory / tagtagsUnified into single list

Frequently Asked Questions

Yes. The tool looks for the `_thumbnail_id` meta key in your posts. If the attachment data for that image exists in the same XML file, the full URL is linked as the `feature_image` in Ghost.
By default, this tool strictly converts items where `wp:post_type` is `post` or `page`. Custom post types are ignored to prevent database clutter in Ghost.
Ghost requires an email for every user. This tool generates a unique dummy email (e.g., `[email protected]`) for each author found in the XML. You can update these in Ghost after importing.
Yes. The output follows the standard Ghost 2.0+ import structure (`{"db": [...]}`), which remains backward-compatible with modern Ghost versions including 5.x.
It depends on your computer's RAM. Since this runs entirely in your browser, extremely large files might cause a temporary freeze. We recommend splitting XML files larger than 50MB before converting.