Anonymised case study

Confidential TYPO3 to WordPress migration

This anonymised corporate TYPO3 to WordPress migration kept every URL, the multilingual matrix, and schema continuous through cutover. The client cannot be named; the engineering sequence below is real.

Starting constraint

TYPO3 had been the corporate CMS for over a decade. Editors knew the keyboard. The site was plugged into legal review, into translations, and into a brand book that pre-dated most current employees.

The migration was not a redesign. It had to keep visual identity, keep every URL, keep the multilingual matrix, and keep the editorial calendar moving while the platform changed underneath.

Content model audit

The first month was spent reading the TYPO3 page tree, not writing code. Each TYPO3 content element had to be classified: native equivalent in WordPress core, candidate for ACF or block pattern, candidate for archival as static content, or candidate for retirement.

The audit produced a one-to-one map. Without that map, a migration becomes a guess.

Content element to block map

The audit produced a one-to-one map. The rows below are the classification rules used on this engagement; exact CType inventory counts remain confidential.

TYPO3 source (typical)ClassificationWordPress destinationNotes
Text / header / bodytextNative equivalentCore paragraph, heading, list, quoteClean HTML; strip TypoScript wrappers
Image / textpic / mediaNative + mediaCore image / gallery + media libraryFAL to uploads; regenerate sizes pre-cutover
Bullet / tableNative equivalentCore list / tablePrefer core over custom HTML
Accordion / tabs / custom CEPattern or ACFBlock pattern or ACF + InnerBlocksName patterns in editors' language
News / press / jobs / events / people recordsStructuredCPT + taxonomies (+ ACF)Page tree is not category; model permissions separately
Shared header/footer / teaser snippetsGlobalSynced patterns or template partsAvoid lost multilingual fragment overlays
TypoScript-only layout chromeRetire or rebuildTheme / FSE templateDo not import TypoScript
Obsolete CE with no trafficRetireArchive or dropDocument retirement in the map
Unclear / Extbase-heavyEscalationCustom plugin or CPT + RESTSame class as the three macros replaced here

URL and schema continuity

Every URL was preserved. Where TYPO3 had RealURL or path segments that no longer fit, a 301 redirect map was generated and validated before launch. Multilingual variants stayed at the same paths.

Article and Organization schema migrated with the content. Hreflang continuity was checked per locale before DNS cutover.

Redirect map checklist

Where TYPO3 RealURL or path segments no longer fit, a 301 redirect map was generated and validated before launch. Multilingual variants stayed on the same paths whenever the content model allowed it.

ColumnRequiredPurpose
source_urlyesFull legacy path (incl. locale prefix / RealURL segment)
target_urlyesWordPress permalink after model map
statusyes301 default; rare 410 only for intentional retirement
localeyesen / de / … matching hreflang set
hreflang_group_idyesTies language siblings so one locale is not orphaned
realurl_noteif neededWhy path could not stay identical
organic_trafficrecommendedFlag rows with GSC/analytics hits for priority QA
validated_on_stagingyesCheckbox / date before DNS
owneroptionalWho signed the row

Editor onboarding

Editors had a Friday training, a Monday parallel publishing day, and a Wednesday cutover. The block editor was localised, the patterns were named in the language editors actually used, and a small custom plugin replaced the three TYPO3 macros that mattered most.

Editors kept the existing brand language while the CMS changed.

Outcome bands

Exact numbers are confidential. The publishable result: editorial throughput improved within the first month, page weight on the corporate template family dropped meaningfully, and search visibility for the German-language head terms held through cutover with no recovery dip.

Treat TYPO3 to WordPress as a content model migration. Audit the model before building importers.

Download the migration templates

Start the audit with the same two working tables used in the method above. Their columns match the content and redirect checklists on this page.

Frequently asked questions

How do you migrate multilingual TYPO3 to WordPress without losing URLs?

Start with a content-model audit of the TYPO3 page tree, not a theme rebuild. Classify every content element, keep paths identical wherever the new model fits, and generate a 301 map for RealURL or path segments that cannot stay. Validate that map before DNS cutover, keep multilingual variants on the same paths, migrate Article and Organization schema with the content, and check hreflang per locale. On this confidential corporate engagement, editors ran Friday training, Monday parallel publishing, then Wednesday cutover with rollback ready. Exact traffic numbers stay confidential until the client releases them.

How should TYPO3 content elements map to WordPress blocks and ACF?

Produce a one-to-one map before writing importers. For each TYPO3 content element choose exactly one destination: native WordPress core block, ACF field or field group, block pattern / reusable pattern, static archival HTML, or retirement. Corporate sites usually mix those five buckets; guessing inside the importer is what creates orphan fields and broken layouts. This engagement spent the first month reading the page tree and finishing that map before build. Without the map, migration becomes a guess.

What should a TYPO3 to WordPress redirect map contain?

Every legacy URL that carried organic or internal traffic needs an explicit row: source path, target path, HTTP status (almost always 301), locale, and a note when TYPO3 RealURL or deep path segments changed shape. Include hreflang sibling checks so language variants do not orphan each other, and validate the full map on staging before DNS. Most TYPO3 to WordPress SEO regressions come from skipping this audit, not from WordPress itself. On this project the map was validated before launch and German head terms held through cutover; publishable numeric GSC deltas remain confidential.

Why is the client not named?

The engagement is under NDA. The publishable part is the engineering sequence: content-model map, URL and schema continuity, editor onboarding, and cutover discipline. Named branding and exact commercial metrics stay private unless the client releases them.

Want a TYPO3 to WordPress audit?

Send the current TYPO3 install footprint, the editor count, and the locale matrix. These inputs are enough to size the migration and identify blockers.

Request a migration audit