Mehmet

WFN Üye
Konular
1,851
Mesajlar
1,852
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 7 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi
GA4’te form gönderimini gerçek başarıyla eşleştirmenin doğru yolu, kullanıcı düğmeye bastığında değil, sunucu form verisini başarıyla işleyip uygulamanın bunu doğruladığında olay göndermektir. Böylece boş alan, doğrulama hatası, ağ kesintisi veya sunucu hatasıyla sonuçlanan denemeler dönüşüm olarak sayılmaz.

Temel mantık​


Form gönderimi iki farklı durumu temsil edebilir:

  • Kullanıcı gönderme düğmesine bastı.
  • Sunucu formu kabul etti ve beklenen işlemi tamamladı.
GA4 için izlenmesi gereken durum ikincisidir. Örneğin iletişim formunda gerçek başarı; sunucunun kaydı oluşturması, e-posta kuyruğuna alması veya başvuru numarası üretmesi olabilir. Yalnızca tarayıcıdaki tıklamayı izlemek, başarısız denemeleri de başarılı gösterir.

En güvenilir akış şöyledir: form tarayıcıdan sunucuya gönderilir, sunucu başarılı ya da başarısız bir yanıt döner, istemci yalnızca başarılı yanıtta form_submit_success olayını oluşturur ve GA4 bu olayı alır.

Çalışan en küçük örnek​


Aşağıdaki örnekte sunucunun başarılı işlemden sonra {"success":true} döndürdüğü varsayılmıştır. /api/contact yerine kendi form uç noktanızı kullanın. Bu yalnız istemci tarafı örneğidir; sunucu uç noktasını, girdi/yetki ve gerekiyorsa CSRF doğrulamasını kendi uygulamanızda tamamlamalısınız. GA4 olayı için Google etiketi ayrıca kurulmuş olmalıdır; analiz engellense bile formun gerçek başarısı korunmalıdır.

HTML:
<form id="contact-form">
  <label for="contact-email">E-posta</label>
  <input id="contact-email" name="email" type="email" required>
  <label for="contact-message">Mesaj</label>
  <textarea id="contact-message" name="message" required></textarea>
  <button type="submit">Gönder</button>
  <p id="form-result" aria-live="polite"></p>
</form>

<script>
const form = document.querySelector('#contact-form');
const result = document.querySelector('#form-result');
const button = form.querySelector('button[type="submit"]');
let busy = false;

form.addEventListener('submit', async (event) => {
  event.preventDefault();
  if (busy) return;
  busy = true;
  button.disabled = true;
  let accepted = false;
  result.textContent = 'Gönderiliyor...';
  try {
    const response = await fetch('/api/contact', {
      method: 'POST',
      headers: {'Content-Type': 'application/json'},
      body: JSON.stringify(Object.fromEntries(new FormData(form)))
    });
    const data = await response.json();
    if (!response.ok || data.success !== true) {
      result.textContent = 'Başvuru kabul edilmedi. Alanları kontrol edin.';
      return;
    }
    accepted = true;
    result.textContent = 'Form başarıyla gönderildi.';
  } catch (error) {
    result.textContent = 'İşlem sonucu doğrulanamadı. Tekrar göndermeden önce kayıt durumunu kontrol edin.';
  } finally {
    busy = false;
    button.disabled = false;
  }
  if (accepted) {
    try {
      if (typeof window.gtag === 'function') {
        window.gtag('event', 'form_submit_success', {form_name: 'contact'});
      }
    } catch (error) {
      console.warn('Ölçüm gönderilemedi; form işlemi başarılı kaldı.');
    }
  }
});
</script>

Sunucu başarıyı doğruladığında kullanıcıya başarı mesajı gösterilir. Ölçüm izni ve etiket de uygunsa GA4 olayı ayrıca gönderilir; GA4 engellendiğinde veya çağrı hata verdiğinde başarılı başvuru “başarısız” diye gösterilmez. response.ok başarısızsa veya sunucu success: true döndürmüyorsa olay gönderilmez. Bu ayrım, düğme tıklaması ile gerçek işlem sonucunu birbirinden ayırır.

GA4 ve GTM kullanıyorsanız​


Doğrudan gtag çağırmak yerine Google Tag Manager kullanıyorsanız aynı başarı noktasında dataLayer’a özel olay gönderin:

Kod:
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
  event: 'form_submit_success',
  form_name: 'contact'
});

GTM’de bu özel olay adına göre tetikleyici oluşturun ve GA4 etkinlik etiketinde etkinlik adını form_submit_success olarak kullanın. Formun yalnızca başarı yanıtından sonra bu kodu çalıştırdığını kontrol edin.

Aşağıdaki ayrım hangi sinyalin kullanılacağını netleştirir:

SinyalNe gösterir?Başarı olayı için uygunluk
Gönderme düğmesi tıklamasıKullanıcının denemeyi başlattığınıUygun değil
İstemci doğrulamasıAlanların tarayıcıda geçerli göründüğünüTek başına uygun değil
Sunucu başarı yanıtıİşlemin uygulama tarafından kabul edildiğiniÖnerilen sinyal
Teşekkürler sayfasıBaşarılı yönlendirmeye ulaşıldığınıSunucu sonucu güvenilir biçimde bağlıysa uygun

Ağ yanıtı kaybolduğunda sunucu kaydı gerçekten oluşturmuş olabilir. Otomatik yeniden denemeyi gerçek yeni işlemle karıştırmayın; tekrar güvenliğini sunucuda bir işlem/idempotency anahtarıyla çözün. Örnekteki busy yalnız aynı sayfada eşzamanlı tıklamayı azaltır, yenileme veya başka sekmedeki yeniden gönderimi tekilleştirmez. E-posta ve mesaj gibi form içeriğini GA4 olay parametrelerine göndermeyin.

Uygulama ve kontrol adımları​


  1. Formun gerçek başarı ölçütünü belirleyin: kayıt oluşturma, talep numarası üretme veya sunucunun işlemi kabul etmesi gibi.
  2. Sunucunun başarılı ve başarısız durumları ayıran kararlı bir yanıt döndürmesini sağlayın. Başarı için örnekteki gibi açık bir alan kullanın; yalnızca HTTP yanıtının varlığına güvenmeyin.
  3. GA4 olayını yalnızca başarılı yanıtın işlendiği kod bloğuna yerleştirin. Tıklama, submit başlangıcı veya hata bloğuna koymayın.
  4. GA4 gerçek zamanlı raporunda test gönderimi sırasında olayın oluştuğunu kontrol edin. Başarısız bir form denemesinde olay oluşuyorsa tetikleyici yanlış yerdedir.
  5. Olayı iş hedefi olarak kullanacaksanız, GA4 yönetimindeki etkinlik yapılandırmasında ilgili olayı anahtar etkinlik olarak işaretleyin. Önce olay adının doğru ve tek biçimde geldiğini doğrulayın.

Sık yapılan hatalar​


Gönderme düğmesine tıklanınca olay göndermek en yaygın hatadır; kullanıcı sunucu hatası alsa bile başarılı gönderim görünür. Teşekkürler sayfası her yenilendiğinde olay göndermek de aynı gönderimin birden fazla sayılmasına yol açabilir. Bu yöntemi kullanıyorsanız yönlendirmeyi yalnızca sunucu başarısından sonra yapın ve yenileme davranışını ayrıca test edin.

Başka bir hata, istemciye dönen her 200 yanıtını başarı kabul etmektir. Uygulama hatayı HTTP düzeyinde değil, yanıt gövdesindeki bir alanla belirtiyorsa success gibi açık sonucu kontrol edin. Ayrıca özel olay adını tıklama ve standart form olaylarıyla karıştırmayın; raporlarda hangi olayın gerçek başarıyı temsil ettiğini açıkça ayırın.

Kaynaklar​



Sık sorulan sorular​


Aynı kullanıcı formu iki kez başarıyla gönderirse iki olay normal midir?​

Evet. Her başarılı işlem ayrı bir gönderimse iki olay beklenebilir. Tek işlem kimliğiyle yinelenen istekleri engellemek istiyorsanız bunu GA4’ten önce uygulamanın sunucu tarafında çözmelisiniz.

Form başka bir alan adına yönleniyorsa başarı nasıl izlenir?​

Başarı sinyalini formu işleyen sistem üretmelidir. Diğer alan adındaki sonuç sayfası ve GA4 yapılandırması aynı ölçüm akışını kullanmıyorsa istemci tarafındaki olay eksik veya farklı oturumla görünebilir; bu durumda sunucu tarafı entegrasyonu ya da ortak ölçüm tasarımı gerekir.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic