Bu sayfada
Shopify'ın varsayılan tema entegrasyonları Liquid şablonları ve
theme.liquidiçine yerleştirilen<script>etiketlerini varsayar. Hydrogen vitrinlerinde bunlardan hiçbiri yoktur — Oxygen'de çalışan, sunucu tarafı render edilen ve hydration sınırları olan React Router uygulamalarıdır; çoğu yerleştirilebilir widget bunun için hiçbir zaman inşa edilmemiştir. Entegrasyonu yanlış yaparsanız, crawlerlar ve yavaş bağlantı kullanıcıları için sayfayı bozarsınız veya titreşen, çift render edilen veya hiçbir zaman yüklenmeyen sanal deneme düğmesi yayınlarsınız.
Headless Shopify adapte edilmesi, Liquid temalarının sunduğundan daha fazla kontrol ve performans istemekte olan orta ve kurumsal moda markaları arasında hızlı bir şekilde büyümüştür. Shopify'ın bu alanındaki resmi React framework'ü olan Hydrogen, Oxygen hosting ve Remix tarzı sunucu render işlemiyle birleşir. Bu mimari hız ve esneklik açısından harikadır, ancak jQuery'nin window üzerinde mevcut olduğunu varsayan sanal deneme veya beden önerisi deneyimi gibi herhangi bir üçüncü taraf widget için kuralları değiştirir.
Standart Embed Script'lerin Hydrogen'da Neden Çalışmaması
Tipik bir ecommerce widget, DOM'yi sorgulamak için sayfanın yüklendikten sonra kendi kendine yüklenen tek bir <script src="..."> etiketi olarak yayınlanır. Bu kalıp, Hydrogen'ın garantilemediği iki şeye bağlıdır: script yürütülme zamanında kararlı, tam olarak render edilen bir DOM ve tek bir istemci tarafı render işlemi.
Hydrogen ürün sayfalarını sunucu tarafında render eder, HTML'yi tarayıcıya akışla gönderir ve ardından etkileşimlilik eklemek için istemci tarafında React'ı hidrate eder. Eğer bir sanal deneme script'i hydration tamamlanmadan önce document.querySelector('#product-image') sorgulanırsa, React'ın değiştirmek üzere olduğu bir DOM düğümüne eklenebilir ve bu da bağlantısız widget veya çift mount ile sonuçlanır. Daha da kötüsü, eğer script SSR sırasında çalışırsa (korunmadıysa), sunucu tarafında window ve document mevcut olmadığından hemen hata verir.
Düzeltme egzotik değildir — bu, herhangi bir React geliştirici tarafından üçüncü taraf DOM'a bağımlı koda uyguladığı disiplinle aynıdır — ancak kasıtlı olması gerekir. Sanal deneme deneyimini yalnızca istemci React bileşeni olarak düşünün, script etiketi değil, ve bunu dış tarafına bollamak yerine Hydrogen'ın mevcut bileşen ağacının içine yerleştirin.
Bileşen Tabanlı Entegrasyon Deseni
Script enjekte etmek yerine, sanal deneme düğmesini ve modalı Hydrogen'ın ürün rotasının doğrudan render ettiği özel bir bileşende sarın:
// app/components/TryOnButton.client.tsx
import { Suspense, lazy } from 'react';
const TryOnWidget = lazy(() => import('./TryOnWidget'));
export function TryOnButton({ productId, imageUrl }) {
return (
<Suspense fallback={<button disabled>Sanal deneme yükleniyor…</button>}>
<TryOnWidget productId={productId} imageUrl={imageUrl} />
</Suspense>
);
}Burada birkaç şey önemlidir. .client.tsx soneki (veya proje birini kullanıyorsa eşdeğer ClientOnly wrapper'ı) framework'e bu bileşenin sunucu tarafında render edilmeye çalışılmaması gerektiğini söyler. lazy(), widget'in JavaScript paketini gerçekten gerekli olana kadar yüklemeyi erteler, bu da sanal deneme düğmesine hiçbir zaman tıklamayan alışveriş yapanlar için kritik render yolunun dışında kalmasını sağlar. Suspense, paket yüklemesi bittiğinde, layout kayması yerine gerçek bir fallback durumu sağlar.
Bu kalıp aynı zamanda sanal deneme tetikleyicisinin normal ürün sayfası işaretlemesinin bir parçası olarak render edilmesi anlamına gelir — her zaman aynı konum, bir script'in sayfanın yüklenmesinden sonra DOM'u bulmayıp değiştirmesini beklemeye gerek yok. Sanal deneme deneyimi, ağaca bağlantılı yabancı bir nesne değil, ağaçta başka bir React bileşeni haline gelir.
Hydration'ı Layout Kayması Olmadan Yönetme
Layout kayması, kötü bir headless entegrasyonun en yaygın görünen semptomudur. Eğer sanal deneme düğmesinin kabı bileşen yüklenmeden önce ayrılmış boyutu yoksa, sayfa görünür olduğunda sıçrar — hem alışveriş yapan deneyimini hem de Cumulative Layout Shift, Google'ın Core Web Vitals'ından birini zarar verir.
Güvenilir düzeltme, düğmenin gerçek boyutlarının sayfayı belirlemesinden sonra bekleme yerine, herhangi bir JavaScript çalışmadan önce CSS ile yer ayırmaktır:
| Yaklaşım | Layout kayması riski | Notlar |
|---|---|---|
| Script-enjekte düğme, placeholder yok | Yüksek | PDP'lerde CLS cezaları için yaygın sebep |
| Sabit yükseklik konteyner + lazy bileşen | Düşük | Mount öncesinde CSS'de pixel yüksekliğini ayırın |
| Sunucu-render placeholder + istemci swap | En düşük | Statik, etkileşimsiz SSR fallback gerektirir |
Çoğu Hydrogen vitrini için, Suspense sınırı etrafında sabit yükseklik flex konteyner yeterlidir — sanal deneme UI'ının kendisinin tam SSR'ını gerekçelendirmeniz gerekmez, çünkü düğme ve modal doğal olarak etkileşimlidir ve arama motorlarının indekslediği sunucu render edilen HTML'ye çok az eklerler.
Ürün Sayfasının Performansını Koruma
Oxygen ve Hydrogen, hızlı Time to First Byte ve agresif caching etrafında inşa edilir ve kötü kapsamlı bir üçüncü taraf paketle bu avantajı geri almak kolaydır. Birkaç pratik koruma:
- Sanal deneme paketini yalnızca ürün ve koleksiyon rotalarına yükleyin, kök düzende global olarak değil, bu sayede "sanal denemeye" giriş noktası olmayan sayfalar indirme maliyetini ödemez.
- Resim/model varlığı getirmesini (kamera erişimi, vücut model dosyaları, kiyafet render'ları) sayfa yüklemesi sırasında değil, alışveriş yapan gerçekten sanal deneme modalını açana kadar erteleyiniz.
- Widget'in rota değişiklikleri arasında hayatta kalan global olay dinleyicilerini kaydetmediğini doğrulayın — Hydrogen'ın istemci tarafı yönlendirmesi, bileşenlerin geleneksel çok sayfali Liquid temadan çok daha sık yüklenmesi ve kaldırılması anlamına gelir ve sızan dinleyici bir oturum üzerinde bileşir.
Bu son nokta, statik siteler için inşa edilen entegrasyonları yakalar: sayfaların ürünler arasında yeniden yükleneceğini varsayarlar, bu nedenle temizlik asla bir endişe değildi. Tek sayfalı bir uygulamada o vardır.
YourSizer Nereye Uyuyor
YourSizer'ın widget'i, global bir script enjeksiyonu gerektirmek yerine Hydrogen'ın bileşen modeline doğal olarak eşleşen yerleştirilebilir React/JS bileşenler seti olarak inşa edilmiştir. Bir Hydrogen vitrini için bu, tipik olarak sanal deneme ve beden önerisi tetikleyicisini ürün rotasındaki yalnızca istemci bileşeni olarak içe aktarmayı, ürün kimliği ve resim referansını prop olarak geçmeyi ve bir Suspense sınırının arkasında kendi paketini lazy yüklemeye izin vermeyi ifade eder — yukarıda açıklanan aynı kalıp.
Entegrasyon Liquid şablon hooks'larına bağlı olmadığından, vitrin Oxygen, Vercel veya headless yapı için başka bir hosting hedefi olsun işleme yaramaz. Headless geçiş için daha geniş bir beden önerisi çözümü değerlendiren ekipler, teknik entegrasyonun kolay kısım olduğunu bulurlar — daha zor çalışma, alışveriş akışında (PDP, sepet veya her ikisi) sanal deneme giriş noktasının nerede yaşaması gerektiğine karar vermektir, bu bir mühendislik kararı değil, bir ticari kararıdır.
Sıkça Sorulan Sorular
Sanal deneme bir Hydrogen vitrinine Core Web Vitals'ı yavaşlatır mı?
Eğer entegrasyon doğru şekilde kapsamlandırılırsa zorunda değildir. Largest Contentful Paint ve Cumulative Layout Shift'e ana risk, her sayfa yüklemesinde tam sanal deneme paketini heyecanla yüklemekten ve tetikleyici düğme için layout alanı ayırmamaktan gelir. Bileşeni rota spesifik importun arkasında lazy yüklemek ve CSS'de sabit konteyner boyutu ayırmak, sanal deneme özelliğini Google'ın sayfa deneyimi sinyalleri için kullandığı metriklerden uzak tutar.
Sanal deneme widget'i Hydrogen'da sunucu tarafında render edilebilir mi?
Etkileşimli parçalar — kamera yakalama, kiyafet render'ı, beden mantığı — genellikle anlamlı bir şekilde sunucu tarafında render edilemez, çünkü tarayıcı API'lerine ve istemci durumuna bağlıdırlar. Sunucu tarafında render edilebilir ve edilmesi gereken şey, etrafındaki statik kabuktudur: düğme etiketi, layout'taki konumu ve yapılandırılmış ürün verileri. Etkileşimli widget'i yalnızca istemci bileşeni olarak davranmak ve çevresindeki sayfanın normal şekilde sunucu tarafında render edilmesine izin vermek standart yaklaşımdır.
Headless Shopify geçişi sanal deneme veya beden önerisi araçları eklemek için iyi bir zaman mı?
Ekip zaten ürün sayfası şablonlarına değindiği ve bileşen mimarisi seçtiği için entegrasyonu planlamak makul bir zamandır. Bazı markalar, headless vitrini ilk olarak mevcut temaya özellik eşitliğiyle başlatmayı tercih eder, ardından yeni mimari kararlı olduktan sonra sanal denemeyi takip olarak ekler. Her iki sıra işe yarar; önemli olan, entegrasyonun yukarıda açıklanan sürtüşmelerin çoğunun kaynağı olan Liquid döneminden yer edilen script etiketi olarak değil, yerel bir bileşen olarak tasarlanmasıdır.
Bu, standart Shopify Liquid temasına sanal deneme eklemeye nasıl farklılık gösterir?
Liquid temasında entegrasyon, genellikle product.liquid içine eklenen bir script etiketi ve snippet'idir ve widget, sayfa yüklemesinden sonra DOM sorguları aracılığıyla mount noktasını bulur. Hydrogen'da, eşdeğer mount noktası, açık prop'lar geçirilen bir React bileşen referansıdır ve framework'ün kendi render'lama yaşam döngüsü — bir DOMContentLoaded dinleyicisi değil — widget'in ne zaman ve nasıl göründüğünü belirler. Son kullanıcı deneyimi özdeş görünebilir; altta yatan entegrasyon sözleşmesi farklıdır.
Sonuç
Headless Shopify, sanal deneme dahil olmak üzere her vitrin özelliğini, sayfaya bağlantılı bir afterthought değil, bileşen ağacının birinci sınıf bir parçası olarak görmek için kullanan ekiplere ödül verir. Teknik gereksinimler — yalnızca istemci render'ı, lazy yükleme, layout rezervasyonu — egzotik veya zor değildir, ancak Hydrogen yapısı sırasında kasıtlı olarak işlenmeleri gerekir, daha sonra eklenmesi değil. Bunu doğru yapan markalar, hızlı yüklenen, sayfayı kaymayan ve headless geçişin başlangıçta sunması gereken başka herhangi bir React bileşeni kadar doğal olarak vitrinine oturan sanal deneme deneyimi ile sonuçlanır.
