Migrating an optical and eyewear store from WooCommerce to Shopify (2026)
How to migrate a glasses, sunglasses, or contact lens WooCommerce store to Shopify — lens prescription variants, frame metafields, virtual try-on integration, contact lens subscription setup, and optical retail Shopify configuration.
Optical and eyewear retail spans two very different customer journeys: fashion-forward sunglasses buyers choosing on style, and prescription eyewear customers who need to provide complex optical data with their order. Both require careful product data structuring in Shopify, and prescription ordering in particular requires a custom order flow that goes beyond standard Shopify product variants.
Eyewear product categories
- Prescription glasses: Single vision, bifocal, varifocal/progressive. Customers provide their prescription (sphere, cylinder, axis, PD, add). Highest-value, most complex order type.
- Sunglasses: Fashion and sport. Non-prescription or available with prescription lenses. Sold primarily on style, shape, and UV protection.
- Reading glasses: Over-the-counter (OTC) reading glasses with fixed dioptre strengths. Dioptre value (+1.00, +1.50, +2.00, etc.) as a variant.
- Contact lenses: Daily, weekly, monthly, extended wear. Box count variants. Sphere/cylinder/axis/base curve per order. Subscription-driven.
- Sports eyewear: Cycling, ski, shooting, swim goggles. Lens category (clear, yellow, mirrored) variants.
- Accessories: Cases, cleaning cloths, repair kits, lens cleaning spray.
Frame specification metafields
Frame data drives both the shopping experience and fit. Customers increasingly expect to filter by face shape, frame width, and material online.
| Metafield | Example | Product type |
|---|---|---|
| eyewear.frame_shape | Round / Oval / Square / Cat-eye / Aviator / Wayfarer | All frames |
| eyewear.frame_material | Acetate / Titanium / Stainless steel / TR90 / Wood | All frames |
| eyewear.frame_width_mm | 120 / 130 / 140 / 150 | All frames |
| eyewear.lens_width_mm | 48 / 52 / 54 / 58 | All frames |
| eyewear.bridge_mm | 14 / 16 / 18 / 20 | All frames |
| eyewear.temple_mm | 135 / 140 / 145 / 150 | All frames |
| eyewear.fit | Small / Medium / Large / Extra Wide | All frames |
| eyewear.gender | Men / Women / Unisex | All frames |
| eyewear.face_shape_suitable | Oval,Heart,Round | All frames |
| eyewear.rx_compatible | true / false | Frames |
| eyewear.lens_type | Single vision / Varifocal / Bifocal / Non-prescription | Prescription frames |
| eyewear.lens_material | 1.50 / 1.60 / 1.67 / 1.74 index | Prescription |
| eyewear.uv_protection | UV400 / UV380 | Sunglasses |
| eyewear.lens_category | 0 / 1 / 2 / 3 / 4 | Sunglasses (EN ISO 12312-1) |
| eyewear.polarised | true / false | Sunglasses |
Colour and size as variants
For sunglasses and non-prescription frames, the variant structure is typically:
- Option 1: Colour / Frame colour → "Black / Tortoiseshell / Clear / Gold"
- Option 2: Lens colour → "Grey / Brown / Green / Clear" (for sunglasses with multiple lens options)
Frame size is sometimes a variant but often better as a separate product (e.g., "Classic Aviator — Small" and "Classic Aviator — Medium/Large") because the frame dimensions differ significantly between sizes and the overlap in customer journeys is low.
In WooCommerce, colour is pa_colour and lens is often a custom attribute or separate variation axis. k-sync maps these to Shopify option values during migration.
Reading glasses — dioptre as a variant
Reading glasses are sold OTC with fixed dioptre strengths. Typical range: +1.00, +1.25, +1.50, +1.75, +2.00, +2.25, +2.50, +2.75, +3.00, +3.50.
In WooCommerce, dioptre is stored as pa_strength or pa_dioptre. In Shopify, this maps to Option 1 (Strength) with values like "+1.00", "+1.50" etc. Each dioptre × colour combination is a variant.
A reading glasses range with 5 frame colours × 10 dioptre strengths = 50 variants — well within Shopify's limit.
Prescription ordering flow
Prescription eyewear requires customers to provide their prescription data (sphere, cylinder, axis, near addition, pupillary distance) per eye. This is not a standard Shopify variant — it's order-specific data.
Approaches in Shopify:
- Cart note with prescription details: Customer types prescription data into a cart note. Simple but prone to error and requires manual processing.
- Custom product form with validation: A custom JavaScript form on the product page that validates prescription input ranges before adding to cart. Stored as line item properties.
- Prescription app: Dedicated Shopify apps (e.g., Presc, Prescription Manager by Avada) that handle the prescription input flow, optical range validation, and order processing workflow.
During WooCommerce migration, prescription data from existing orders does not transfer to Shopify — this is order history data, not product data. k-sync handles the product migration; prescription order history needs a separate export/archive strategy.
Contact lens subscriptions
Contact lenses are a classic subscription product — monthly boxes delivered automatically. In WooCommerce, this is typically WooCommerce Subscriptions. In Shopify:
- ReCharge or Skio for recurring billing management
- Contact lens products need a daily/monthly/annual quantity variant: "30 lenses (1 month) / 90 lenses (3 months) / 180 lenses (6 months)"
- Prescription data (sphere, base curve, diameter) stored per subscription as customer metafields or line item properties
Contact lens prescription data cannot auto-migrate from WooCommerce Subscriptions to Shopify subscription apps — customers will need to re-enter their prescription when their subscription is recreated post-migration.
Virtual try-on integration
Virtual try-on (AR frame preview using a camera) is increasingly standard in online eyewear retail. After migration to Shopify, virtual try-on is available via apps (Virtually, Fittingbox, Ditto, or theme-integrated solutions).
For these apps to work, each frame product needs:
- High-quality front-facing frame images with transparent background
- Frame width and bridge dimensions as metafields (used by the AR sizing algorithm)
- A unique frame identifier that maps to the try-on app's database
Ensure frame images and dimension metafields are fully populated before configuring a virtual try-on app post-migration.
Post-migration checklist for optical and eyewear stores
- Frame shape, material, and dimension metafields on all frame products
- Prescription-compatible flag on RX-ready frames
- Lens category (0–4) and UV protection on all sunglasses
- Polarised flag on polarised lens products
- Reading glasses dioptre strengths as variants with consistent "+" prefix format
- Prescription order form app or custom form configured before launch
- Contact lens subscription app set up with product variants for supply durations
- Virtual try-on app configured with frame dimension metafields
- Frame images reviewed — transparent background for try-on compatibility
- Gender and face shape suitable metafields for smart product filtering
Migrate your store with k-sync
Connect your WooCommerce store, validate your products, and push to Shopify in minutes. Free for up to 50 products.
Get started freeRelated reading
Migrating a luggage and travel accessories store from WooCommerce to Shopify (2026)
How to migrate a luggage, travel bags, or travel accessories WooCommerce store to Shopify — luggage specifications, airline compliance, TSA lock, warranty and durability claims, and luggage retail Shopify setup.
Migrating a motorcycle accessories store from WooCommerce to Shopify (2026)
How to migrate a motorcycle accessories, biker gear, or motorbike parts WooCommerce store to Shopify — helmet safety standards, CE-rated protective clothing, type approval for parts, fitment compatibility, and motorcycle retail Shopify setup.