Takip et

Next.js 15 Uygulamamız Bir Gecede Trafiğinin %80’ini Neden Kaybetti (Ve Nasıl Düzelttik) 📉

Çözüm: React. memo ve useCallback/useMemo hook’larını kullanarak bileşenlerimizi ve fonksiyonlarımızı memoize ettik.

Next.js 15 Uygulamamız Bir Gecede Trafiğinin %80’ini Neden Kaybetti (Ve Nasıl Düzelttik) 📉

Bir web uygulamasının trafiğini bir gecede %80 oranında kaybetmesi, her geliştiricinin kabusudur. Next.js 15’e geçişimiz sonrası yaşadığımız bu dramatik düşüş, bizi derinlemesine bir incelemeye ve köklü çözümler bulmaya itti. Bu makalede, düşüşün nedenlerini, tespit süreçlerimizi ve uygulamamızı nasıl eski sağlığına kavuşturduğumuzu detaylıca inceleyeceğiz.

Performans Düşüşleri ve Optimizasyon Eksiklikleri

Next.js 15’e yükseltme sonrası, uygulamamızın performans metriklerinde ciddi bozulmalar gözlemledik. Bu durum, doğrudan kullanıcı deneyimini etkileyerek trafik kaybına yol açtı. Yükleme sürelerinin uzaması, sayfa geçişlerinin yavaşlaması ve etkileşim gecikmeleri kullanıcıların sitemizden hızla ayrılmasına neden oldu.

Gereksiz Yeniden Oluşturmalar ve Bileşen Optimizasyonu

Next.js 15 ile birlikte React’ın yeni özelliklerini ve optimizasyonlarını benimserken, bazı bileşenlerimizin gereksiz yere yeniden oluşturulduğunu fark ettik. Özellikle büyük ve veri yoğun sayfalarda, küçük bir prop değişikliği tüm bileşen ağacının yeniden render edilmesine neden oluyordu.

Çözüm: React.memo ve useCallback/useMemo hook’larını kullanarak bileşenlerimizi ve fonksiyonlarımızı memoize ettik. Ayrıca, Context API yerine daha hedefli prop drilling veya Zustand/Jotai gibi hafif durum yönetim kütüphanelerine yöneldik.


import React from 'react';

const MyOptimizedComponent = React.memo(({ data }) => {
  // Sadece 'data' değiştiğinde render edilir
  return (
    

{data.title}

); }); export default MyOptimizedComponent;

Resim ve Medya Optimizasyonu Sorunları

Next.js'in önceki sürümlerindeki next/image bileşeni harika çalışırken, Next.js 15'e geçişle birlikte bazı resimlerin yanlış boyutlandırıldığını veya optimize edilmediğini gördük. Özellikle dinamik olarak yüklenen resimlerde bu sorun belirgindi.

Çözüm: next/image bileşeninin yeni özelliklerini ve prop'larını detaylıca inceledik. Resimlerin doğru width, height ve sizes prop'ları ile tanımlandığından emin olduk. Ayrıca, resimlerin CDN üzerinden sunulduğunu ve uygun formatlarda (WebP, AVIF) dönüştürüldüğünü doğruladık.

Sunucu Tarafı Oluşturma (SSR) ve Statik Site Oluşturma (SSG) Yanlış Kullanımı

Next.js'in gücü, farklı render stratejileri sunmasıdır. Ancak Next.js 15'e yükseltme sonrası, bazı sayfalarımızın gereksiz yere SSR kullandığını, halbuki SSG veya ISR (Incremental Static Regeneration) için uygun olduğunu fark ettik. Bu durum, sunucu yükünü artırarak yanıt sürelerini uzatıyordu.

Çözüm: Her sayfanın veri gereksinimlerini ve güncelleme sıklığını analiz ederek en uygun render stratejisini belirledik. Statik içeriğe sahip sayfalar için getStaticProps, sık güncellenen ancak statik olabilecek sayfalar için getStaticProps ve revalidate ile ISR, dinamik ve kullanıcıya özel içerikler için getServerSideProps kullandık.

Render Stratejileri Karşılaştırması:

Strateji Açıklama Kullanım Alanı
SSG (Static Site Generation) Build zamanında HTML oluşturulur. Blog yazıları, ürün sayfaları (değişmeyen).
ISR (Incremental Static Regeneration) Build zamanında oluşturulur, belirli aralıklarla yeniden oluşturulur. Sık güncellenen bloglar, haber siteleri.
SSR (Server-Side Rendering) Her istekte sunucuda HTML oluşturulur. Kişiye özel paneller, dinamik içerikler.

Bundle Boyutu ve Kod Bölme (Code Splitting) Problemleri

Yeni bağımlılıklar ekledikçe veya mevcutları güncelledikçe, JavaScript bundle boyutumuzun Next.js 15 geçişiyle birlikte arttığını gördük. Bu durum, özellikle mobil cihazlarda yavaş yüklemelere neden oluyordu.

Çözüm: @next/bundle-analyzer gibi araçlarla bundle boyutunu analiz ettik. Dinamik import kullanarak sadece ihtiyaç duyulan kodun yüklenmesini sağladık. Gereksiz kütüphaneleri kaldırdık ve ağaç sallama (tree-shaking) özelliklerini doğru kullandığımızdan emin olduk.


import dynamic from 'next/dynamic';

const DynamicComponent = dynamic(() => import('../components/HeavyComponent'), {
  loading: () => 

Yükleniyor...

, }); function MyPage() { return (

Sayfam

); }

SEO Etkileyen Teknik Sorunlar

Trafik düşüşünün en büyük nedenlerinden biri, arama motorlarının uygulamamızı doğru şekilde tarayamaması veya dizine ekleyememesiydi. Next.js 15 geçişiyle birlikte bazı SEO ayarlarının bozulduğunu veya gözden kaçtığını tespit ettik.

Meta Etiketleri ve Başlık Yapılandırması

Bazı sayfalarımızın </code> ve <code><meta description></code> etiketlerinin eksik veya yanlış olduğunu fark ettik. Özellikle dinamik rotalarda bu sorun daha belirgindi.</p> <p><b>Çözüm:</b> Next.js'in <code>next/head</code> veya <code>next/script</code> bileşenlerini kullanarak her sayfa için dinamik ve doğru meta etiketleri oluşturduk. SEO ekibimizle birlikte anahtar kelime araştırması yaparak içerik optimizasyonuna gittik.</p> <h4>Site Haritası (Sitemap) ve Robots.txt Hataları</h4> <p>Uygulamamızın site haritası Next.js 15 geçişiyle birlikte güncellenmemişti ve bazı yeni sayfalar dizine eklenemiyordu. Ayrıca, <code>robots.txt</code> dosyasında yanlışlıkla önemli sayfaları engellediğimizi fark ettik.</p> <p><b>Çözüm:</b> Otomatik site haritası oluşturma eklentilerini (örneğin, <code>next-sitemap</code>) kullanarak site haritamızı güncelledik ve her dağıtım sonrası otomatik olarak yenilenmesini sağladık. <code>robots.txt</code> dosyasını dikkatlice gözden geçirerek arama motorlarının tüm önemli sayfalarımızı tarayabildiğinden emin olduk.</p> <h4>Dizin Oluşturma (Indexing) ve Taranabilirlik (Crawlability) Sorunları</h4> <p>Google Search Console verilerini incelediğimizde, Next.js 15'e geçiş sonrası bazı sayfalarımızın taranamadığını veya dizine eklenemediğini gördük. Bu durum, muhtemelen JavaScript hataları veya sunucu yanıt sürelerinin uzamasıyla ilgiliydi.</p> <p><b>Çözüm:</b> Sunucu loglarını ve tarayıcı konsolundaki hataları inceleyerek JavaScript hatalarını giderdik. Sunucu yanıt sürelerini düşürerek arama motoru botlarının daha hızlı ve verimli bir şekilde sayfalarımızı taramasını sağladık. Ayrıca, <code>noindex</code> etiketlerinin yanlışlıkla kullanılmadığından emin olduk.</p> <h4>Hatalı Yönlendirmeler (Redirects) ve Kırık Bağlantılar</h4> <p>Uygulama içinde veya dışından gelen bazı bağlantıların Next.js 15 geçişiyle birlikte 404 hatalarına yol açtığını tespit ettik. Özellikle URL yapılarında yapılan değişiklikler bu duruma neden olmuştu.</p> <p><b>Çözüm:</b> Tüm kırık bağlantıları tespit etmek için bir denetim aracı kullandık. Gerekli yerlerde 301 yönlendirmeleri (kalıcı) ve 302 yönlendirmeleri (geçici) uygulayarak kullanıcıları ve arama motorlarını doğru sayfalara yönlendirdik. Next.js'in <code>next.config.js</code> dosyasındaki <code>redirects</code> özelliğini aktif olarak kullandık.</p> <pre><code class="language-javascript"> // next.config.js module.exports = { async redirects() { return [ { source: '/eski-sayfa', destination: '/yeni-sayfa', permanent: true, // 301 yönlendirmesi }, { source: '/urunler/:slug', destination: '/kategori/urunler/:slug', permanent: true, }, ]; }, }; </pre> <p></code></p> <h3>Altyapı ve Dağıtım Hataları</h3> <p>Next.js 15'e yükseltme, sadece kod tabanında değil, altyapı ve dağıtım süreçlerimizde de beklenmedik sorunlara yol açtı.</p> <h4>Sunucu Yükü ve Ölçeklenebilirlik Sorunları</h4> <p>Next.js 15'in bazı yeni özelliklerinin veya bağımlılıklarının sunucu tarafında daha fazla kaynak tükettiğini fark ettik. Özellikle SSR kullanılan sayfalarda sunucu yanıt süreleri uzamış ve CPU kullanımı artmıştı.</p> <p><b>Çözüm:</b> Sunucu kaynaklarını (CPU, RAM) artırdık ve otomatik ölçeklendirme kurallarımızı gözden geçirdik. Next.js uygulamasını daha verimli bir şekilde çalıştırmak için Node.js çalışma zamanı optimizasyonları yaptık (örneğin, PM2 gibi bir süreç yöneticisi kullanmak).</p> <h4>CDN Yapılandırma Hataları</h4> <p>CDN (İçerik Dağıtım Ağı) yapılandırmamız Next.js 15'in yeni statik dosya işleme mekanizmasıyla tam uyumlu değildi. Bazı statik varlıklar (CSS, JS, resimler) doğru bir şekilde önbelleğe alınmıyor veya eski sürümleri sunuluyordu.</p> <p><b>Çözüm:</b> CDN ayarlarımızı Next.js'in statik varlık dağıtım stratejisine göre güncelledik. Önbellekleme sürelerini (TTL) optimize ettik ve dağıtım sonrası CDN önbelleğini temizleme süreçlerini otomatikleştirdik.</p> <h4>Veritabanı ve API Performans Darboğazları</h4> <p>Uygulamanın Next.js 15'e yükseltilmesiyle birlikte, veritabanı sorgularının veya harici API çağrılarının yanıt sürelerinde artış olduğunu gözlemledik. Bu durum, özellikle <code>getServerSideProps</code> kullanan sayfalarda kritik bir darboğaz oluşturuyordu.</p> <p><b>Çözüm:</b> Veritabanı sorgularını optimize ettik, indekslemeyi kontrol ettik ve gereksiz veri çekimlerini azalttık. Harici API çağrıları için önbellekleme mekanizmaları (örneğin, Redis) uyguladık ve API yanıt sürelerini düşürmek için sağlayıcılarla iletişime geçtik.</p> <h4>Dağıtım Sürecindeki Hatalar ve Rollback Eksikliği</h4> <p>Next.js 15 dağıtımı sırasında otomasyon eksiklikleri ve yetersiz test süreçleri nedeniyle hatalı bir sürümün canlıya çıktığını fark ettik. Ayrıca, hızlı bir geri alma (rollback) mekanizmamızın olmaması durumu daha da kötüleştirdi.</p> <p><b>Çözüm:</b> CI/CD (Sürekli Entegrasyon/Sürekli Dağıtım) süreçlerimizi güçlendirdik. Dağıtım öncesi kapsamlı entegrasyon ve performans testleri ekledik. Hızlı ve güvenli bir geri alma (rollback) stratejisi oluşturarak, olası sorunlarda eski sürüme anında dönebilme yeteneği kazandık.</p> <h3>Kullanıcı Deneyimi (UX) ve İçerik Problemleri</h3> <p>Performans ve SEO sorunlarının yanı sıra, kullanıcı deneyimini doğrudan etkileyen faktörler de trafik kaybımıza katkıda bulundu.</p> <h4>Yavaş Yükleme Süreleri ve Core Web Vitals</h4> <p>Google'ın Core Web Vitals metrikleri (LCP, FID, CLS) Next.js 15 geçişiyle birlikte kötüleşmişti. Bu durum, hem SEO sıralamalarımızı düşürdü hem de kullanıcıların sabrını zorladı.</p> <p><b>Çözüm:</b> Lighthouse ve PageSpeed Insights gibi araçlarla düzenli denetimler yaparak Core Web Vitals metriklerini sürekli izledik. Resim optimizasyonu, kritik CSS'in satır içi (inline) olarak yüklenmesi, JavaScript bundle boyutunun küçültülmesi gibi performans iyileştirmelerine odaklandık.</p> <h4>Mobil Uyumluluk Sorunları</h4> <p>Next.js 15'e geçişle birlikte bazı CSS veya layout hataları mobil cihazlarda beklenmedik görsel bozukluklara yol açmıştı. Bu durum, mobil kullanıcıların uygulamayı terk etmesine neden oldu.</p> <p><b>Çözüm:</b> Farklı mobil cihazlarda ve tarayıcılarda kapsamlı testler yaptık. Responsive tasarım prensiplerine uygun olmayan CSS kurallarını düzelttik ve mobil öncelikli geliştirme yaklaşımını benimsedik.</p> <h4>Erişilebilirlik (Accessibility) Eksiklikleri</h4> <p>Erişilebilirlik, genellikle göz ardı edilen ancak kullanıcı deneyimi için kritik bir faktördür. Next.js 15 geçişiyle birlikte bazı yeni bileşenlerin veya etkileşimlerin erişilebilirlik standartlarına uymadığını fark ettik.</p> <p><b>Çözüm:</b> WCAG (Web İçeriği Erişilebilirlik Yönergeleri) standartlarına uygunluk için erişilebilirlik denetimleri yaptık. Anlamsal HTML kullanımı, ARIA nitelikleri ve klavye navigasyonu gibi konulara dikkat ederek uygulamamızı daha kapsayıcı hale getirdik.</p> <h4>Kullanıcıyı İlgilendirmeyen veya Eski İçerik</h4> <p>Teknik sorunların yanı sıra, bazı sayfalarımızdaki içeriğin güncel olmaması veya kullanıcıların ihtiyaçlarını karşılamaması da trafik kaybına katkıda bulundu.</p> <p><b>Çözüm:</b> İçerik stratejimizi gözden geçirdik. Düzenli olarak içerik denetimleri yaparak eski veya alakasız içerikleri güncelledik, iyileştirdik veya kaldırdık. Kullanıcı geri bildirimlerini dikkate alarak yeni ve değerli içerikler oluşturmaya odaklandık.</p> <h3>Üçüncü Taraf Entegrasyonları ve Bağımlılıklar</h3> <p>Uygulamamızın dış bağımlılıkları ve entegrasyonları, Next.js 15 yükseltmesi sonrası beklenmedik sorunlara yol açtı.</p> <h4>API Entegrasyon Hataları</h4> <p>Üçüncü taraf API'lar ile olan entegrasyonlarımızda Next.js 15 geçişiyle birlikte uyumsuzluklar veya performans düşüşleri yaşandı. Özellikle API çağrılarının yanıt süreleri uzamış veya hatalar dönüyordu.</p> <p><b>Çözüm:</b> Tüm üçüncü taraf API entegrasyonlarını gözden geçirdik. API dokümantasyonlarını kontrol ederek uyumluluk sorunlarını giderdik. Hata işleme mekanizmalarını güçlendirdik ve API çağrıları için zaman aşımı (timeout) limitleri belirledik.</p> <h4>Kütüphane ve Paket Çakışmaları</h4> <p><code>package.json</code> dosyamızdaki bazı kütüphanelerin Next.js 15 ile uyumsuz olduğunu veya birbiriyle çakıştığını tespit ettik. Bu durum, çalışma zamanı hatalarına ve uygulamanın kararsız çalışmasına neden oluyordu.</p> <p><b>Çözüm:</b> Tüm bağımlılıkları güncelledik ve uyumsuz olanları tespit ederek alternatif çözümler bulduk. <code>npm outdated</code> veya <code>yarn outdated</code> komutlarını düzenli olarak kullanarak bağımlılıklarımızı güncel tuttuk. Gerekirse, <code>package-lock.json</code> veya <code>yarn.lock</code> dosyalarını yeniden oluşturduk.</p> <h4>Analytics ve İzleme Kodlarının Performans Etkisi</h4> <p>Google Analytics, Hotjar gibi izleme araçlarının veya reklam kodlarının Next.js 15 geçişi sonrası performans üzerinde daha büyük bir etkiye sahip olduğunu fark ettik.</p> <p><b>Çözüm:</b> İzleme kodlarını optimize ettik. Gereksiz veya kullanılmayan izleme araçlarını kaldırdık. <code>next/script</code> bileşenini kullanarak bu kodların asenkron veya ertelenmiş (deferred) olarak yüklenmesini sağladık, böylece sayfa yüklemesini engellemediler.</p> <h4>Güvenlik Açıkları ve Güncel Olmayan Bağımlılıklar</h4> <p>Eski veya güncel olmayan bağımlılıklar, güvenlik açıklarına yol açabilir ve uygulamanın bütünlüğünü tehlikeye atabilir. Next.js 15 yükseltmesi sırasında bu tür potansiyel riskleri gözden kaçırmıştık.</p> <p><b>Çözüm:</b> Bağımlılıklarımızı düzenli olarak güvenlik açıkları açısından taradık (örneğin, <code>npm audit</code>). Tüm bağımlılıkları güncel tutarak bilinen güvenlik açıklarını kapattık. Güvenlik politikalarımızı gözden geçirerek uygulamanın genel güvenliğini artırdık.</p> <h3>Veri Analizi ve İzleme Eksiklikleri</h3> <p>Trafik düşüşünü ilk başta fark etmemizdeki gecikme, yeterli izleme ve analiz araçlarına sahip olmamamızdan kaynaklanıyordu.</p> <h4>Gerçek Zamanlı İzleme ve Uyarı Sistemleri</h4> <p>Next.js 15 geçişi sonrası, uygulamamızdaki performans düşüşlerini veya hataları gerçek zamanlı olarak tespit edemediğimizi fark ettik.</p> <p><b>Çözüm:</b> Uygulama performansını izlemek için Prometheus, Grafana gibi araçları entegre ettik. Hata izleme için Sentry veya New Relic gibi hizmetleri kullanarak kritik hatalarda anında uyarı almayı sağladık. Sunucu loglarını merkezi bir sistemde (örneğin, ELK Stack) topladık.</p> <h4>Google Analytics ve Search Console Verilerinin Yorumlanması</h4> <p>Trafik düşüşünü fark ettikten sonra Google Analytics ve Search Console verilerini detaylıca inceledik. Bu veriler, hangi sayfaların etkilendiğini, hangi anahtar kelimelerin sıralama kaybettiğini ve kullanıcı davranışındaki değişiklikleri anlamamıza yardımcı oldu.</p> <p><b>Çözüm:</b> Düzenli olarak Google Analytics ve Search Console verilerini analiz etmeyi bir rutin haline getirdik. Özellikle organik trafik, sayfa görüntülemeleri, hemen çıkma oranı ve ortalama oturum süresi gibi metrikleri yakından takip ettik.</p> <h4>A/B Testi ve Kullanıcı Geri Bildirimlerinin Önemi</h4> <p>Yeni özelliklerin veya tasarım değişikliklerinin kullanıcı deneyimi üzerindeki etkisini ölçmek için A/B testleri yapmamıştık. Ayrıca, kullanıcı geri bildirimlerini toplama mekanizmalarımız yetersizdi.</p> <p><b>Çözüm:</b> Yeni özellikler veya önemli değişiklikler öncesinde A/B testleri yaparak potansiyel olumsuz etkileri önceden tespit etmeyi öğrendik. Kullanıcı geri bildirimlerini toplamak için anketler, formlar ve doğrudan iletişim kanalları oluşturduk.</p> <h4>Log Kayıtları ve Hata Ayıklama</h4> <p>Uygulama genelinde oluşan hataları veya performans sorunlarını tespit etmek için yeterli loglama ve hata ayıklama mekanizmalarımız yoktu.</p> <p><b>Çözüm:</b> Uygulama genelinde kapsamlı loglama stratejileri uyguladık. Hata mesajlarını, uyarıları ve önemli olayları loglayarak sorun giderme süreçlerini hızlandırdık. Next.js'in geliştirme araçlarını ve tarayıcı konsolunu daha etkin bir şekilde kullandık.</p> <h3>Çözüm Yolları ve Gelecek Stratejileri</h3> <p>Trafik kaybını telafi etmek ve gelecekte benzer sorunları önlemek için kapsamlı bir strateji belirledik.</p> <h4>Kapsamlı Performans Denetimi ve Optimizasyon</h4> <p>Uygulamamızın tüm kritik sayfalarında düzenli olarak performans denetimleri (Lighthouse, Web Vitals) yapmayı taahhüt ettik. Resim optimizasyonu, kod bölme, önbellekleme ve sunucu tarafı render stratejilerini sürekli optimize etmeye devam ettik.</p> <p><b>Adımlar:</b></p> <ul> <li>Her dağıtım öncesi otomatik performans testleri.</li> <li>Kritik kullanıcı akışları için sentetik izleme.</li> <li>Gerçek kullanıcı izleme (RUM) araçları ile performans takibi.</li> </ul> <h4>SEO Denetimi ve Teknik İyileştirmeler</h4> <p>Arama motoru sıralamalarımızı geri kazanmak için kapsamlı bir SEO denetimi gerçekleştirdik. Meta etiketleri, site haritası, <code>robots.txt</code> ve yönlendirmeleri sürekli güncel tutmayı bir öncelik haline getirdik.</p> <p><b>Adımlar:</b></p> <ul> <li>Periyodik teknik SEO denetimleri.</li> <li>Anahtar kelime araştırması ve içerik optimizasyonu.</li> <li>Backlink profili analizi ve iyileştirmesi.</li> </ul> <h4>Altyapı ve Dağıtım Süreçlerinin Gözden Geçirilmesi</h4> <p>Daha sağlam ve güvenilir bir altyapı için dağıtım süreçlerimizi otomatikleştirdik, test kapsamını genişlettik ve hızlı geri alma mekanizmaları oluşturduk.</p> <p><b>Adımlar:</b></p> <ul> <li>CI/CD pipeline'larının güçlendirilmesi.</li> <li>Otomatik ölçeklenebilirlik ve yük dengeleme çözümleri.</li> <li>Felaket kurtarma (disaster recovery) planları.</li> </ul> <h4>Sürekli İzleme ve Geri Bildirim Mekanizmaları</h4> <p>Gelecekte benzer sorunların erken tespiti için kapsamlı izleme ve uyarı sistemleri kurduk. Kullanıcı geri bildirimlerini aktif olarak dinleyerek uygulamamızı sürekli iyileştirmeyi hedefledik.</p> <p><b>Adımlar:</b></p> <ul> <li>Gerçek zamanlı performans ve hata izleme<br /> </div> <div class="cs-entry__footer"> <div class="cs-entry__footer-left"> <div class="cs-entry__post-meta" ><div class="cs-meta-author"><a class="cs-meta-author-link url fn n" href="https://fatihsoysal.com/blog/author/fatihsoysal/"><span class="cs-meta-author-by">by</span><span class="cs-meta-author-name">Fatih Soysal</span></a></div><div class="cs-meta-comments"><a href="https://fatihsoysal.com/blog/next-js-15-uygulamamiz-bir-gecede-trafiginin-%80ini-neden-kaybetti-ve-nasil-duzelttik-%f0%9f%93%89/#respond" class="comments-link" >0</a></div></div> </div> <div class="cs-entry__footer-right"> <div class="cs-share"> <a class="cs-share__link" target="_blank" href="https://www.facebook.com/sharer.php?text=Next.js%2015%20Uygulamam%C4%B1z%20Bir%20Gecede%20Trafi%C4%9Finin%20%2580%E2%80%99ini%20Neden%20Kaybetti%20%28Ve%20Nas%C4%B1l%20D%C3%BCzelttik%29%20%F0%9F%93%89&u=https://fatihsoysal.com/blog/next-js-15-uygulamamiz-bir-gecede-trafiginin-%80ini-neden-kaybetti-ve-nasil-duzelttik-%f0%9f%93%89/"> <i class="cs-icon cs-icon-facebook"></i> </a> <a class="cs-share__link" target="_blank" href="https://twitter.com/share?t=Next.js%2015%20Uygulamam%C4%B1z%20Bir%20Gecede%20Trafi%C4%9Finin%20%2580%E2%80%99ini%20Neden%20Kaybetti%20%28Ve%20Nas%C4%B1l%20D%C3%BCzelttik%29%20%F0%9F%93%89&url=https://fatihsoysal.com/blog/next-js-15-uygulamamiz-bir-gecede-trafiginin-%80ini-neden-kaybetti-ve-nasil-duzelttik-%f0%9f%93%89/"> <i class="cs-icon cs-icon-twitter-x"></i> </a> <a class="cs-share__link" target="_blank" href="https://t.me/share/url?url=%5BURL%5D&text=https://fatihsoysal.com/blog/next-js-15-uygulamamiz-bir-gecede-trafiginin-%80ini-neden-kaybetti-ve-nasil-duzelttik-%f0%9f%93%89/"> <i class="cs-icon cs-icon-telegram"></i> </a> <a class="cs-share__link cs-share__copy-link" target="_blank" href="https://fatihsoysal.com/blog/next-js-15-uygulamamiz-bir-gecede-trafiginin-%80ini-neden-kaybetti-ve-nasil-duzelttik-%f0%9f%93%89/"> <i class="cs-icon cs-icon-link"></i> </a> </div> </div> </div> <div class="cs-entry__comments" id="comments"> <div class="cs-entry__comments-header"> <div class="cs-entry__comments-left"> <div class="cs-entry__comments-heading">Yorumlar</div> <div class="cs-entry__comments-description h2">İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.</div> </div> <div class="cs-entry__comments-right"> <div class="cs-entry__comments-toggle"> <span class="cs-button" role="button" aria-label="Yorumlar"> <span>Yorum Yaz</span> </span> </div> </div> </div> <div class="cs-entry__comments-inner"> <div id="respond" class="comment-respond"> <h2 id="reply-title" class="comment-reply-title">Bir yanıt yazın <small><a rel="nofollow" id="cancel-comment-reply-link" href="/blog/next-js-15-uygulamamiz-bir-gecede-trafiginin-%80ini-neden-kaybetti-ve-nasil-duzelttik-%f0%9f%93%89/#respond" style="display:none;">Yanıtı iptal et</a></small></h2><form action="https://fatihsoysal.com/blog/wp-comments-post.php" method="post" id="commentform" class="comment-form" novalidate><p class="comment-notes"><span id="email-notes">E-posta adresiniz yayınlanmayacak.</span> <span class="required-field-message">Gerekli alanlar <span class="required">*</span> ile işaretlenmişlerdir</span></p><p class="comment-form-comment"><textarea id="comment" name="comment" cols="45" rows="8" maxlength="65525" required="required" aria-required="true" placeholder="Your Comment *"></textarea></p><p class="comment-form-author"><input id="author" name="author" type="text" value="" size="30" aria-required='true' placeholder="Your Name *" /></p> <p class="comment-form-email"><input id="email" name="email" type="email" value="" size="30" aria-required='true' placeholder="Your E-mail *" /></p> <p class="comment-form-cookies-consent"><input id="wp-comment-cookies-consent" name="wp-comment-cookies-consent" type="checkbox" value="yes"><label for="wp-comment-cookies-consent">Save my name and email in this browser for the next time I comment.</label></p> <p class="form-submit"><button name="submit" type="submit" id="submit" class="submit" value="Yorum gönder" />Gönder </button> <input type='hidden' name='comment_post_ID' value='41103' id='comment_post_ID' /> <input type='hidden' name='comment_parent' id='comment_parent' value='0' /> </p><p style="display: none;"><input type="hidden" id="akismet_comment_nonce" name="akismet_comment_nonce" value="996c0db330" /></p><p style="display: none !important;" class="akismet-fields-container" data-prefix="ak_"><label>Δ<textarea name="ak_hp_textarea" cols="45" rows="8" maxlength="100"></textarea></label><input type="hidden" id="ak_js_1" name="ak_js" value="119"/><script> document.getElementById( "ak_js_1" ).setAttribute( "value", ( new Date() ).getTime() ); </script> </p></form> </div><!-- #respond --> </div> </div> </div> </div> </div> </div> </div> <section class="cs-read-next"> <h2 class="cs-read-next__heading"> Aşağıdaki içerikler de ilgilinizi çekebilir: </h2> <div class="cs-read-next__list cs-posts-area__archive"> <article class="cs-read-next__item post-41104 post type-post status-publish format-standard category-genel cs-entry cs-video-wrap"> <div class="cs-entry__outer"> <div class="cs-entry__inner cs-entry__content"> <div class="cs-entry__info"> <h2 class="cs-entry__title"><a href="https://fatihsoysal.com/blog/reklamsiz-deneyimin-gizli-maliyeti/">Reklamsız Deneyimin Gizli Maliyeti<div class="cs-entry__post-meta" ><div class="cs-meta-date">3 Mart 2026</div></div></a></h2> </div> </div> </div> </article> <article class="cs-read-next__item post-41106 post type-post status-publish format-standard category-genel cs-entry cs-video-wrap"> <div class="cs-entry__outer"> <div class="cs-entry__inner cs-entry__content"> <div class="cs-entry__info"> <h2 class="cs-entry__title"><a href="https://fatihsoysal.com/blog/yapay-zekanin-gelecegi-at-arabasi-metaforunun-otesinde-12-radikal-fikir/">Yapay Zeka’nın Geleceği: At Arabası Metaforunun Ötesinde 12 Radikal Fikir<div class="cs-entry__post-meta" ><div class="cs-meta-date">3 Mart 2026</div></div></a></h2> </div> </div> </div> </article> <article class="cs-read-next__item post-41108 post type-post status-publish format-standard category-genel cs-entry cs-video-wrap"> <div class="cs-entry__outer"> <div class="cs-entry__inner cs-entry__content"> <div class="cs-entry__info"> <h2 class="cs-entry__title"><a href="https://fatihsoysal.com/blog/giris-swap-alani-nedir-ve-neden-ihtiyac-duyariz/">Giriş: Swap Alanı Nedir ve Neden İhtiyaç Duyarız?<div class="cs-entry__post-meta" ><div class="cs-meta-date">3 Mart 2026</div></div></a></h2> </div> </div> </div> </article> <article class="cs-read-next__item post-41110 post type-post status-publish format-standard category-genel cs-entry cs-video-wrap"> <div class="cs-entry__outer"> <div class="cs-entry__inner cs-entry__content"> <div class="cs-entry__info"> <h2 class="cs-entry__title"><a href="https://fatihsoysal.com/blog/iliskisel-veritabanlarinda-joins-ve-pencere-fonksiyonlari-derinlemesine-bir-bakis/">İlişkisel Veritabanlarında Joins ve Pencere Fonksiyonları: Derinlemesine Bir Bakış<div class="cs-entry__post-meta" ><div class="cs-meta-date">3 Mart 2026</div></div></a></h2> </div> </div> </div> </article> </div> </section> <div class="cs-subscribe"> <div class="cs-subscribe__content"> <div class="cs-subscribe__header"> <div class="cs-subscribe__heading h2"> E-posta Bülteni </div> <div class="cs-subscribe__subheading h2"> Yazılım Topluluğuna Katılın </div> <div class="cs-subscribe__description"> En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim. </div> </div> <form class="cs-subscribe__form" action="https://codesupply.us13.list-manage.com/subscribe/post?u=41845cb8908fb4302a4df512f&id=b5a5e9c757" method="post" target="_blank" novalidate> <div class="cs-form-group cs-subscribe__form-group"> <input type="email" placeholder="Your E-mail" name="EMAIL" required> <button type="submit" value="Abone Ol" aria-label="Abone Ol" name="subscribe"> <span>Abone Ol</span> </button> </div> </form> </div> </div> </div> </div> </main> </div> </div> <footer class="cs-footer" data-scheme="auto" data-l="light" data-d="dark"> <div class="cs-footer__item cs-footer__item-top-bar"> <div class="cs-container"> <div class="cs-footer__item-inner"> <div class="cs-footer__col cs-col-left"> <div class="cs-footer-columns__nav-menu"> <ul id="menu-menu-5" class="cs-footer-columns__nav "><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-19194 csco-menu-item-style-none"><a href="https://fatihsoysal.com/"><span>Anasayfa</span></a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-11 csco-menu-item-style-none"><a href="https://fatihsoysal.com/blog/hakkimda/"><span>Hakkımda</span></a></li> <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-25363 csco-menu-item-style-none"><a href="#"><span>Eğitimler</span></a></li> <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-30019 csco-menu-item-style-none"><a href="#"><span>Makaleler</span></a></li> <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-home menu-item-69 csco-menu-item-style-none"><a href="https://fatihsoysal.com/blog"><span>Blog</span></a></li> <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-35075 csco-menu-item-style-none"><a href="#"><span>Kategoriler</span></a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-257 csco-menu-item-style-none"><a href="https://fatihsoysal.com/blog/iletisim/"><span>Bana Ulaşın</span></a></li> </ul> </div> </div> <div class="cs-footer__col cs-col-right"> <div class="cs-social"> <a class="cs-social__link" href="https://www.linkedin.com/in/fatihsoysal/" target="_blank" title="Linkedin"> <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><path d="M16.8169 2.00011H3.1831C3.02984 1.998 2.87767 2.02591 2.73526 2.08226C2.59286 2.13861 2.46302 2.22229 2.35316 2.32852C2.24329 2.43475 2.15556 2.56145 2.09496 2.70139C2.03437 2.84133 2.0021 2.99176 2 3.1441V16.8559C2.0021 17.0082 2.03437 17.1587 2.09496 17.2986C2.15556 17.4385 2.24329 17.5653 2.35316 17.6715C2.46302 17.7777 2.59286 17.8614 2.73526 17.9177C2.87767 17.9741 3.02984 18.002 3.1831 17.9999H16.8169C16.9702 18.002 17.1223 17.9741 17.2647 17.9177C17.4071 17.8614 17.537 17.7777 17.6468 17.6715C17.7567 17.5653 17.8444 17.4385 17.905 17.2986C17.9656 17.1587 17.9979 17.0082 18 16.8559V3.1441C17.9979 2.99176 17.9656 2.84133 17.905 2.70139C17.8444 2.56145 17.7567 2.43475 17.6468 2.32852C17.537 2.22229 17.4071 2.13861 17.2647 2.08226C17.1223 2.02591 16.9702 1.998 16.8169 2.00011ZM6.85312 15.3919H4.43863V8.19203H6.85312V15.3919ZM5.64588 7.18404C5.31289 7.18404 4.99354 7.05256 4.75808 6.81851C4.52262 6.58447 4.39034 6.26704 4.39034 5.93606C4.39034 5.60507 4.52262 5.28764 4.75808 5.0536C4.99354 4.81956 5.31289 4.68807 5.64588 4.68807C5.82269 4.66814 6.00175 4.68556 6.17133 4.73918C6.3409 4.7928 6.49717 4.88142 6.6299 4.99924C6.76264 5.11706 6.86883 5.26141 6.94155 5.42285C7.01426 5.58429 7.05185 5.75918 7.05185 5.93606C7.05185 6.11294 7.01426 6.28782 6.94155 6.44926C6.86883 6.6107 6.76264 6.75506 6.6299 6.87287C6.49717 6.99069 6.3409 7.07931 6.17133 7.13293C6.00175 7.18656 5.82269 7.20397 5.64588 7.18404ZM15.5614 15.3919H13.1469V11.528C13.1469 10.56 12.8008 9.928 11.9235 9.928C11.652 9.92998 11.3877 10.0146 11.1661 10.1705C10.9445 10.3264 10.7762 10.5461 10.6841 10.8C10.6211 10.988 10.5938 11.186 10.6036 11.384V15.3839H8.18913V8.18402H10.6036V9.20001C10.823 8.8217 11.142 8.51004 11.5263 8.29859C11.9106 8.08713 12.3457 7.98391 12.7847 8.00003C14.3944 8.00003 15.5614 9.03201 15.5614 11.248V15.3919Z"/></svg> </a> </div> </div> </div> </div> </div> <div class="cs-footer__item cs-footer__item-bottom-bar"> <div class="cs-container"> <div class="cs-footer__item-inner"> <div class="cs-footer__col cs-col-left"> <div class="cs-footer__nav-menu"> <ul id="menu-footer" class="cs-footer__nav "><li id="menu-item-39737" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39737"><a href="https://fatihsoysal.com/blog/category/ai/"><span>AI</span></a></li> <li id="menu-item-39739" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39739"><a href="https://fatihsoysal.com/blog/category/akademik-ve-bilimsel/"><span>Akademik ve Bilimsel</span></a></li> <li id="menu-item-39740" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39740"><a href="https://fatihsoysal.com/blog/category/angular/"><span>Angular</span></a></li> <li id="menu-item-39741" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39741"><a href="https://fatihsoysal.com/blog/category/aws/"><span>AWS</span></a></li> <li id="menu-item-39742" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39742"><a href="https://fatihsoysal.com/blog/category/azure/"><span>Azure</span></a></li> <li id="menu-item-39743" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39743"><a href="https://fatihsoysal.com/blog/category/bash/"><span>Bash</span></a></li> <li id="menu-item-39745" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39745"><a href="https://fatihsoysal.com/blog/category/c-2/"><span>C++</span></a></li> <li id="menu-item-39746" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39746"><a href="https://fatihsoysal.com/blog/category/cloud/"><span>Cloud</span></a></li> <li id="menu-item-39748" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39748"><a href="https://fatihsoysal.com/blog/category/devops/"><span>Devops</span></a></li> <li id="menu-item-39749" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39749"><a href="https://fatihsoysal.com/blog/category/docker/"><span>Docker</span></a></li> <li id="menu-item-39750" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39750"><a href="https://fatihsoysal.com/blog/category/dusunsel-ve-kisisel/"><span>Düşünsel ve Kişisel</span></a></li> <li id="menu-item-39751" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39751"><a href="https://fatihsoysal.com/blog/category/egitim/"><span>Eğitim</span></a></li> <li id="menu-item-39752" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39752"><a href="https://fatihsoysal.com/blog/category/flutter/"><span>Flutter</span></a></li> <li id="menu-item-39754" class="menu-item menu-item-type-taxonomy menu-item-object-category current-post-ancestor current-menu-parent current-post-parent menu-item-39754"><a href="https://fatihsoysal.com/blog/category/genel/"><span>Genel</span></a></li> <li id="menu-item-39755" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39755"><a href="https://fatihsoysal.com/blog/category/git/"><span>Git</span></a></li> <li id="menu-item-39758" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39758"><a href="https://fatihsoysal.com/blog/category/is-dunyasi/"><span>İş Dünyası</span></a></li> <li id="menu-item-39759" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39759"><a href="https://fatihsoysal.com/blog/category/java/"><span>Java</span></a></li> <li id="menu-item-39760" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39760"><a href="https://fatihsoysal.com/blog/category/kubernetes/"><span>Kubernetes</span></a></li> <li id="menu-item-39761" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39761"><a href="https://fatihsoysal.com/blog/category/mobile/"><span>Mobile</span></a></li> <li id="menu-item-39762" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39762"><a href="https://fatihsoysal.com/blog/category/mongodb/"><span>MongoDB</span></a></li> <li id="menu-item-39763" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39763"><a href="https://fatihsoysal.com/blog/category/mvc/"><span>MVC</span></a></li> <li id="menu-item-39764" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39764"><a href="https://fatihsoysal.com/blog/category/nextjs/"><span>NextJS</span></a></li> <li id="menu-item-39765" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39765"><a href="https://fatihsoysal.com/blog/category/nginx/"><span>Nginx</span></a></li> <li id="menu-item-39766" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39766"><a href="https://fatihsoysal.com/blog/category/powershell/"><span>PowerShell</span></a></li> <li id="menu-item-39767" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39767"><a href="https://fatihsoysal.com/blog/category/programming-patterns/"><span>Programming Patterns</span></a></li> <li id="menu-item-39768" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39768"><a href="https://fatihsoysal.com/blog/category/python/"><span>Python</span></a></li> <li id="menu-item-39769" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39769"><a href="https://fatihsoysal.com/blog/category/redis/"><span>Redis</span></a></li> <li id="menu-item-39770" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39770"><a href="https://fatihsoysal.com/blog/category/sed/"><span>Sed</span></a></li> <li id="menu-item-39771" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39771"><a href="https://fatihsoysal.com/blog/category/server/"><span>Server</span></a></li> <li id="menu-item-39772" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39772"><a href="https://fatihsoysal.com/blog/category/yazilim/net/"><span>.NET</span></a></li> <li id="menu-item-39773" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39773"><a href="https://fatihsoysal.com/blog/category/yazilim/ajax/"><span>AJAX</span></a></li> <li id="menu-item-39774" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39774"><a href="https://fatihsoysal.com/blog/category/yazilim/asp-net/"><span>ASP.NET</span></a></li> <li id="menu-item-39775" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39775"><a href="https://fatihsoysal.com/blog/category/yazilim/c/"><span>C#</span></a></li> <li id="menu-item-39776" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39776"><a href="https://fatihsoysal.com/blog/category/yazilim/css3-html5/"><span>CSS3 – HTML5</span></a></li> <li id="menu-item-39777" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39777"><a href="https://fatihsoysal.com/blog/category/yazilim/java-android-development/"><span>JAVA – Android</span></a></li> <li id="menu-item-39778" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39778"><a href="https://fatihsoysal.com/blog/category/yazilim/javascript/"><span>Javascript</span></a></li> <li id="menu-item-39779" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39779"><a href="https://fatihsoysal.com/blog/category/yazilim/linux/"><span>Linux</span></a></li> <li id="menu-item-39780" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39780"><a href="https://fatihsoysal.com/blog/category/yazilim/php/"><span>PHP</span></a></li> <li id="menu-item-39781" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39781"><a href="https://fatihsoysal.com/blog/category/yazilim/javascript/jquery/"><span>jQuery</span></a></li> <li id="menu-item-39782" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39782"><a href="https://fatihsoysal.com/blog/category/yazilim/javascript/node-js/"><span>Node.js</span></a></li> <li id="menu-item-39783" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39783"><a href="https://fatihsoysal.com/blog/category/yazilim/javascript/react/"><span>React</span></a></li> <li id="menu-item-39784" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39784"><a href="https://fatihsoysal.com/blog/category/yazilim/sql/ms-sql-server/"><span>MS SQL Server</span></a></li> <li id="menu-item-39785" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39785"><a href="https://fatihsoysal.com/blog/category/yazilim/sql/mysql/"><span>MySQL</span></a></li> <li id="menu-item-39786" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39786"><a href="https://fatihsoysal.com/blog/category/yazilim/sql/postgresql/"><span>PostgreSQL</span></a></li> </ul> </div> </div> <div class="cs-footer__col cs-col-right"> <div class="cs-footer__copyright"> © 2026 Fatih Soysal 💻🚀 All rights reserved. Built with passion & caffeine ☕ </div> </div> </div> </div> </div> </footer> <button class="cs-scroll-top" role="button" aria-label="Scroll to top button"> <i class="cs-icon cs-icon-chevron-up"></i> <div class="cs-scroll-top-border"> <svg width="52" height="52" viewBox="0 0 52 52"> <path d="M26,2 a24,24 0 0,1 0,48 a24,24 0 0,1 0,-48" style="stroke-width: 2; fill: none;"></path> </svg> </div> <div class="cs-scroll-top-progress"> <svg width="52" height="52" viewBox="0 0 52 52"> <path d="M26,2 a24,24 0 0,1 0,48 a24,24 0 0,1 0,-48" style="stroke-width: 2; fill: none;"></path> </svg> </div> </button> <script type="text/javascript"> var CF7AppsLoadhCaptcha = function() { var hcaptcha = document.querySelectorAll( '.h-captcha' ); for (var i = 0; i < hcaptcha.length; i++) { hcaptcha[i].setAttribute( 'data-sitekey', '' ); hcaptcha[i].setAttribute( 'data-callback', 'cf7apps_hcaptcha_callback' ); } }; </script> <script src="https://js.hcaptcha.com/1/api.js?onload=CF7AppsLoadhCaptcha" async defer ></script> <script> const lazyloadRunObserver = () => { const lazyloadBackgrounds = document.querySelectorAll( `.e-con.e-parent:not(.e-lazyloaded)` ); const lazyloadBackgroundObserver = new IntersectionObserver( ( entries ) => { entries.forEach( ( entry ) => { if ( entry.isIntersecting ) { let lazyloadBackground = entry.target; if( lazyloadBackground ) { lazyloadBackground.classList.add( 'e-lazyloaded' ); } lazyloadBackgroundObserver.unobserve( entry.target ); } }); }, { rootMargin: '200px 0px 200px 0px' } ); lazyloadBackgrounds.forEach( ( lazyloadBackground ) => { lazyloadBackgroundObserver.observe( lazyloadBackground ); } ); }; const events = [ 'DOMContentLoaded', 'elementor/lazyload/observe', ]; events.forEach( ( event ) => { document.addEventListener( event, lazyloadRunObserver ); } ); </script> <script src="https://fatihsoysal.com/blog/wp-content/plugins/embed-any-document/js/pdfobject.min.js?ver=2.7.12" id="awsm-ead-pdf-object-js"></script> <script id="awsm-ead-public-js-extra"> var eadPublic = []; </script> <script src="https://fatihsoysal.com/blog/wp-content/plugins/embed-any-document/js/embed-public.min.js?ver=2.7.12" id="awsm-ead-public-js"></script> <script src="https://fatihsoysal.com/blog/wp-includes/js/dist/hooks.min.js?ver=4d63a3d491d11ffd8ac6" id="wp-hooks-js"></script> <script src="https://fatihsoysal.com/blog/wp-includes/js/dist/i18n.min.js?ver=5e580eb46a90c2b997e6" id="wp-i18n-js"></script> <script id="wp-i18n-js-after"> wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } ); </script> <script src="https://fatihsoysal.com/blog/wp-content/plugins/contact-form-7/includes/swv/js/index.js?ver=6.1.5" id="swv-js"></script> <script id="contact-form-7-js-translations"> ( function( domain, translations ) { var localeData = translations.locale_data[ domain ] || translations.locale_data.messages; localeData[""].domain = domain; wp.i18n.setLocaleData( localeData, domain ); } )( "contact-form-7", {"translation-revision-date":"2026-01-19 21:19:08+0000","generator":"GlotPress\/4.0.3","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"tr"},"This contact form is placed in the wrong place.":["Bu ileti\u015fim formu yanl\u0131\u015f yere yerle\u015ftirilmi\u015f."],"Error:":["Hata:"]}},"comment":{"reference":"includes\/js\/index.js"}} ); </script> <script id="contact-form-7-js-before"> var wpcf7 = { "api": { "root": "https:\/\/fatihsoysal.com\/blog\/wp-json\/", "namespace": "contact-form-7\/v1" } }; </script> <script src="https://fatihsoysal.com/blog/wp-content/plugins/contact-form-7/includes/js/index.js?ver=6.1.5" id="contact-form-7-js"></script> <script src="https://fatihsoysal.com/blog/wp-includes/js/imagesloaded.min.js?ver=5.0.0" id="imagesloaded-js"></script> <script src="https://fatihsoysal.com/blog/wp-content/plugins/sight/render/js/jquery.magnific-popup.min.js?ver=1777452259" id="magnific-popup-js"></script> <script id="sight-block-script-js-extra"> var sight_lightbox_localize = {"text_previous":"Previous","text_next":"Next","text_close":"Close","text_loading":"Loading","text_counter":"of"}; </script> <script src="https://fatihsoysal.com/blog/wp-content/plugins/sight/render/js/sight.js?ver=1777452259" id="sight-block-script-js"></script> <script src="https://fatihsoysal.com/blog/wp-content/plugins/easy-syntax-highlighter/assets/js/highlight.min.js?ver=11.9.0" id="esh-highlight-js-js"></script> <script id="esh-highlight-js-js-after"> document.addEventListener("DOMContentLoaded", () => { hljs.highlightAll(); }); </script> <script id="esh-frontend-js-extra"> var esh_i18n = {"copied":"\u5df2\u590d\u5236\uff01","copy_failed":"\u590d\u5236\u5931\u8d25"}; </script> <script src="https://fatihsoysal.com/blog/wp-content/plugins/easy-syntax-highlighter/assets/js/frontend.js?ver=2.0.0" id="esh-frontend-js"></script> <script src="https://www.google.com/recaptcha/api.js?render=6Lfq6JMsAAAAAFwFocaWCzv-A3znzOaIyo9ACOYg&ver=3.0" id="google-recaptcha-js"></script> <script src="https://fatihsoysal.com/blog/wp-includes/js/dist/vendor/wp-polyfill.min.js?ver=3.15.0" id="wp-polyfill-js"></script> <script id="wpcf7-recaptcha-js-before"> var wpcf7_recaptcha = { "sitekey": "6Lfq6JMsAAAAAFwFocaWCzv-A3znzOaIyo9ACOYg", "actions": { "homepage": "homepage", "contactform": "contactform" } }; </script> <script src="https://fatihsoysal.com/blog/wp-content/plugins/contact-form-7/modules/recaptcha/index.js?ver=6.1.5" id="wpcf7-recaptcha-js"></script> <script id="csco-scripts-js-extra"> var csLocalize = {"siteSchemeMode":"system","siteSchemeToogle":"1","shareCopiedText":"URL copied","subscribeProcess":"Processing your subscription...","subscribeSuccess":"Thank you for subscribing!","subscribeError":"Form submission error"}; </script> <script src="https://fatihsoysal.com/blog/wp-content/themes/intro/assets/js/scripts.js?ver=6.7.11" id="csco-scripts-js"></script> <script src="https://fatihsoysal.com/blog/wp-content/themes/intro/assets/static/js/comment-reply.js?ver=6.7.11" id="csco-comment-reply-js"></script> <script defer src="https://fatihsoysal.com/blog/wp-content/plugins/akismet/_inc/akismet-frontend.js?ver=1777452205" id="akismet-frontend-js"></script> </div> </body> </html>