Skip to content

Ektron vs CoreMedia: Architecture, TCO & Migration Guide

Compare Ektron and CoreMedia CMS on architecture, real TCO drivers, and migration paths. A practical guide for teams planning their move off legacy Ektron.

Nachi Raman Nachi Raman · · 21 min read
Ektron vs CoreMedia: Architecture, TCO & Migration Guide
TALK TO AN ENGINEER

Planning a migration?

Get a free 30-min call with our engineers. We'll review your setup and map out a custom migration plan — no obligation.

Schedule a free call
  • 1,500+ migrations completed
  • Zero downtime guaranteed
  • Transparent, fixed pricing
  • Project success responsibility
  • Post-migration support included

Ektron vs CoreMedia: Architecture, TCO & Migration Guide

If you're comparing Ektron and CoreMedia, you're evaluating a migration path — not a greenfield CMS selection. Nobody starts a new web project on Ektron today. The real question is whether you continue absorbing the operating cost of a legacy Windows/IIS/SQL Server estate, or fund a move to a distributed Java-based CMS built for API delivery, multi-channel reuse, and modern containerized deployment.

Ektron's public documentation centers on version 9.30 SP2. CoreMedia publishes current CMCC 12/13 docs covering Studio, CAE, GraphQL headless delivery, and Kubernetes-based deployment. That asymmetry makes this an architectural and operational evaluation, not a cosmetic one.

This guide covers architecture, total cost of ownership, migration complexity, and the technical steps required — including schema-level extraction details, known failure modes, and import pipeline specifics that generic CMS comparison content omits.


What Is Ektron CMS?

Ektron is a .NET-based enterprise web content management system founded in 1998 near Boston, built for organizations running Microsoft infrastructure — IIS, SQL Server, ASP.NET. Core features included Smart Forms (structured content via XML schemas), PageBuilder wireframes, a browser-based WYSIWYG editor, taxonomy management, and multilingual site support via language packs and content_language field values.

The platform's trajectory changed in 2015 when Ektron was acquired by Accel-KKR and merged with Episerver (now Optimizely). Active development stopped after the merger. The last version with official Windows Server 2016 support was Ektron CMS 9.3, released June 2018. The eCommerce module was discontinued as of version 9.10. (webhelp.optimizely.com)

If you're running Ektron in production, you are running end-of-life software on an increasingly risky infrastructure stack — with no security patches, no browser compatibility updates, and a shrinking pool of platform-native developers.


What Is CoreMedia CMS?

CoreMedia is a Java-based composable Digital Experience Platform (DXP) headquartered in Hamburg, Germany. It operates as a hybrid headless CMS — delivering content via REST and GraphQL APIs while providing a visual editorial interface with in-context preview, as distinct from pure headless systems that expose no editorial rendering layer.

"Composable" in CoreMedia's context means content capabilities (editorial workflow, localization, commerce connectivity, personalization) are independently deployable services behind a unified API, rather than a tightly coupled monolith. This is architecturally distinct from Ektron, where presentation, business logic, and content storage are intertwined within the ASP.NET application.

CoreMedia supports cloud, private cloud, and on-premises deployment — relevant for regulated industries with data residency requirements. Notable customers include Deutsche Telekom (40,000+ editors across markets, per CoreMedia's published case study), Henkel, Pandora, and Finnair. The platform also served as the underlying technology for the German Government Site Builder. (documentation.coremedia.com)

CMCC 12 shipped in 2024. CMCC 13 is under active development with significant breaking changes detailed below.


Architecture Comparison: Ektron vs CoreMedia

Ektron's Architecture

Ektron (versions 8.x through 9.x) is an ASP.NET CMS built around server-rendered pages. Starting with version 8.5, it introduced a 3-tier architecture:

Data tier — SQL Server database. Content lives primarily in the content table. Smart Forms store structured XML in the content_xml column. Legacy WYSIWYG content exists as raw HTML blobs in content_html. Key tables for extraction:

Table Contents
content Primary content records, status, language, folder association
content_html Raw HTML body for non-Smart Form content
content_types Smart Form type definitions and associated XML schemas
folder Hierarchical site structure
alias Friendly URL mappings to content IDs
asset_library DMS binary asset metadata
taxonomy Tag hierarchy and term definitions
content_taxonomy Many-to-many join: content to taxonomy terms

Application tier — Business logic layer. The Framework API uses Microsoft Unity for dependency injection. In 3-tier mode, presentation-tier Framework API calls route through WCF services to the application server — meaning site directories must be structurally identical across tiers, and templates/assets must be manually synchronized.

Presentation tier — Handles visitor requests and renders pages via ASP.NET WebForms and User Controls (.ascx). MVC support was added in version 9 but the underlying reliance on Ektron's proprietary Framework API remained. Site behavior is distributed across: Smart Form XML schemas, XSLT rendering patterns in EkML templates, PageBuilder widget code-behind, and search decoration logic in search controls.

Documented constraints with direct migration impact:

  • Ektron installation is machine-level and expects SQL Server or SQL Express in its setup flow. (webhelp.optimizely.com)
  • During upgrade, Ektron removes the Bin, Workarea, and Documentation folders — customized files in those directories are lost without prior backup. (webhelp.optimizely.com)
  • Solr integration requires a Windows-hosted Solr instance with JDK 1.8, dedicated ports, and specific firewall rules.
  • Search indexes only the first 16 MB of a PDF.
  • Smart Form fields are searchable only when stored as XML elements, not attributes — attribute-stored fields are silently excluded from search results.
  • Multi-entry calendar Smart Form configurations are not searchable.
  • Later browser versions may be incompatible with older Ektron releases. (support.optimizely.com)
Danger

End-of-Life Risk: Ektron receives no security patches, no browser compatibility updates, and no new feature development. Running it in production creates compliance exposure — particularly where PCI DSS, SOC 2, or ISO 27001 audits require evidence of patched, supported software. Security auditors increasingly flag end-of-life CMS platforms as a finding category.

CoreMedia's Architecture

CoreMedia uses a four-tier distributed architecture separating authoring, content management, delivery, and presentation:

Persistent storage — Supports MySQL, PostgreSQL, and Oracle. Microsoft SQL Server support is fully removed in CMCC 13. (documentation.coremedia.com)

Backend tier — Content Server (content repository, versioning, access control), Workflow Server, and Apache Solr for full-text indexing.

Middle tier — CAE (Content Application Engine) for server-side rendering, Headless Server for GraphQL API delivery, Studio Server for editorial, Replication Live Server for delivery-side caching, plus feeders and workers for Solr indexing and commerce synchronization.

Frontend tier — Decoupled presentation layer. Any framework consuming the GraphQL API is supported: React, Vue, Next.js, Angular.

For headless delivery, the Headless Server exposes content as JSON at /graphql. Preview-specific endpoints (/preview, /previewurl) are available in preview mode, which is required to wire editorial preview into a headless frontend build — this wiring is not automatic and requires explicit configuration. (documentation.coremedia.com)

Content modeling is strictly typed. Unlike Ektron's HTML blob approach, CoreMedia requires all content modeled into discrete, typed properties defined in document type descriptors (XML-based .xml definition files). Rich text uses a strict XML schema (CoreMedia Richtext 1.0 DTD) — the Content Server rejects invalid markup on ingestion, not at display time.

A minimal CoreMedia document type definition (XML):

<?xml version="1.0" encoding="utf-8"?>
<DocumentTypeDescriptor name="Article"
  xmlns="http://www.coremedia.com/2008/documenttypes">
  <DocType name="Article" parent="CMLinkable">
    <StringProperty name="title" length="256"/>
    <StringProperty name="teaserText" length="512"/>
    <MarkupProperty name="detailText" grammar="coremedia-richtext-1.0"/>
    <LinkProperty name="picture" linkType="CMPicture" min="0" max="1"/>
    <DateProperty name="externallyDisplayedDate"/>
    <LinkListProperty name="related" linkType="CMLinkable" min="0" max="10"/>
  </DocType>
</DocumentTypeDescriptor>

A corresponding CoreMedia Richtext body payload (valid XML for ingestion):

<div xmlns="http://www.coremedia.com/2003/richtext-1.0"
     xmlns:xlink="http://www.w3.org/1999/xlink">
  <p>This is a valid CoreMedia Richtext paragraph.</p>
  <p>Inline <a xlink:href="coremedia:///cap/content/12345"
               xlink:actuate="onRequest"
               xlink:show="replace">internal link</a> example.</p>
</div>

Any HTML that does not conform to this DTD — inline styles, non-standard attributes, malformed nesting — will cause the Content Server to reject the content item on write. This is the single most common failure point in Ektron-to-CoreMedia migrations.

Version-specific requirements that affect planning:

Requirement CMCC 12 CMCC 13
Java version 17 21
Node.js 18+ 24
Inter-component protocol CORBA (default) gRPC (default); CORBA deprecated
SQL Server support Yes Removed
CORBA removal Planned for CMCC 14
Build toolchain Maven, pnpm Maven, pnpm

CMCC 13 CORBA deprecation impact: Any integration that relies on CORBA-based RMI calls between CoreMedia components — custom feeders, third-party CAE extensions, legacy UAPI clients — must be rewritten to use gRPC before CMCC 14. For CMCC 12 customers planning to upgrade, audit all custom component communication patterns before committing to a 13.x migration timeline.

Info

Import paths: The CoreMedia Importer is deprecated as of CMCC v12.2506.0. Documented replacements: the cloud-only Ingest Service, the serverimport command-line tool, or a custom UAPI client. The Ingest Service has a 30-second default gateway response-time limit — design for chunked imports (recommended batch size: 50–100 items per request), idempotency tokens, and retry logic. Long synchronous requests will time out. (documentation.coremedia.com)

CoreMedia Ingest Service payload structure (partial example):

{
  "operations": [
    {
      "type": "create",
      "path": "/Sites/MySite/Articles/2024/press-release-01",
      "contentType": "Article",
      "properties": {
        "title": "Sample Press Release",
        "teaserText": "Summary of announcement.",
        "externallyDisplayedDate": "2024-06-01T00:00:00Z",
        "picture": {
          "type": "link",
          "path": "/Sites/MySite/Media/Images/sample-image"
        }
      }
    }
  ]
}

The Ingest Service returns HTTP 202 for accepted operations and HTTP 400 with a structured error body when content type validation fails. Log all 400 responses with the full payload for retry and remediation.

Architecture Summary Table

Dimension Ektron CoreMedia
Language/Runtime ASP.NET (.NET Framework) Java 17+ (Spring Boot)
Database SQL Server only MySQL, PostgreSQL, Oracle (no SQL Server in CMCC 13)
Architecture Model 2/3-tier monolith 4-tier composable / hybrid headless
API Approach Framework API (WCF services) REST & GraphQL (API-first)
Content Storage HTML blobs + XML (Smart Forms) Typed document properties + CoreMedia Richtext XML
Search Engine Built-in + Solr (v8.5+) Apache Solr
Deployment Windows Server / IIS Cloud, private cloud, on-prem, Docker/K8s
Headless Capability None native Full hybrid headless with visual editorial preview
Active Development Ceased (post-2015 merger) Active (CMCC 12 released 2024, CMCC 13 in development)
Inter-component Protocol WCF/SOAP gRPC (CMCC 13+), CORBA removed in CMCC 14

TCO: Where the Money Actually Goes

Ektron TCO Reality

Ektron's cost structure today is dominated by risk and maintenance overhead rather than licensing. The platform is no longer sold as a new license.

Infrastructure costs that compound over time:

  • Security compensation — No patches means spending on WAF rules, network segmentation, and custom security layers to shield the application. Organizations subject to PCI DSS or SOC 2 audits face recurring findings that require remediation documentation.
  • Shrinking talent pool — Modern .NET developers work with .NET Core, Blazor, and modern frontend frameworks, not WebForms and .ascx controls. Recruiting for Ektron-specific skills or retraining existing staff carries a premium. Expect a 20–40% hourly rate premium for contractors with Ektron-specific experience, based on current market availability.
  • Infrastructure lock-in — Tied to Windows Server versions compatible with Ektron 9.3. Upgrading to Windows Server 2019 or 2022 requires compatibility testing without vendor support.
  • Database growth degradation — Ektron's architecture generates orphaned content records, alias table bloat, and taxonomy join table expansion over time. As the content and alias tables grow beyond ~500K rows (a common threshold in 5+ year estates), query performance degrades noticeably without custom indexing work outside the Ektron schema.
  • Upgrade path destruction — Every Ektron upgrade destroys the Bin, Workarea, and Documentation directories. Organizations typically freeze upgrades after significant customization, which means most running instances are 2–4 minor versions behind even the last published release.

The most expensive part of maintaining Ektron is not the platform itself — it is the hidden business logic distributed across ASPX templates, EkML rendering files, widget code-behind, Smart Form XML schemas, and Solr configuration. This logic is rarely documented and frequently understood only by staff who have since left.

CoreMedia TCO Reality

CoreMedia does not publish public pricing. Based on platform positioning and publicly available case data:

  • Licensing — Enterprise contract pricing, typically structured as annual subscription. Not comparable to mid-market CMS products.
  • Implementation — Significant upfront investment required. CoreMedia's documented onboarding for a single-site, single-locale configuration takes approximately 6 weeks with dedicated CoreMedia support engagement — this covers platform setup, not content migration or frontend build.
  • Engineering staffing — Requires Java developers proficient in Spring Boot and Maven (budget 3–6 months to reach production-level proficiency for a developer new to the CoreMedia stack), container infrastructure engineers (Docker/Kubernetes), and frontend engineers for headless delivery. A full-stack CoreMedia implementation team typically requires 4–6 engineers in steady state.
  • Commerce integration — Pre-built adapters for Salesforce Commerce Cloud, SAP Commerce, HCL Commerce, and Commercetools are included, eliminating custom middleware work estimated at 200–400 hours for equivalent functionality built from scratch.
  • Database migration cost — Organizations running SQL Server who move to CMCC 13 must migrate to MySQL, PostgreSQL, or Oracle. This is a separate infrastructure workstream that must be planned alongside the content migration.

Where CoreMedia delivers long-term TCO reduction is in editorial independence from development: the hybrid headless model allows marketing teams to create, preview, and publish content across channels without triggering frontend deployments. That operational change can reduce content-related development overhead by 30–50% in high-velocity publishing environments — but the savings only materialize after the initial platform investment is absorbed.

Warning

If your team is .NET-native and has no Java expertise, the skills gap is a first-order cost. Do not treat it as a footnote. Budget explicitly for training, hiring, or SI partnership before committing to CoreMedia.

TCO comparison summary:

Cost Category Ektron (current) CoreMedia
Licensing End-of-life (no new licenses) Enterprise subscription (undisclosed)
Security patching Manual / compensating controls Vendor-managed
Infrastructure Windows Server / IIS / SQL Server Container platform (cloud or on-prem)
Developer talent Scarce, premium rates Java + frontend, broader market
Upfront implementation Low (stabilization only) High (6–12+ months)
Long-term editorial ops High (dev-dependent publishing) Lower (independent editorial workflows)

When CoreMedia Makes Sense (and When It Doesn't)

Good Fit

  • Large-scale, multi-market operations — Dozens of languages, hundreds of editors. Deutsche Telekom's 40,000+ editor deployment (CoreMedia case study) demonstrates the platform's scale ceiling.
  • Omnichannel delivery — Websites, mobile apps, digital signage, chatbots. CoreMedia's GraphQL API delivers the same content graph to any consuming frontend.
  • Commerce-heavy enterprises — Pre-built adapters for SAP Commerce, Salesforce Commerce Cloud, HCL Commerce, and Commercetools.
  • Regulated industries — On-premises and private cloud deployment options support data residency and sovereignty requirements that SaaS-only platforms cannot meet.

Poor Fit

  • Small teams or budgets — CoreMedia is enterprise software engineered for enterprise operational scale. A five-person marketing team with a single-country website is overbuying by an order of magnitude.
  • Teams without Java expertise — The development stack requires Java 21 (CMCC 13), Maven, Spring Boot, and Docker/Kubernetes. This is not a platform you can hand to a WordPress or Drupal developer without significant retraining.
  • Staying in .NET — Optimizely offers a more direct upgrade path from Ektron. The Siteport tool (Optimizely's documented migration utility) handles Ektron content export, field mapping, and import into Optimizely CMS 12, significantly reducing migration engineering effort compared to a cross-platform migration. If your team, infrastructure, and vendors are .NET-native, this path deserves serious evaluation before committing to a Java platform.
  • Low change-rate sites near retirement — If there is no headless or multi-channel roadmap and publishing frequency is low, a hardening and security-compensation program on the existing Ektron estate may deliver better ROI over a 2–3 year horizon than a full migration.

Platform Selection Decision Matrix

Requirement CoreMedia Optimizely Other
Multi-market, multi-language at scale (50+ locales) ✅ Strong fit ✅ Good fit ⚠️ Varies
Staying in .NET ecosystem ❌ Java stack ✅ Natural upgrade path ⚠️ Varies
Headless/composable architecture ✅ Native hybrid headless ✅ Available ✅ Many options
Team size <10 editors ❌ Overbuilt ✅ Scalable ✅ Likely better
On-premises deployment required ✅ Supported ✅ Available ❌ Many SaaS-only
Commerce platform integrations (SAP, SFCC) ✅ Pre-built adapters ✅ Built-in ⚠️ Custom work
Budget under $100K/year total ❌ Unlikely to fit ⚠️ Possible ✅ Options exist
No dedicated Java developer ❌ Unsustainable ✅ .NET ✅ Varies

Migrating From Ektron to CoreMedia

An Ektron-to-CoreMedia migration is a content model transformation and integration rewrite — not a page-copy project. You are moving from an environment where content, presentation logic, and business rules are intertwined into a platform that requires strict separation of typed content from rendering.

Content Extraction

Ektron stores content in SQL Server using a proprietary schema. Three extraction approaches:

  1. Direct database access — Query SQL tables directly. Most complete, captures all content states and metadata. Requires schema knowledge. Recommended for bulk extraction.
  2. API-based extraction — Ektron Framework API. Works for structured content but is slow, prone to memory leaks, and frequently fails on datasets above 10,000 items.
  3. Crawling/scraping — Crawl the rendered site. Fastest to implement, but loses metadata, draft content, taxonomy references, and content relationships. Appropriate only for archival purposes.

Expanded SQL extraction query covering content, taxonomy, and assets:

-- Active content with taxonomy tags and folder path
SELECT 
    c.content_id,
    c.content_title,
    c.content_html,
    c.content_xml,          -- Smart Form structured content
    c.content_type_id,
    ct.content_type_name,
    c.folder_id,
    f.folder_name,
    f.folder_path,
    a.alias_name,           -- Friendly URL
    c.date_created,
    c.date_modified,
    c.content_language,     -- 1033 = en-US; see sys.syslanguages for others
    STRING_AGG(t.tag_name, '|') AS taxonomy_tags
FROM content c
JOIN folder f ON c.folder_id = f.folder_id
LEFT JOIN content_types ct ON c.content_type_id = ct.content_type_id
LEFT JOIN alias a ON c.content_id = a.target_id AND a.alias_type = 1
LEFT JOIN content_taxonomy cxt ON c.content_id = cxt.content_id
LEFT JOIN taxonomy t ON cxt.tag_id = t.tag_id
WHERE c.content_status = 'A'   -- 'A' = Active/Published; 'I' = In Progress
  AND c.is_deleted = 0
GROUP BY 
    c.content_id, c.content_title, c.content_html, c.content_xml,
    c.content_type_id, ct.content_type_name, c.folder_id,
    f.folder_name, f.folder_path, a.alias_name,
    c.date_created, c.date_modified, c.content_language;
 
-- DMS assets (run separately)
SELECT 
    asset_id,
    asset_name,
    asset_filename,
    asset_mime_type,
    asset_path,
    folder_id,
    date_created
FROM asset_library
WHERE is_deleted = 0;
 
-- Multilingual content joins (for non-English language versions)
SELECT 
    c.content_id,
    c.content_language,
    lang.alias AS language_alias,
    c.content_title,
    c.content_html
FROM content c
JOIN master_language_list lang ON c.content_language = lang.lcid
WHERE c.content_status = 'A'
  AND c.is_deleted = 0
  AND c.content_language != 1033;  -- Exclude default English

Known extraction failure modes (by frequency in production migrations):

Failure Mode Cause Remediation
Encoding errors (smart quotes, em dashes) Ektron stored Windows-1252 encoded content in SQL Server columns collated as Latin1_General_CI_AS Force UTF-8 conversion during extraction; validate with regex for non-ASCII characters
Orphaned assets Assets deleted from DMS but still referenced in content_html via /assets/ paths Audit asset_library against image src attributes in content_html; flag missing binaries before migration
Circular folder references Corrupt folder path entries in rare cases of failed folder moves Run recursive CTE against folder table to detect cycles before building folder tree
Broken taxonomy references content_taxonomy rows referencing deleted taxonomy terms Left join and null-check tag_name; quarantine affected content for manual review
Duplicate aliases Multiple content items sharing the same alias_name due to manual URL overrides Deduplicate with ROW_NUMBER() partitioned by alias_name; flag conflicts for editorial review
Empty Smart Form XML content_xml column is null for Smart Form content that was saved as draft without valid schema data Join content_types to identify affected type; extract from content_html fallback if available

Untangling the HTML Blob

In Ektron, a WYSIWYG page may contain HTML with inline styles, embedded <img> tags pointing to /assets/ or /uploadedImages/ directories, Ektron Quicklink href values (/?id=12345), and Ektron-specific shortcodes. CoreMedia requires this content broken into discrete typed components and expressed as valid CoreMedia Richtext XML.

HTML-to-Richtext transformation pipeline (Node.js/Cheerio):

const cheerio = require('cheerio');
 
function transformToCorMediaRichtext(ektronHtml) {
  const $ = cheerio.load(ektronHtml, { xmlMode: false });
  
  // Strip inline styles (CoreMedia Richtext disallows style attributes)
  $('[style]').removeAttr('style');
  
  // Strip class attributes not in CoreMedia Richtext whitelist
  $('[class]').removeAttr('class');
  
  // Rewrite Ektron Quicklinks to CoreMedia internal link format
  $('a[href*="?id="]').each((i, el) => {
    const href = $(el).attr('href');
    const ektronId = new URLSearchParams(href.split('?')[1]).get('id');
    const coreMediaId = idMap[ektronId]; // pre-built lookup map
    if (coreMediaId) {
      $(el).attr('xlink:href', `coremedia:///cap/content/${coreMediaId}`);
      $(el).attr('xlink:actuate', 'onRequest');
      $(el).attr('xlink:show', 'replace');
      $(el).removeAttr('href');
    } else {
      // Log unmapped Quicklinks for manual resolution
      console.warn(`Unmapped Ektron ID: ${ektronId}`);
    }
  });
  
  // Extract image references for separate asset ingestion queue
  const imageRefs = [];
  $('img').each((i, el) => {
    const src = $(el).attr('src');
    if (src && (src.includes('/assets/') || src.includes('/uploadedImages/'))) {
      imageRefs.push(src);
    }
  });
 
  return {
    richtext: `<div xmlns="http://www.coremedia.com/2003/richtext-1.0" xmlns:xlink="http://www.w3.org/1999/xlink">${$.html('body > *')}</div>`,
    imageRefs
  };
}

After transformation, validate the output against the CoreMedia Richtext 1.0 DTD before attempting ingestion. Content that fails DTD validation will be rejected by the Content Server with an HTTP 400 error. Catching this in the pipeline rather than during ingestion reduces turnaround time significantly.

Ektron internal links use Quicklink format: <a href="/?id=12345">. These break entirely in CoreMedia.

Required ETL step: build a complete ID mapping table before any content transformation:

-- Build Ektron ID → alias lookup for redirect and link mapping
SELECT 
    c.content_id,
    a.alias_name,
    c.content_title
FROM content c
LEFT JOIN alias a ON c.content_id = a.target_id AND a.alias_type = 1
WHERE c.content_status = 'A'
  AND c.is_deleted = 0;

Store the resulting map as {ektronId: coreMediaContentId} and use it during HTML transformation (see pipeline above). Any Ektron ID without a corresponding CoreMedia ID after migration is a broken link — resolve before launch, not after. Build a full redirect map from all historical Ektron aliases to new CoreMedia URLs and validate it against crawl data and server access logs.

Content Modeling: Smart Forms to CoreMedia Document Types

Do not map ASPX pages one-to-one into CoreMedia. Ektron pages blend reusable content, widget configuration, PageBuilder composition, display logic, and search decoration. These must be separated before mapping.

Smart Forms represent the most structured Ektron content and map most directly to CoreMedia document types. Field mapping requires understanding both the Ektron XML schema and the CoreMedia property types:

Ektron Smart Form schema (sample XML):

<PressRelease>
  <Headline>Sample Press Release Headline</Headline>
  <Summary>Brief summary text</Summary>
  <Body><![CDATA[<p>Full HTML body content.</p>]]></Body>
  <HeroImage>/assets/images/hero.jpg</HeroImage>
  <PublishDate>2024-06-01</PublishDate>
  <RelatedLinks>
    <Link id="5678">Related Article</Link>
  </RelatedLinks>
</PressRelease>

Corresponding CoreMedia document type definition and field mapping:

# Field mapping specification (used to drive ETL transformation)
ektronSmartForm: PressRelease
coreMediaDocumentType: Article
fieldMap:
  Headline:       { property: title,                    type: String,   maxLength: 256 }
  Summary:        { property: teaserText,               type: String,   maxLength: 512 }
  Body:           { property: detailText,               type: Richtext, transform: htmlToRichtext }
  HeroImage:      { property: picture,                  type: Link,     linkType: CMPicture, resolveAsset: true }
  PublishDate:    { property: externallyDisplayedDate,  type: Date,     format: ISO8601 }
  RelatedLinks:   { property: related,                  type: LinkList, linkType: CMLinkable, resolveId: true }
presentationOnly:
  - ASPX template selection rules
  - PageBuilder widget layout settings
  - EkML output formatting instructions
  - Search boost and weighting rules
edgeCases:
  - Body CDATA must be extracted and transformed through htmlToRichtext pipeline
  - HeroImage path must be resolved to CoreMedia asset Content ID post-ingestion
  - RelatedLinks @id attributes are Ektron content IDs; map via ID lookup table

Smart Form search indexing edge cases to audit before migration:

  • Fields stored as XML attributes (e.g., <Link id="5678">) are not indexed by Ektron's search — verify which fields authors rely on for search and confirm they will be indexed in CoreMedia's Solr configuration.
  • Multi-entry calendar Smart Forms are entirely excluded from Ektron search — inventory these and confirm indexing behavior in the CoreMedia target.
Info

Taxonomy Migration: Ektron's taxonomy lives in the taxonomy table with hierarchical term relationships. CoreMedia uses a distinct taxonomy management system under /Settings/Taxonomies/. Reconstruct the full taxonomy tree in CoreMedia before migrating any content that references these terms — content ingested before its taxonomy tags exist will fail link validation.

Choosing the CoreMedia Import Path

Import Method When to Use Constraints
Ingest Service CoreMedia Cloud; API-first bulk operations 30-second gateway timeout; cloud-only
serverimport CLI On-premises or private cloud Requires direct server access; sequential processing
Custom UAPI client Complex transformation logic; conditional import Highest flexibility; highest development cost

Ingestion sequence (order is mandatory):

  1. Upload assets — Images, PDFs, documents. Capture returned CoreMedia Content IDs and store in asset map.
  2. Build taxonomy hierarchy — Create all taxonomy terms and parent/child relationships before any content that references them.
  3. Build folder tree — Recreate site structure matching the target URL hierarchy.
  4. Ingest content — Push transformed payloads with Richtext bodies validated against the DTD. Reference assets via Content ID from step 1.
  5. Establish content relationships — Link related content items, commerce references, and cross-content links using the ID map.
  6. Configure preview, search, and workflow — GraphQL preview endpoints, Solr indexing pipeline, localization workflows, and commerce integrations require explicit configuration. They do not activate automatically upon content arrival.

CoreMedia's documented Phoenix Contact migration involved 170,000 assets migrated using the Ingest Service with custom middleware — demonstrating that large-scale ingestion is feasible when the pipeline is engineered with chunking, idempotency, and retry logic from the start. (coremedia.com)

CoreMedia Solr Configuration vs. Ektron Search: Key Differences

Ektron's search behavior was shaped by its Windows-based Solr integration with several documented quirks (16MB PDF limit, attribute-stored field exclusion). CoreMedia's Solr integration is configured via feeder components and requires explicit schema decisions:

  • CoreMedia's Solr schema is managed through feeder configuration rather than Solr's native schema.xml directly — modifications go through CoreMedia's search configuration layer.
  • Multilingual content requires language-specific Solr cores or field analyzers — plan this before ingesting multilingual content or the search index will apply wrong tokenization.
  • Commerce content indexing (product data, category pages) requires the Commerce Hub feeder, separate from the standard content feeder.

Multilingual Ektron Estates

Ektron multilingual content is stored in the content table with content_language set to the Windows LCID (1033 = en-US, 1031 = de-DE, 1036 = fr-FR, etc.). Each language version is a separate row linked to the master content item via master_id (where master_id = content_id for the master language and master_id points to the master for translated versions).

CoreMedia handles localization through a derived content model — localized versions are "derived" from a master content item and inherit unmodified properties. Migration mapping:

  1. Extract master language content items first.
  2. Ingest masters; capture returned CoreMedia Content IDs.
  3. For each non-master language row in Ektron, create a CoreMedia derived content item linked to the master's Content ID.
  4. Validate workflow and localization behavior against a representative sample before bulk ingestion.

Multilingual validation errors compound rapidly — a content model mistake discovered after 5,000 multilingual items are ingested creates rework across all language variants.

Rehearse Cutover

Run complete dry imports against a staging CoreMedia environment. Validate: URL mapping, title and metadata accuracy, binary asset completeness, taxonomy tag association, redirect coverage, and Solr search result accuracy. Freeze authoring for a defined delta window. Run the delta load. Measure delta load duration against your cutover window. Repeat until the timing is predictable.

Treat the first two dry runs as discovery — expect to find encoding issues, unmapped IDs, and taxonomy gaps you did not anticipate.


Realistic Migration Timeline

Based on Ektron content structure complexity and typical enterprise constraints. These represent ranges observed in production migrations of 5,000–100,000 content items; outliers exist in both directions.

Phase Duration Key Risk
Discovery and content audit 2–4 weeks Undocumented Smart Form variants; hidden business logic in templates
Content modeling and field mapping 2–3 weeks CoreMedia document type decisions are hard to reverse post-ingestion
Extraction scripting and failure mode handling 2–4 weeks Encoding errors, orphaned assets, circular references
CoreMedia platform setup and configuration 2–6 weeks Java skills gap; Docker/Kubernetes environment setup
Database migration (if moving away from SQL Server) 2–4 weeks Required for CMCC 13; parallel workstream
Content transformation and validation pipeline 2–4 weeks Richtext DTD compliance; ID mapping completeness
Content migration execution (dry runs + final) 2–4 weeks Ingestion throughput; retry handling; delta load timing
Frontend rebuild (headless or CAE-based) 4–12 weeks Longer with headless: Java CAE work + GraphQL schema + React/Vue frontend
QA, redirect validation, search validation, UAT 2–4 weeks Search index accuracy; multilingual content validation
Total 3–7 months Parallel phases compress timeline; dependencies on client availability extend it

Critical path dependencies: content modeling must complete before extraction scripting begins; taxonomy hierarchy must be built in CoreMedia before content ingestion; asset ingestion must complete before content ingestion that references those assets.


Making the Right Call

Ektron's end-of-life status makes migration a question of timing, not if. CoreMedia is a strong target for large enterprises with multi-market operations, omnichannel delivery requirements, commerce integration needs, and the engineering capacity to sustain a Java-based platform. It is not the right choice for small teams, tight budgets, or organizations embedded in the Microsoft ecosystem — for those, Optimizely's Siteport-assisted upgrade path provides a materially lower-risk migration with less platform ramp-up.

The hardest part of this migration is not choosing a platform. It is mapping Ektron's mixed content-and-presentation model into a strictly typed target architecture without losing business behavior encoded in templates, widget logic, Smart Form schemas, and search configuration. Treat this as a data migration plus integration rewrite, and design your extraction and transformation pipeline to handle the failure modes documented above — not just the happy path.

That is the kind of work ClonePartner handles: inventory, schema mapping, extraction scripting, failure mode handling, and low-risk cutover. We build custom extraction pipelines that handle Ektron's specific quirks — Smart Forms, DMS metadata, taxonomy trees, multilingual joins, orphaned content — and transform that data into whatever target format your new platform requires.

Frequently Asked Questions

Is Ektron CMS still supported?
Ektron's active development ceased after its 2015 acquisition by Episerver (now Optimizely). The last version with modern Windows Server support is Ektron CMS 9.3, released in June 2018. No new features, major updates, or security patches are being developed. Optimizely encourages Ektron customers to migrate to their current platform.
What technology stack does CoreMedia use?
CoreMedia is Java-based. CMCC 12 requires Java 17; CMCC 13 requires Java 21. The build toolchain includes Maven, Node.js, and pnpm. It supports Docker and Kubernetes deployment and uses Apache Solr for search. CMCC 13 makes gRPC the default inter-component protocol, deprecating CORBA. Microsoft SQL Server support is removed in CMCC 13.
Can I migrate Ektron HTML directly into CoreMedia?
No. Ektron often stores content as unstructured HTML blobs with inline CSS, embedded images, and proprietary shortcodes. CoreMedia requires content modeled into discrete typed properties using its strict Richtext XML schema. All Ektron HTML must be parsed, cleaned, and transformed before ingestion.
How long does an Ektron to CoreMedia migration take?
A typical enterprise migration takes 3–6 months, covering discovery, content auditing, custom extraction scripting, content modeling, platform setup, frontend development, QA, and redirect validation. CoreMedia estimates approximately 6 weeks for platform configuration with dedicated support, but the full migration scope is significantly larger.
Can I keep SQL Server when moving from Ektron to CoreMedia?
Do not assume so. Ektron's setup is SQL Server-oriented, but the CoreMedia CMCC 13 upgrade guide states that Microsoft SQL Server support is completely removed. CMCC 12 supports multiple RDBMS options including MySQL, PostgreSQL, and Oracle.

More from our Blog

Desk365 to Jira Service Management Migration Guide
Jira Service Management/Migration Guide/Help Desk/Desk365

Desk365 to Jira Service Management Migration Guide

Technical guide to migrating tickets, contacts, and knowledge base data from Desk365 to Jira Service Management. Covers API extraction, field mapping, ADF conversion, and common failure modes.

Roopendra Talekar Roopendra Talekar · · 20 min read