Three documents were reviewed for the Woodland Creek Furniture (WCF) / Log Furniture Place / Innovo Lifestyles migration from Magento to Shopify. The proposed architecture recommends a single Shopify Plus store using Shopify Markets for consumer brand differentiation and Shopify B2B for trade customers.
After rigorous fact-checking against Shopify's official documentation (help.shopify.com, shopify.dev, changelog.shopify.com), we identified:
The final proposed architecture (both consumer brands under one Primary US Market with different domains, and B2B as a separate Company Location market) is technically feasible using Shopify's multiple web presences feature (GA since October 2023) and/or submarkets (GA since May 2025). However, this approach comes with limitations around shared themes (section/block overrides only), shared checkout, and shared customer accounts that must be understood and accepted before proceeding.
The proposed architecture is:
1 Shopify Plus Store with woodlandcreekfurniture.com (D2C Brand 1), logfurnitureplace.com (D2C Brand 2), and innovolifestyles.com (B2B/Trade), all running on one store with separate URLs.
Two root domains serving different branded content in the same language on one store is NOT natively supported. Here is why:
| Approach | How It Works | Limitations |
|---|---|---|
| Alias domain + Liquid detection | Set additional brand domains as alias domains (not redirect domains). Alias domains serve the store without redirecting and display the alias URL in the browser. request.host in Liquid returns the alias domain, enabling per-brand content rendering. (Shopify Help - Alias Domains) |
Customer account pages are NOT supported on alias domains. Login redirects to Shopify-hosted auth, and account pages (order history, profile) load on the primary domain. Carts are separate per domain (cookie-scoped). SEO needs canonical tag handling. Must verify login redirect-back behavior in a dev store. |
| Alias domain + Blended B2B | Set innovolifestyles.com as a third alias domain. Theme detects the domain and renders B2B branding, trade-only collections, and login prompt. B2B Company Location detection activates after login. | Same customer account limitation: login flow goes through Shopify-hosted auth. B2B on alias domains is not explicitly documented by Shopify and must be validated in a development store before committing. If it does not work, fallback is to run B2B on the primary domain or use a headless approach. |
| Headless / Hydrogen | One Shopify Plus store as the backend. Separate Hydrogen or React frontends for each domain (woodlandcreekfurniture.com, logfurnitureplace.com, innovolifestyles.com). Full brand independence per domain. | Highest development cost. Requires ongoing frontend maintenance. Not all Shopify apps work with headless storefronts. |
The "1 store, 3 separate branded URLs" architecture does not use Shopify Markets for brand differentiation (Markets require different languages per domain). It can be approached using alias domains + Liquid domain detection + multi-brand theme sections. Alias domains serve the store without redirecting, and request.host routes to the correct brand experience. However, Shopify explicitly states that customer account pages are not supported on alias domains. The login flow, B2B Company detection, and post-login redirect behavior on alias domains must be validated in a development store before committing. See Section 5 for our detailed recommendation and the specific items that require testing.
"Unique storefront theme/branding using Shopify 2.0 sections and templates" per Market, or "use separate themes assigned to different Markets (if drastically different branding)."
index.context.<context-string>.json). They are modifications to the same theme, not separate themes.The phrasing "separate themes" should read "per-market/submarket section and block overrides within one theme." If the two consumer brands need drastically different visual identities (entirely different layouts, design systems, or CSS architectures), a single theme with overrides may not be sufficient. However, if the brands share a similar layout structure and mainly differ in logos, colors, featured collections, and messaging, the override system combined with request.host domain detection in Liquid can work effectively.
"Can Shopify B2B work for Innovo - It doesn't need to be on plus but needs to be a separate ecosystem"
This is factually incorrect. Shopify B2B requires Shopify Plus:
companyCreate API mutation explicitly states: "API client must be installed on a Shopify Plus store." (Shopify Dev - companyCreate)All B2B features (Companies, Catalogs, Price Lists, Payment Terms Net 30/60, Company-specific pricing) are Plus-only. There is no separate cost for B2B beyond the Shopify Plus subscription; it is included in the plan.
Since the architecture already recommends Shopify Plus for the single store, B2B features are included at no additional cost. The key takeaway: Shopify Plus is a hard requirement for B2B, not optional.
"What happens if a product has more than Shopify's limit of 100 variants?"
The variant limit was increased from 100 to 2,048 variants per product as of October 15, 2025. This applies to all merchants (not just Plus). (Shopify Changelog)
For WCF's custom furniture with many configuration options, the 3-option limit is likely the more pressing constraint, not the variant count.
mutation CreateMarket($input: MarketCreateInput!) {
marketCreate(input: $input) {
market { id name primary enabled regions(first: 10) { edges { node {
... on MarketRegionCountry { id country { code name } }
} } } } userErrors { field message }
}
}
// Variables:
{ "input": { "name": "United States", "regions": [{ "countryCode": "US" }] } }
The actual MarketCreateInput has evolved significantly:
conditions.regionsCondition.regions, not a flat regions fieldhandle (String!) and enabled (Boolean!) are missing from the exampleconditions object with regionsCondition, companyLocationsCondition, and locationsConditioncurrencySettings, catalogs, and webPresences are availableSource: Shopify Dev - marketCreate mutation
"Are there additional transaction fees? YES 0.2%" (highlighted in yellow)
There are two separate types of fees that need to be understood:
1. Shopify's Additional Third-Party Transaction Fee
This is an extra fee Shopify charges when you use a payment provider other than Shopify Payments. The 0.2% on Plus refers to this fee. It is waived when using Shopify Payments as the primary gateway.
| Plan | Third-Party Provider Fee (extra, on top of provider's own fees) |
|---|---|
| Basic | 2.0% |
| Grow | 1.0% |
| Advanced | 0.6% |
| Plus | 0.2% (waived with Shopify Payments) |
2. Credit Card Processing Fees (Shopify Payments)
Even when using Shopify Payments (which eliminates the third-party fee above), you still pay credit card processing fees on every transaction. Shopify Payments is powered by Stripe. These fees are NOT zero:
| Plan | Online Domestic Cards | Online International Cards | Online Amex |
|---|---|---|---|
| Basic | 2.9% + 30c | 3.9% + 30c | 3.9% + 30c |
| Grow | 2.7% + 30c | 3.7% + 30c | 3.7% + 30c |
| Advanced | 2.5% + 30c | 3.5% + 30c | 3.5% + 30c |
| Plus | Custom/negotiated rates (contact Shopify Sales) | ||
In-Person (POS) Rates:
| Plan | Card Present | Keyed-In |
|---|---|---|
| Basic | 2.6% + 10c | 2.9% + 30c |
| Grow | 2.5% + 10c | 2.7% + 30c |
| Advanced | 2.4% + 10c | 2.5% + 30c |
| Plus | Custom/negotiated rates | |
Source: Shopify Help - Shopify Payments Fees, Shopify Help - Credit Card Rates, Shopify Plus Pricing
Using Shopify Payments is strongly recommended to avoid the additional 0.2% third-party fee. However, credit card processing fees (2.5%-2.9% + 30c range, or negotiated rates on Plus) still apply on every transaction regardless. For WCF, confirm with Shopify Sales what the negotiated Plus processing rates would be, and factor these into the total cost of ownership.
"Shopify has multi pass if accounts need to be shared"
Multipass is a Single Sign-On (SSO) mechanism (Plus only), not an account-sharing tool. It redirects users from an external system to Shopify using encrypted, single-use tokens (valid 15 minutes) and auto-creates accounts if needed. It does NOT share accounts between stores, sync data, or maintain cross-domain sessions. (Shopify Dev - Multipass)
Since the recommended architecture uses one Shopify store with multiple domains, customer "sharing" is not an issue at all. There is one customer database. Here is how it works:
| Aspect | How It Works |
|---|---|
| Customer data | Automatically shared across all domains (woodlandcreekfurniture.com, logfurnitureplace.com, innovolifestyles.com). It is one store, one database. No syncing or third-party tools needed. |
| Account creation | A customer who registers on any of the three domains has an account that works on all three. The email address is the unique identifier. |
| Login method | Shopify's "new customer accounts" use passwordless login: the customer enters their email and receives a 6-digit verification code. No passwords to remember or migrate. Both D2C and B2B customers use this same flow. |
| B2B vs D2C distinction | Handled automatically by email association. If the email is linked to a Company Location, the customer sees the B2B experience (wholesale pricing, catalogs, payment terms). If not, they see the standard D2C experience. Same login, different experience. |
| Cross-domain sessions | Sessions do NOT carry across domains. A customer logged in on woodlandcreekfurniture.com must log in again on logfurnitureplace.com (different domain = different cookie). However, the login process is quick (enter email, receive code, done). |
| Customer account pages | All markets share one customer account domain. You cannot set a different customer account domain per market. By default this uses a shopify.com URL, but you can connect a custom domain (e.g., account.woodlandcreekfurniture.com). Important: alias domains are NOT supported for customer account pages. Account pages (order history, profile) always load on the primary domain or Shopify-hosted URL. (Shopify Help - Customer Account Domain, Alias Domain Limitations) |
| Order history | All orders from all domains appear in the same customer account, since it is one store. |
Multipass is not needed for this setup. Since all three brands run on one Shopify store, customer accounts are inherently shared. The only limitation is that login sessions are domain-specific (customers need to log in again when switching domains), but the passwordless 6-digit code makes this quick and painless. No account sharing tools, no syncing, no SSO required.
Multipass would only be relevant if WCF has an external system (e.g., a separate CRM or B2B portal outside of Shopify) and wants customers to log into Shopify automatically from that system.
"Markets allow you to segment customers by geography or business model"
Shopify does NOT use the term "business model" segmentation. The new Markets system supports three specific condition types:
You cannot create arbitrary "business model" segments. The B2B condition type enables a "blended store" where D2C and B2B customers have different experiences, but this is specifically tied to Shopify's B2B Companies feature, not a general-purpose business model segmentation tool.
Source: Shopify Dev - Market Types
The following claims from the source documents were verified as accurate against Shopify's documentation:
| # | Claim | Source |
|---|---|---|
| 1 | B2B and D2C can coexist on the same store ("blended store") | Shopify Help - Store Type |
| 2 | B2B catalogs can be assigned to specific company locations | Shopify Dev - catalogCreate |
| 3 | Payment terms supported: Net 15, Net 30, Net 60, Net 90, deposits, event-based | Shopify Help - Payment Terms |
| 4 | Company-specific catalogs with custom negotiated pricing | Shopify Help - B2B Catalogs |
| 5 | Price lists work for both D2C markets and B2B catalogs | Shopify Dev - CatalogContextInput |
| 6 | Inventory is shared across all Markets and B2B | Shopify Dev - Inventory Management |
| 7 | Customer passwords CANNOT migrate from Magento to Shopify | Shopify uses its own password hashing; customers must reset passwords post-migration |
| 8 | Shopify handles PCI compliance (Level 1 PCI DSS) | Shopify Help - Shopify Payments |
| 9 | Shopify enforces URL structure (/products/handle, /collections/handle, not customizable) | Shopify Help - URLs |
| 10 | 301 redirects are supported (bulk CSV import, ~100K limit) | Shopify Help - URL Redirects |
| 11 | XML sitemap is auto-generated at /sitemap.xml | Shopify Help - SEO |
| 12 | Cart2Cart and Matrixify are legitimate, widely-used migration tools | Available on Shopify App Store and cart2cart.com |
| 13 | catalogCreate mutation structure (title, status, context with companyLocationIds) |
Shopify Dev - catalogCreate |
| 14 | companyCreate mutation structure (company name, contact, location) |
Shopify Dev - companyCreate |
These are important factors for the WCF migration that were not addressed in any of the three documents:
Shopify products can have a maximum of 3 options (e.g., Size, Color, Material). This has NOT changed with the variant limit increase. For WCF's custom furniture, which may have configurations like Wood Type, Finish, Size, Hardware Style, and Cushion Fabric, this is a significant constraint.
Workarounds: Line item properties, metafields with custom storefront logic, or product customization apps (e.g., Shopify's Custom Options apps).
While variants increased to 2,048, the media limit per product remains 250 files (images, videos, 3D models combined). Products with many variants cannot all have unique images.
The new Markets system (with submarkets, B2B company location markets, multiple web presences) was released as generally available on May 21, 2025. (Shopify Changelog) Shopify Plus stores can activate it via Feature Test Drive. Since this is a new migration (not an existing store), the new Markets features should be available. However, confirm activation and test thoroughly in a development store before committing to the architecture.
Shopify's native Bundles app (free, by Shopify) only supports basic fixed bundles and multipacks. For a furniture business selling room sets, modular sectionals, and configurable collections, a dedicated third-party bundle app is required.
Recommended:
| App | Rating | Price | Why for Furniture |
|---|---|---|---|
| Simple Bundles & Kits | 4.9/5 (570+ reviews) | Free plan / $24/mo+ | Proven with furniture retailers. SKU-level inventory breakdown for bedroom sets and modular sectionals. Bypasses 2,048 variant limit. B2B multipack support. ERP/3PL integration. |
| Amplify Bundles (PickyStory) | 4.6/5 (532 reviews) | $99.50/mo | Explicit "Home Furnishing" support. "Shop the Look" lookbook feature. 12+ bundle types including Build-a-Box and infinite option bundles. |
Shopify Plus checkout customization now uses Checkout UI Extensions (React-based). The old checkout.liquid is deprecated. Any custom checkout requirements (e.g., delivery scheduling for large furniture, assembly options, trade customer checkout flows) must be built using the new extensibility framework.
Source: Shopify Dev - Checkout Extensions
301 redirects cannot be created FROM URLs that match Shopify's existing routes (e.g., /products/*, /collections/*, /cart, /account). Only redirects from non-Shopify paths (e.g., old Magento URLs like /catalog/product/view/id/123 or /furniture/rustic-bed.html) can be created.
None of the documents mention the actual Shopify Plus cost: $2,300-$2,500/month (negotiable, or a percentage of GMV for high-volume merchants, whichever is higher). Annual billing is cheaper than month-to-month (roughly 25% savings). This should be factored into cost analysis.
Login sessions do not carry across different root domains (browser cookie restriction). A customer logged in on one domain must re-authenticate when visiting another. With Shopify's passwordless new customer accounts (6-digit email code), this takes seconds. See Section 2.2 for the full breakdown of how customer accounts, B2B/D2C distinction, and shared data work in this single-store setup.
Magento's configurable products can have unlimited configurable attributes. Shopify's 3-option maximum means complex furniture configurations (Wood Type + Size + Finish + Hardware + Fabric) cannot be represented as a single product with variants. This requires:
This is arguably the most impactful technical limitation for a custom furniture business and deserves dedicated migration planning.
Beyond the subscription and credit card processing fees, Shopify has several additional fees that can impact total cost of ownership. None of these are addressed in the source documents:
| Fee | Rate | Details |
|---|---|---|
| Currency Conversion Fee | 1.5% (US stores) / 2% (international stores) | Applied on every currency conversion when selling internationally but receiving payouts in USD. Relevant if WCF sells to Canadian or other international customers. |
| International Card Surcharge | +1% above domestic rate | International credit cards are charged at higher rates (e.g., 3.9% + 30c instead of 2.9% + 30c on Basic). Can significantly impact margins on global orders. |
| Shopify Tax Calculation Fee | 0.35% per order (0.25% on Plus) | Applies when using Shopify's automated sales tax collection after exceeding $100,000 in annual U.S. sales. For a furniture business at WCF's scale, this will likely apply. |
| App Subscription Costs | $50-$200+/month average | Email marketing, reviews, upsells, subscriptions, product customization apps, etc. These add up quickly. Audit quarterly. |
| POS Pro Fee | $89/month per location | Shopify POS Lite is free, but POS Pro costs $89/month per location ($1,068/year each). Only relevant if WCF has physical retail locations. |
| Non-Refundable Transaction Fees on Refunds | 30c per original transaction | When you refund a customer, the 30c per-transaction fee from the original charge is not returned. High return rates on large furniture items can quietly drain profits. |
| Chargeback Fee | $15 per chargeback | Shopify charges $15 for each chargeback (customer dispute). The fee is refundable if the dispute is won. For high-ticket furniture orders, chargebacks can be costly beyond just the lost sale. |
These fees should be factored into the total cost of ownership comparison between Magento (self-hosted) and Shopify Plus. The Shopify Tax fee at 0.25% on Plus alone could be significant at WCF's revenue scale.
Given the platform limitations identified in Section 1.1 (Shopify does not natively support multiple branded root domains in the same language on one store), here are the two viable architecture approaches:
How it works: One Shopify Plus store. Both consumer domains point to the same store using alias domains. The theme is built with multi-brand sections that accept brand-specific settings (logos, colors, images, collections) through the Shopify theme customizer. A small amount of Liquid logic using request.host determines which brand settings to render. All brand configuration lives in the customizer, so content changes require no code edits. B2B (Innovo Lifestyles) operates via the blended store model: B2B customers log in and automatically see wholesale pricing based on their Company Location association.
| Pros | Cons |
|---|---|
| Single product catalog, single inventory | One shared theme (but each brand fully configurable via customizer) |
| Single customer database, no syncing needed | Checkout branding is shared across brands |
| B2B features available natively (catalogs, price lists, payment terms) | B2B experience requires login (trade visitors see a login/application prompt on innovolifestyles.com) |
| Lowest cost ($2,300-$2,500/month) | All customer accounts shared across brands |
| Single app installation | Requires upfront theme architecture work for multi-brand sections |
| Unified order management and reporting | SEO needs canonical tags and unique content per domain to avoid duplicate content penalties |
| Brand content managed via customizer (no code for updates) |
Build sections with brand-aware schema settings in the theme customizer. Each section accommodates all brands through configurable settings blocks:
{%- comment -%} Example: Multi-brand header section {%- endcomment -%}
{%- case request.host -%}
{%- when 'woodlandcreekfurniture.com' -%}
{%- assign brand = section.settings -%}
{%- assign logo = brand.brand_1_logo -%}
{%- assign accent_color = brand.brand_1_color -%}
{%- assign featured = brand.brand_1_collection -%}
{%- when 'logfurnitureplace.com' -%}
{%- assign logo = brand.brand_2_logo -%}
{%- assign accent_color = brand.brand_2_color -%}
{%- assign featured = brand.brand_2_collection -%}
{%- else -%}
{%- assign logo = brand.brand_1_logo -%}
{%- assign accent_color = brand.brand_1_color -%}
{%- assign featured = brand.brand_1_collection -%}
{%- endcase -%}
The section schema exposes settings for each brand (logo, colors, collection, hero image, tagline, etc.) in the customizer. Marketing and content teams update brand visuals directly through the customizer without touching code. One section serves all brands.
:root variables set dynamically per brand via request.hostrequest.host detects it, theme renders the Innovo Lifestyles B2B branding, trade-only collections, and B2B login prompt.Alias domains serve the store without redirecting and keep the alias URL in the browser. request.host in Liquid returns the alias domain name (not the primary), enabling per-brand content rendering. Multiple alias domains are supported (up to 1,000 on Plus). (Shopify Help - Alias Domains, Shopify Dev - request object)
Shopify explicitly states: "Alias domains aren't supported for the customer accounts pages." (Source) This has the following impact:
canonical_url likely resolves to the primary domain.How it works: One Shopify Plus store as the backend (product catalog, inventory, orders, B2B). Separate Hydrogen or Remix frontends for each domain. Each frontend has its own design, branding, and UX. B2B can have its own dedicated frontend on innovolifestyles.com. This is the only approach that gives full domain independence while keeping a single backend.
| Pros | Cons |
|---|---|
| Complete brand independence per domain | Highest development cost and complexity |
| Single backend catalog and inventory | Requires ongoing frontend development and maintenance |
| Full design freedom (different layouts, UX per brand) | Hydrogen/Remix requires developer expertise |
| B2B can have its own frontend on innovolifestyles.com | Not all Shopify apps work with headless storefronts |
| Best performance (SSR/edge rendering) | Hosting on Oxygen or custom infrastructure |
| No domain redirect issues | Checkout still uses Shopify's hosted checkout (consistent across all frontends) |
Option A (Single Store + Liquid Domain Detection + Blended B2B) is our recommended starting point. It delivers the lowest cost, simplest operations, and the single-catalog/single-inventory benefits that motivated the original single-store proposal. The B2B blended store model is a fully documented Shopify pattern. The main risk is the secondary domain redirect behavior, which must be validated in a development store during the planning phase.
Option B (Headless/Hydrogen) is the only approach that gives each brand its own fully independent storefront, including a dedicated B2B portal on innovolifestyles.com. Consider this if the brands need fundamentally different UX, or if innovolifestyles.com must function as a standalone B2B portal. Higher development investment but maximum flexibility.
All claims in this document are verified against the following official Shopify sources: