Migrating OpenCart 3 to 4: transferring data, templates, and extensions

Moving to a new version of the platform is scary due to possible loss of orders, search positions, and familiar store logic. We transfer the catalog, orders, templates, and extensions on a turnkey basis: first an inventory and plan, then a phased transfer with testing on a copy. The store stays up, and updates stop being a risk.

Development and maintenance of all types of websites:

Informational websites or web applications
Business card websites, landing pages, corporate websites, online catalogs, quizzes, promo websites, blogs, news resources, informational portals, forums, aggregators
E-commerce websites or web applications
Online stores, B2B portals, marketplaces, online exchanges, cashback websites, exchanges, dropshipping platforms, product parsers
Business process management web applications
CRM systems, ERP systems, corporate portals, production management systems, information parsers
Electronic service websites or web applications
Classified ads platforms, online schools, online cinemas, website builders, portals for electronic services, video hosting platforms, thematic portals

These are just some of the technical types of websites we work with, and each of them can have its own specific features and functionality, as well as be customized to meet the specific needs and goals of the client.

Frequently Asked Questions

Migrating OpenCart 3 to 4: what breaks during the move

The legacy branch stops receiving fixes — first compatibility, then security. The first to feel this is not the storefront but the infrastructure: hosting updates PHP, the core stops working with it, and payment and delivery modules drop off already at connection.

Migrating an online store at this point is not a reinstall but dependency mapping: what is tied to the old core, what is replaceable, and what will have to be carried over manually.

The template and extensions are the second layer of risk. A custom theme is built on modifiers that override core files: after the store engine is updated, the edits do not apply, and checkout falls apart step by step — cart, delivery calculation, payment confirmation.

The catalog is in the same boat: product queries without rebuilt indexes and cache return pages noticeably slower, especially under filters.

A separate mistake during store migration is making edits on the live database.

If you transfer products, orders, and attribute relationships on top of a running catalog, an unfinished operation leaves a desynchronization: stock levels do not match, order statuses are lost, and some URLs stop responding.

Search reads this as duplicates and broken links — rankings drop, and traffic takes months to return.

That is why migrating OpenCart 3 to 4 runs as a project: a dependency map and a full database copy are taken, data and theme are transferred to a staging environment, orders, stock levels, and URLs are reconciled, and only then is the switch made with redirects preserved. Let us break down how this is handled.

The effect of the move: catalog speed and predictable updates

Online store speed after the move is determined no longer by template customizations but by the core architecture. The catalog serves listings through a unified cache layer, and the cart calculates totals without repeated database queries on every page.

On a sample of several thousand items, product list response and cart recalculation are reduced severalfold and remain steady under load, not only on an empty test catalog.

Stability after an update is the second measurable effect. A fix is applied on top of the standard structure because appearance edits are moved into overrides rather than scattered across core files.

The share of changes that go through without manual template work grows from isolated cases to roughly eight out of ten — the rest is handled once and no longer repeats with every update.

Store extension support also works differently. Modules for the current branch connect through standard extension points and update together with the platform, not via patches on top of the code.

What previously required core intervention and was lost with every update now lives as a separate layer and transfers without loss.

Online store security deserves separate mention. After the move, an entire class of failures goes away: unpatched core files, custom inserts left from past customizations, and outdated modules with exposed entry points.

Security fixes are applied on the live catalog, without stopping sales and without deferring the task to the next major overhaul.

Migration options: data, clean installation, phased transition

The migration scheme is determined not by catalog size but by the share of non-standard code: modified templates, custom modules, integration with an accounting system.

In the fourth branch, the template mechanism changed, the modifier layer was reworked, and the structure of some catalog, order, and address tables changed — so “update files in place” works only on a nearly stock build.

We compare four working schemes — by labor costs, risk of order loss, and storefront downtime.

Option When it fits Limitations
In-place migration Store is nearly stock: minimal modules, simple theme Incompatible extensions remain non-working; rollback only from backup; downtime for the entire duration of work
Clean installation with data import Catalog and orders are needed, while theme and modules are being rewritten anyway Table and SEO URL mapping is required; module settings transfer manually
Phased migration by sections Sales cannot be stopped: first catalog, then checkout Some edits are done twice — in the old and new branch; calendar timeline is longer
Parallel storefront There is time and reason to rebuild catalog structure and template Dual support for two versions; transition-period orders must be transferred separately

We calculate the share of non-standard code, the number of active extensions, and page URL requirements — and propose a scheme with a data migration plan and rollback points.

Work order: from catalog inventory to handover

We start with an inventory of the catalog and extensions: we compile a list of modules, customizations, and template edits and mark for each whether there is a build for the current branch or whether the logic will have to be transferred manually.

In parallel, we take store backups — database, files, images, settings — and verify that the copy restores without errors. The output is a migration scheme: what moves as is and what is rewritten.

  1. Inventory and migration scheme. We reconcile product, order, customer, and relationship tables; we separately describe how page URLs migrate so that rankings retain accumulated transitions.
  2. Staging environment. We deploy a store copy on a separate environment with the same extensions and template — errors are visible before work on the production site.
  3. Migration and discrepancy debugging. We run the database and files, then analyze discrepancies: checkout, discounts, stock levels, manager permissions, filters, and search.
  4. Acceptance after migration on customer data. We go through buyer and administrator scenarios — registration, cart, payment, editing a product card; issues are closed before the switch.
  5. Production database migration. We perform it during a low-load window, immediately checking indexes, the URL map, and image availability; if there is a deviation, we return to the backup.
  6. Handover. We provide access, a structure description, an update regulation, and fresh backups — the store can be maintained without us.

Configurations, schemes, and regulations: what remains in the project

After migration, the store lives its own life, and everything that describes its structure should remain with you, not in correspondence with the contractor.

We hand over a package that lets another team develop the project, return to unchanged areas six months later, and investigate incidents without archaeology.

  • Working migration configurations: database connection parameters, a table and field mapping, the processing order for catalog, orders, and settings, and notes on which steps are idempotent and how to rerun without duplicates.
  • Store data schema: relationships of products, options, categories, customers, and orders after migration, including custom attributes and multilingual entities, with notes on which fields are left for compatibility with previous exports and reports.
  • Extension map: a list of modules with status — migrated unchanged, adapted to the current branch, replaced by a standard mechanism, or decommissioned, with the owner and rollback point.
  • Access and roles: a permission matrix for administrator, content manager, order operator, and contractor, a list of accounts and keys, and the procedure for revoking and regularly rotating them.
  • Update regulation: the sequence before and after installation — backup of database and files, staging check, deployment window, criteria for rolling back to the previous state.
  • Administrator guide: standard operations with products, rules and discounts, order and return processing, data export, actions in case of catalog or payment failure.
  • Migration log: volume of transferred records, reconciliation methods — item counts, order totals, image links — and a list of discrepancies with decisions for each.

We keep the package in the project repository and update it with every change: a schema and regulation that lag behind the code are more dangerous than their absence.

Case study: migrating a store while preserving rankings and orders

The client is a retail store with several thousand product items and an accumulated order database. The store ran on an old OpenCart branch: extensions stopped receiving security fixes, and updating checkout without modifying the core was impossible.

Before migration: 41 extensions and core edits

Inventory showed 41 extensions, of which 12 duplicated core functionality and 7 had no build for the current branch. The template was updated via core edits — any change had to be transferred manually and rechecked.

After migration: 29 extensions, 40 minutes of downtime

The catalog, attributes, customers, and order history were migrated with 100% preservation of order numbers and contents. URLs were moved to a new routing scheme with a redirect map — 98% of old URLs open without redirect chains.

Extensions were reduced to 29: nine were replaced with modules supporting the current branch, and the rest were transferred without core edits.

The storefront was down for 40 minutes — during that time orders were accepted by a stub page with cart preservation.

The URL map and migrated page titles held the search results: for tracked queries, rankings remained in the previous top ten, and the click-through drop did not exceed statistical error.

OpenCart update or clean installation: which to choose?

The fork is decided not by the age of the site but by the state of customizations. If the core is close to standard, extensions have builds for the current branch, and the theme relies on standard mechanisms — an OpenCart update preserves accumulated settings and takes less time.

If dozens of file edits lie on top of the core and the template is a custom build, the update turns into rewriting the entire stack on a live site.

During an update, we first transfer the table structure on a database copy, then analyze extension compatibility: for each module we check whether there is a build for the current branch, and disable those that modify the core directly.

Template migration is the most fragile stage here — old overrides are not supported, so the theme is transferred in parts, not as a whole.

A clean installation wins when there are more core edits than standard code: we deploy a fresh engine, transfer products, categories, orders, and customers with scripts, and rebuild the template and modules from scratch — without accumulated clutter and incompatible modifiers.

We transfer data with relationship validation: we reconcile record counts and the integrity of links “product — category — options — attributes — images,” preserve page URLs, and configure redirects so search rankings do not drop. We run everything on a database copy, not on the production site.

What to choose is decided after inventory: we calculate the share of core edits and reconcile the extension list with the new branch. This way both timeline estimates are honest rather than guesswork.

Technical doubts before store migration

Before store migration, the core structure changes, some modules become outdated, and it is important to understand in advance what exactly the new site will inherit. Below are answers to the technical questions that come up most often.

Will page URLs and search rankings be preserved?

Product and category URLs are transferred one-to-one, and a permanent redirect is set on old paths: the search engine passes page weight, so rankings do not drop. Utility URLs with extra parameters are closed with a canonical link so that duplicates do not appear in the index.

What should be done with extensions the author no longer supports?

First, a compatibility audit: some modules for the third branch do not work with the fourth and receive no updates.

We replace such modules with ones similar in logic or transfer their behavior into a custom module for the new architecture; extensions with a current version update as standard.

Will the checkout template have to be rebuilt from scratch?

The third-branch template relies on its markup system, so it is adapted: styles, blocks, and module zones are transferred, with output compared against the original. The cart appearance and logic are preserved; a from-scratch redesign is not required.

Are orders, customers, and purchase history transferred?

We transfer the entire dataset: customers, orders with statuses, delivery addresses, and notification settings. Links between a customer and their orders are preserved, so the account area and repeat checkout work immediately after the switch.

At what point should we switch to the new version?

After a full run on the copy: we reconcile catalog, prices, delivery calculation, payment, and checkout. Then we change the entry point, and keep the previous version in reserve during observation — rollback takes minutes.

Let us discuss the task and come back with an estimate and work plan

To come back with a store migration estimate rather than a range “from and to,” we need a working copy of the project.

Send a database dump, a list of installed extensions, a theme archive with customizations, and a short description of non-standard logic — delivery calculations, discounts, integration with an accounting system. This is enough to see the real scope rather than estimate a typical store from a template.

In response, you receive:

  • migration scheme: which tables and entities are transferred one-to-one, which are rebuilt for the new structure, and which remain untouched;
  • scope of migration work step by step — from deploying the copy to switching the domain and reopening the store;
  • extension audit with a verdict for each: transferred as is, adapted to the current branch, or replaced with a similar solution;
  • work plan with the order of stages and points where your confirmation is required so that we do not proceed on a disputed decision;
  • acceptance procedure: what checks products, categories, orders, image links, page URLs, and template appearance go through before the store opens;
  • rollback scheme — how to return to the previous version if acceptance reveals a data discrepancy;
  • post-migration support regulation: what is included in support and by what signs you will know the migration was completed correctly.

The format of the conversation is technical: we discuss the task based on your data, not general considerations. Describe the store and list what is critical to preserve — we will come back with an estimate, work plan, and stage timelines.

Our competencies:

Latest works

  • Development of a web application for FEEDME
    Development of a web application for FEEDME
    1393
  • Development of an online store for the company FURNORO
    Development of an online store for the company FURNORO
    1368
  • Development of a web application for Enviok
    Development of a web application for Enviok
    1139
  • CRM development for Chasseurs
    CRM development for Chasseurs
    1152
  • Website development for SBH Partners
    Website development for SBH Partners
    1231
  • Website development for Red Pear
    Website development for Red Pear
    641