New Migrate your forum to wpForo 3.0 AI Edition, the first 360° AI-powered forum platform. See how
Home / Blog / CMS Migration
CMS Migration

How TYPO3 Content Maps to WordPress: Pages, tt_content, tx_news, FAL Files, and Extensions

The most common reason a TYPO3 to WordPress migration loses content is not that the content disappears. It is that nobody mapped the source correctly before starting. TYPO3 stores content differently from any other CMS: pages as a tree in the pages table, content in discrete elements in tt_content with column assignments, news articles in a separate extension table, and files in a completely separate abstraction layer. A migration that does not read each of these tables explicitly leaves structured data behind.

The Core Architecture Difference

TYPO3 uses a page-tree model where every page is a row in the pages table with a pid field pointing to its parent. Content is not stored in the page row. It is stored in tt_content as separate content element rows, each with a pid matching the page UID and a colPos field indicating which column of the backend layout it belongs to. A single TYPO3 page with three content columns has one row in pages and potentially dozens of rows in tt_content.

WordPress uses a simpler post model. A page or post is a single row in wp_posts with the content stored in the post_content column as block markup (Gutenberg). Structured custom data sits in wp_postmeta via ACF Pro fields. The mapping from TYPO3’s distributed multi-table structure to WordPress’s consolidated model requires reading each table explicitly and assembling the content in the correct order and column assignment.

The Full Content Mapping Reference

TYPO3 Element TYPO3 Storage WordPress Equivalent Notes
Pages / page tree pages table (uid/pid hierarchy) WordPress Pages (post_type=page) Tree hierarchy preserved
Content element: text tt_content CType=text, bodytext field Gutenberg Paragraph block Body text, header preserved
Content element: textmedia tt_content CType=textmedia, bodytext + FAL ref Gutenberg Image + Text blocks Media linked via sys_file_reference
Content element: image tt_content CType=image + FAL reference Gutenberg Image block Alt text, title from FAL
Content element: header tt_content CType=header, header field Gutenberg Heading block Header type (h1-h6) preserved
Content element: bullets tt_content CType=bullets, bodytext as list Gutenberg List block Unordered or ordered list
Content element: table tt_content CType=table, bodytext as CSV Gutenberg Table block Table structure preserved
Custom element (Mask/DCE) tt_content custom CType + custom flex fields ACF Pro custom blocks or CPT fields Per-field explicit mapping
tx_news records tx_news_domain_model_news table WordPress Posts (post_type=post) Author, date, categories preserved
tx_news categories tx_news_domain_model_category table WordPress Post Categories Hierarchy preserved
FAL files sys_file + sys_file_reference tables WordPress Media Library (wp_posts type=attachment) Filenames, alt text, titles
Frontend users fe_users + fe_groups tables WordPress Users + Roles (wp_users) Role mapping explicit
TYPO3 categories sys_category + sys_category_record_mm tables WordPress Taxonomies Hierarchy preserved
Powermail form data tx_powermail_domain_model_mail + _answer tables Gravity Forms / WPForms + archived data Submission history archived
EXT:form form data tx_form_formdb + answer tables Gravity Forms / WPForms + archived data Submission history archived
TYPO3 Forum extension tx_mmforum or forum extension tables wpForo 360° AI Topics, replies, authors preserved
URL slugs / segments pages.slug field (v9+) or RealURL config WordPress post slug + Redirection 301s Every URL preserved or redirected
SEO metadata (EXT:seo) pages.seo_title, pages.description + og fields Yoast SEO post meta (_yoast_wpseo_*) Title, description, OG data
Backend layouts / columns TypoScript backend_layout config + colPos Gutenberg columns / ACF Flexible Content Layout rebuilt in WP theme
TypoScript configuration TypoScript in site package extension Custom WordPress PHP theme Not portable, rebuilt from scratch
Fluid templates (.html) Site package /Resources/Private/Templates/ Custom WordPress PHP theme templates Not portable, rebuilt from scratch
Mapping TYPO3 content structures to WordPress equivalents
Every TYPO3 content structure has a direct WordPress equivalent. The migration is the work of mapping each table explicitly.

Pages and the Page Tree

Every page in TYPO3 is a row in the pages table. The uid field is the page identifier. The pid field is the parent page UID. The slug field (added in TYPO3 v9) is the URL segment for that page. The tree structure of the entire site is encoded in these three fields across potentially thousands of rows.

A proper migration reads the pages table recursively and recreates the page hierarchy as WordPress pages with correct parent assignments. The slug field of each page is used to set the WordPress post slug, preserving URLs. Where the URL structure must change, a 301 redirect is created before the domain switch. Page properties including SEO title, meta description, and Open Graph fields from the pages table or EXT:seo extension are written to Yoast SEO post meta for every page.

tt_content Elements to Gutenberg Blocks

Every content element in TYPO3 is a row in the tt_content table. The CType field identifies the type of content element (text, textmedia, image, header, bullets, table, list). The bodytext field stores the main content. The colPos field indicates the backend layout column. The sorting field determines the order of elements on a page.

A proper migration reads all tt_content rows for each page, ordered by sorting, and creates corresponding Gutenberg blocks in the WordPress post content. A text element becomes a paragraph block. A textmedia element becomes a combination of image and text blocks. A header element becomes a heading block. Custom content elements built with extensions like Mask or DCE have their custom field data mapped to ACF Pro fields in the corresponding WordPress custom post type or block.

tx_news Records to WordPress Posts

The tx_news extension is one of the most widely used TYPO3 extensions. It stores news articles in the tx_news_domain_model_news table with fields for title, body text (stored as RTE content), author, publication date, and category assignments. News categories are in tx_news_domain_model_category with a hierarchy.

A proper migration reads every row in tx_news_domain_model_news and creates a WordPress post for each one. The publication date, author attribution, and category hierarchy are preserved. Body text stored as TYPO3 RTE HTML is cleaned and converted to Gutenberg block format. Attached images linked via sys_file_reference are imported to the WordPress Media Library and set as the featured image on the corresponding post.

FAL: The File Abstraction Layer

TYPO3 introduced the File Abstraction Layer (FAL) in version 6.2. FAL separates file metadata from file content. Physical files are stored on disk. Their metadata (title, alt text, description, MIME type) is stored in the sys_file table. The relationships between content elements and files are stored in sys_file_reference, linking a tt_content row to a sys_file row with per-reference overrides for alt text and title.

A proper migration reads sys_file and sys_file_reference together, imports the physical files to the WordPress Media Library, preserves the per-file alt text and title from FAL metadata, and updates all content references to point to the new WordPress media URLs. Older TYPO3 sites (pre-6.2) may use direct file references in tt_content fields which require a separate lookup strategy.

Frontend Users to WordPress Users

TYPO3 separates backend users (who administer the CMS) from frontend users (who log in to the website). Frontend users are stored in fe_users with fields for username, email, first name, last name, and a usergroup field referencing fe_groups. Custom profile fields added by extensions are stored in additional columns on fe_users or in separate extension tables.

A proper migration reads fe_users and fe_groups, creates corresponding WordPress user accounts, maps frontend user groups to WordPress roles, and imports any custom profile field values to WordPress user meta. Passwords must be reset on first login since TYPO3 and WordPress use different hashing schemes and passwords cannot be transferred as-is.

TypoScript and Fluid Templates: What Cannot Be Ported

TypoScript is a proprietary configuration language specific to TYPO3. It controls everything from page rendering to menu generation to content element output. There is no equivalent in WordPress and no migration path for TypoScript configurations. Every TypoScript configuration on a TYPO3 site must be understood by a developer who can replicate its effect in a custom WordPress PHP theme.

Fluid templates are the HTML template files that TYPO3 uses for frontend rendering. They use Fluid template syntax with ViewHelpers, variable injection, and partial includes that are specific to the TYPO3 templating engine. These files cannot be ported to WordPress. A proper migration delivers a custom WordPress PHP theme that replicates the visual output of the original TYPO3 site exactly, page type by page type, building the theme logic from the WordPress template hierarchy rather than from the TYPO3 template files.

TYPO3 content fully mapped to WordPress
Every TYPO3 table read, every field mapped, every file imported. This is what a database-level migration looks like when it is done completely.

How gConverter Handles TYPO3 Migrations

gConverter migrates TYPO3 sites by reading the source database directly. Every page in the pages table is migrated with its complete tree structure. Every content element in tt_content is mapped to the corresponding Gutenberg block. Every tx_news record is migrated to a WordPress post. Every FAL file is imported to the WordPress Media Library with alt text and title preserved. Every frontend user is imported with role mapping. Every URL slug is preserved or redirected. The TYPO3 theme is rebuilt as a custom WordPress PHP theme. SEO metadata is transferred to Yoast SEO.

Before any access to your database, we sign a Data Processing Agreement. Credentials are stored in AES-256 encrypted vaults and transferred over TLS 1.3. All client data is permanently deleted within 30 days of delivery.

Read the GDPR and data protection documentation →

For everything about why organizations are moving from TYPO3 to WordPress: Why Businesses Are Moving From TYPO3 to WordPress →

What Clients Say

Went FAR above and beyond to help us work through this project. We are thrilled with the final result and they were professional, great to work with, and responsive every step of the way. Would highly recommend.

Anna P., Wilmington NC – Customer Lobby, January 2026

Very few conversion issues on the first pass, and they cleaned it right. Very Impressive.

Stacy C., Katy TX – Customer Lobby, November 2025

The Bottom Line

A TYPO3 site is not a single-table database. It is a distributed content model spread across the pages tree, tt_content element rows, extension tables like tx_news_domain_model_news, and the FAL file reference system. A migration that does not read all of these tables explicitly does not migrate the site. It migrates a partial version of it, with structured data silently missing and URLs broken.

Share this post:
0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted

Ready to leave your outdated platform behind?

Free quote in 6–12 hours. You pay only after the migration is approved.