{"id":38326,"date":"2026-01-28T21:41:09","date_gmt":"2026-01-28T18:41:09","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=38326"},"modified":"2026-01-28T21:41:09","modified_gmt":"2026-01-28T18:41:09","slug":"vue-js-spa-uygulamalariniza-google-analytics-entegrasyonu-kapsamli-bir-rehber","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/vue-js-spa-uygulamalariniza-google-analytics-entegrasyonu-kapsamli-bir-rehber\/","title":{"rendered":"Vue.js SPA Uygulamalar\u0131n\u0131za Google Analytics Entegrasyonu: Kapsaml\u0131 Bir Rehber"},"content":{"rendered":"<p><body><\/p>\n<h2>Vue.js SPA Uygulamalar\u0131n\u0131za Google Analytics Entegrasyonu: Kapsaml\u0131 Bir Rehber<\/h2>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn modern web uygulamalar\u0131, kullan\u0131c\u0131 deneyimini zenginle\u015ftiren ve etkile\u015fimli bir yap\u0131 sunan Tek Sayfa Uygulamalar\u0131 (Single Page Application &#8211; SPA) mimarisiyle s\u0131kl\u0131kla geli\u015ftirilmektedir. Vue.js, bu t\u00fcr SPA&#8217;lar olu\u015fturmak i\u00e7in pop\u00fcler ve g\u00fc\u00e7l\u00fc bir JavaScript framework&#8217;\u00fcd\u00fcr. Ancak SPA&#8217;lar\u0131n dinamik yap\u0131s\u0131, geleneksel web sitelerinden farkl\u0131 olarak sayfa y\u00fcklemelerini i\u00e7ermedi\u011fi i\u00e7in, kullan\u0131c\u0131 davran\u0131\u015flar\u0131n\u0131 anlamak ve analiz etmek ad\u0131na \u00f6zel yakla\u015f\u0131mlar gerektirir. \u0130\u015fte bu noktada Google Analytics devreye girer. Google Analytics, web sitenizin ve mobil uygulamalar\u0131n\u0131z\u0131n performans\u0131n\u0131 \u00f6l\u00e7menize, kullan\u0131c\u0131 etkile\u015fimlerini takip etmenize ve de\u011ferli i\u00e7g\u00f6r\u00fcler elde etmenize olanak tan\u0131yan g\u00fc\u00e7l\u00fc bir web analiz hizmetidir. Bu makalede, Vue.js tabanl\u0131 SPA uygulamalar\u0131n\u0131za Google Analytics (\u00f6zellikle GA4) entegrasyonunu ad\u0131m ad\u0131m, kapsaml\u0131 bir \u015fekilde inceleyece\u011fiz.<\/p>\n<p>Geleneksel web sitelerinde, kullan\u0131c\u0131 bir sayfadan di\u011ferine ge\u00e7ti\u011finde taray\u0131c\u0131 tam bir sayfa y\u00fcklemesi yapar ve bu y\u00fckleme, Google Analytics taraf\u0131ndan otomatik olarak bir &#8220;sayfa g\u00f6r\u00fcnt\u00fcleme&#8221; (page view) olarak kaydedilir. Ancak SPA&#8217;larda, y\u00f6nlendirmeler (routing) genellikle taray\u0131c\u0131da JavaScript arac\u0131l\u0131\u011f\u0131yla ger\u00e7ekle\u015fir ve sayfan\u0131n tamam\u0131 yeniden y\u00fcklenmez; yaln\u0131zca i\u00e7eri\u011fin bir k\u0131sm\u0131 dinamik olarak g\u00fcncellenir. Bu durum, Google Analytics&#8217;in varsay\u0131lan izleme mekanizmas\u0131n\u0131 yan\u0131ltabilir ve sayfa g\u00f6r\u00fcnt\u00fclemelerinin veya kullan\u0131c\u0131 ak\u0131\u015f\u0131n\u0131n do\u011fru bir \u015fekilde raporlanmas\u0131n\u0131 engelleyebilir. Bu makale, bu zorluklar\u0131n \u00fcstesinden gelmek i\u00e7in gerekli teknik ad\u0131mlar\u0131, en iyi uygulamalar\u0131 ve farkl\u0131 entegrasyon y\u00f6ntemlerini ele alacakt\u0131r.<\/p>\n<h3>Google Analytics Temelleri ve GA4&#8217;e Odaklanma<\/h3>\n<p>Google Analytics, web sitelerinizin veya uygulamalar\u0131n\u0131z\u0131n trafik kaynaklar\u0131n\u0131, kullan\u0131c\u0131 davran\u0131\u015flar\u0131n\u0131 ve d\u00f6n\u00fc\u015f\u00fcmlerini anlaman\u0131za yard\u0131mc\u0131 olan bir dizi ara\u00e7 sunar. Son y\u0131llarda Google, Universal Analytics&#8217;in (UA) yerini alan ve daha olay tabanl\u0131 (event-driven) bir model benimseyen Google Analytics 4&#8217;\u00fc (GA4) piyasaya s\u00fcrd\u00fc. GA4, geleneksel sayfa g\u00f6r\u00fcnt\u00fclemelerinin yan\u0131 s\u0131ra, kullan\u0131c\u0131lar\u0131n uygulaman\u0131zla nas\u0131l etkile\u015fim kurdu\u011funu daha derinlemesine anlaman\u0131z\u0131 sa\u011flayan olaylara ve kullan\u0131c\u0131lara odaklan\u0131r. Bu makalede, modern yakla\u015f\u0131m ve gelece\u011fin standard\u0131 oldu\u011fu i\u00e7in GA4 entegrasyonuna a\u011f\u0131rl\u0131k verece\u011fiz.<\/p>\n<p>GA4&#8217;\u00fcn temel kavramlar\u0131 \u015funlard\u0131r:<\/p>\n<ul>\n<li><strong>M\u00fclk (Property):<\/strong> Verilerin topland\u0131\u011f\u0131 ve raporland\u0131\u011f\u0131 \u00fcst d\u00fczey kapsay\u0131c\u0131d\u0131r.<\/li>\n<li><strong>Veri Ak\u0131\u015f\u0131 (Data Stream):<\/strong> Web sitenizden veya mobil uygulaman\u0131zdan gelen verilerin GA4 m\u00fclk\u00fcn\u00fcze akt\u0131\u011f\u0131 bir kanald\u0131r. Web uygulamalar\u0131 i\u00e7in genellikle bir &#8220;Web&#8221; veri ak\u0131\u015f\u0131 olu\u015fturulur.<\/li>\n<li><strong>Olaylar (Events):<\/strong> Kullan\u0131c\u0131lar\u0131n uygulaman\u0131zla ger\u00e7ekle\u015ftirdi\u011fi her t\u00fcrl\u00fc etkile\u015fimdir. Sayfa g\u00f6r\u00fcnt\u00fclemeleri, t\u0131klamalar, kayd\u0131rmalar, form g\u00f6nderimleri gibi her \u015fey bir olay olarak kabul edilir. GA4, otomatik olarak toplanan olaylar (\u00f6rne\u011fin, <code>first_visit<\/code>, <code>session_start<\/code>), geli\u015fmi\u015f \u00f6l\u00e7\u00fcm olaylar\u0131 (\u00f6rne\u011fin, <code>scroll<\/code>, <code>click<\/code>) ve \u00f6zel olaylar sunar.<\/li>\n<li><strong>Parametreler (Parameters):<\/strong> Olaylarla birlikte g\u00f6nderilen ek bilgilerdir. \u00d6rne\u011fin, bir <code>add_to_cart<\/code> olay\u0131na <code>item_id<\/code>, <code>item_name<\/code>, <code>price<\/code> gibi parametreler eklenebilir.<\/li>\n<li><strong>Kullan\u0131c\u0131 \u00d6zellikleri (User Properties):<\/strong> Kullan\u0131c\u0131lar\u0131n demografik veya davran\u0131\u015fsal \u00f6zelliklerini tan\u0131mlayan niteliklerdir. \u00d6rne\u011fin, <code>user_id<\/code>, <code>membership_level<\/code>.<\/li>\n<\/ul>\n<p>GA4, verileri toplamak i\u00e7in genellikle <code>gtag.js<\/code> k\u00fct\u00fcphanesini kullan\u0131r. Bu k\u00fct\u00fcphane, Google etiketlerini y\u00f6netmek i\u00e7in tek bir JavaScript kodu par\u00e7as\u0131 sunar ve Google Analytics, Google Ads gibi \u00e7e\u015fitli Google \u00fcr\u00fcnlerine veri g\u00f6ndermeyi kolayla\u015ft\u0131r\u0131r.<\/p>\n<h3>Vue.js SPA&#8217;lar ve Google Analytics: \u00d6zel Durumlar<\/h3>\n<p>Vue.js SPA&#8217;lar\u0131nda Google Analytics entegrasyonu, \u00f6zellikle sayfa g\u00f6r\u00fcnt\u00fclemelerinin do\u011fru bir \u015fekilde izlenmesi konusunda baz\u0131 \u00f6zel dikkat gerektirir. Temel sorun, taray\u0131c\u0131n\u0131n tam bir sayfa y\u00fcklemesi yapmamas\u0131d\u0131r. Vue Router gibi istemci taraf\u0131 y\u00f6nlendirme k\u00fct\u00fcphaneleri, URL&#8217;yi de\u011fi\u015ftirir ancak taray\u0131c\u0131da yeni bir HTML belgesi talep etmez. Bu da Google Analytics&#8217;in varsay\u0131lan olarak yeni bir sayfa g\u00f6r\u00fcnt\u00fclemesi kaydetmesini engeller.<\/p>\n<p>Bu durumu a\u015fmak i\u00e7in, Vue Router&#8217;\u0131n y\u00f6nlendirme sonras\u0131 (<code>afterEach<\/code>) kancalar\u0131n\u0131 kullanarak her URL de\u011fi\u015fikli\u011finde manuel olarak bir &#8220;sayfa g\u00f6r\u00fcnt\u00fcleme&#8221; olay\u0131 g\u00f6ndermemiz gerekir. Ayr\u0131ca, kullan\u0131c\u0131lar\u0131n buton t\u0131klamalar\u0131, form g\u00f6nderimleri, video oynatmalar\u0131 gibi etkile\u015fimlerini de \u00f6zel olaylar olarak izlemek, uygulaman\u0131z\u0131n ger\u00e7ek kullan\u0131m senaryolar\u0131n\u0131 anlamak i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<h3>\u00d6n Haz\u0131rl\u0131k: Google Analytics Hesab\u0131 Olu\u015fturma ve Ayarlama<\/h3>\n<p>Entegrasyona ba\u015flamadan \u00f6nce bir Google Analytics 4 m\u00fclk\u00fcne ve bir web veri ak\u0131\u015f\u0131na ihtiyac\u0131n\u0131z var. \u0130\u015fte ad\u0131mlar:<\/p>\n<ol>\n<li><strong>Google Hesab\u0131 Olu\u015fturma\/Giri\u015f Yapma:<\/strong> E\u011fer yoksa bir Google hesab\u0131 olu\u015fturun veya mevcut hesab\u0131n\u0131zla giri\u015f yap\u0131n.<\/li>\n<li><strong>Google Analytics&#8217;e Eri\u015fim:<\/strong> <a href=\"https:\/\/analytics.google.com\/\">analytics.google.com<\/a> adresine gidin.<\/li>\n<li><strong>M\u00fclk Olu\u015fturma:<\/strong> Y\u00f6netici (Admin) panelinde &#8220;M\u00fclk Olu\u015ftur&#8221; (Create Property) se\u00e7ene\u011fini t\u0131klay\u0131n. M\u00fclk ad\u0131n\u0131 girin (\u00f6rn. &#8220;Vue SPA Uygulamam&#8221;), raporlama saat dilimini ve para birimini se\u00e7in.<\/li>\n<li><strong>Veri Ak\u0131\u015f\u0131 Olu\u015fturma:<\/strong> M\u00fclk\u00fcn\u00fcz olu\u015fturulduktan sonra, &#8220;Veri Ak\u0131\u015flar\u0131&#8221; (Data Streams) b\u00f6l\u00fcm\u00fcne gidin ve &#8220;Web&#8221; se\u00e7ene\u011fini se\u00e7in.<\/li>\n<li><strong>Web Sitesi URL&#8217;si ve Ak\u0131\u015f Ad\u0131:<\/strong> Vue.js uygulaman\u0131z\u0131n URL&#8217;sini (\u00f6rn. <code>https:\/\/www.ornekuygulama.com<\/code>) girin ve bir ak\u0131\u015f ad\u0131 belirleyin (\u00f6rn. &#8220;Vue Uygulamas\u0131 Web Ak\u0131\u015f\u0131&#8221;).<\/li>\n<li><strong>\u00d6l\u00e7\u00fcm Kimli\u011fi (Measurement ID) Edinme:<\/strong> Veri ak\u0131\u015f\u0131n\u0131z\u0131 olu\u015fturduktan sonra, size bir &#8220;\u00d6l\u00e7\u00fcm Kimli\u011fi&#8221; (Measurement ID) verilecektir. Bu kimlik, <code>G-XXXXXXXXXX<\/code> format\u0131nda olacakt\u0131r. Bu kimli\u011fi not al\u0131n, entegrasyon i\u00e7in buna ihtiyac\u0131m\u0131z olacak.<\/li>\n<li><strong>Geli\u015fmi\u015f \u00d6l\u00e7\u00fcm (Enhanced Measurement):<\/strong> Varsay\u0131lan olarak etkinle\u015ftirilen geli\u015fmi\u015f \u00f6l\u00e7\u00fcm, sayfa g\u00f6r\u00fcnt\u00fclemeleri, kayd\u0131rmalar, giden t\u0131klamalar, site aramalar\u0131, video etkile\u015fimleri ve dosya indirmeleri gibi olaylar\u0131 otomatik olarak izler. Bu, ba\u015flang\u0131\u00e7 i\u00e7in harika bir \u00f6zelliktir.<\/li>\n<\/ol>\n<h3>Temel Entegrasyon Y\u00f6ntemleri<\/h3>\n<p>Vue.js SPA&#8217;n\u0131za Google Analytics eklemenin birka\u00e7 farkl\u0131 yolu vard\u0131r. Her birinin kendine g\u00f6re avantajlar\u0131 ve kullan\u0131m senaryolar\u0131 bulunur.<\/p>\n<h4>gtag.js ile Manuel Entegrasyon<\/h4>\n<p>Bu y\u00f6ntem, Google Analytics&#8217;i do\u011frudan <code>index.html<\/code> dosyan\u0131za ekleyerek ve Vue bile\u015fenlerinizde veya ya\u015fam d\u00f6ng\u00fcs\u00fc kancalar\u0131nda <code>gtag()<\/code> fonksiyonunu manuel olarak \u00e7a\u011f\u0131rarak \u00e7al\u0131\u015f\u0131r. Bu, en temel ve esnek yakla\u015f\u0131md\u0131r, ancak daha fazla manuel y\u00f6netim gerektirir.<\/p>\n<p>\u00d6ncelikle, <code>public\/index.html<\/code> dosyan\u0131z\u0131n <code><head><\/code> etiketine a\u015fa\u011f\u0131daki <code>gtag.js<\/code> kodunu ekleyin. <code>YOUR_MEASUREMENT_ID<\/code> k\u0131sm\u0131n\u0131 kendi GA4 \u00f6l\u00e7\u00fcm kimli\u011finizle de\u011fi\u015ftirin.<\/p>\n<pre><code class=\"language-html\"><!-- public\/index.html -->\n<head>\n  <!-- ... di\u011fer head etiketleri ... -->\n\n  <!-- Google Analytics (gtag.js) -->\n  <script async src=\"https:\/\/www.googletagmanager.com\/gtag\/js?id=YOUR_MEASUREMENT_ID\"><\/script>\n  <script>\n    window.dataLayer = window.dataLayer || [];\n    function gtag(){dataLayer.push(arguments);}\n    gtag('js', new Date());\n\n    gtag('config', 'YOUR_MEASUREMENT_ID');\n  <\/script>\n<\/head>\n<\/code><\/pre>\n<p>Bu kod par\u00e7as\u0131, GA4 k\u00fct\u00fcphanesini y\u00fckler ve ba\u015flang\u0131\u00e7 yap\u0131land\u0131rmas\u0131n\u0131 yapar. <code>gtag('config', 'YOUR_MEASUREMENT_ID')<\/code> sat\u0131r\u0131, ilk sayfa y\u00fcklemesinde otomatik olarak bir sayfa g\u00f6r\u00fcnt\u00fcleme olay\u0131 g\u00f6nderir.<\/p>\n<p>Daha sonra, uygulaman\u0131zda olay g\u00f6ndermek i\u00e7in <code>gtag()<\/code> fonksiyonunu kullanabilirsiniz. \u00d6rne\u011fin, bir butona t\u0131kland\u0131\u011f\u0131nda \u00f6zel bir olay g\u00f6ndermek i\u00e7in:<\/p>\n<pre><code class=\"language-javascript\">\/\/ Bir Vue bile\u015feni i\u00e7inde veya bir metotta\nmethods: {\n  trackButtonClick() {\n    if (typeof window.gtag === 'function') {\n      window.gtag('event', 'button_click', {\n        event_category: 'engagement',\n        event_label: 'Anasayfa Butonu',\n        value: 1\n      });\n      console.log('Google Analytics: button_click olay\u0131 g\u00f6nderildi.');\n    } else {\n      console.warn('Google Analytics gtag fonksiyonu bulunamad\u0131.');\n    }\n  }\n}\n<\/code><\/pre>\n<h4>Vue Plugin\/Mixin Yakla\u015f\u0131m\u0131<\/h4>\n<p>B\u00fcy\u00fck uygulamalarda <code>gtag()<\/code> \u00e7a\u011fr\u0131lar\u0131n\u0131 her yere da\u011f\u0131tmak yerine, Google Analytics i\u015flevselli\u011fini merkezi bir Vue eklentisi (plugin) veya mixin i\u00e7inde kaps\u00fcllemek daha temiz bir yakla\u015f\u0131md\u0131r. Bu, kod tekrar\u0131n\u0131 azalt\u0131r ve y\u00f6netimi kolayla\u015ft\u0131r\u0131r.<\/p>\n<p><strong>Vue Eklentisi Olu\u015fturma:<\/strong><\/p>\n<p><code>src\/plugins\/google-analytics.js<\/code> ad\u0131nda bir dosya olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-javascript\">\/\/ src\/plugins\/google-analytics.js\nexport default {\n  install: (app, options) => {\n    const { measurementId, router } = options;\n\n    \/\/ gtag.js k\u00fct\u00fcphanesinin y\u00fcklenip y\u00fcklenmedi\u011fini kontrol et\n    if (!window.gtag) {\n      console.warn('Google Analytics gtag.js k\u00fct\u00fcphanesi y\u00fcklenmemi\u015f. L\u00fctfen public\/index.html dosyan\u0131z\u0131 kontrol edin.');\n      return;\n    }\n\n    \/\/ Vue uygulamas\u0131na global bir $ga nesnesi ekle\n    app.config.globalProperties.$ga = {\n      \/\/ Sayfa g\u00f6r\u00fcnt\u00fcleme olay\u0131n\u0131 g\u00f6nderme\n      pageview(path, title = document.title) {\n        if (window.gtag) {\n          window.gtag('event', 'page_view', {\n            page_path: path,\n            page_title: title,\n            page_location: window.location.origin + path\n          });\n          console.log(<code>GA Pageview: ${path}<\/code>);\n        }\n      },\n      \/\/ \u00d6zel bir olay g\u00f6nderme\n      event(eventName, eventParams = {}) {\n        if (window.gtag) {\n          window.gtag('event', eventName, eventParams);\n          console.log(<code>GA Event: ${eventName}<\/code>, eventParams);\n        }\n      },\n      \/\/ GA config g\u00fcncelleme (\u00f6rn. user_id ayarlama)\n      config(configParams = {}) {\n        if (window.gtag) {\n          window.gtag('config', measurementId, configParams);\n          console.log(<code>GA Config:<\/code>, configParams);\n        }\n      }\n    };\n\n    \/\/ Vue Router entegrasyonu (otomatik sayfa g\u00f6r\u00fcnt\u00fcleme takibi)\n    if (router) {\n      router.isReady().then(() => {\n        \/\/ \u0130lk sayfa y\u00fcklemesi i\u00e7in\n        app.config.globalProperties.$ga.pageview(router.currentRoute.value.fullPath);\n\n        \/\/ Her rota de\u011fi\u015fimi i\u00e7in\n        router.afterEach((to) => {\n          app.config.globalProperties.$ga.pageview(to.fullPath);\n        });\n      });\n    }\n  }\n};\n<\/code><\/pre>\n<p>\u015eimdi bu eklentiyi <code>src\/main.js<\/code> dosyan\u0131zda kaydedin:<\/p>\n<pre><code class=\"language-javascript\">\/\/ src\/main.js\nimport { createApp } from 'vue';\nimport App from '.\/App.vue';\nimport router from '.\/router'; \/\/ Vue Router'\u0131 import etti\u011finizden emin olun\nimport googleAnalytics from '.\/plugins\/google-analytics';\n\nconst app = createApp(App);\n\napp.use(router);\napp.use(googleAnalytics, {\n  measurementId: 'YOUR_MEASUREMENT_ID', \/\/ Kendi GA4 \u00f6l\u00e7\u00fcm kimli\u011finiz\n  router: router \/\/ Vue Router instance'\u0131n\u0131 ge\u00e7iyoruz\n});\n\napp.mount('#app');\n<\/code><\/pre>\n<p>Art\u0131k herhangi bir Vue bile\u015feni i\u00e7inde <code>this.$ga.event('my_custom_event', { param: 'value' })<\/code> veya <code>this.$ga.pageview('\/my-custom-path')<\/code> gibi \u00e7a\u011fr\u0131lar yapabilirsiniz.<\/p>\n<h4>NPM Paketleri Kullan\u0131m\u0131<\/h4>\n<p>Topluluk taraf\u0131ndan geli\u015ftirilen NPM paketleri, Google Analytics entegrasyonunu daha da kolayla\u015ft\u0131rabilir. Bu paketler genellikle otomatik sayfa izleme, kolay olay g\u00f6nderme ve Vue&#8217;nun reaktif sistemine entegrasyon gibi \u00f6zellikler sunar. <code>vue-gtag<\/code>, Vue 3 i\u00e7in pop\u00fcler bir se\u00e7enektir.<\/p>\n<p><strong>Kurulum:<\/strong><\/p>\n<pre><code class=\"language-bash\">npm install vue-gtag-next # Vue 3 i\u00e7in\n<h2>veya<\/h2>\nyarn add vue-gtag-next\n<\/code><\/pre>\n<p><strong>Yap\u0131land\u0131rma (src\/main.js):<\/strong><\/p>\n<pre><code class=\"language-javascript\">\/\/ src\/main.js\nimport { createApp } from 'vue';\nimport App from '.\/App.vue';\nimport router from '.\/router';\nimport VueGtag from 'vue-gtag-next';\n\nconst app = createApp(App);\n\napp.use(router);\napp.use(VueGtag, {\n  property: {\n    id: 'YOUR_MEASUREMENT_ID' \/\/ Kendi GA4 \u00f6l\u00e7\u00fcm kimli\u011finiz\n  }\n}, router); \/\/ router instance'\u0131n\u0131 da \u00fc\u00e7\u00fcnc\u00fc arg\u00fcman olarak ge\u00e7irin\n\napp.mount('#app');\n<\/code><\/pre>\n<p>Bu yap\u0131land\u0131rma ile <code>vue-gtag-next<\/code>, Vue Router&#8217;daki rota de\u011fi\u015fimlerini otomatik olarak dinleyecek ve her de\u011fi\u015fimde bir <code>page_view<\/code> olay\u0131 g\u00f6nderecektir. Ayr\u0131ca, <code>$gtag<\/code> veya <code>$ga<\/code> global \u00f6zelliklerini kullanarak \u00f6zel olaylar da g\u00f6nderebilirsiniz.<\/p>\n<p><strong>Kullan\u0131m \u00d6rnekleri:<\/strong><\/p>\n<pre><code class=\"language-javascript\">\/\/ Bir Vue bile\u015feni i\u00e7inde\nexport default {\n  methods: {\n    trackProductView() {\n      this.$gtag.event('view_item', {\n        item_id: 'SKU123',\n        item_name: 'Harika \u00dcr\u00fcn',\n        currency: 'USD',\n        value: 99.99\n      });\n    },\n    trackCustomEvent() {\n      this.$gtag.event('custom_action', {\n        category: 'navigation',\n        label: 'Sidebar A\u00e7\u0131ld\u0131'\n      });\n    }\n  }\n};\n<\/code><\/pre>\n<p>NPM paketleri, entegrasyon s\u00fcrecini b\u00fcy\u00fck \u00f6l\u00e7\u00fcde basitle\u015ftirir ve genellikle daha az hata yapman\u0131z\u0131 sa\u011flar. Ancak, k\u00fct\u00fcphanenin sundu\u011fu soyutlama nedeniyle bazen derinlemesine \u00f6zelle\u015ftirme yapmak daha zor olabilir.<\/p>\n<h3>Sayfa G\u00f6r\u00fcnt\u00fclemelerini \u0130zleme (Page View Tracking)<\/h3>\n<p>SPA&#8217;larda sayfa g\u00f6r\u00fcnt\u00fclemelerini do\u011fru bir \u015fekilde izlemek, kullan\u0131c\u0131lar\u0131n uygulaman\u0131zda hangi sayfalar\u0131 ziyaret etti\u011fini anlamak i\u00e7in hayati \u00f6neme sahiptir. Yukar\u0131daki plugin veya NPM paketi yakla\u015f\u0131mlar\u0131 genellikle bu i\u015fi otomatikle\u015ftirir, ancak nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 anlamak ve manuel olarak nas\u0131l yap\u0131laca\u011f\u0131n\u0131 bilmek \u00f6nemlidir.<\/p>\n<h4>Vue Router ile Otomatik \u0130zleme<\/h4>\n<p>Vue Router, uygulaman\u0131zdaki y\u00f6nlendirmeleri y\u00f6netti\u011fi i\u00e7in, sayfa g\u00f6r\u00fcnt\u00fclemelerini izlemek i\u00e7in ideal bir noktad\u0131r. <code>router.afterEach<\/code> kancas\u0131, her ba\u015far\u0131l\u0131 y\u00f6nlendirmeden sonra \u00e7al\u0131\u015f\u0131r ve bu sayede Google Analytics&#8217;e yeni bir sayfa g\u00f6r\u00fcnt\u00fcleme olay\u0131 g\u00f6nderebiliriz.<\/p>\n<p>E\u011fer bir plugin veya NPM paketi kullanm\u0131yorsan\u0131z, manuel olarak <code>src\/main.js<\/code> dosyan\u0131zda a\u015fa\u011f\u0131daki gibi bir yap\u0131land\u0131rma yapabilirsiniz:<\/p>\n<pre><code class=\"language-javascript\">\/\/ src\/main.js\nimport { createApp } from 'vue';\nimport App from '.\/App.vue';\nimport router from '.\/router';\n\nconst app = createApp(App);\n\napp.use(router);\n\n\/\/ \u0130lk sayfa y\u00fcklemesi i\u00e7in (gtag('config') zaten bir page_view g\u00f6nderir,\n\/\/ ancak manuel olarak da kontrol edilebilir)\nif (window.gtag) {\n  router.isReady().then(() => {\n    \/\/ gtag('config') zaten ilk sayfa g\u00f6r\u00fcnt\u00fclemesini g\u00f6nderdi\u011fi i\u00e7in,\n    \/\/ burada tekrar g\u00f6ndermek genellikle gerekli de\u011fildir.\n    \/\/ Ancak, e\u011fer gtag('config') i\u00e7inde send_page_view: false ayar\u0131 yap\u0131ld\u0131ysa,\n    \/\/ veya \u00f6zel bir ba\u015flang\u0131\u00e7 izlemesi isteniyorsa kullan\u0131labilir.\n    \/\/ window.gtag('event', 'page_view', {\n    \/\/   page_path: router.currentRoute.value.fullPath,\n    \/\/   page_title: document.title,\n    \/\/   page_location: window.location.origin + router.currentRoute.value.fullPath\n    \/\/ });\n    console.log(<code>GA Initial Pageview: ${router.currentRoute.value.fullPath}<\/code>);\n  });\n}\n\n\/\/ Her rota de\u011fi\u015fimi sonras\u0131 sayfa g\u00f6r\u00fcnt\u00fcleme olay\u0131 g\u00f6nder\nrouter.afterEach((to) => {\n  if (window.gtag) {\n    window.gtag('event', 'page_view', {\n      page_path: to.fullPath,\n      page_title: document.title, \/\/ Dinamik ba\u015fl\u0131k i\u00e7in daha geli\u015fmi\u015f bir yap\u0131 gerekebilir\n      page_location: window.location.origin + to.fullPath\n    });\n    console.log(<code>GA Pageview: ${to.fullPath}<\/code>);\n  }\n});\n\napp.mount('#app');\n<\/code><\/pre>\n<p><code>document.title<\/code>, her sayfa i\u00e7in dinamik olarak de\u011fi\u015fiyorsa, Vue Router&#8217;\u0131n <code>meta<\/code> alanlar\u0131n\u0131 kullanarak veya bile\u015fenlerin <code>mounted<\/code> kancalar\u0131nda ba\u015fl\u0131\u011f\u0131 g\u00fcncelleyerek daha do\u011fru ba\u015fl\u0131klar g\u00f6nderebilirsiniz.<\/p>\n<h3>Olaylar\u0131 \u0130zleme (Event Tracking)<\/h3>\n<p>GA4&#8217;\u00fcn temelinde olaylar yatar. Sayfa g\u00f6r\u00fcnt\u00fclemelerinin yan\u0131 s\u0131ra, kullan\u0131c\u0131lar\u0131n uygulaman\u0131zla olan t\u00fcm etkile\u015fimlerini olaylar arac\u0131l\u0131\u011f\u0131yla izlemek, de\u011ferli kullan\u0131c\u0131 davran\u0131\u015flar\u0131 verileri sa\u011flar.<\/p>\n<h4>Standart Olaylar ve Geli\u015fmi\u015f \u00d6l\u00e7\u00fcm<\/h4>\n<p>GA4&#8217;\u00fcn geli\u015fmi\u015f \u00f6l\u00e7\u00fcm \u00f6zelli\u011fi, bir\u00e7ok yayg\u0131n olay\u0131 (kayd\u0131rma, giden ba\u011flant\u0131 t\u0131klamalar\u0131, site aramalar\u0131 vb.) otomatik olarak izler. Bu \u00f6zelli\u011fi veri ak\u0131\u015f\u0131 ayarlar\u0131n\u0131zdan kontrol edebilir ve etkinle\u015ftirebilirsiniz. Bu, manuel olarak kod yazma y\u00fck\u00fcn\u00fc \u00f6nemli \u00f6l\u00e7\u00fcde azalt\u0131r.<\/p>\n<h4>\u00d6zel Olaylar (Custom Events)<\/h4>\n<p>Geli\u015fmi\u015f \u00f6l\u00e7\u00fcm\u00fcn kapsamad\u0131\u011f\u0131 veya uygulaman\u0131za \u00f6zel olan etkile\u015fimleri izlemek i\u00e7in \u00f6zel olaylar tan\u0131mlamal\u0131s\u0131n\u0131z. \u00d6rne\u011fin, bir &#8220;\u00fcr\u00fcn sepete eklendi&#8221; butonu t\u0131klamas\u0131, bir &#8220;kay\u0131t tamamland\u0131&#8221; formu g\u00f6nderimi veya bir &#8220;video oynat\u0131ld\u0131&#8221; eylemi \u00f6zel olaylar olarak izlenebilir.<\/p>\n<p>Bir \u00f6zel olay g\u00f6ndermek i\u00e7in <code>gtag('event', 'event_name', { parameters })<\/code> yap\u0131s\u0131n\u0131 kullan\u0131r\u0131z:<\/p>\n<pre><code class=\"language-javascript\">\/\/ Bir bile\u015fen i\u00e7inde\nexport default {\n  methods: {\n    addToCart(product) {\n      \/\/ Sepete ekleme mant\u0131\u011f\u0131\n      \/\/ ...\n\n      \/\/ Google Analytics olay\u0131n\u0131 g\u00f6nder\n      if (this.$ga) { \/\/ E\u011fer plugin kullan\u0131l\u0131yorsa\n        this.$ga.event('add_to_cart', {\n          item_id: product.id,\n          item_name: product.name,\n          item_category: product.category,\n          price: product.price,\n          currency: 'TRY',\n          quantity: 1\n        });\n      } else if (window.gtag) { \/\/ Manuel gtag.js kullan\u0131l\u0131yorsa\n        window.gtag('event', 'add_to_cart', {\n          item_id: product.id,\n          item_name: product.name,\n          item_category: product.category,\n          price: product.price,\n          currency: 'TRY',\n          quantity: 1\n        });\n      }\n      console.log(<code>\u00dcr\u00fcn sepete eklendi: ${product.name}<\/code>);\n    },\n    submitFeedbackForm() {\n      \/\/ Form g\u00f6nderme mant\u0131\u011f\u0131\n      \/\/ ...\n      if (this.$ga) {\n        this.$ga.event('feedback_form_submit', {\n          form_name: 'contact_us',\n          user_status: this.isLoggedIn ? 'logged_in' : 'guest'\n        });\n      }\n      console.log('Geri bildirim formu g\u00f6nderildi.');\n    }\n  }\n};\n<\/code><\/pre>\n<p>GA4&#8217;te, olaylarla birlikte g\u00f6nderdi\u011finiz parametreleri raporlar\u0131n\u0131zda g\u00f6rmek i\u00e7in Google Analytics aray\u00fcz\u00fcnde &#8220;\u00d6zel Tan\u0131mlar&#8221; (Custom Definitions) alt\u0131nda &#8220;\u00d6zel Boyutlar&#8221; (Custom Dimensions) veya &#8220;\u00d6zel Metrikler&#8221; (Custom Metrics) olarak kaydetmeniz gerekebilir. Bu, \u00f6zellikle \u00f6zel olaylar\u0131n\u0131zla birlikte g\u00f6nderdi\u011finiz benzersiz parametreler i\u00e7in ge\u00e7erlidir.<\/p>\n<h4>Parametreler (Parameters) ve Kullan\u0131c\u0131 \u00d6zellikleri (User Properties)<\/h4>\n<ul>\n<li><strong>Parametreler:<\/strong> Bir olayla birlikte g\u00f6nderilen, o olay\u0131n ba\u011flam\u0131n\u0131 a\u00e7\u0131klayan anahtar-de\u011fer \u00e7iftleridir. \u00d6rne\u011fin, bir <code>add_to_cart<\/code> olay\u0131n\u0131n <code>item_id<\/code> veya <code>price<\/code> parametreleri.<\/li>\n<li><strong>Kullan\u0131c\u0131 \u00d6zellikleri:<\/strong> Kullan\u0131c\u0131n\u0131n kendisiyle ilgili, oturumlar ve cihazlar aras\u0131nda kal\u0131c\u0131 olan \u00f6zelliklerdir. \u00d6rne\u011fin, <code>user_id<\/code>, <code>membership_level<\/code>, <code>user_segment<\/code>. Kullan\u0131c\u0131 \u00f6zellikleri, kullan\u0131c\u0131lar\u0131n kim oldu\u011funu veya ne t\u00fcr kullan\u0131c\u0131lar oldu\u011funu anlaman\u0131za yard\u0131mc\u0131 olur.<\/li>\n<\/ul>\n<p>Kullan\u0131c\u0131 \u00f6zellikleri, <code>gtag('set', 'user_properties', { ... })<\/code> veya <code>gtag('config', 'YOUR_MEASUREMENT_ID', { user_properties: { ... } })<\/code> ile ayarlanabilir. Bir kez ayarland\u0131\u011f\u0131nda, sonraki t\u00fcm olaylarla birlikte g\u00f6nderilirler.<\/p>\n<pre><code class=\"language-javascript\">\/\/ Kullan\u0131c\u0131 giri\u015f yapt\u0131\u011f\u0131nda kullan\u0131c\u0131 \u00f6zelliklerini ayarla\nfunction setUserProperties(userId, userRole) {\n  if (window.gtag) {\n    window.gtag('set', 'user_properties', {\n      user_id: userId,\n      user_role: userRole,\n      membership_level: 'premium'\n    });\n    console.log(<code>GA User Properties ayarland\u0131: ${userId}, ${userRole}<\/code>);\n  }\n}\n\n\/\/ \u00d6rne\u011fin, login sonras\u0131 \u00e7a\u011f\u0131r\u0131labilir\n\/\/ setUserProperties('user123', 'admin');\n<\/code><\/pre>\n<h3>Geli\u015fmi\u015f \u0130zleme Senaryolar\u0131<\/h3>\n<h4>Kullan\u0131c\u0131 Kimli\u011fi (User ID) \u0130zleme<\/h4>\n<p>Giri\u015f yapan kullan\u0131c\u0131lar\u0131 cihazlar ve oturumlar aras\u0131nda tutarl\u0131 bir \u015fekilde izlemek i\u00e7in Kullan\u0131c\u0131 Kimli\u011fi (User ID) kullanmak \u00e7ok \u00f6nemlidir. Bu, tek bir kullan\u0131c\u0131n\u0131n farkl\u0131 cihazlardan yapt\u0131\u011f\u0131 etkile\u015fimleri bir araya getirerek daha b\u00fct\u00fcnsel bir kullan\u0131c\u0131 yolculu\u011fu g\u00f6r\u00fcn\u00fcm\u00fc sa\u011flar.<\/p>\n<p>Kullan\u0131c\u0131 giri\u015f yapt\u0131\u011f\u0131nda veya kullan\u0131c\u0131 kimli\u011fi mevcut oldu\u011funda, <code>gtag('config')<\/code> komutunu kullanarak User ID&#8217;yi ayarlayabilirsiniz:<\/p>\n<pre><code class=\"language-javascript\">\/\/ Kullan\u0131c\u0131 giri\u015f yapt\u0131ktan sonra veya uygulama ba\u015flat\u0131ld\u0131\u011f\u0131nda\nfunction setUserId(userId) {\n  if (window.gtag) {\n    window.gtag('config', 'YOUR_MEASUREMENT_ID', {\n      'user_id': userId\n    });\n    console.log(<code>GA User ID ayarland\u0131: ${userId}<\/code>);\n  }\n}\n\n\/\/ \u00d6rne\u011fin, Vuex store'da user_id g\u00fcncellendi\u011finde\n\/\/ watch(() => store.state.auth.userId, (newUserId) => {\n\/\/   if (newUserId) {\n\/\/     setUserId(newUserId);\n\/\/   }\n\/\/ });\n<\/code><\/pre>\n<p>Unutmay\u0131n, User ID olarak ki\u015fisel olarak tan\u0131mlanabilir bilgiler (PII) g\u00f6ndermemelisiniz (\u00f6rn. e-posta adresleri, TC kimlik numaralar\u0131). Bunun yerine, uygulaman\u0131z\u0131n dahili sisteminde benzersiz ve anonim bir kimlik kullan\u0131n.<\/p>\n<h4>E-ticaret \u0130zleme (Enhanced E-commerce)<\/h4>\n<p>Online ma\u011fazalar i\u00e7in Google Analytics 4, e-ticaret i\u015flemleri i\u00e7in \u00f6zel olaylar ve parametreler sunar. Bu, \u00fcr\u00fcn g\u00f6r\u00fcnt\u00fclemeleri, sepete eklemeler, \u00f6deme ad\u0131mlar\u0131 ve sat\u0131n almalar gibi \u00f6nemli e-ticaret metriklerini izlemenizi sa\u011flar.<\/p>\n<p>\u00d6rnek bir sepete \u00fcr\u00fcn ekleme olay\u0131:<\/p>\n<pre><code class=\"language-javascript\">function trackAddToCart(product) {\n  if (window.gtag) {\n    window.gtag('event', 'add_to_cart', {\n      currency: 'TRY',\n      value: product.price, \/\/ Sepete eklenen toplam de\u011fer\n      items: [{\n        item_id: product.id,\n        item_name: product.name,\n        item_category: product.category,\n        price: product.price,\n        quantity: 1\n      }]\n    });\n    console.log(<code>E-ticaret olay\u0131: add_to_cart, \u00fcr\u00fcn: ${product.name}<\/code>);\n  }\n}\n<\/code><\/pre>\n<p>Di\u011fer e-ticaret olaylar\u0131 (<code>view_item<\/code>, <code>view_item_list<\/code>, <code>begin_checkout<\/code>, <code>purchase<\/code> vb.) i\u00e7in de benzer yap\u0131lar kullan\u0131l\u0131r. Her bir olay\u0131n bekledi\u011fi parametreler GA4 dok\u00fcmantasyonunda detayl\u0131 olarak belirtilmi\u015ftir.<\/p>\n<h4>Hata \u0130zleme (Error Tracking)<\/h4>\n<p>Uygulaman\u0131zdaki istemci taraf\u0131 hatalar\u0131n\u0131 Google Analytics&#8217;e \u00f6zel olaylar olarak g\u00f6ndermek, kullan\u0131c\u0131 deneyimini etkileyen sorunlar\u0131 proaktif olarak tespit etmenize yard\u0131mc\u0131 olabilir.<\/p>\n<p>Vue.js uygulaman\u0131zda global bir hata yakalay\u0131c\u0131 (error handler) kullanarak hatalar\u0131 izleyebilirsiniz:<\/p>\n<pre><code class=\"language-javascript\">\/\/ src\/main.js\nimport { createApp } from 'vue';\nimport App from '.\/App.vue';\nimport router from '.\/router';\n\nconst app = createApp(App);\n\n\/\/ Global Vue hata yakalay\u0131c\u0131\napp.config.errorHandler = (err, vm, info) => {\n  console.error('Vue Hata:', err, vm, info);\n  if (window.gtag) {\n    window.gtag('event', 'app_error', {\n      error_message: err.message,\n      error_stack: err.stack,\n      component_info: info,\n      page_path: router.currentRoute.value.fullPath\n    });\n    console.log('GA App Error olay\u0131 g\u00f6nderildi.');\n  }\n};\n\napp.use(router);\n\/\/ ... di\u011fer pluginler ve app.mount\napp.mount('#app');\n<\/code><\/pre>\n<p>Bu \u015fekilde, Vue bile\u015fenlerinizde olu\u015fan hatalar otomatik olarak GA4&#8217;e g\u00f6nderilir ve hata raporlar\u0131n\u0131z\u0131 zenginle\u015ftirebilirsiniz.<\/p>\n<h3>Yerel Geli\u015ftirme Ortam\u0131nda \u0130zlemeyi Devre D\u0131\u015f\u0131 B\u0131rakma<\/h3>\n<p>Geli\u015ftirme veya test ortamlar\u0131nda Google Analytics verileri g\u00f6ndermek, ger\u00e7ek kullan\u0131c\u0131 verilerinizi kirletebilir ve raporlar\u0131n\u0131z\u0131 yan\u0131lt\u0131c\u0131 hale getirebilir. Bu nedenle, genellikle GA izlemesini yaln\u0131zca \u00fcretim (production) ortam\u0131nda etkinle\u015ftirmek istenir.<\/p>\n<p>Bunu, Vue CLI veya Vite gibi ara\u00e7lar\u0131n sa\u011flad\u0131\u011f\u0131 ortam de\u011fi\u015fkenlerini kullanarak yapabiliriz. Genellikle <code>process.env.NODE_ENV<\/code> de\u011fi\u015fkeni kullan\u0131l\u0131r:<\/p>\n<pre><code class=\"language-javascript\">\/\/ src\/main.js veya google-analytics.js plugin dosyan\u0131zda\nconst IS_PRODUCTION = process.env.NODE_ENV === 'production';\nconst MEASUREMENT_ID = 'YOUR_MEASUREMENT_ID'; \/\/ .env dosyas\u0131ndan da \u00e7ekilebilir\n\nif (IS_PRODUCTION && window.gtag) {\n  \/\/ Production ortam\u0131nda gtag.js'yi yap\u0131land\u0131r ve olaylar\u0131 g\u00f6nder\n  \/\/ ...\n  \/\/ \u00d6rne\u011fin, plugin i\u00e7indeki $ga nesnesi\n  app.config.globalProperties.$ga = {\n    pageview(path, title = document.title) {\n      window.gtag('event', 'page_view', { page_path: path, page_title: title, page_location: window.location.origin + path });\n    },\n    event(eventName, eventParams = {}) {\n      window.gtag('event', eventName, eventParams);\n    },\n    config(configParams = {}) {\n      window.gtag('config', MEASUREMENT_ID, configParams);\n    }\n  };\n\n  \/\/ Vue Router entegrasyonu\n  router.afterEach((to) => {\n    app.config.globalProperties.$ga.pageview(to.fullPath);\n  });\n\n} else {\n  \/\/ Geli\u015ftirme ortam\u0131nda izlemeyi devre d\u0131\u015f\u0131 b\u0131rak veya konsola logla\n  console.warn('Google Analytics izleme geli\u015ftirme ortam\u0131nda devre d\u0131\u015f\u0131.');\n  app.config.globalProperties.$ga = {\n    pageview: (path) => console.log(<code>GA DEV: Pageview ${path}<\/code>),\n    event: (name, params) => console.log(<code>GA DEV: Event ${name}<\/code>, params),\n    config: (params) => console.log(<code>GA DEV: Config<\/code>, params)\n  };\n}\n<\/code><\/pre>\n<p>Ayr\u0131ca, <code>public\/index.html<\/code> dosyas\u0131ndaki <code>gtag.js<\/code> beti\u011fini de yaln\u0131zca \u00fcretimde y\u00fcklemek i\u00e7in bir sunucu taraf\u0131 render (SSR) \u00e7\u00f6z\u00fcm\u00fc veya Vue CLI&#8217;\u0131n HTML eklentisi gibi ara\u00e7larla ko\u015fullu olarak ekleyebilirsiniz. Ancak, genellikle JavaScript i\u00e7inde ko\u015fullu olay g\u00f6nderme yeterlidir.<\/p>\n<h3>Test ve Do\u011frulama<\/h3>\n<p>Entegrasyonu tamamlad\u0131ktan sonra, verilerin Google Analytics&#8217;e do\u011fru bir \u015fekilde ula\u015ft\u0131\u011f\u0131ndan emin olmak \u00e7ok \u00f6nemlidir.<\/p>\n<ul>\n<li><strong>Ger\u00e7ek Zamanl\u0131 Raporlar (Realtime Reports):<\/strong> GA4 aray\u00fcz\u00fcndeki &#8220;Ger\u00e7ek Zamanl\u0131&#8221; rapor, uygulaman\u0131zda aktif olan kullan\u0131c\u0131lar\u0131 ve son 30 dakika i\u00e7inde g\u00f6nderilen olaylar\u0131 an\u0131nda g\u00f6sterir. Bu, olaylar\u0131n g\u00f6nderilip g\u00f6nderilmedi\u011fini h\u0131zl\u0131ca kontrol etmek i\u00e7in harika bir ara\u00e7t\u0131r.<\/li>\n<li><strong>DebugView:<\/strong> GA4&#8217;\u00fcn en g\u00fc\u00e7l\u00fc hata ay\u0131klama ara\u00e7lar\u0131ndan biridir. Uygulaman\u0131zdan gelen t\u00fcm olaylar\u0131, parametreleri ve kullan\u0131c\u0131 \u00f6zelliklerini detayl\u0131 bir ak\u0131\u015f halinde g\u00f6rmenizi sa\u011flar. DebugView&#8217;\u0131 kullanmak i\u00e7in, Chrome i\u00e7in &#8220;Google Analytics Debugger&#8221; uzant\u0131s\u0131n\u0131 y\u00fckleyebilir veya uygulaman\u0131zda <code>gtag('set', 'debug_mode', true)<\/code> komutunu \u00e7al\u0131\u015ft\u0131rabilirsiniz (yaln\u0131zca geli\u015ftirme ortam\u0131nda!).<\/li>\n<li><strong>Taray\u0131c\u0131 Geli\u015ftirici Ara\u00e7lar\u0131:<\/strong> Taray\u0131c\u0131n\u0131z\u0131n geli\u015ftirici ara\u00e7lar\u0131ndaki &#8220;Network&#8221; (A\u011f) sekmesini kullanarak Google Analytics&#8217;e g\u00f6nderilen istekleri g\u00f6rebilirsiniz. <code>collect?v=2<\/code> ile ba\u015flayan istekleri aray\u0131n. Bu isteklerin parametrelerini inceleyerek olaylar\u0131n\u0131z\u0131n ve verilerinizin do\u011fru formatta g\u00f6nderilip g\u00f6nderilmedi\u011fini kontrol edebilirsiniz.<\/li>\n<\/ul>\n<h3>Performans ve Gizlilik Hususlar\u0131<\/h3>\n<h4>Performans<\/h4>\n<p>Google Analytics beti\u011finin uygulaman\u0131z\u0131n performans\u0131n\u0131 olumsuz etkilememesi \u00f6nemlidir. <code>gtag.js<\/code> beti\u011fi varsay\u0131lan olarak <code>async<\/code> \u00f6zniteli\u011fi ile y\u00fcklendi\u011fi i\u00e7in ana render s\u00fcrecini engellemez. Ancak, \u00e7ok say\u0131da karma\u015f\u0131k olay g\u00f6ndermek veya b\u00fcy\u00fck veri y\u00fckleriyle \u00e7al\u0131\u015fmak, \u00f6zellikle eski cihazlarda veya zay\u0131f a\u011f ko\u015fullar\u0131nda performans\u0131 etkileyebilir. M\u00fcmk\u00fcn oldu\u011funca verimli kod yazmaya ve gereksiz olaylar\u0131 g\u00f6ndermekten ka\u00e7\u0131nmaya \u00f6zen g\u00f6sterin.<\/p>\n<h4>Gizlilik<\/h4>\n<p>Kullan\u0131c\u0131 gizlili\u011fi, g\u00fcn\u00fcm\u00fcz dijital d\u00fcnyas\u0131nda en \u00f6nemli konulardan biridir. GDPR (Avrupa), CCPA (Kaliforniya) ve KVKK (T\u00fcrkiye) gibi d\u00fczenlemelere uyum sa\u011flamak zorunludur.<\/p>\n<ul>\n<li><strong>\u00c7erez Onay\u0131 (Cookie Consent):<\/strong> Google Analytics \u00e7erezleri kulland\u0131\u011f\u0131 i\u00e7in, kullan\u0131c\u0131lar\u0131n\u0131zdan \u00e7erez kullan\u0131m\u0131na ili\u015fkin a\u00e7\u0131k onay alman\u0131z gerekmektedir. Bir \u00e7erez onay banner&#8217;\u0131 veya arac\u0131 kullanarak kullan\u0131c\u0131lar\u0131n izleme tercihlerini y\u00f6netmelerine izin verin.<\/li>\n<li><strong>IP Anonimle\u015ftirme:<\/strong> GA4&#8217;te IP anonimle\u015ftirme varsay\u0131lan olarak etkindir, yani IP adreslerinin tamam\u0131 kaydedilmeden \u00f6nce anonimle\u015ftirilir. Bu, gizlilik i\u00e7in iyi bir uygulamad\u0131r.<\/li>\n<li><strong>Veri Saklama:<\/strong> Google Analytics&#8217;te veri saklama s\u00fcrelerini ayarlayabilirsiniz. Kullan\u0131c\u0131 ve olay verilerinin ne kadar s\u00fcreyle saklanaca\u011f\u0131n\u0131 belirleyerek gizlilik gereksinimlerinize uygun hale getirin.<\/li>\n<li><strong>Ki\u015fisel Tan\u0131mlanabilir Bilgiler (PII):<\/strong> Asla PII (\u00f6rn. ad, e-posta, telefon numaras\u0131) gibi hassas bilgileri Google Analytics&#8217;e g\u00f6ndermeyin. User ID olarak kullan\u0131lan kimliklerin anonim oldu\u011fundan emin olun.<\/li>\n<li><strong>Opt-out Mekanizmalar\u0131:<\/strong> Kullan\u0131c\u0131lara Google Analytics izlemesinden vazge\u00e7me (opt-out) se\u00e7ene\u011fi sunmak, gizlilik politikalar\u0131n\u0131z\u0131n bir par\u00e7as\u0131 olmal\u0131d\u0131r. Google, taray\u0131c\u0131 eklentileri gibi ara\u00e7lar sunar.<\/li>\n<\/ul>\n<h3>S\u0131k Kar\u015f\u0131la\u015f\u0131lan Sorunlar ve \u00c7\u00f6z\u00fcmleri<\/h3>\n<ul>\n<li><strong>Olaylar GA&#8217;da g\u00f6r\u00fcnm\u00fcyor:<\/strong>\n<ul>\n<li>\u00d6l\u00e7\u00fcm Kimli\u011finizin (Measurement ID) do\u011fru oldu\u011fundan emin olun.<\/li>\n<li><code>gtag.js<\/code> beti\u011finin <code>public\/index.html<\/code> i\u00e7inde do\u011fru y\u00fcklendi\u011finden emin olun.<\/li>\n<li>Geli\u015ftirme ortam\u0131nda olup olmad\u0131\u011f\u0131n\u0131z\u0131 kontrol edin (<code>process.env.NODE_ENV<\/code>).<\/li>\n<li>Taray\u0131c\u0131 \u00f6nbelle\u011fini temizleyin veya gizli modda deneyin.<\/li>\n<li>DebugView veya ger\u00e7ek zamanl\u0131 raporlar\u0131 kontrol edin.<\/li>\n<li>A\u011f sekmesinde <code>collect<\/code> isteklerinin g\u00f6nderilip g\u00f6nderilmedi\u011fini kontrol edin.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Yinelenen sayfa g\u00f6r\u00fcnt\u00fclemeleri:<\/strong>\n<ul>\n<li>Hem <code>gtag('config')<\/code> hem de <code>router.afterEach<\/code> i\u00e7inde ayn\u0131 anda sayfa g\u00f6r\u00fcnt\u00fclemesi g\u00f6nderip g\u00f6ndermedi\u011finizi kontrol edin. <code>gtag('config')<\/code> varsay\u0131lan olarak ilk sayfa g\u00f6r\u00fcnt\u00fclemesini g\u00f6nderir.<\/li>\n<li>Vue Router&#8217;\u0131n <code>afterEach<\/code> kancas\u0131n\u0131n birden fazla kez tetiklenip tetiklenmedi\u011fini kontrol edin (pek olas\u0131 de\u011fil ama kontrol etmekte fayda var).<\/li>\n<\/ul>\n<\/li>\n<li><strong>Yanl\u0131\u015f olay verileri:<\/strong>\n<ul>\n<li>G\u00f6nderdi\u011finiz parametre adlar\u0131n\u0131n ve de\u011ferlerinin GA4 beklentileriyle (\u00f6zellikle e-ticaret olaylar\u0131 i\u00e7in) e\u015fle\u015fti\u011finden emin olun.<\/li>\n<li>\u00d6zel parametreleri GA4 aray\u00fcz\u00fcnde &#8220;\u00d6zel Tan\u0131mlar&#8221; alt\u0131nda tan\u0131mlad\u0131\u011f\u0131n\u0131zdan emin olun.<\/li>\n<\/ul>\n<\/li>\n<li><strong>CORS (Cross-Origin Resource Sharing) sorunlar\u0131:<\/strong>\n<ul>\n<li>Google Analytics izleme genellikle CORS sorunlar\u0131na neden olmaz, ancak e\u011fer \u00f6zel bir sunucu taraf\u0131 izleme (Measurement Protocol) kullan\u0131yorsan\u0131z bu sorunlarla kar\u015f\u0131la\u015fabilirsiniz.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3>Sonu\u00e7<\/h3>\n<p>Vue.js SPA uygulamalar\u0131n\u0131za Google Analytics entegrasyonu, kullan\u0131c\u0131 davran\u0131\u015flar\u0131n\u0131 anlamak ve uygulaman\u0131z\u0131n performans\u0131n\u0131 optimize etmek i\u00e7in vazge\u00e7ilmez bir ad\u0131md\u0131r. Geleneksel web sitelerinden farkl\u0131 olarak, SPA&#8217;lar\u0131n dinamik yap\u0131s\u0131 nedeniyle sayfa g\u00f6r\u00fcnt\u00fclemelerini ve olaylar\u0131 manuel olarak veya \u00f6zel k\u00fct\u00fcphaneler arac\u0131l\u0131\u011f\u0131yla izlemek gereklidir. Bu makalede ele ald\u0131\u011f\u0131m\u0131z ad\u0131mlar\u0131 ve y\u00f6ntemleri uygulayarak, uygulaman\u0131zdan de\u011ferli veriler toplayabilir, kullan\u0131c\u0131 deneyimini iyile\u015ftirebilir ve i\u015f hedeflerinize ula\u015fmak i\u00e7in bilin\u00e7li kararlar alabilirsiniz.<\/p>\n<p>Unutmay\u0131n, entegrasyonun yaln\u0131zca ba\u015flang\u0131\u00e7 oldu\u011funu. Toplad\u0131\u011f\u0131n\u0131z verileri d\u00fczenli olarak analiz etmek, raporlar\u0131 okumak ve bu i\u00e7g\u00f6r\u00fcleri uygulaman\u0131zda de\u011fi\u015fiklikler yapmak i\u00e7in kullanmak, Google Analytics&#8217;in ger\u00e7ek g\u00fcc\u00fcn\u00fc ortaya \u00e7\u0131karacakt\u0131r. Ayr\u0131ca, kullan\u0131c\u0131 gizlili\u011fine her zaman \u00f6ncelik verin ve ilgili t\u00fcm yasal d\u00fczenlemelere uydu\u011funuzdan emin olun. \u0130yi analizler!<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Vue.js SPA Uygulamalar\u0131n\u0131za Google Analytics Entegrasyonu: Kapsaml\u0131 Bir Rehber\nG\u00fcn\u00fcm\u00fcz\u00fcn modern web uygulamalar\u0131, kullan\u0131c\u0131 deneyimini ze","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1402],"tags":[],"class_list":{"0":"post-38326","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-vue","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Vue.js SPA Uygulamalar\u0131n\u0131za Google Analytics Entegrasyonu: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/vue-js-spa-uygulamalariniza-google-analytics-entegrasyonu-kapsamli-bir-rehber\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Vue.js SPA Uygulamalar\u0131n\u0131za Google Analytics Entegrasyonu: Kapsaml\u0131 Bir Rehber\" \/>\n<meta property=\"og:description\" content=\"Vue.js SPA Uygulamalar\u0131n\u0131za Google Analytics Entegrasyonu: Kapsaml\u0131 Bir Rehber G\u00fcn\u00fcm\u00fcz\u00fcn modern web uygulamalar\u0131, kullan\u0131c\u0131 deneyimini ze\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/vue-js-spa-uygulamalariniza-google-analytics-entegrasyonu-kapsamli-bir-rehber\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-01-28T18:41:09+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"22 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/vue-js-spa-uygulamalariniza-google-analytics-entegrasyonu-kapsamli-bir-rehber\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/vue-js-spa-uygulamalariniza-google-analytics-entegrasyonu-kapsamli-bir-rehber\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Vue.js SPA Uygulamalar\u0131n\u0131za Google Analytics Entegrasyonu: Kapsaml\u0131 Bir Rehber\",\"datePublished\":\"2026-01-28T18:41:09+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/vue-js-spa-uygulamalariniza-google-analytics-entegrasyonu-kapsamli-bir-rehber\/\"},\"wordCount\":3095,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Vue\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/vue-js-spa-uygulamalariniza-google-analytics-entegrasyonu-kapsamli-bir-rehber\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/vue-js-spa-uygulamalariniza-google-analytics-entegrasyonu-kapsamli-bir-rehber\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/vue-js-spa-uygulamalariniza-google-analytics-entegrasyonu-kapsamli-bir-rehber\/\",\"name\":\"Vue.js SPA Uygulamalar\u0131n\u0131za Google Analytics Entegrasyonu: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-01-28T18:41:09+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/vue-js-spa-uygulamalariniza-google-analytics-entegrasyonu-kapsamli-bir-rehber\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/vue-js-spa-uygulamalariniza-google-analytics-entegrasyonu-kapsamli-bir-rehber\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/vue-js-spa-uygulamalariniza-google-analytics-entegrasyonu-kapsamli-bir-rehber\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Vue.js SPA Uygulamalar\u0131n\u0131za Google Analytics Entegrasyonu: Kapsaml\u0131 Bir Rehber\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Vue.js SPA Uygulamalar\u0131n\u0131za Google Analytics Entegrasyonu: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/vue-js-spa-uygulamalariniza-google-analytics-entegrasyonu-kapsamli-bir-rehber\/","og_locale":"tr_TR","og_type":"article","og_title":"Vue.js SPA Uygulamalar\u0131n\u0131za Google Analytics Entegrasyonu: Kapsaml\u0131 Bir Rehber","og_description":"Vue.js SPA Uygulamalar\u0131n\u0131za Google Analytics Entegrasyonu: Kapsaml\u0131 Bir Rehber G\u00fcn\u00fcm\u00fcz\u00fcn modern web uygulamalar\u0131, kullan\u0131c\u0131 deneyimini ze","og_url":"https:\/\/fatihsoysal.com\/blog\/vue-js-spa-uygulamalariniza-google-analytics-entegrasyonu-kapsamli-bir-rehber\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-01-28T18:41:09+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"22 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/vue-js-spa-uygulamalariniza-google-analytics-entegrasyonu-kapsamli-bir-rehber\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/vue-js-spa-uygulamalariniza-google-analytics-entegrasyonu-kapsamli-bir-rehber\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Vue.js SPA Uygulamalar\u0131n\u0131za Google Analytics Entegrasyonu: Kapsaml\u0131 Bir Rehber","datePublished":"2026-01-28T18:41:09+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/vue-js-spa-uygulamalariniza-google-analytics-entegrasyonu-kapsamli-bir-rehber\/"},"wordCount":3095,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Vue"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/vue-js-spa-uygulamalariniza-google-analytics-entegrasyonu-kapsamli-bir-rehber\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/vue-js-spa-uygulamalariniza-google-analytics-entegrasyonu-kapsamli-bir-rehber\/","url":"https:\/\/fatihsoysal.com\/blog\/vue-js-spa-uygulamalariniza-google-analytics-entegrasyonu-kapsamli-bir-rehber\/","name":"Vue.js SPA Uygulamalar\u0131n\u0131za Google Analytics Entegrasyonu: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-01-28T18:41:09+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/vue-js-spa-uygulamalariniza-google-analytics-entegrasyonu-kapsamli-bir-rehber\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/vue-js-spa-uygulamalariniza-google-analytics-entegrasyonu-kapsamli-bir-rehber\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/vue-js-spa-uygulamalariniza-google-analytics-entegrasyonu-kapsamli-bir-rehber\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Vue.js SPA Uygulamalar\u0131n\u0131za Google Analytics Entegrasyonu: Kapsaml\u0131 Bir Rehber"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/38326","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=38326"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/38326\/revisions"}],"predecessor-version":[{"id":38327,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/38326\/revisions\/38327"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=38326"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=38326"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=38326"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}