OpenCart to Shopify Migration: A Practical Guide for Store Owners
An OpenCart to Shopify migration often looks small on paper. The admin shows a few hundred products and a tidy category tree. Underneath, there are usually extensions with their own database tables, OCMOD or vQmod changes to core files, product options that don't behave like Shopify variants, and a mix of SEO-friendly and index.php?route= URLs that search engines have indexed for years.
This guide covers how to move all of it to Shopify without losing sales, customer history or search traffic. It is written for store owners and ecommerce managers planning the switch.
Why merchants are leaving OpenCart now
OpenCart is free, light and flexible. The reasons people leave are rarely about features. They are about upkeep and momentum.
- Release activity is slow and split. At the time of writing, the latest OpenCart 4 release is 4.1.0.3 from March 2025. The 3.0 branch is still maintained alongside it, with 3.0.5.0 released mainly for PHP 8.4 compatibility. Many stores are still on 3.0, 2.x or even 1.5, and moving between major versions means rewriting extensions and themes.
- Extensions don't carry across versions. OpenCart 4 changed its extension structure, so most 3.0 extensions need replacing or rewriting to upgrade. For many merchants, that upgrade is a rebuild anyway.
- You own the whole stack. Hosting, PHP versions, security patches, backups and PCI scope all sit with you or your developer.
Shopify hands hosting, security, checkout and platform updates to the platform, so effort goes into selling rather than maintaining.
What moves and what doesn't
Most OpenCart data has a home in Shopify. The main difference to plan for is how products and options are modelled.
- Products: Move. Titles, descriptions, SKUs, model numbers, prices, weights and images all map directly.
- Options: Move, with reshaping. OpenCart options are independent: each option value can add or subtract price and hold its own quantity, but there are no combination-level SKUs. Shopify variants are combinations, with up to three options and up to 2,048 variants per product. Select and radio options usually become variants; checkbox, text, textarea, file, date and time options become line item properties through an app or theme code.
- Attributes: Move, as metafields, and can power filters and spec tables.
- Categories: Move, as collections. Shopify collections are flat, so subcategories are rebuilt with menus.
- Manufacturers: Move, as Shopify's vendor field plus a collection per brand if you want brand pages.
- Customers and addresses: Move. Customer groups become customer tags, or B2B companies on Shopify Plus.
- Customer passwords: Don't move. They are one-way hashes that Shopify can't import. Customers activate their Shopify account or sign in with a one-time email code.
- Order history: Moves, via an import tool or the API, as historical orders. Shopify's native CSV import handles products and customers only.
- Information pages: Move, as Shopify pages.
- Reviews: Move, through a reviews app that accepts a CSV import.
- Coupons, specials and discounts: Rebuilt as Shopify discount codes and automatic discounts.
- Gift vouchers and reward points: Need a plan. Decide how outstanding balances will be honoured before cutover.
- Downloadable products and recurring profiles: Rebuilt with a digital downloads app and a subscriptions app.
- Extension tables: Move only if the replacement app supports an import.
Pre-migration checklist
- Confirm your exact OpenCart version. Database structure and URLs differ between 1.5, 2.x, 3.0 and 4.x.
- List every extension and modification. Check Extensions > Extensions and Extensions > Modifications, plus any vQmod folder. Mark each as replace, drop or rebuild.
- Check whether SEO URLs are switched on under System > Settings > your store > Server. This decides what your redirect map looks like.
- Count your data: products, option values, customers, orders, languages and stores.
- Take a full database backup from System > Maintenance > Backup/Restore, or directly from the server.
- Crawl the live site with a tool such as Screaming Frog, including parameter URLs.
- Export 12 months of landing page data from Google Search Console and Google Analytics.
- Document integrations and payment gateways, and who owns each one.
- Agree a content freeze window for the final sync.
Step-by-step OpenCart to Shopify migration
1. Extract the data
OpenCart has no full built-in product export, so extraction usually takes one of three routes:
- A migration app or service such as Cart2Cart or LitExtension. These connect to OpenCart, usually through a small connector file uploaded to your server, and copy products, customers, orders and other common records into Shopify. For a simple catalogue, this is quick and cost-effective.
- An export extension that writes products and options to a spreadsheet.
- Direct database queries against tables such as product, product_option_value, product_attribute, customer and order. This is the most reliable route for stores with heavy customisation or extension-owned data.
2. Map and transform
Build a mapping sheet for every field. The decisions that matter most:
- Option combinations. Work out which option values genuinely sell together, then generate the combinations that should exist as variants. Price modifiers become variant prices, and per-option stock becomes per-variant stock, which may need a manual stock count to get right.
- Tax. OpenCart prices are entered before tax and tax classes apply on top. Decide whether Shopify prices will include tax and convert where needed.
- Handles. Reuse your OpenCart SEO keywords as Shopify handles where you can. It keeps URLs recognisable and makes redirect mapping easier to check.
3. Import in rehearsal
Import to a development store first. Matrixify is the common tool for spreadsheet imports of products, customers, historical orders, metafields and redirects. Compare record counts, then spot-check 20 to 30 products with options, a sample of customers and a sample of orders.
Switch off notifications and inventory changes for historical orders. Our JellyBean Tanning migration write-up explains how we keep repeat imports from creating duplicates.
4. Build the store and replace extensions
Build the theme, menus, shipping, taxes and payments, and install the apps that replace your extensions.
5. Final sync and cutover
Freeze edits, import new customers and orders since the rehearsal, upload redirects, then update DNS. Keep a private copy of OpenCart for reference.
SEO: mapping OpenCart URLs to Shopify with 301 redirects
OpenCart URLs vary more than most platforms, because they depend on your version and whether SEO URLs are on. Shopify uses fixed paths: /products/, /collections/, /pages/ and /blogs/.
Know your OpenCart URL patterns
SEO URLs off (any version): everything runs through index.php with query strings, for example:
- /index.php?route=product/product&product_id=42
- /index.php?route=product/category&path=20_27
- /index.php?route=information/information&information_id=4
OpenCart 3.0 with SEO URLs on: each product, category, manufacturer and information page has a flat keyword, for example /macbook, /desktops/mac or /about_us. Products opened from a category often appear with the category path in front, such as /desktops/mac/macbook, so one product can be indexed at several URLs.
OpenCart 4 with SEO URLs on: the default install adds the language code and a route keyword to the path, for example /en-gb/product/macbook, /en-gb/catalog/desktops/mac and /en-gb/information/about-us.
Your keywords may have been edited or generated by an SEO extension, so always work from a crawl and your seo_url table rather than from the defaults.
Build the redirect map
- Export every indexable URL from the crawl, plus any URL with traffic or backlinks in Search Console.
- Join each URL to its record using the seo_url table (keyword to product_id, category_id, manufacturer_id or information_id) or the ID in the query string.
- Map products to /products/<handle>, categories to /collections/<handle>, information pages to /pages/<handle> and manufacturers to brand collections.
- Include category-path product URLs and language-prefixed URLs.
- Import the redirects as a CSV under Content > Menus > URL redirects.
Shopify only redirects URLs that would otherwise return a 404, and allows up to 100,000 redirects per store (20 million on Shopify Plus). Shopify also warns that URLs with query strings might not work as expected with its redirects. If your old store used index.php?route= URLs, test a sample of those redirects on the new store before launch. Where native redirects don't match them, a redirect app that matches on query parameters is the usual fix.
After launch
Submit the new sitemap, re-crawl the old URL list to confirm each returns a 301 to a live page, and watch Search Console's page indexing report for several weeks.
Apps and integrations that replace OpenCart extensions
- Quick or one-page checkout extensions: Not needed. Shopify's checkout is already one page.
- Filters and layered navigation: Shopify's free Search & Discovery app.
- Product option extensions: A product options app for text, file and checkbox inputs.
- Reviews: Judge.me or Okendo, with CSV import.
- Reward points: Smile or LoyaltyLion.
- Gift vouchers: Shopify's native gift cards.
- Email marketing: Klaviyo or Shopify Email.
- Multi-language and multi-store: Shopify Markets with the Translate & Adapt app, or expansion stores on Shopify Plus.
- Downloads and recurring billing: Shopify's Digital Downloads app and Shopify Subscriptions.
- B2B customer groups: Shopify's B2B features, most complete on Shopify Plus.
Check every app's import options before committing, so reviews, points and subscriber data can come across.
Timeline and team
An OpenCart to Shopify migration typically takes four to six weeks, depending on catalogue size, integrations and design scope. Older versions, heavy modifications, multiple stores or languages and ERP integrations can extend it.
- Week 1: Discovery. Version, extensions, modifications, data volumes, URLs and integrations.
- Weeks 2 to 3: Option mapping, rehearsal imports and theme build.
- Weeks 3 to 5: Apps, integrations, redirect map and testing.
- Week 5 or 6: Final sync, cutover and monitoring.
You need a decision-maker, a catalogue owner who can check variants and stock, and whoever manages your integrations. The delivery team needs Shopify development, data migration and SEO ownership.
321+
Shopify stores launched since 2018.
$243M+
GMV across client stores.
5.0
Average rating from 159 reviews.
Common OpenCart migration mistakes
- Treating options as variants one to one. Independent options can explode into hundreds of combinations or exceed three options.
- Losing per-option stock because nobody checked how it maps to variants.
- Forgetting `index.php?route=` URLs, which often still hold backlinks even after SEO URLs were switched on.
- Ignoring category-path and language-prefixed duplicates in the redirect map.
- Leaving notifications on during the order import.
- Forgetting outstanding gift vouchers and reward points.
- Rebuilding every modification instead of asking whether it is still needed.
OpenCart to Shopify migration FAQ
Yes. Older versions use different database structures, so extraction needs to match the version you actually run, but the data can still move.
Yes. Passwords can't be transferred because they are stored as one-way hashes. Customers activate their Shopify account or sign in with a one-time code.
Yes. Historical orders can be imported with Matrixify or through the Shopify API.
With every indexable URL redirected to a relevant Shopify page and metadata carried over, rankings usually settle after some short-term movement.
Yes. Shopify is built and tested separately, and only a short content freeze is needed before the final sync.
- Pre-Migration Checklist
- 301 Redirect Mapping
- OpenCart Extension Replacements










