Shopify headless commerce: a technical implementation guide
When and how to move a Shopify store to a headless architecture. The stack, the tradeoffs, and what actually moves performance.
Shopify's Hydrogen and Storefront API have matured significantly. Headless Shopify is now a defensible default for established merchants needing sub-second page loads, or for any storefront where editorial flexibility and theme constraints have started to fight.
Architecture overview
A reliable headless stack looks like this:
- Frontend: Next.js 15 App Router with React Server Components
- Commerce API: Shopify Storefront GraphQL API
- CMS: Sanity for editorial content
- Search: Algolia with merchandising rules
- Hosting: Vercel Edge Network
- Checkout: Shopify Checkout (native, not custom)
Never rebuild checkout. Shopify's conversion-optimized checkout outperforms almost anything a team can build from scratch, and the risk surface isn't worth the upside.
Data flow
- Next.js fetches product data via GraphQL at request time or build time
- Editorial content comes from Sanity
- User cart state is managed with Shopify Cart API
- Checkout redirects to Shopify Checkout with cart token
- Post-purchase, webhook syncs order data to our systems
Performance wins
Headless lets us optimize what Shopify monoliths cannot:
- Static generation: PDPs and PLPs pre-rendered at build time
- Edge caching: HTML cached at 100+ global PoPs
- Image optimization: Next.js Image component with AVIF
- Script reduction: No Shopify theme JavaScript
- Predictive prefetching: Links prefetched on hover
What changes for a well-executed migration:
- LCP moves from several seconds to comfortably under one second on the most-trafficked pages
- TTI improves proportionally; main-thread work drops significantly
- Mobile conversion typically lifts as perceived performance improves
- Bounce rate on the storefront falls
The size of each effect is site-specific. Treat performance numbers from any single migration as anecdote, not guarantee.
The tradeoffs
Headless is not universally better:
- Apps: Many Shopify apps require theme installation. You'll rebuild some functionality or use API equivalents.
- Complexity: You now maintain two systems (frontend + Shopify backend).
- Cost: A headless stack (hosting + search + CMS) adds meaningful monthly cost versus a bare Shopify theme.
- Editor experience: Marketing teams need training on the new CMS instead of the Shopify theme editor.
Implementation tips
- Use Shopify's generated types:
@shopify/hydrogen-reactexports TypeScript types from your schema - Cache aggressively: Product data changes rarely. Use 1-hour SWR for most queries.
- Handle rate limits: Storefront API has rate limits. Implement request batching.
- Test checkout flows: Cart metafields, discounts, and shipping must be validated end-to-end.
- Plan for SEO: Redirect old URL structures. Implement structured data for products.
When to go headless
Go headless if you need:
- Sub-second page loads
- Custom editorial experiences
- Multi-region deployments
- Advanced A/B testing
- Custom integrations
Stay on Shopify themes if you are:
- Happy with current theme customization
- Reliant on many app-installable Shopify apps
- Resource-constrained on engineering
- Not seeing performance hurting conversion in your analytics
Headless is powerful but not the universal answer.