Skip to content

For a site that is moving to WordPress or Joomla

From an export file to a site that works, one reviewed publish at a time.

Your old system can export its articles as a spreadsheet. Map the columns once, keep every address, date and status, and publish the lot to WordPress or Joomla after a review that shows each article as it will be.

  • Keep slugs, dates and statuses
  • Categories and tags created parents-first
  • Nothing published until you reviewed it
Demo: moving a motoring magazine’s archive into WordPress from the export of its older system

Marque & Mile · the archive, 2009 to 2026

Review first

marque-and-mile-export.csv

1,800 rows · 8 columns

  • UTF-8 read, 8 columns found
  • Status keys read as statuses
  • Dates without a time zone read as UTC
  • 1,800 rows checked, field by field

marque-and-mile-export.csv

1,800 rows checked against your site

Checked
New
1,798
Updated
0
Unchanged
0
Errors
2
  • New

    The last of the carburettor GTs

    Published 2 June 2011 · Road tests

  • New

    Notes for a Delmare feature

    Draft · Features

  • Error

    Row 413 · no title

    Title: This field resolves to an empty value.

Dropping the archive’s export.

An example: the archive of a fictional motoring magazine, Marque & Mile, exported from its older system.

What it does for a move

Move the content, and check it before it is live.

Content Uploader is a web service that turns an export file into content on your WordPress or Joomla site. You say which column holds the title, the address, the text, the date and the status. It shows you each article as it will be published, and publishes the lot after your review.

The migration tutorial, step by step

  • The export as it comes

    The old system’s column names do not matter. You choose, once, which column holds the title, the address, the text, the date and the status.

    How mapping works
  • Addresses, dates and statuses kept

    The address is read from a column, so it stays as it was. The date and the published or draft status of each article come from its row too.

    Title, slug and alias
  • Categories and tags made as needed

    The categories and tags that your new site does not have are listed before you publish, and created with their parents first.

    Categories
  • Every article read first

    Preview any row before you save, and read each article as it will be published before the first one exists on the new site.

    How the review works

The columns, mapped once

The old system’s names, and what each becomes.

The export has eight columns with the old system’s own names. Each field takes its column once, and every later file is read the same way.

id
Record IDThe old system’s number: it identifies each article from now on.
post_name
SlugThe name in the web address, as it was.
post_title
TitleThe title.
post_content
ContentThe text, as HTML.
post_date
Publish dateWhen it was published, without a time zone.
post_status
Status“publish” and “draft” are read as the statuses they are.
category_name
CategoriesOne category name, created when the site lacks it.
tag_list
TagsTags separated by commas.
The Title, Slug, Status and Publish date fields, each set to a source column of the export
Each field takes its column: Title from post_title (1), Publish date from post_date (2), Status from post_status (3). Slug takes post_name.

The picture is the Help Center’s, from the tutorial’s example magazine, which has its own five articles. Move articles from an older system

The traps of a move

Six things that go wrong, and where each is explained.

Each one has an article of its own in the Help Center, so that you meet it on a test run and not on the live site.

Dates that move by a few hours

A date without a time zone is read as UTC, and the site shows it in its own zone. The cell says which time it means once it carries the offset.

Dates are wrong

Accents that turn into symbols

A CSV has to be UTF-8. One saved in another encoding is refused rather than published garbled, and an Excel workbook has no such problem.

Character encoding

HTML in the text cells

A body cell can hold HTML. The site then applies its own filter, as it does for an editor, and images inside the text stay links.

HTML in cells

A file over the limit

A file may have up to 10,000 rows. A larger archive is split into several files, each one reviewed and published.

Large files

An export without a header row

A file that starts with data instead of column names is read by position, as Column A, Column B and so on, and the order of the columns then matters.

Files without a header row

Rows with a mistake

A row with no title is reported with its row number and its reason, and the rest of the file goes on. Correct the rows and upload them again.

Rows with errors

Read it first

Open an article before it exists on the site

The review lists every article as new, with its slug, its status, its date, its category and its tags. The date is shown as it was read from the file, before the site applies its time zone, so a shift can be seen before anything is published.

The first file of a configuration always asks for a tick that you reviewed it. How the review works

The first item of the review: its slug, status, publish date, category and tags
The date is shown as it was read from the file (1). The site has not been asked yet.

The trap, and its fix

A date that moves, and the same date put right

The file said 08:15. A site two hours ahead of UTC shows 10:15, because a date without a time zone is read as UTC. Adding the offset to the dates and dropping the file on the same card lists every article as updated, and publishing shows 08:15. Dates are wrong, shifted or refused

The WordPress posts list: Welcome aboard, published 2019/05/02 at 10:15 am
The file said 08:15. The site shows 10:15 (1), because the date was read as UTC.
The WordPress posts list: Welcome aboard, published 2019/05/02 at 8:15 am
After the second upload the site shows 08:15 (1): the time in the file.

Said plainly

What a move with Content Uploader is not.

So that you do not plan around something it does not do.

  • Articles, pages and posts, not a whole site

    Posts, pages and custom post types on WordPress, articles on Joomla. Comments, users, menus and the media library are not read or written.

  • A spreadsheet, not an XML export

    Content Uploader reads Excel, OpenDocument and CSV files, and the first worksheet of a workbook. An export in XML has to become a spreadsheet first.

  • Pictures inside the text stay links

    An image in an article’s HTML keeps pointing at its old address. The featured image comes from a column, as a file in a ZIP or as a web address.

  • Nothing is deleted, on either site

    The old system is not touched. On the new site, a file only creates and updates articles, so a mistake is corrected by uploading the corrected rows.

  • It is not a copy of a WordPress site

    It moves the rows of a spreadsheet. A WordPress site that moves to another WordPress site is moved with the tools made for that.

  • A person uploads each file

    Nothing is fetched from the old system. You export, save as CSV or Excel, and drop the file.

Every known limitation, for any platform.

FAQ

What people ask before a move.

Short answers, with the articles behind them in the Help Center.

Can I keep the old addresses?

Yes. Map the slug (on Joomla, the alias) to the column that holds the old address, and the article keeps it. If a later file changes that column, the address changes too, and Content Uploader adds no redirect of its own. WordPress normally redirects a changed address of a published post; Joomla does not.

Will the dates move?

They can. A date without a time zone is read as UTC, and the site shows it in its own zone, so a date that says 08:15 can show 10:15 on a site two hours ahead of UTC. Add the offset to the dates in the file (for example 2019-05-02 08:15:00+02:00) and drop the file again on the same card: the articles are listed as updated and publishing puts the dates right.

How big can the file be?

A file may have up to 10,000 rows, and a spreadsheet at most 10 MB. An archive that is larger is split into several files, each with its own review.

Can I try it on a staging site first?

Yes, and it is the safest way: connect a staging copy of the new site, publish the export there, and read the result. A staging copy counts as a site of its own, and so do its writes. Publish to the live site once the staging site looks right.

After the move, can I keep updating from the sheet?

Yes. The old system’s number is each article’s record ID, so the same configuration updates the same articles whenever you drop a file with new values. Articles that someone writes by hand on the new site are not matched, because Content Uploader only recognises what it published itself.

Read your export before it is your site.

Create a workspace, connect the new site, or a staging copy of it, and drop the export. Every article is listed before one of them exists.

Try the whole move on five articles with the tutorial Move articles from an older system and its example file 11-migration-export.csv. For Joomla, the tutorial Import one hundred articles into Joomla.

Moving to WordPress or Joomla. An export in XML rather than a spreadsheet? Content Uploader and WP All Import says which tool is for that.