CIBASS WordPress-to-Drupal CMS Migration Rebuilds a 13-Year Archive
Moving a 13-year-old blog from WordPress to Drupal CMS took more than transferring posts. Christian López Espínola (Penyaskito) migrated the Spanish culture blog Can It Be All So Simple (CIBASS) on 1 October 2026. His account, published on 10 October, explains how he rebuilt the site's content and preserved its old links.
The migration involved 722 posts, including drafts, and more than 4,000 attachments. Older content needed new fields, media handling and redirects. The project also exposed the difficulty of recovering data held by third-party services. Espínola credits the multilingual improvements in Drupal CMS 2.2.0 with making the move possible.
Rebuilding the Editorial Structure
The original WordPress database contained 717 published posts and five drafts, 4,110 attachments, 545 approved comments and 104 pingbacks. Another 1,190 spam comments and thousands of historical revisions were left behind. Espínola's inventory also found 5,861 tags attached to only 717 published posts, illustrating why a content audit preceded the migration.
The new site uses Drupal CMS project recipes to define its vocabularies, content types and media types, bundled into a site template recipe. Rather than importing a WordPress XML export, Espínola used WordPress Migrate SQL to read the WordPress database directly. Separate DDEV projects allowed the new Drupal site to reach the original database, and a script ran 24 migrations in sequence, stopping on failure.
What WordPress had stored as posts became three Drupal content types: 185 critiques, 24 interviews and 513 articles, including drafts. Image-based ratings became structured fields. The distinction between a critique and a compilation required examining the number of rating images, not merely the post category. Byline information previously embedded in article bodies became contributor taxonomy records; migration overrides consolidated inconsistent author names.
Transforming Thirteen Years of Media Embeds
Older content mixed WordPress shortcodes, Gutenberg blocks, handwritten galleries, remote embeds and direct image paths. Espínola wrote a sequence of 12 migration process plugins to convert those elements. The rules handled 62 gallery shortcodes containing 828 images, 521 caption shortcodes, embedded media and outdated search URLs. Their execution order mattered: rating images had to be extracted before the remaining images were converted into Drupal media references.
The implementation involved approximately 2,250 lines of migration process-plugin code and 186 test methods, according to the account. The resulting site uses 11 media types. Its migration identified 73 unavailable remote videos, sending unresolved cases to an editorial review backlog. The project also made third-party embeds conditional on visitor consent through Klaro. These changes required custom development and review rather than a one-step import.
Testing Redirects Against Real URLs
Maintaining historical links was another major requirement. Post URLs retained their date-based pattern, using local publication dates to avoid shifting some paths into the previous day. The project added 54 redirects for changed post slugs and used one event subscriber to route roughly 4,100 former WordPress attachment-page URLs to their parent posts. Espínola reports testing that rule against 1,966 actual URLs.
Old upload paths were checked against 4,109 files and their resized variants, including filenames with non-ASCII characters. Sitemap and RSS addresses also needed redirects. These checks illustrate why successful content-import counts alone do not establish that a migrated archive's incoming links still work.
Recovering Data Beyond the CMS
Not all historical information could be transferred. Espínola says the blog's Jetpack-powered most-visited-post statistics were held by WordPress.com and were unavailable for export in the project's workflow. Its Jetpack-managed mailing list was also lost in the move. The replacement analytics setup uses self-hosted Matomo, with Google Analytics records from 2023 imported to preserve part of the available traffic history.
The account presents a practical distinction for publishers planning a CMS migration: preserving articles, media and URLs does not necessarily preserve analytics, subscribers or other services managed outside the site. Espínola expects the move to simplify ongoing maintenance, but the post does not provide long-term maintenance measurements. Its documented results are the rebuilt archive, migration checks and renewed control over hosting, code and available analytics data.
