← Library

Loja Integrada to Shopify without going dark: catalog, 301s and DNS

How to migrate Loja Integrada to Shopify: export the XLSX, convert it to Shopify CSV, map 301s in the admin and point DNS without taking the store down.

E-commerce and ShopifySeptember 16, 202611 min read

The Short Answer (BLUF)

Migrating from Loja Integrada to Shopify is not "export and hope for the best". Loja Integrada (LI) hands over your data as an XLSX spreadsheet through Visão de Negócios > Relatórios (Business Overview > Reports). The Exportar produtos (Export products) report is available on the free plan. The Lista de URLs de produtos (Product URL list), the one that matters for Google, is a paid-plan report. Each spreadsheet is capped at 100,000 rows (export help).

LI's native 301 does not solve a platform switch. It only redirects products within the same domain. It does not cover categories, content pages or another host (LI 301). Anyone who points the domain to Shopify without a URL map in the Shopify admin scatters 404s across Google and old ads.

Shopify, on the other side, has a canonical product URL at /products/{handle} (product object in Liquid), a CSV with its own columns (CSV guide) and 301s under Content > Menus > URL redirects, with bulk import (redirects).

The method that reduces downtime: build and test the store on *.myshopify.com, import the catalog, validate checkout and ERP, upload the 301s, and only then point the DNS. Shopify's TLS certificate can take up to 48 hours (domain connection, TLS). That is not "zero minutes offline". It is a controlled window, with LI still running until the smoke clears.

If you are still deciding between "Tray or Shopify" or "Woo or Shopify", the live articles are Tray vs Shopify and WooCommerce and risk. This one assumes the destination is already Shopify.

Your store's brief goes through oailton.dev/en/contato.


The typical scene: the store on LI "works", the theme no longer fits the brief, checkout has too many steps on mobile, the ERP is already Bling or Tiny, and someone promises "we migrate on Friday and on Monday you are selling on Shopify".

On Friday the catalog goes up with duplicated variants. On Monday the domain is pointed. On Tuesday Search Console fills up with 404s. On Wednesday PIX (Brazil's instant payment) works in the myshopify.com test and fails on the real domain because SSL is still pending.

The checklist below is the order that avoids that sequence. It is not "one-click migration" marketing.


1. Audit at the source: what you actually have

Before creating the Shopify store, pull from LI what the platform documents, not what the agency "thinks it exports".

According to the export help:

  1. Visão de Negócios > Relatórios > Exportar produtos (Business Overview > Reports > Export products). Full base, no date filter, free plan. The file arrives by email and in the Notification Center.
  2. Lista de URLs de produtos (Product URL list), if you are on a paid plan. It is the list of public URLs, not a guess at slugs.
  3. Exportar todos os clientes (Export all customers) and Relatório de pedidos (Orders report), on the free plan.

What this does not do:

  • it does not generate a CSV in Shopify format
  • it does not map variants into the Option1 Name / Option1 Value model
  • it does not create 301s on the new domain

The product API makes the contract explicit: nome, apelido, sku, gtin, descricao_completa, url. The official url example is https://loja-exemplo.lojaintegrada.com.br/produto/{apelido}.html. The URL help page describes something else in day-to-day admin use: you edit the part after the slash, lowercase, with hyphens. Some stores live at /produto/slug.html and others at /slug. Do not assume a pattern. Use the URL list, the sitemap or Search Console.

Clean up before exporting (in LI, not afterwards):

  • deactivate test products, dead bundles and ghost SKUs
  • one SKU per real variant; a repeated SKU breaks the ERP on the destination
  • an image that returns 404 at the source will return 404 on Shopify
  • open orders stay in LI until they are invoiced; do not "migrate an order mid-flow"

Customers and historical orders: export them to a file and, if the ERP is already the operational source, treat the ERP as canonical. The new Shopify store does not need to be born with five years of orders to sell tomorrow.


2. Catalog: LI's XLSX becomes Shopify's CSV

Shopify does not read LI's spreadsheet. The official CSV guide is strict: headers with exact names, case-sensitive. To create a product, the minimum column is Title. If there are variants, Handle comes along. To update later, Handle and Title.

The mapping I use at the desk (LI → Shopify):

Source (LI / API) Destination (Shopify CSV)
apelido (slug) Handle
nome Title
descricao_completa Body (HTML)
option grid (color, size) Option1 Name / Option1 Value (and Option2, Option3)
sale price Variant Price
"was" price Variant Compare-at Price
variant stock Variant Inventory Qty
sku Variant SKU
gtin Variant Barcode
image URL Image Src

Rules that break the import if you invent a shortcut:

  • the same Handle groups the variant rows; a different handle creates a new product
  • a product without options uses Option1 Name = Title and Option1 Value = Default Title (this is Shopify's standard, not a whim)
  • changing Option1 Value later recreates the variant ID and can disconnect apps and ERPs that depend on that ID (CSV guide)
  • a wrong header (compare at price instead of Variant Compare-at Price) makes the import reject the file

Test order:

  1. Five products: simple, with 2 options, with image, with compare-at, with SKU/GTIN.
  2. Import without "overwrite".
  3. Open each variant in the theme, on mobile.
  4. Only then the full catalog.

Theme, collections and menus come after the catalog is stable. Importing 2,000 SKUs on top of badly built collections is rework, not speed.


3. URLs: the 301 that matters is Shopify's

On Shopify the canonical product is /products/{handle} (Liquid product.url). A collection is /collections/{handle}. A page is /pages/{handle}. The prefix cannot be changed.

On LI, the old path is the one Google has already indexed. It may be /vestido-floral, /produto/vestido-floral.html or both over the years. LI's 301 help is clear about the limit: its 301 does not cross domains. Once the A record points to Shopify, that source 301 stops responding. The one that has to catch the old click is the Shopify admin.

How to build the map:

  1. Source of old URLs: the paid Lista de URLs (URL list) report, the LI sitemap, or Search Console coverage (indexed pages).
  2. Source of new URLs: the CSV Handle, always prefixed with /products/.
  3. One row per relative path. A realistic example:
    • From: /produto/vestido-floral.html
    • To: /products/vestido-floral
    • From: /vestido-floral
    • To: /products/vestido-floral
  4. Repeat for categories (/categoria/... → /collections/...) and pages (/sobre → /pages/sobre). LI does not 301 categories; you need these rows.

In the Shopify admin: Content > Menus > URL redirects > Import (documentation). A CSV with the columns from the official template (Redirect from, Redirect to). Test 20 rows with curl -I on *.myshopify.com before DNS. If the 301 does not fire on the Shopify subdomain, it will not fire on the brand domain.

Home page, policies and the old blog: if they have indexed URLs, they go into the same CSV. No row means 404. And with 404s on day 1, organic traffic does not "adapt on its own".

Do not promise "100% of SEO preserved". What you deliver is a 1:1 map of the URLs you listed, served as 301s. Google reprocesses on its own schedule.


4. Destination: payment, shipping and ERP before the domain

The store on *.myshopify.com has to actually sell before the cutover. A nice domain on top of a broken PIX is a commercial blackout, not a DNS one.

Minimum checklist on the destination:

  • a Brazilian payment gateway installed and a paid test order (PIX and card), not just sandbox
  • CPF/CNPJ (Brazilian individual and company tax IDs) in the native checkout and mapped in the ERP
  • shipping quotes with a real CEP (postal code), box dimensions and the free-shipping rule
  • Bling or Tiny reading the same SKU as the spreadsheet; the Bling help on Shopify orders requires the same SKU to recognize the product
  • Shopify transactional email with an authenticated sender (the company's mail MX is not wiped when you change the site's A record)
  • pixel and conversions tested on the myshopify.com domain; on the final domain you check again after SSL

An external checkout (taking the customer out of Shopify for "transparency") is the shortcut I see most in rushed migrations. It swaps one field problem for another: ad events, third-party uptime and, in many cases, conflict with the native checkout. If the store's thesis is Shopify, checkout stays on Shopify.


5. DNS: LI stays live until the cutover

The official setup for a third-party domain (manual):

  1. In Settings > Domains > Connect existing domain, add the root domain (without www).
  2. In the registrar's DNS (Registro.br, Cloudflare in DNS only mode, or whichever provider you use):
    • A @ → 23.227.38.65
    • AAAA @ → 2620:0127:f00f:5::
    • CNAME www → shops.myshopify.com.
  3. One A and one AAAA. A leftover LI A record splits the traffic: sometimes it lands on Shopify, sometimes on LI.
  4. Do not turn on the proxy (orange cloud) in Cloudflare for this host. The troubleshooting page lists Cloudflare proxy as a cause of failure.
  5. Do not touch MX, SPF or DKIM. Website and email are different records.

The TLS certificate is issued after the DNS points. Shopify documents up to 48 hours (TLS). During "SSL pending", some customers see a certificate warning. That is a window, not "instant".

How to shorten the window without lying:

  • lower the A/AAAA TTL a few days before (300 to 600 s, if the registrar allows it)
  • cut over at a low-order hour, not during an ads push
  • keep LI paid and live until the domain serves stable HTTPS and the test order over 4G goes through
  • if the cutover fails, the rollback is putting LI's A record back. That is why the old IP must be written down before you delete it

"Zero minutes offline" is not what Shopify's documentation guarantees. What the method guarantees is: the new store was already selling on the subdomain; DNS is the last step; the rollback exists.


6. The 24 hours after pointing the domain

When the Shopify admin shows the domain as connected and the padlock is valid:

  1. A real order on mobile, over 4G, with PIX and card.
  2. Check the NF (Brazilian invoice) in the ERP with the same SKU and the same tax ID used at checkout.
  3. Sample 15 old URLs from Search Console: each must 301 to the new path, with no chain (A→B→C).
  4. Home page, main collection and 5 product pages in PageSpeed and on the phone itself, not just on the office Wi-Fi.
  5. Submit the Shopify sitemap in Search Console. LI disappears from DNS; Google still has the old list.

Do not cancel LI on the same day. Cancel it when organic and ads have had a week of clean 301s and zero orphan orders at the source.


7. When this migration is not worth it yet

Stay on LI if your own site is a storefront and sales live on marketplaces, if the catalog is small and the current theme covers the brief, and if nobody on the team will operate Liquid, apps and ERP on Shopify.

Move to Shopify if the brand brief has outgrown the theme, if checkout and pixel need control, if operations already depend on Bling/Tiny with serious SKUs, and if you accept paying for the DNS window with method, not with a slogan.

The comparison of technical ceilings against another Brazilian platform is in Tray vs Shopify. The plugin risk discussion is in the WooCommerce article.


Frequently asked questions

Does Loja Integrada redirect to Shopify on its own?

No. Its 301 covers products on the same domain (301 help). After DNS, Shopify is the one answering. The map goes up in Content > Menus > URL redirects.

Can I get downtime down to zero?

No. You can keep Shopify selling on myshopify.com and cut DNS over with a low TTL. TLS can still take up to 48 hours (domain manual).

Do I need to migrate all old orders?

Not for the store to sell. Open orders close on LI. History lives in the ERP or in the export. Migrating orders mid-flow is the easiest way to duplicate stock.

Does the LI spreadsheet work on Shopify as is?

No. LI exports XLSX in its own model (reports). Shopify requires its own CSV (guide).


Conclusion

The migration that does not take the store down is prosaic: export what LI actually exports, translate it into Shopify's CSV, list the real old URLs, 301s in the new admin, payment and ERP tested on the subdomain, DNS last, LI alive until HTTPS and the 301s pass on mobile.

What breaks is reversing that order: pointing the domain with a half-imported catalog, or relying on the source's 301 after the A record has already moved.

If you want the map for your store (a sample of 20 URLs, a sample of 5 products with variants and the DNS step at your registrar), open oailton.dev/en/contato with your current URL, your LI plan and your ERP.

Sources

  1. 01Product, customer and order exports come from Visão de Negócios > Relatórios (Business Overview > Reports); Export products is on the free plan; Product URL list is a paid-plan report; limit of 100,000 rows per spreadsheet Loja Integrada Help
  2. 02The Loja Integrada API returns url in the /produto/{apelido}.html pattern and the fields apelido, sku, gtin, descricao_completa Loja Integrada API (product documentation)
  3. 03The product URL on Loja Integrada is the part after the slash, lowercase, hyphen-separated, with no spaces or accents Loja Integrada Help
  4. 04Loja Integrada's native 301 only works for products on the same domain; it does not redirect categories or content pages and does not cross domains Loja Integrada Help
  5. 05Shopify product CSV: Title is the minimum column to create a product; Handle is required if there are variants; variant columns use Option1 Name/Value, Variant SKU, Variant Price, Variant Compare-at Price, Variant Barcode Shopify Help Center
  6. 06product.url in Liquid is /products/{handle} Shopify.dev (product object)
  7. 07URL redirects live in Content > Menus > URL redirects, with CSV import Shopify Help Center
  8. 08Third-party domain: A 23.227.38.65, AAAA 2620:0127:f00f:5::, CNAME www to shops.myshopify.com.; one A and one AAAA; the TLS certificate can take up to 48 hours Shopify Help Center
  9. 09TLS/SSL is issued for free when the domain is connected; up to 48 hours for the certificate Shopify Help Center
  10. 10Cloudflare proxy on the store domain's DNS is on the official list of causes of connection failure Shopify Help Center

Ailton Carvalho

I build custom web systems, internal tools, integrations and stores that sell on mobile. You get working code and someone accountable after launch.

Talk on WhatsApp

Related