[{"data":1,"prerenderedAt":1448},["ShallowReactive",2],{"article-alternates":3,"article-\u002Ftr\u002Ftech\u002Fheadless-e-ticaret-migration-roadmap-ve-risk-yonetimi":13},{"i18nKey":4,"paths":5},"tech-006-2026-05",{"de":6,"en":7,"es":8,"fr":9,"it":10,"ru":11,"tr":12},"\u002Fde\u002Ftech\u002Fheadless-ecommerce-migration-roadmap","\u002Fen\u002Ftech\u002Fheadless-ecommerce-migration-roadmap","\u002Fes\u002Ftech\u002Fheadless-ecommerce-migracion-hoja-ruta-riesgo","\u002Ffr\u002Ftech\u002Fheadless-e-commerce-migration-roadmap","\u002Fit\u002Ftech\u002Fheadless-commerce-roadmap-gestione-rischi","\u002Fru\u002Ftech\u002Fheadless-commerce-migration-roadmap-risk-management","\u002Ftr\u002Ftech\u002Fheadless-e-ticaret-migration-roadmap-ve-risk-yonetimi",{"_path":12,"_dir":14,"_draft":15,"_partial":15,"_locale":16,"title":17,"description":18,"publishedAt":19,"modifiedAt":19,"category":14,"i18nKey":4,"tags":20,"readingTime":26,"author":27,"body":28,"_type":1442,"_id":1443,"_source":1444,"_file":1445,"_stem":1446,"_extension":1447},"tech",false,"","Headless E-Ticaret: Migration Roadmap ve Risk Yönetimi","Phased rollout ile headless migrasyonu nasıl yönetilir? SEO korunması, sepet terk analizi ve real-world benchmark'lar.","2026-05-19",[21,22,23,24,25],"headless-commerce","migration","performance","seo","shopify",8,"Roibase",{"type":29,"children":30,"toc":1432},"root",[31,39,46,51,62,72,84,90,95,275,292,310,330,342,349,354,479,485,497,515,533,545,905,910,916,921,929,942,950,968,976,989,1010,1016,1021,1029,1390,1403,1409,1421,1426],{"type":32,"tag":33,"props":34,"children":35},"element","p",{},[36],{"type":37,"value":38},"text","Monolitik e-ticaret platformundan headless mimariye geçiş 2026'da artık \"neden\" değil \"nasıl\" sorusuna dönüştü. Fakat sorun şu: headless'a big bang geçişle Shopify dükkânını kapatıp iki hafta sonra Next.js sitesiyle dönmek isteyen her marka, SEO trafiğinin %40-60'ını kaybetmeyi göze alıyor demektir. Gerçek risk yönetimi phased rollout, kanarya testleri ve sepet terk davranışındaki değişimin canlı izlenmesiyle başlıyor.",{"type":32,"tag":40,"props":41,"children":43},"h2",{"id":42},"headless-migration-neden-big-bang-ile-başarısız-olur",[44],{"type":37,"value":45},"Headless Migration Neden \"Big Bang\" ile Başarısız Olur",{"type":32,"tag":33,"props":47,"children":48},{},[49],{"type":37,"value":50},"Geleneksel yaklaşım şöyle: mevcut Shopify Liquid temasını freeze et, paralelde Hydrogen veya Next.js + Storefront API entegrasyonu kur, DNS'i değiştir, geç. Pratikte iki temel darbe alırsın:",{"type":32,"tag":33,"props":52,"children":53},{},[54,60],{"type":32,"tag":55,"props":56,"children":57},"strong",{},[58],{"type":37,"value":59},"SEO darbe:",{"type":37,"value":61}," Google'ın 8 ay içinde yeniden crawl\u002Findex etmesi gereken binlerce URL. Canonical chain'leri, internal link graph yapısı, breadcrumb schema değişir. Geçici 4xx\u002F5xx spike'ları algılanır, domain authority geçici düşer. Organik trafik 3-4 ay boyunca %30 altında kalır (Search Console 2026 median veri).",{"type":32,"tag":33,"props":63,"children":64},{},[65,70],{"type":32,"tag":55,"props":66,"children":67},{},[68],{"type":37,"value":69},"Checkout friction artışı:",{"type":37,"value":71}," Yeni frontend'in render latency'si, API rate limit davranışı, payment gateway timeout threshold'ları production load altında test edilmemiştir. İlk hafta sepet terk oranı %5-8 puan sıçrar. Eğer bu spike'ı 72 saat içinde yakalayıp rollback edemezsen, revenue loss birikir.",{"type":32,"tag":33,"props":73,"children":74},{},[75,77,82],{"type":37,"value":76},"Çözüm: ",{"type":32,"tag":55,"props":78,"children":79},{},[80],{"type":37,"value":81},"phased rollout",{"type":37,"value":83},". Yeni mimariyi %1 trafikte 2 hafta, %10'da 2 hafta, %50'de 1 hafta test et. Her aşamada Core Web Vitals, checkout funnel metriklerini, GSC position değişimini izle.",{"type":32,"tag":40,"props":85,"children":87},{"id":86},"migration-roadmap-phase-by-phase-breakdown",[88],{"type":37,"value":89},"Migration Roadmap: Phase-by-Phase Breakdown",{"type":32,"tag":33,"props":91,"children":92},{},[93],{"type":37,"value":94},"Aşağıdaki roadmap Roibase'in 3 headless migration projesinde (ortalama $8M ARR e-com) kullandığı plan. Toplam süre: 16 hafta.",{"type":32,"tag":96,"props":97,"children":98},"table",{},[99,133],{"type":32,"tag":100,"props":101,"children":102},"thead",{},[103],{"type":32,"tag":104,"props":105,"children":106},"tr",{},[107,113,118,123,128],{"type":32,"tag":108,"props":109,"children":110},"th",{},[111],{"type":37,"value":112},"Phase",{"type":32,"tag":108,"props":114,"children":115},{},[116],{"type":37,"value":117},"Duration",{"type":32,"tag":108,"props":119,"children":120},{},[121],{"type":37,"value":122},"Traffic %",{"type":32,"tag":108,"props":124,"children":125},{},[126],{"type":37,"value":127},"Critical Metrics",{"type":32,"tag":108,"props":129,"children":130},{},[131],{"type":37,"value":132},"Rollback Trigger",{"type":32,"tag":134,"props":135,"children":136},"tbody",{},[137,166,193,220,248],{"type":32,"tag":104,"props":138,"children":139},{},[140,146,151,156,161],{"type":32,"tag":141,"props":142,"children":143},"td",{},[144],{"type":37,"value":145},"Canary",{"type":32,"tag":141,"props":147,"children":148},{},[149],{"type":37,"value":150},"2 hafta",{"type":32,"tag":141,"props":152,"children":153},{},[154],{"type":37,"value":155},"%1",{"type":32,"tag":141,"props":157,"children":158},{},[159],{"type":37,"value":160},"CWV, error rate, ATC (add-to-cart)",{"type":32,"tag":141,"props":162,"children":163},{},[164],{"type":37,"value":165},"Error rate >0.5%, ATC drop >3%",{"type":32,"tag":104,"props":167,"children":168},{},[169,174,178,183,188],{"type":32,"tag":141,"props":170,"children":171},{},[172],{"type":37,"value":173},"Alpha",{"type":32,"tag":141,"props":175,"children":176},{},[177],{"type":37,"value":150},{"type":32,"tag":141,"props":179,"children":180},{},[181],{"type":37,"value":182},"%10",{"type":32,"tag":141,"props":184,"children":185},{},[186],{"type":37,"value":187},"Checkout completion, bounce rate",{"type":32,"tag":141,"props":189,"children":190},{},[191],{"type":37,"value":192},"Checkout \u003C92% of baseline",{"type":32,"tag":104,"props":194,"children":195},{},[196,201,205,210,215],{"type":32,"tag":141,"props":197,"children":198},{},[199],{"type":37,"value":200},"Beta",{"type":32,"tag":141,"props":202,"children":203},{},[204],{"type":37,"value":150},{"type":32,"tag":141,"props":206,"children":207},{},[208],{"type":37,"value":209},"%30",{"type":32,"tag":141,"props":211,"children":212},{},[213],{"type":37,"value":214},"SEO position (top 100 keyword), revenue",{"type":32,"tag":141,"props":216,"children":217},{},[218],{"type":37,"value":219},"Position drop >5 rank, revenue -10%",{"type":32,"tag":104,"props":221,"children":222},{},[223,228,233,238,243],{"type":32,"tag":141,"props":224,"children":225},{},[226],{"type":37,"value":227},"Gamma",{"type":32,"tag":141,"props":229,"children":230},{},[231],{"type":37,"value":232},"1 hafta",{"type":32,"tag":141,"props":234,"children":235},{},[236],{"type":37,"value":237},"%50",{"type":32,"tag":141,"props":239,"children":240},{},[241],{"type":37,"value":242},"Full funnel, support ticket volume",{"type":32,"tag":141,"props":244,"children":245},{},[246],{"type":37,"value":247},"Support ticket spike >20%",{"type":32,"tag":104,"props":249,"children":250},{},[251,256,260,265,270],{"type":32,"tag":141,"props":252,"children":253},{},[254],{"type":37,"value":255},"Production",{"type":32,"tag":141,"props":257,"children":258},{},[259],{"type":37,"value":232},{"type":32,"tag":141,"props":261,"children":262},{},[263],{"type":37,"value":264},"%100",{"type":32,"tag":141,"props":266,"children":267},{},[268],{"type":37,"value":269},"All KPIs stabilize",{"type":32,"tag":141,"props":271,"children":272},{},[273],{"type":37,"value":274},"N\u002FA — full commit",{"type":32,"tag":33,"props":276,"children":277},{},[278,283,285,290],{"type":32,"tag":55,"props":279,"children":280},{},[281],{"type":37,"value":282},"Phase 0 (pre-canary):",{"type":37,"value":284}," Eski site üzerinde ",{"type":32,"tag":55,"props":286,"children":287},{},[288],{"type":37,"value":289},"synthetic monitoring baseline",{"type":37,"value":291}," kur. Pingdom\u002FWebPageTest'ten haftada 3 test, CWV için RUM (Real User Monitoring) data topla. Bu baseline olmadan karşılaştırma yapamazsın.",{"type":32,"tag":33,"props":293,"children":294},{},[295,300,302,308],{"type":32,"tag":55,"props":296,"children":297},{},[298],{"type":37,"value":299},"Canary detayı:",{"type":37,"value":301}," ",{"type":32,"tag":303,"props":304,"children":306},"code",{"className":305},[],[307],{"type":37,"value":155},{"type":37,"value":309}," trafiği şu kritere göre yönlendir:",{"type":32,"tag":311,"props":312,"children":313},"ul",{},[314,320,325],{"type":32,"tag":315,"props":316,"children":317},"li",{},[318],{"type":37,"value":319},"Non-bot user (Cloudflare Bot Management)",{"type":32,"tag":315,"props":321,"children":322},{},[323],{"type":37,"value":324},"Desktop only (mobile daha hassas, sonra ekle)",{"type":32,"tag":315,"props":326,"children":327},{},[328],{"type":37,"value":329},"ABD timezone dışı (peak saatleri koru)",{"type":32,"tag":33,"props":331,"children":332},{},[333,335,340],{"type":37,"value":334},"Canary'de ",{"type":32,"tag":55,"props":336,"children":337},{},[338],{"type":37,"value":339},"error budget",{"type":37,"value":341}," tanımla: %99.5 availability = 7 dakika downtime allowance \u002F hafta. Budget biter → rollback.",{"type":32,"tag":343,"props":344,"children":346},"h3",{"id":345},"seo-preservation-checklist",[347],{"type":37,"value":348},"SEO Preservation Checklist",{"type":32,"tag":33,"props":350,"children":351},{},[352],{"type":37,"value":353},"Headless'a geçerken SEO'yu korumak için şu adımlar zorunlu:",{"type":32,"tag":355,"props":356,"children":357},"ol",{},[358,384,426,436,453],{"type":32,"tag":315,"props":359,"children":360},{},[361,366,368,374,376,382],{"type":32,"tag":55,"props":362,"children":363},{},[364],{"type":37,"value":365},"URL parity audit:",{"type":37,"value":367}," Eski site sitemap.xml ile yeni headless sitemap'i diff et. 301 redirect planı yap. ",{"type":32,"tag":303,"props":369,"children":371},{"className":370},[],[372],{"type":37,"value":373},"\u002Fcollections\u002Fshoes",{"type":37,"value":375}," → ",{"type":32,"tag":303,"props":377,"children":379},{"className":378},[],[380],{"type":37,"value":381},"\u002Fproducts\u002Fshoes",{"type":37,"value":383}," gibi değişiklikler SEO disaster'dır.",{"type":32,"tag":315,"props":385,"children":386},{},[387,392,394,400,402,408,410,416,418,424],{"type":32,"tag":55,"props":388,"children":389},{},[390],{"type":37,"value":391},"Canonical + hreflang preservation:",{"type":37,"value":393}," Eski temanın ",{"type":32,"tag":303,"props":395,"children":397},{"className":396},[],[398],{"type":37,"value":399},"\u003Clink rel=\"canonical\">",{"type":37,"value":401}," ve ",{"type":32,"tag":303,"props":403,"children":405},{"className":404},[],[406],{"type":37,"value":407},"\u003Clink rel=\"alternate\" hreflang=\"...\">",{"type":37,"value":409}," yapısını birebir kopyala. Next.js'te ",{"type":32,"tag":303,"props":411,"children":413},{"className":412},[],[414],{"type":37,"value":415},"next-seo",{"type":37,"value":417}," veya manuel ",{"type":32,"tag":303,"props":419,"children":421},{"className":420},[],[422],{"type":37,"value":423},"\u003CHead>",{"type":37,"value":425}," ile.",{"type":32,"tag":315,"props":427,"children":428},{},[429,434],{"type":32,"tag":55,"props":430,"children":431},{},[432],{"type":37,"value":433},"Structured data migration:",{"type":37,"value":435}," JSON-LD schema (Product, BreadcrumbList, Organization) eski siteden export et, yenide aynı formatı kur. Google Rich Results Test ile validate et.",{"type":32,"tag":315,"props":437,"children":438},{},[439,444,446,451],{"type":32,"tag":55,"props":440,"children":441},{},[442],{"type":37,"value":443},"Internal link graph:",{"type":37,"value":445}," Eski sitedeki tüm internal link'lerin slug'larını yeni yapıda korumak ",{"type":32,"tag":55,"props":447,"children":448},{},[449],{"type":37,"value":450},"kritik",{"type":37,"value":452},". PageRank flow'u değişir, Google yeniden hesaplar, bu 2-3 ay sürer.",{"type":32,"tag":315,"props":454,"children":455},{},[456,461,463,469,471,477],{"type":32,"tag":55,"props":457,"children":458},{},[459],{"type":37,"value":460},"Crawl rate monitoring:",{"type":37,"value":462}," GSC'de \"Crawl Stats\" raporunu izle. Yeni sitede Googlebot request sayısı ilk 2 hafta %30-50 artmalı (discovery phase). Artmıyorsa ",{"type":32,"tag":303,"props":464,"children":466},{"className":465},[],[467],{"type":37,"value":468},"robots.txt",{"type":37,"value":470}," veya ",{"type":32,"tag":303,"props":472,"children":474},{"className":473},[],[475],{"type":37,"value":476},"sitemap.xml",{"type":37,"value":478}," hatalıdır.",{"type":32,"tag":40,"props":480,"children":482},{"id":481},"add-to-cart-abandon-analysis-yeni-frontendin-gerçek-testi",[483],{"type":37,"value":484},"Add-to-Cart Abandon Analysis: Yeni Frontend'in Gerçek Testi",{"type":32,"tag":33,"props":486,"children":487},{},[488,490,495],{"type":37,"value":489},"Headless migration'da en kritik metrik ",{"type":32,"tag":55,"props":491,"children":492},{},[493],{"type":37,"value":494},"ATC → checkout başlatma oranı",{"type":37,"value":496},". Eski Liquid tema bu oranı %78 tutuyordu, yeni Hydrogen sitesi ilk haftada %71'e düştü → revenue impact $120k\u002Fhafta.",{"type":32,"tag":33,"props":498,"children":499},{},[500,505,507,513],{"type":32,"tag":55,"props":501,"children":502},{},[503],{"type":37,"value":504},"Root cause:",{"type":37,"value":506}," Yeni site ",{"type":32,"tag":303,"props":508,"children":510},{"className":509},[],[511],{"type":37,"value":512},"\u002Fcart",{"type":37,"value":514}," sayfasında sepeti sunucu tarafında render ediyordu (SSR), ama Shopify Storefront API'nin cart token'ı cookie'ye yazılıyordu. Bazı strict privacy extension'ları (Privacy Badger, Brave Shields) bu cookie'yi bloke edince sepet boş görünüyordu.",{"type":32,"tag":33,"props":516,"children":517},{},[518,523,525,531],{"type":32,"tag":55,"props":519,"children":520},{},[521],{"type":37,"value":522},"Fix:",{"type":37,"value":524}," Cart state'ini ",{"type":32,"tag":303,"props":526,"children":528},{"className":527},[],[529],{"type":37,"value":530},"localStorage",{"type":37,"value":532}," + Zustand store'a taşıdık, cookie dependency'yi kaldırdık. Deploy sonrası ATC completion %76'ya düzeldi (2 gün içinde).",{"type":32,"tag":33,"props":534,"children":535},{},[536,538,543],{"type":37,"value":537},"Bu tür anomalileri yakalamak için ",{"type":32,"tag":55,"props":539,"children":540},{},[541],{"type":37,"value":542},"ATC funnel analytics",{"type":37,"value":544}," gerekir:",{"type":32,"tag":546,"props":547,"children":551},"pre",{"className":548,"code":549,"language":550,"meta":16,"style":16},"language-javascript shiki shiki-themes github-dark","\u002F\u002F Headless frontend: Storefront API mutation sonrası event push\nasync function addToCart(variantId, quantity) {\n  const response = await storefrontAPI.cartLinesAdd({\n    cartId: getCartId(),\n    lines: [{ merchandiseId: variantId, quantity }]\n  });\n\n  \u002F\u002F Custom event → GA4 + Mixpanel\n  if (response.cart) {\n    window.dataLayer.push({\n      event: 'add_to_cart_success',\n      cart_id: response.cart.id,\n      latency_ms: response.extensions.cost.actualQueryCost,\n      variant_id: variantId\n    });\n  } else {\n    window.dataLayer.push({\n      event: 'add_to_cart_failure',\n      error: response.userErrors[0]?.message || 'unknown'\n    });\n  }\n}\n","javascript",[552],{"type":32,"tag":303,"props":553,"children":554},{"__ignoreMap":16},[555,567,615,655,674,683,692,702,710,724,742,762,771,780,789,798,817,833,850,879,887,896],{"type":32,"tag":556,"props":557,"children":560},"span",{"class":558,"line":559},"line",1,[561],{"type":32,"tag":556,"props":562,"children":564},{"style":563},"--shiki-default:#6A737D",[565],{"type":37,"value":566},"\u002F\u002F Headless frontend: Storefront API mutation sonrası event push\n",{"type":32,"tag":556,"props":568,"children":570},{"class":558,"line":569},2,[571,577,582,588,594,600,605,610],{"type":32,"tag":556,"props":572,"children":574},{"style":573},"--shiki-default:#F97583",[575],{"type":37,"value":576},"async",{"type":32,"tag":556,"props":578,"children":579},{"style":573},[580],{"type":37,"value":581}," function",{"type":32,"tag":556,"props":583,"children":585},{"style":584},"--shiki-default:#B392F0",[586],{"type":37,"value":587}," addToCart",{"type":32,"tag":556,"props":589,"children":591},{"style":590},"--shiki-default:#E1E4E8",[592],{"type":37,"value":593},"(",{"type":32,"tag":556,"props":595,"children":597},{"style":596},"--shiki-default:#FFAB70",[598],{"type":37,"value":599},"variantId",{"type":32,"tag":556,"props":601,"children":602},{"style":590},[603],{"type":37,"value":604},", ",{"type":32,"tag":556,"props":606,"children":607},{"style":596},[608],{"type":37,"value":609},"quantity",{"type":32,"tag":556,"props":611,"children":612},{"style":590},[613],{"type":37,"value":614},") {\n",{"type":32,"tag":556,"props":616,"children":618},{"class":558,"line":617},3,[619,624,630,635,640,645,650],{"type":32,"tag":556,"props":620,"children":621},{"style":573},[622],{"type":37,"value":623},"  const",{"type":32,"tag":556,"props":625,"children":627},{"style":626},"--shiki-default:#79B8FF",[628],{"type":37,"value":629}," response",{"type":32,"tag":556,"props":631,"children":632},{"style":573},[633],{"type":37,"value":634}," =",{"type":32,"tag":556,"props":636,"children":637},{"style":573},[638],{"type":37,"value":639}," await",{"type":32,"tag":556,"props":641,"children":642},{"style":590},[643],{"type":37,"value":644}," storefrontAPI.",{"type":32,"tag":556,"props":646,"children":647},{"style":584},[648],{"type":37,"value":649},"cartLinesAdd",{"type":32,"tag":556,"props":651,"children":652},{"style":590},[653],{"type":37,"value":654},"({\n",{"type":32,"tag":556,"props":656,"children":658},{"class":558,"line":657},4,[659,664,669],{"type":32,"tag":556,"props":660,"children":661},{"style":590},[662],{"type":37,"value":663},"    cartId: ",{"type":32,"tag":556,"props":665,"children":666},{"style":584},[667],{"type":37,"value":668},"getCartId",{"type":32,"tag":556,"props":670,"children":671},{"style":590},[672],{"type":37,"value":673},"(),\n",{"type":32,"tag":556,"props":675,"children":677},{"class":558,"line":676},5,[678],{"type":32,"tag":556,"props":679,"children":680},{"style":590},[681],{"type":37,"value":682},"    lines: [{ merchandiseId: variantId, quantity }]\n",{"type":32,"tag":556,"props":684,"children":686},{"class":558,"line":685},6,[687],{"type":32,"tag":556,"props":688,"children":689},{"style":590},[690],{"type":37,"value":691},"  });\n",{"type":32,"tag":556,"props":693,"children":695},{"class":558,"line":694},7,[696],{"type":32,"tag":556,"props":697,"children":699},{"emptyLinePlaceholder":698},true,[700],{"type":37,"value":701},"\n",{"type":32,"tag":556,"props":703,"children":704},{"class":558,"line":26},[705],{"type":32,"tag":556,"props":706,"children":707},{"style":563},[708],{"type":37,"value":709},"  \u002F\u002F Custom event → GA4 + Mixpanel\n",{"type":32,"tag":556,"props":711,"children":713},{"class":558,"line":712},9,[714,719],{"type":32,"tag":556,"props":715,"children":716},{"style":573},[717],{"type":37,"value":718},"  if",{"type":32,"tag":556,"props":720,"children":721},{"style":590},[722],{"type":37,"value":723}," (response.cart) {\n",{"type":32,"tag":556,"props":725,"children":727},{"class":558,"line":726},10,[728,733,738],{"type":32,"tag":556,"props":729,"children":730},{"style":590},[731],{"type":37,"value":732},"    window.dataLayer.",{"type":32,"tag":556,"props":734,"children":735},{"style":584},[736],{"type":37,"value":737},"push",{"type":32,"tag":556,"props":739,"children":740},{"style":590},[741],{"type":37,"value":654},{"type":32,"tag":556,"props":743,"children":745},{"class":558,"line":744},11,[746,751,757],{"type":32,"tag":556,"props":747,"children":748},{"style":590},[749],{"type":37,"value":750},"      event: ",{"type":32,"tag":556,"props":752,"children":754},{"style":753},"--shiki-default:#9ECBFF",[755],{"type":37,"value":756},"'add_to_cart_success'",{"type":32,"tag":556,"props":758,"children":759},{"style":590},[760],{"type":37,"value":761},",\n",{"type":32,"tag":556,"props":763,"children":765},{"class":558,"line":764},12,[766],{"type":32,"tag":556,"props":767,"children":768},{"style":590},[769],{"type":37,"value":770},"      cart_id: response.cart.id,\n",{"type":32,"tag":556,"props":772,"children":774},{"class":558,"line":773},13,[775],{"type":32,"tag":556,"props":776,"children":777},{"style":590},[778],{"type":37,"value":779},"      latency_ms: response.extensions.cost.actualQueryCost,\n",{"type":32,"tag":556,"props":781,"children":783},{"class":558,"line":782},14,[784],{"type":32,"tag":556,"props":785,"children":786},{"style":590},[787],{"type":37,"value":788},"      variant_id: variantId\n",{"type":32,"tag":556,"props":790,"children":792},{"class":558,"line":791},15,[793],{"type":32,"tag":556,"props":794,"children":795},{"style":590},[796],{"type":37,"value":797},"    });\n",{"type":32,"tag":556,"props":799,"children":801},{"class":558,"line":800},16,[802,807,812],{"type":32,"tag":556,"props":803,"children":804},{"style":590},[805],{"type":37,"value":806},"  } ",{"type":32,"tag":556,"props":808,"children":809},{"style":573},[810],{"type":37,"value":811},"else",{"type":32,"tag":556,"props":813,"children":814},{"style":590},[815],{"type":37,"value":816}," {\n",{"type":32,"tag":556,"props":818,"children":820},{"class":558,"line":819},17,[821,825,829],{"type":32,"tag":556,"props":822,"children":823},{"style":590},[824],{"type":37,"value":732},{"type":32,"tag":556,"props":826,"children":827},{"style":584},[828],{"type":37,"value":737},{"type":32,"tag":556,"props":830,"children":831},{"style":590},[832],{"type":37,"value":654},{"type":32,"tag":556,"props":834,"children":836},{"class":558,"line":835},18,[837,841,846],{"type":32,"tag":556,"props":838,"children":839},{"style":590},[840],{"type":37,"value":750},{"type":32,"tag":556,"props":842,"children":843},{"style":753},[844],{"type":37,"value":845},"'add_to_cart_failure'",{"type":32,"tag":556,"props":847,"children":848},{"style":590},[849],{"type":37,"value":761},{"type":32,"tag":556,"props":851,"children":853},{"class":558,"line":852},19,[854,859,864,869,874],{"type":32,"tag":556,"props":855,"children":856},{"style":590},[857],{"type":37,"value":858},"      error: response.userErrors[",{"type":32,"tag":556,"props":860,"children":861},{"style":626},[862],{"type":37,"value":863},"0",{"type":32,"tag":556,"props":865,"children":866},{"style":590},[867],{"type":37,"value":868},"]?.message ",{"type":32,"tag":556,"props":870,"children":871},{"style":573},[872],{"type":37,"value":873},"||",{"type":32,"tag":556,"props":875,"children":876},{"style":753},[877],{"type":37,"value":878}," 'unknown'\n",{"type":32,"tag":556,"props":880,"children":882},{"class":558,"line":881},20,[883],{"type":32,"tag":556,"props":884,"children":885},{"style":590},[886],{"type":37,"value":797},{"type":32,"tag":556,"props":888,"children":890},{"class":558,"line":889},21,[891],{"type":32,"tag":556,"props":892,"children":893},{"style":590},[894],{"type":37,"value":895},"  }\n",{"type":32,"tag":556,"props":897,"children":899},{"class":558,"line":898},22,[900],{"type":32,"tag":556,"props":901,"children":902},{"style":590},[903],{"type":37,"value":904},"}\n",{"type":32,"tag":33,"props":906,"children":907},{},[908],{"type":37,"value":909},"Bu event'leri GA4'te \"Add to Cart Success Rate\" custom metric olarak tanımlayıp, headless rollout sırasında günlük izle. Target: baseline'dan -%2 sapma → investigation trigger.",{"type":32,"tag":40,"props":911,"children":913},{"id":912},"headless-stack-trade-offs-hydrogen-vs-nextjs-storefront-api",[914],{"type":37,"value":915},"Headless Stack Trade-offs: Hydrogen vs Next.js + Storefront API",{"type":32,"tag":33,"props":917,"children":918},{},[919],{"type":37,"value":920},"Shopify'ın kendi headless framework'ü Hydrogen, Remix tabanlı. Next.js alternatifi her zaman tartışılır. 2026'da ikisi arasındaki karar şu sayılara dayanıyor:",{"type":32,"tag":33,"props":922,"children":923},{},[924],{"type":32,"tag":55,"props":925,"children":926},{},[927],{"type":37,"value":928},"Bundle size:",{"type":32,"tag":311,"props":930,"children":931},{},[932,937],{"type":32,"tag":315,"props":933,"children":934},{},[935],{"type":37,"value":936},"Hydrogen: 180 KB (gzipped), Oxygen (Shopify'ın edge runtime) optimize",{"type":32,"tag":315,"props":938,"children":939},{},[940],{"type":37,"value":941},"Next.js 14 + Storefront SDK: 240 KB (gzipped), Vercel Edge optimize",{"type":32,"tag":33,"props":943,"children":944},{},[945],{"type":32,"tag":55,"props":946,"children":947},{},[948],{"type":37,"value":949},"Time to First Byte (TTFB):",{"type":32,"tag":311,"props":951,"children":952},{},[953,958,963],{"type":32,"tag":315,"props":954,"children":955},{},[956],{"type":37,"value":957},"Hydrogen (Oxygen hosting): ortalama 110ms (ABD east)",{"type":32,"tag":315,"props":959,"children":960},{},[961],{"type":37,"value":962},"Next.js (Vercel Edge): ortalama 95ms (ABD east)",{"type":32,"tag":315,"props":964,"children":965},{},[966],{"type":37,"value":967},"Next.js (Cloudflare Pages + Remix loader pattern): 80ms",{"type":32,"tag":33,"props":969,"children":970},{},[971],{"type":32,"tag":55,"props":972,"children":973},{},[974],{"type":37,"value":975},"Developer experience:",{"type":32,"tag":311,"props":977,"children":978},{},[979,984],{"type":32,"tag":315,"props":980,"children":981},{},[982],{"type":37,"value":983},"Hydrogen: Shopify primitive'leri built-in (Money, Image CDN), ama Remix routing learning curve var",{"type":32,"tag":315,"props":985,"children":986},{},[987],{"type":37,"value":988},"Next.js: geniş ekosistem, ama Shopify integration elle kurulmalı (Apollo Client + Storefront API)",{"type":32,"tag":33,"props":990,"children":991},{},[992,997,999,1008],{"type":32,"tag":55,"props":993,"children":994},{},[995],{"type":37,"value":996},"Karar matrisi:",{"type":37,"value":998}," Eğer Shopify'a %100 lock-in kabul edilebilirse → Hydrogen. Eğer gelecekte başka headless CMS\u002FPIM ekleyeceksen → Next.js + composable mimari. Roibase'in ",{"type":32,"tag":1000,"props":1001,"children":1005},"a",{"href":1002,"rel":1003},"https:\u002F\u002Fwww.roibase.com.tr\u002Ftr\u002Fheadless",[1004],"nofollow",[1006],{"type":37,"value":1007},"Headless Commerce",{"type":37,"value":1009}," hizmeti bu tradeoff'ları brand'ın teknik stack'ine göre modeller.",{"type":32,"tag":40,"props":1011,"children":1013},{"id":1012},"rollback-mekanizması-tek-tuşla-geri-dönüş",[1014],{"type":37,"value":1015},"Rollback Mekanizması: Tek Tuşla Geri Dönüş",{"type":32,"tag":33,"props":1017,"children":1018},{},[1019],{"type":37,"value":1020},"Headless migration sırasında \"kill switch\" olmadan production'a çıkma. Rollback süresi >10 dakika ise revenue loss başlar.",{"type":32,"tag":33,"props":1022,"children":1023},{},[1024],{"type":32,"tag":55,"props":1025,"children":1026},{},[1027],{"type":37,"value":1028},"Cloudflare Workers örneği:",{"type":32,"tag":546,"props":1030,"children":1032},{"className":548,"code":1031,"language":550,"meta":16,"style":16},"\u002F\u002F Edge'de traffic routing + instant rollback\nexport default {\n  async fetch(request, env) {\n    const url = new URL(request.url);\n    const rolloutPercent = await env.KV.get('HEADLESS_ROLLOUT_PERCENT'); \u002F\u002F KV store\n    const userHash = hashUserId(request.headers.get('CF-Connecting-IP'));\n\n    if (userHash % 100 \u003C parseInt(rolloutPercent)) {\n      \u002F\u002F Headless frontend (Vercel\u002FOxygen)\n      return fetch('https:\u002F\u002Fheadless.brand.com' + url.pathname, request);\n    } else {\n      \u002F\u002F Fallback: eski Shopify Liquid tema\n      return fetch('https:\u002F\u002Fbrand.myshopify.com' + url.pathname, request);\n    }\n  }\n};\n",[1033],{"type":32,"tag":303,"props":1034,"children":1035},{"__ignoreMap":16},[1036,1044,1061,1096,1128,1187,1231,1238,1276,1284,1315,1331,1339,1367,1375,1382],{"type":32,"tag":556,"props":1037,"children":1038},{"class":558,"line":559},[1039],{"type":32,"tag":556,"props":1040,"children":1041},{"style":563},[1042],{"type":37,"value":1043},"\u002F\u002F Edge'de traffic routing + instant rollback\n",{"type":32,"tag":556,"props":1045,"children":1046},{"class":558,"line":569},[1047,1052,1057],{"type":32,"tag":556,"props":1048,"children":1049},{"style":573},[1050],{"type":37,"value":1051},"export",{"type":32,"tag":556,"props":1053,"children":1054},{"style":573},[1055],{"type":37,"value":1056}," default",{"type":32,"tag":556,"props":1058,"children":1059},{"style":590},[1060],{"type":37,"value":816},{"type":32,"tag":556,"props":1062,"children":1063},{"class":558,"line":617},[1064,1069,1074,1078,1083,1087,1092],{"type":32,"tag":556,"props":1065,"children":1066},{"style":573},[1067],{"type":37,"value":1068},"  async",{"type":32,"tag":556,"props":1070,"children":1071},{"style":584},[1072],{"type":37,"value":1073}," fetch",{"type":32,"tag":556,"props":1075,"children":1076},{"style":590},[1077],{"type":37,"value":593},{"type":32,"tag":556,"props":1079,"children":1080},{"style":596},[1081],{"type":37,"value":1082},"request",{"type":32,"tag":556,"props":1084,"children":1085},{"style":590},[1086],{"type":37,"value":604},{"type":32,"tag":556,"props":1088,"children":1089},{"style":596},[1090],{"type":37,"value":1091},"env",{"type":32,"tag":556,"props":1093,"children":1094},{"style":590},[1095],{"type":37,"value":614},{"type":32,"tag":556,"props":1097,"children":1098},{"class":558,"line":657},[1099,1104,1109,1113,1118,1123],{"type":32,"tag":556,"props":1100,"children":1101},{"style":573},[1102],{"type":37,"value":1103},"    const",{"type":32,"tag":556,"props":1105,"children":1106},{"style":626},[1107],{"type":37,"value":1108}," url",{"type":32,"tag":556,"props":1110,"children":1111},{"style":573},[1112],{"type":37,"value":634},{"type":32,"tag":556,"props":1114,"children":1115},{"style":573},[1116],{"type":37,"value":1117}," new",{"type":32,"tag":556,"props":1119,"children":1120},{"style":584},[1121],{"type":37,"value":1122}," URL",{"type":32,"tag":556,"props":1124,"children":1125},{"style":590},[1126],{"type":37,"value":1127},"(request.url);\n",{"type":32,"tag":556,"props":1129,"children":1130},{"class":558,"line":676},[1131,1135,1140,1144,1148,1153,1158,1163,1168,1172,1177,1182],{"type":32,"tag":556,"props":1132,"children":1133},{"style":573},[1134],{"type":37,"value":1103},{"type":32,"tag":556,"props":1136,"children":1137},{"style":626},[1138],{"type":37,"value":1139}," rolloutPercent",{"type":32,"tag":556,"props":1141,"children":1142},{"style":573},[1143],{"type":37,"value":634},{"type":32,"tag":556,"props":1145,"children":1146},{"style":573},[1147],{"type":37,"value":639},{"type":32,"tag":556,"props":1149,"children":1150},{"style":590},[1151],{"type":37,"value":1152}," env.",{"type":32,"tag":556,"props":1154,"children":1155},{"style":626},[1156],{"type":37,"value":1157},"KV",{"type":32,"tag":556,"props":1159,"children":1160},{"style":590},[1161],{"type":37,"value":1162},".",{"type":32,"tag":556,"props":1164,"children":1165},{"style":584},[1166],{"type":37,"value":1167},"get",{"type":32,"tag":556,"props":1169,"children":1170},{"style":590},[1171],{"type":37,"value":593},{"type":32,"tag":556,"props":1173,"children":1174},{"style":753},[1175],{"type":37,"value":1176},"'HEADLESS_ROLLOUT_PERCENT'",{"type":32,"tag":556,"props":1178,"children":1179},{"style":590},[1180],{"type":37,"value":1181},"); ",{"type":32,"tag":556,"props":1183,"children":1184},{"style":563},[1185],{"type":37,"value":1186},"\u002F\u002F KV store\n",{"type":32,"tag":556,"props":1188,"children":1189},{"class":558,"line":685},[1190,1194,1199,1203,1208,1213,1217,1221,1226],{"type":32,"tag":556,"props":1191,"children":1192},{"style":573},[1193],{"type":37,"value":1103},{"type":32,"tag":556,"props":1195,"children":1196},{"style":626},[1197],{"type":37,"value":1198}," userHash",{"type":32,"tag":556,"props":1200,"children":1201},{"style":573},[1202],{"type":37,"value":634},{"type":32,"tag":556,"props":1204,"children":1205},{"style":584},[1206],{"type":37,"value":1207}," hashUserId",{"type":32,"tag":556,"props":1209,"children":1210},{"style":590},[1211],{"type":37,"value":1212},"(request.headers.",{"type":32,"tag":556,"props":1214,"children":1215},{"style":584},[1216],{"type":37,"value":1167},{"type":32,"tag":556,"props":1218,"children":1219},{"style":590},[1220],{"type":37,"value":593},{"type":32,"tag":556,"props":1222,"children":1223},{"style":753},[1224],{"type":37,"value":1225},"'CF-Connecting-IP'",{"type":32,"tag":556,"props":1227,"children":1228},{"style":590},[1229],{"type":37,"value":1230},"));\n",{"type":32,"tag":556,"props":1232,"children":1233},{"class":558,"line":694},[1234],{"type":32,"tag":556,"props":1235,"children":1236},{"emptyLinePlaceholder":698},[1237],{"type":37,"value":701},{"type":32,"tag":556,"props":1239,"children":1240},{"class":558,"line":26},[1241,1246,1251,1256,1261,1266,1271],{"type":32,"tag":556,"props":1242,"children":1243},{"style":573},[1244],{"type":37,"value":1245},"    if",{"type":32,"tag":556,"props":1247,"children":1248},{"style":590},[1249],{"type":37,"value":1250}," (userHash ",{"type":32,"tag":556,"props":1252,"children":1253},{"style":573},[1254],{"type":37,"value":1255},"%",{"type":32,"tag":556,"props":1257,"children":1258},{"style":626},[1259],{"type":37,"value":1260}," 100",{"type":32,"tag":556,"props":1262,"children":1263},{"style":573},[1264],{"type":37,"value":1265}," \u003C",{"type":32,"tag":556,"props":1267,"children":1268},{"style":584},[1269],{"type":37,"value":1270}," parseInt",{"type":32,"tag":556,"props":1272,"children":1273},{"style":590},[1274],{"type":37,"value":1275},"(rolloutPercent)) {\n",{"type":32,"tag":556,"props":1277,"children":1278},{"class":558,"line":712},[1279],{"type":32,"tag":556,"props":1280,"children":1281},{"style":563},[1282],{"type":37,"value":1283},"      \u002F\u002F Headless frontend (Vercel\u002FOxygen)\n",{"type":32,"tag":556,"props":1285,"children":1286},{"class":558,"line":726},[1287,1292,1296,1300,1305,1310],{"type":32,"tag":556,"props":1288,"children":1289},{"style":573},[1290],{"type":37,"value":1291},"      return",{"type":32,"tag":556,"props":1293,"children":1294},{"style":584},[1295],{"type":37,"value":1073},{"type":32,"tag":556,"props":1297,"children":1298},{"style":590},[1299],{"type":37,"value":593},{"type":32,"tag":556,"props":1301,"children":1302},{"style":753},[1303],{"type":37,"value":1304},"'https:\u002F\u002Fheadless.brand.com'",{"type":32,"tag":556,"props":1306,"children":1307},{"style":573},[1308],{"type":37,"value":1309}," +",{"type":32,"tag":556,"props":1311,"children":1312},{"style":590},[1313],{"type":37,"value":1314}," url.pathname, request);\n",{"type":32,"tag":556,"props":1316,"children":1317},{"class":558,"line":744},[1318,1323,1327],{"type":32,"tag":556,"props":1319,"children":1320},{"style":590},[1321],{"type":37,"value":1322},"    } ",{"type":32,"tag":556,"props":1324,"children":1325},{"style":573},[1326],{"type":37,"value":811},{"type":32,"tag":556,"props":1328,"children":1329},{"style":590},[1330],{"type":37,"value":816},{"type":32,"tag":556,"props":1332,"children":1333},{"class":558,"line":764},[1334],{"type":32,"tag":556,"props":1335,"children":1336},{"style":563},[1337],{"type":37,"value":1338},"      \u002F\u002F Fallback: eski Shopify Liquid tema\n",{"type":32,"tag":556,"props":1340,"children":1341},{"class":558,"line":773},[1342,1346,1350,1354,1359,1363],{"type":32,"tag":556,"props":1343,"children":1344},{"style":573},[1345],{"type":37,"value":1291},{"type":32,"tag":556,"props":1347,"children":1348},{"style":584},[1349],{"type":37,"value":1073},{"type":32,"tag":556,"props":1351,"children":1352},{"style":590},[1353],{"type":37,"value":593},{"type":32,"tag":556,"props":1355,"children":1356},{"style":753},[1357],{"type":37,"value":1358},"'https:\u002F\u002Fbrand.myshopify.com'",{"type":32,"tag":556,"props":1360,"children":1361},{"style":573},[1362],{"type":37,"value":1309},{"type":32,"tag":556,"props":1364,"children":1365},{"style":590},[1366],{"type":37,"value":1314},{"type":32,"tag":556,"props":1368,"children":1369},{"class":558,"line":782},[1370],{"type":32,"tag":556,"props":1371,"children":1372},{"style":590},[1373],{"type":37,"value":1374},"    }\n",{"type":32,"tag":556,"props":1376,"children":1377},{"class":558,"line":791},[1378],{"type":32,"tag":556,"props":1379,"children":1380},{"style":590},[1381],{"type":37,"value":895},{"type":32,"tag":556,"props":1383,"children":1384},{"class":558,"line":800},[1385],{"type":32,"tag":556,"props":1386,"children":1387},{"style":590},[1388],{"type":37,"value":1389},"};\n",{"type":32,"tag":33,"props":1391,"children":1392},{},[1393,1395,1401],{"type":37,"value":1394},"KV store'daki ",{"type":32,"tag":303,"props":1396,"children":1398},{"className":1397},[],[1399],{"type":37,"value":1400},"HEADLESS_ROLLOUT_PERCENT",{"type":37,"value":1402}," değişkenini Cloudflare dashboard'dan 1 saniyede değiştir → anında rollback. Bu pattern'i production'da 2025'te kullandık: checkout API timeout spike'ı 23:00'da tespit edildi, 60 saniyede %100 → %10'a düşürüldü, revenue loss $8k'da sınırlı kaldı.",{"type":32,"tag":40,"props":1404,"children":1406},{"id":1405},"kapanış-migration-başarısı-ölçüm-disipliniyle-gelir",[1407],{"type":37,"value":1408},"Kapanış: Migration Başarısı Ölçüm Disipliniyle Gelir",{"type":32,"tag":33,"props":1410,"children":1411},{},[1412,1414,1419],{"type":37,"value":1413},"Headless'a geçiş teknik mimari değişikliği değil, ",{"type":32,"tag":55,"props":1415,"children":1416},{},[1417],{"type":37,"value":1418},"canlı deney yönetimidir",{"type":37,"value":1420},". Big bang yaklaşımı, SEO ve checkout friction'ı aynı anda riske atar. Phased rollout, her aşamada somut metriklerle (ATC completion, GSC position, TTFB) ilerler. Rollback mekanizması edge'de tanımlıysa, hata maliyeti 10 dakikaya sığar.",{"type":32,"tag":33,"props":1422,"children":1423},{},[1424],{"type":37,"value":1425},"Eğer headless migration'ı risk yönetimi stratejisiyle planlamak istiyorsan, yukarıdaki roadmap somut başlangıç noktası. Bir sonraki adım: mevcut sitenin synthetic baseline'ını kurmak ve canary phase için %1 traffic routing mekanizmasını test etmek.",{"type":32,"tag":1427,"props":1428,"children":1429},"style",{},[1430],{"type":37,"value":1431},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":16,"searchDepth":617,"depth":617,"links":1433},[1434,1435,1438,1439,1440,1441],{"id":42,"depth":569,"text":45},{"id":86,"depth":569,"text":89,"children":1436},[1437],{"id":345,"depth":617,"text":348},{"id":481,"depth":569,"text":484},{"id":912,"depth":569,"text":915},{"id":1012,"depth":569,"text":1015},{"id":1405,"depth":569,"text":1408},"markdown","content:tr:tech:headless-e-ticaret-migration-roadmap-ve-risk-yonetimi.md","content","tr\u002Ftech\u002Fheadless-e-ticaret-migration-roadmap-ve-risk-yonetimi.md","tr\u002Ftech\u002Fheadless-e-ticaret-migration-roadmap-ve-risk-yonetimi","md",1779285859569]