Quantcast
Channel: Osom Studio – WooCommerce & WordPress development agency of choice
Viewing all articles
Browse latest Browse all 42

Migration from Joomla to WordPress part 2 – Best Practices for Automated & Manual Data Transfers

$
0
0
Illustration of two laptops facing each other with folders and files being transferred between their screens, symbolizing data sharing or migration from Joomla to WordPress. The background features abstract blue leaves and shapes.

Migration from Joomla to WordPress part 2 – Best Practices for Automated & Manual Data Transfers

Avatar photo

By Maciej Nowak

Migrating a website from Joomla to WordPress can be complex, but it’s a common move for growing sites needing more flexibility. While both are PHP/MySQL-based, Joomla has a more layered structure with articles, menus, and modules, whereas WordPress offers a simpler setup with posts, pages, and a rich plugin ecosystem.

This three-part blog series guides WordPress developers through the full migration process. We’ll cover key areas like content transfer, SEO preservation, user roles, dealing with Joomla-specific features, and final optimization. The goal: a smooth transition with minimal downtime and no loss of SEO or content integrity.

Choosing Your Joomla to WordPress Migration Approach

In the previous part of this blog post series, we covered how to prepare your environment for migrating data from Joomla to WordPress. Now, we’ll focus on a key decision: choosing the right approach for the actual content migration. There are two main options – automated plugins or manual export/import. For those less familiar with Joomla, a plugin like FG Joomla to WordPress offers a straightforward solution by connecting directly to the Joomla database and migrating articles, categories, images, users, and metadata. The premium version expands these capabilities further.

Alternatively, manual migration gives you more control. This method typically involves exporting data (e.g., via CSV or XML) and importing it into WordPress using tools like WP All Import or custom scripts. It’s more time-intensive but ideal when the content structure needs significant changes. Ultimately, the best choice depends on your team’s skills: if you’re comfortable with SQL or PHP, manual might be a better fit – otherwise, a plugin can save time and reduce errors.

This guide will walk you through both options.

Approach A: Using FG Joomla to WordPress (Automated)

If you’ve installed the FG Joomla to WordPress plugin, this is the simplest method:

  1. Run the Importer: In WP Admin, go to Tools > Import and click “Run Importer” under Joomla (FG) . This opens the FG importer UI.
  2.  Enter Joomla Details: Fill in the Joomla website URL and database settings (host, DB name, user, password, table prefix). The plugin may offer an option to fetch data “via HTTP” (which uses the Joomla site’s frontend if DB is not accessible) or directly. Direct DB is usually more reliable and faster.
  3. Test Connection: Click Test the Connection for both the database and media if available. If you get a success message, proceed.
  4.  Importer Options: FG provides various options (checkboxes) on what to import – e.g., sections as categories, import images, import meta keywords as tags, etc.. Review and adjust these as needed. For example, ensure “Import images” is checked if you want the plugin to handle downloading images into the WP Media Library.
  5. Empty WordPress Content (Optional): If your WordPress is a fresh install, you can check the option to remove all existing placeholder content. FG plugin has a button “Empty WordPress content” to delete default posts/pages . Warning:Only do this on a blank site; do not click it if you already added content you want to keep.
  6. Start Import: Click Start / Resume Importer. The plugin will begin migrating data. Depending on site size, this may take a while. You’ll see progress messages. It will create WordPress posts for each Joomla article (marking them published, preserving dates), create categories, and upload images. It also handles converting internal Joomla links in article content to the new WordPress URLs (more on that in Testing/QA).
  7. Completion: Upon completion, you should see a success message indicating how many posts, categories, images, etc. were imported. All Joomla articles should now appear under Posts (or Pages if you chose that) in WordPress. Joomla categories will appear under Posts > Categories. Tags (or meta keywords) appear under Posts > Tags if imported. If something fails midway (e.g., due to server timeout), the FG tool can often resume; you may need to increase PHP time limits for very large imports.

FG Joomla free version does not import Joomla menus or users. If you have the premium version, it would also migrate:

  • Menu structures into WordPress menus.
  • Users (with their roles and hashed passwords).
  • SEO meta descriptions and keywords into your WP SEO plugin fields.
  • Joomla article IDs (so you can maintain URL redirects easily, or it can auto-create redirect rules).

If using the free version, you will handle those items manually in the next steps.

Two people collaborate—one with a tablet, the other at a laptop. Arrows link multimedia icons, illustrating sharing digital files and optimizing Largest Contentful Paint (LCP) in WordPress for smoother media transfers.

Approach B: Manual Import via CSV/XML + WP All Import (or SQL)

If not using FG, the process is more involved but offers flexibility:

  1. Import Categories: Create the categories in WordPress (if you haven’t already in step 4). You can also import categories via a CSV. For example, if you exported categories to a CSV, you could write a small script or use WP-CLI to insert them. However, often it’s simplest to manually create the few top-level categories and others as needed.
  2.  Import Posts using WP All Import: Install WP All Import plugin (or a similar import tool). Prepare your Joomla articles export file (CSV or XML). In WP All Import:
    • Upload the file and choose to import to Posts (or the custom post type you created).
    • Map the fields: e.g., CSV “title” -> WP post_title, “fulltext” -> WP post_content (you may need to combine “introtext” + “fulltext” fields from Joomla into one content if they were separate; WP All Import allows combining fields).
    • Map “created date” -> WP post_date, “modified date” -> WP post_modified.
    • If you have the Joomla article alias and want to use it for the slug, map alias -> WP post_name (slug).
    • Category mapping: if your CSV has a category name or ID for each article, map that to the WP category. WP All Import can auto-create categories by name on the fly. Ensure the category names match what you set up (it will create any that don’t exist).
    • If you have tags from Joomla (or want to use Joomla meta keywords as tags), map those to the Tags taxonomy.
    • For any custom fields or meta (like Joomla’s hits, or specific Joomla custom fields), you can map them to custom fields in WP if needed.
    • Run the import. This will create all the posts. Depending on your server, you might batch the import (e.g., 100 at a time) to avoid timeouts.
  3. Import Pages (if any): Joomla sometimes had “uncategorized” articles or separate page-like content. If you want some content as WordPress Pages (instead of Posts), you might need to run a separate import for those or move them after import. Alternatively, import everything as posts then later convert specific ones to pages (plugins like “Post Type Switcher” can help).
  4.  Import Users: For Joomla users, you can use a plugin like Import Users from CSV in WordPress. First, export Joomla users to CSV (with fields: name, username, email, and password hash). As referenced, the ARRA User Export extension can export users including their password hash. The WP import plugin can import users if you label the password field correctly. For example, one method is to include the Joomla password hash and salt in the CSV and use a special process to convert them. The blog by bhoover.com suggests using an “joomlapass” column header for the Joomla hashed password – the Import Users from CSV plugin recognizes that and converts it so users can keep their existing passwords in WordPress. Map Joomla user groups to a WordPress role during import: e.g., Joomla “Registered” -> WP Subscriber, “Author” -> WP Contributor or Author, “Editor” -> WP Editor, “Super User” -> WP Administrator. You’ll have to decide the mapping based on responsibilities. (Note: If only a handful of users, you might just recreate them manually in WP for simplicity.)
  5. Direct SQL Method (for advanced users): Alternatively, one could write SQL scripts to insert data into WordPress tables. This requires great caution and knowledge of WordPress schema. For example, to migrate posts via SQL, you would insert into wp_posts and wp_term_relationships for categories, etc. A simplified example (not to run blindly) might be:
INSERT INTO wp_posts (post_author, post_date, post_content, post_title, post_status, post_name, post_type)
SELECT 
    1 as post_author, 
    created as post_date, 
    CONCAT(introtext, fulltext) as post_content, 
    title as post_title, 
    'publish' as post_status, 
    alias as post_name, 
    'post' as post_type
FROM joomla_content;

Then separately insert category relationships by matching Joomla’s catid to WordPress category term IDs. This approach is prone to error and typically not recommended unless the team is very comfortable with SQL and both schemas. For most cases, the combination of Joomla export + WP All Import is safer and easier to debug.

After importing, verify that all posts/pages are present in WordPress. Spot-check a few pieces of content to see that formatting came through (images might still be pointing to old URLs – we’ll handle images next). The content at this stage might be in the Gutenberg editor as one big Classic block (if imported via HTML) – that’s okay for now.Also, at this point, do not delete the Joomla site or database yet. You may need to reference it for any missed data. Keep it running (perhaps offline or behind a maintenance page if needed) until the new site is live and verified.

Migrating Media & Images

Images and media files are a crucial part of the content migration. Joomla’s articles often include images (either embedded in content or set as “intro image/full image”). We need to ensure those images are now in WordPress and the posts point to the new image URLs.

If using FG Joomla importer: The plugin can handle media for you:

  • It will download images from the Joomla site (using the URLs in content or the paths) and place them into the WordPress /uploads directory. It also attempts to update the HTML in post content to point to the new location.
  • Featured images: FG can set the first image in a Joomla article as the Featured Image in WordPress if you enable that option.
  • Check the WordPress Media Library after import: you should see all the Joomla images that were in content now present. However, note that Joomla might have had an /images folder structure; WordPress organizes uploads by year/month by default. FG importer might put everything in the current date’s upload folder or a single folder. As long as the links in content were adjusted, it’s fine.

If migrating manually: Use the following steps:

  1. Upload images to WordPress: Take the Joomla images/ directory you saved and upload its contents to wp-content/uploads/ (you can do this via FTP). Ideally, put them in an organized way, e.g., all Joomla images into uploads/joomla/ to keep them separate from new uploads. WordPress won’t automatically know about these files if you just FTP them – they won’t appear in the Media Library yet, but that’s okay because the posts can still reference them by URL.
  2. Update image URLs in content: Joomla content’s image references might be relative (e.g., <img src=”images/sample.jpg”>) or absolute (http://oldsite.com/images/sample.jpg). You need to update these to the new WordPress location. If you uploaded to uploads/joomla/, then the new URL might be /wp-content/uploads/joomla/sample.jpg. You can run a WP-CLI command search-and-replace on the WordPress database or use a plugin (like Better Search Replace or Velvet Blues Update URLs) to replace all instances of the old Joomla image path with the new path. For example, replace src=”images/ with src=”/wp-content/uploads/joomla/. Ensure that images now load correctly on the WordPress pages.
  3.  Featured Images: Joomla didn’t have a concept of “featured image” per post (though Joomla had “Intro Image” which is somewhat similar). After import, consider setting featured images for posts if needed (especially if the WP theme uses featured images in excerpts or sliders). If you have the data (like maybe you exported a specific image field), you could script the assignment of featured images. If not, a manual approach: edit key posts and set a featured image from the media library (which should have the images if you imported them). There are plugins that can bulk set featured images from the first content image as well.
  4.  Other Media: If the site has other media (PDFs, videos, etc.), move those files into an appropriate place in wp-content/uploads and adjust any links in content. For instance, if Joomla had a file download at documents/file.pdf, ensure it’s now accessible in WordPress and the link in any page is updated.

Verify Media: After all images are in place, navigate through a few posts on the WordPress site to check images. They should load quickly from the new server. If broken image icons appear, inspect the HTML to see where it’s pointing and fix the path. Common gotcha: case sensitivity or special characters in filenames – ensure nothing got renamed unexpectedly.

Cleaning Up Media: Joomla might have had a lot of unused images (since it doesn’t automatically prune them). This might be an opportunity to clean out unused media, but it can be hard to know what’s unused. At minimum, ensure everything used on the site is present. You can always keep a backup of the entire Joomla images folder in case something was missed.

SEO Migration Strategy

Preserving SEO is often the most critical part after content is moved. A bad migration can lead to broken links and lost rankings, so take SEO steps seriously:

URL Structure and Permalinks: WordPress URL patterns will likely differ from Joomla’s. Joomla URLs might look like /category/subcategory/article-alias or sometimes include IDs (depending on SEF settings). Decide on a WordPress permalink structure that closely matches the old one. For example, if Joomla URLs were blog-style, you might choose WP’s “Post name” permalink (/sample-post/) and include category if needed (/category/sample-post/). Set this in Settings > Permalinks in WP. If exact matching is impossible, plan to use redirects.

301 Redirects: Create 301 redirects from every old Joomla URL to the corresponding new WordPress URL. This is crucial so that visitors (and Google) hitting the old links are redirected to the content’s new location. There are two main ways:

  • Using a Plugin): The Redirection plugin allows you to add redirects easily. After installing, go to Tools > Redirection and for each URL pair, add a Source (old Joomla URL path) and Target (new WP URL) and set it as a 301 Permanent redirect . For example, Source: /about-us Target: /about-us (if the same slug) or whatever it changed to. You can handle pattern matching too, but for a medium site, entering them manually or via CSV import to the plugin might be fine. The plugin will manage the .htaccess or serve redirects via PHP for you.
  • Manual .htaccess Redirects: If comfortable with Apache rewrite rules, you can open WordPress’s .htaccess and add 301 redirects. Example:
Redirect 301 /joomla-category/article-alias  /new-category/article-alias

Do this for each major URL. However, this can get unwieldy, and for complex Joomla SEF URLs, writing Regex rules might be needed. Server redirects work faster, however the plugin method may be easier to maintain.

  • FG Premium Auto-redirect: If you used FG premium and opted to keep Joomla IDs, the plugin can automatically generate redirects or at least preserve the old URLs by appending the old ID in the new slug (ensuring old links resolve). Check their documentation if you used that feature.
    After setting up redirects, test a few: take a Joomla URL (perhaps from the list of URLs you compiled) and enter it in the browser – confirm it lands on the correct page on WordPress and returns a 301 status. Commonly missed: Joomla’s homepage or section pages; ensure those are accounted for (maybe Joomla’s homepage now goes to a WordPress page or posts page).
  • Meta Titles & Descriptions: If Joomla had custom page titles or meta descriptions, input those into WordPress (likely via your SEO plugin). For each important page/post, edit it and ensure the SEO meta description matches what Joomla had. This can be manual work unless you migrated via FG premium which may have carried them over. Focus on high-value pages (homepage, main services/pages, top blog posts). If no meta description existed before, you can craft new ones – just try not to lose any well-performing SEO info that was previously there.
  • Canonical Tags: Usually, once the redirects are in place and you have only one live site (WordPress), canonical tags will just be the WordPress URLs (your SEO plugin can handle canonicals). The key is not to have the Joomla site publicly accessible after migration (to avoid duplicate content). If the Joomla site remains online (for comparison or rollback), put it behind a maintenance mode or block search engines via robots.txt or meta noindex. That way, Google won’t find two versions of the content.
  • Update Sitemap: Generate a new XML sitemap from WordPress (SEO plugins can do this) and compare to the old Joomla sitemap if one existed. Submit the new sitemap to Google Search Console after go-live. Also, in Search Console, use the Change of Address tool if the domain changed (not usually the case here, likely same domain, just new CMS). Monitor Search Console for crawl errors – any 404s it reports should be redirected promptly.
    Keep in mind that some Joomla URLs might not cleanly map if you significantly reorganized content. For example, if you merged some Joomla pages or split one into two in WP, plan those redirects accordingly (maybe multiple old URLs all redirect to one new page). It’s fine to have many-to-one redirects as needed.
  • Preserve Link Structure Internally: The internal links within the content should have been adjusted. FG importer does this automatically for links that pointed to internal Joomla URLs. If you did a manual import, hopefully you updated internal links either via search/replace or careful import mapping (e.g., WP All Import could transform old URLs if given a mapping file). Test a few internal links in posts to ensure they don’t point to the old Joomla subfolder or domain. If some still point to old URLs, use the Redirection plugin’s 404 monitoring or an SEO crawler to catch them, then fix them.

By implementing these SEO measures, the goal is that users and search engines can hardly tell a platform switch happened – except for improved performance and experience. Traffic should continue flowing to your new WordPress site without loss. Give search engines some time to re-index, and keep the redirects indefinitely (at least for a year or more, since external links to the site could be out there).

Once the content has been properly migrated, it is also worth considering the user structure so that the site is easy to manage – see the last part of the migration series for more information.

Follow Us for Ongoing WordPress Insights

Stay informed about the latest in WordPress security:

At Osom Studio, we’re committed to being your long-term partners in WordPress security. Take the first step today – your secure WordPress journey starts now.

Next article

Illustration of a person sitting next to a large smartphone screen displaying a fingerprint shield icon, symbolizing digital security or biometric authentication during migration from Joomla to WordPress, with abstract blue leaves in the background.

Migration from Joomla to WordPress part 3 – Advanced user role tactics, modules & a smooth go-live

Avatar photo

By Maciej Nowak

second background image for contact form

Do you need help with your WordPress website?

Go ahead and contact us!
Maciej will get back to you in 24 hours.
Avatar photo
Maciej Nowak
Partner

The post Migration from Joomla to WordPress part 2 – Best Practices for Automated & Manual Data Transfers appeared first on Osom Studio - WooCommerce & WordPress development agency of choice.


Viewing all articles
Browse latest Browse all 42

Trending Articles