Google Ads — AdsPing dashboard setup
Sıfırdan üretime: AdsPing'e giriş yaptıktan sonra Google Ads conversion tracking'i bağlamak için adım adım rehber. ~5 dakika.
Önce
- AdsPing hesabınız olmalı (yoksa kayıt olun)
- Google Ads tarafında en az bir conversion action tanımlı olmalı (Goals → Conversions → Summary)
- Sitenizin alan adı (örn.
acme.com)
⚠ Conversion kategorisi seçimi — yanlış kategori = sayılmaz
0,00 kalır.Google Ads, conversion'ları iki kaynak türünden birine atar:
| Dönüşüm kaynağı | Tetikleyici | AdsPing ile çalışır mı? |
|---|---|---|
| Web sitesi | Sitedeki gtag fire (gtag('event',...) çağrısı) | ✅ Evet — AdsPing bu tipi kullanır |
| Reklamlardan Gelen Arama | Google'ın Call Ad altyapısı (reklamın içindeki "Ara" butonu, GFN) | ❌ Hayır — Google native, AdsPing fire'larını yok sayar |
Hangi kategori hangi kaynağa düşer
Conversion oluştururken Goals → Conversions → + New conversion → kategori seç ekranında:
| Kategori (TR) | Kategori (EN) | Kaynak | Tipik kullanım |
|---|---|---|---|
| Kişi | Contact | Web sitesi ✅ | WhatsApp / telefon / e-mail tıklamaları — en sık ihtiyaç |
| Potansiyel müşteri formu gönderimi | Submit lead form | Web sitesi ✅ | Form submit (Lead) |
| Randevu rezervasyonu | Book appointment | Web sitesi ✅ | Randevu/booking butonu |
| Satın alma işlemi | Purchase | Web sitesi ✅ | E-ticaret sale |
| Kaydolma işlemi | Sign-up | Web sitesi ✅ | Üyelik / hesap açma |
| Diğer eylemler | Other | Web sitesi ✅ | Custom event — güvenli fallback |
| Telefon aramasıyla elde edilen potansiyel müşteri | Phone call leads | Reklamlardan Gelen Arama ❌ | SEÇME — Google native call tracking, AdsPing çalışmaz |
Yanlış kategori belirtileri
- Conversion Summary'de
Tüm dönş.kolonu hep 0,00 kalıyor (Network'te request gitse bile) Dönüşüm kaynağıkolonundaReklamlardan Gelen Aramayazıyor- Durum:
Daha önce kaydedilmiş dönüşüm yok(30 dk+ geçtiyse) veyaMüdahale edilmesi gerekiyor
Bu belirtiler varsa: yeni conversion oluştur, kategoriyi Kişi/Form/Diğer ile değiştir. Yanlış olanı sil veya pasifleştir.
Veri kaynağı seçim ekranı
Kategori sonrası gelen "Veri kaynağı" ekranında SADECE "Web sitesindeki dönüşümler" işaretli olsun:
✅ Web sitesindeki dönüşümler ← İŞARETLE ☐ Uygulamadaki dönüşümler ☐ Telefon aramalarından elde edilen ← AÇMA (sonradan kategoriyi tekrar bozar) ☐ Çevrimdışı dönüşümler
Dönüşüm kaynağı = Web sitesi → AdsPing'den gönderdiğin event'ler sayılır.Yeni pixel oluştur
Meta kurulumunda olduğu gibi: dashboard'da sol menüden Pixels, sağ üstte + New pixel.
URL: app.adsping.com/dashboard/pixels
Dashboard → Pixels sayfası, sağ üstte + New pixel butonu
Ekran görüntüsü: /dashboard/pixels, sağ üstteki + New pixel butonu vurgulanmış
Domain bilgilerini gir
Step 0 — pixel adı, birincil domain, opsiyonel subdomain'ler.
- Pixel name — kendi referansınız için (örn.
Acme Web) - Primary domain —
acme.com(www otomatik kapsanır) - Subdomains (opsiyonel)
Wizard step 0 — Domain formu
Ekran görüntüsü: /dashboard/pixels/new wizard Step 0, alanlar dolu örnek
Plan seç
Stripe Checkout açılır — 14 gün ücretsiz deneme ile başlar (ilk pixel).
Wizard step 1 — plan seçimi
Ekran görüntüsü: Wizard Step 1, 3 plan kartı yan yana
/dashboard/pixels/<id>?subscribed=1 URL'ine yönlendirilirsiniz.Pixel detay sayfasına git
Pixel detayı 3 sekmeden oluşur: Report, Destinations, Settings.
Sekmelerin içeriği:
- Report — Diagnostics kartı + son event'ler listesi
- Destinations — Meta / TikTok / Google Ads kartları ve pipeline'lar
- Settings — Install snippet + Allowed Domains + pixel ayarları
Pixel detay sayfası — 3 sekmeli yapı
Ekran görüntüsü: /dashboard/pixels/<id> Destinations sekmesi
Google'ı bağla
Destinations sekmesinde Google Ads kartına gidin. OAuth ile bağlanın.
Adım 5.1 — Google hesabını OAuth ile bağla
Google Ads kartında Connect Google Ads butonuna tıklayın. Google penceresi açılır, izin verirsiniz.
- Erişebildiğiniz tüm customer'lar (ajansa MCC altında 500 alt-hesap dahil) otomatik listelenir
- Customer adları (descriptive_name) otomatik yüklenir
- Conversion ID (AW-XXXXXXXXXX) seçilen customer'dan otomatik türetilir — sormaya gerek yok
Google Ads destination kartı + Connect butonu
Ekran görüntüsü: Google Ads kartının disconnected hâli
Adım 5.2 — Conversion action ekle
Reklamlardan Gelen Arama kaynaklı bir action seçersen AdsPing fire'ları sayılmaz — yukarıdaki kategori tablosuna bak.OAuth tamamlandıktan sonra Add Google Ads Action dialog'u açılır. Her conversion action için iki bilgi lazım:
- Conversion Action ID — Google Ads → Goals → Conversions → o action'a tıkla → URL'in sonunda
ctId=987654321→ bu numara - gtag Event Name — Google'ın verdiği snippet'te
gtag('event','ads_conversion_xxx',…)satırındakiads_conversion_xxxkısmı
Sonra Maps to pb.js event dropdown'undan pb.js event ismini seçin (Lead, Contact, Purchase, …). Save → kart Connected olur.
Add Google Ads Action dialog — auto-fill panel
Ekran görüntüsü: Add action dialog, customer dropdown + auto-filled AW-… + Action ID input + Event Name input
Sitenize entegre edin
Önce stack'inizi seçin — her birinin entegrasyonu farklı.
Settings sekmesinden Install snippet'i kopyaladıktan sonra, sitenizin tipine göre aşağıdaki bölümlerden birini izleyin.
<head> içine <script> tag'i ekleyebileceğiniz her şey.HTML kurulumu →Stack 2React / Next.jsNext.js App Router, Pages Router, Vite + React, Remix, CRA — SPA route change'lerinde event'lerin manuel tetiklenmesi.React kurulumu →gtagSendEvent() + manual gtag.js snippet'leri vermiş olabilir. Bunları kullanmayın — pb.js zaten gtag.js'i otomatik yükler ve event'leri pipeline'da kayıtlı event name'lere map'leyip fire eder. Sadece pbq() çağrısı yapın.Stack 1 — Düz HTML / Vanilla JS
6.1 — Snippet'i sayfaya ekle
Sitenizdeki her sayfanın <head> bölümüne (veya ortak template'e) tek satır ekleyin:
<!-- AdsPing pb.js — gtag.js'i otomatik yükler, AW-… otomatik gelir --> <script async src="https://api.adsping.io/pb.js" data-pixel-id="<PIXEL_ID>"></script>
Bu kadar. gtag.js manuel yüklemenize gerek yok — pb.js init sırasında /gtag-config'i çağırıp AW-… ile gtag.js'i otomatik inject eder.
6.2 — Event tetikleme
Form gönderme → Lead:
<form id="contact-form">
<input name="email" type="email" required>
<input name="phone" type="tel" required>
<button type="submit">Gönder</button>
</form>
<script>
document.getElementById('contact-form').addEventListener('submit', function(e) {
e.preventDefault();
var form = this;
pbq('track', 'Lead', { content_name: 'İletişim Formu' });
// gtag fire'ının ağa beacon atması için ~300ms tolerans
setTimeout(function() { form.submit(); }, 300);
});
</script>WhatsApp / telefon → Contact:
<script>
function trackAndGo(url, eventName, params) {
if (window.pbq) pbq('track', eventName, params || {});
setTimeout(function() { window.location.href = url; }, 300);
return false;
}
</script>
<a href="https://wa.me/902121234567"
onclick="return trackAndGo(this.href, 'Contact', {content_name:'WhatsApp CTA'});">
WhatsApp
</a>
<a href="tel:+902121234567"
onclick="return trackAndGo(this.href, 'Contact', {content_name:'Phone CTA'});">
+90 (212) 123 45 67
</a><a href> tıklaması veya form submit'i, tarayıcı sayfayı bırakmadan önce browser-side gtag fire'ının ağa beacon atmasını engelleyebilir. setTimeout(..., 300) ile gtag'a yetişme süresi verin. Yeni sekmede açılan link'lerde (target="_blank") bu tolerans gerekmez.Stack 2 — React / Next.js
6.1 — Script'i layout'a ekle
Next.js App Router'da app/layout.tsx:
// app/layout.tsx
import Script from "next/script";
export default function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
<html lang="tr">
<head>
{/* pb.js — gtag.js'i otomatik yükler */}
<Script
src="https://api.adsping.io/pb.js"
data-pixel-id="<PIXEL_ID>"
strategy="afterInteractive"
/>
</head>
<body>{children}</body>
</html>
);
}6.2 — TypeScript: window.pbq tipi
// types/global.d.ts
export {};
declare global {
interface Window {
pbq?: (
cmd: string,
eventName: string,
params?: Record<string, unknown>
) => void;
}
}6.3 — Helper utility
// lib/tracking.ts
type EventData = {
content_name?: string;
content_category?: string;
value?: number;
currency?: string;
order_id?: string;
};
export function track(eventName: string, data: EventData = {}) {
if (typeof window === "undefined") return;
window.pbq?.("track", eventName, data);
}
/**
* Navigate-after-track helper — for <a href> or form submits that
* navigate away. Fires the event and waits ~300ms before navigating
* so browser-side gtag fire has time to put its beacon on the network.
*/
export function trackAndGo(
url: string,
eventName: string,
data: EventData = {},
delay = 300,
) {
track(eventName, data);
setTimeout(() => {
window.location.href = url;
}, delay);
}6.4 — Component örnekleri
Contact form (Lead):
"use client";
import { useState } from "react";
import { track } from "@/lib/tracking";
export function ContactForm() {
const [submitting, setSubmitting] = useState(false);
async function onSubmit(e: React.FormEvent<HTMLFormElement>) {
e.preventDefault();
setSubmitting(true);
const form = new FormData(e.currentTarget);
try {
const res = await fetch("/api/contact", {
method: "POST",
body: form,
});
if (res.ok) {
track("Lead", { content_name: "İletişim Formu" });
}
} finally {
setSubmitting(false);
}
}
return (
<form onSubmit={onSubmit}>
<input name="email" type="email" required />
<input name="phone" type="tel" required />
<button disabled={submitting}>Gönder</button>
</form>
);
}WhatsApp / phone link (Contact):
import { trackAndGo } from "@/lib/tracking";
export function WhatsAppLink() {
const number = "902121234567";
const url = `https://wa.me/${number}`;
return (
<a
href={url}
onClick={(e) => {
e.preventDefault();
trackAndGo(url, "Contact", { content_name: "WhatsApp CTA" });
}}
>
WhatsApp ile İletişim
</a>
);
}usePathname ile useEffect içinde pbq('track','PageView') fire'lamak gerek. pb.js init'te bir kere PageView atar, sonraki route change'leri yakalamaz.Doğrula
Üç farklı kanaldan doğrulama yapın.
(a) AdsPing dashboard
Pixel detay → Report sekmesi:
- Recent events listesinde event'i aç:
destinations.google_ads.statusne yazıyor? success✅ → Browser-side gtag fire çalışıyorauth_failed⚠️ → Server-side CAPI Basic Access bekliyor (browser-side yine çalışır)
(b) Google Ads
ads.google.com → Goals → Conversions → Summary → o action satırı:
- Status kolonu: ilk fire'dan ~30 dk sonra
Recording conversions - Conversions kolonu: 24-48h içinde sayılar gelir
(c) Browser debug
Console'da:
localStorage.setItem('pb_gtag_debug', '1'); location.reload();Beklenen log:
[pb.js gtag] fetch:ok { conversionId: "AW-1234567890", eventNameKeys: ["Lead", "Contact"] }
[pb.js gtag] load:doneBir event tetiklediğinde (form submit / WhatsApp tıklama) Network sekmesinde şu request görünmeli:
GET https://www.googletagmanager.com/g/collect?...&en=ads_conversion_xxx&tid=AW-1234567890
Sık karşılaşılan sorunlar
| Belirti | Çözüm |
|---|---|
| Network'te request gidiyor ama Google Ads'te conversion sayısı 0 kalıyor (Dönüşüm kaynağı: "Reklamlardan Gelen Arama") | Yanlış conversion kategorisi seçilmiş. Conversion Telefon Araması kategorisinde oluşturulduğu için kaynak Reklamlardan Gelen Arama — AdsPing'in gtag fire'ları bu kaynak türü için sayılmaz. Yeni conversion oluştur, kategoriyi Kişi (Contact) seç. Detay. |
Console'da [pb.js gtag] fetch:no-labels | Pipeline'da gtagEventName (veya gtagConversionLabel) boş. Add Google Ads Action dialog'undan event name'i doldur. |
Server-side CAPI 403 PERMISSION_DENIED | OAuth ile bağlandığın Google account'unun Google Ads üzerinde Admin / Standard erişimi yok. Tools → Access and security üzerinden kontrol edip gerekirse pixel ayarlarından Reconnect yap. Browser-side fire bu süre içinde çalışmaya devam eder. |
| WhatsApp tıklamasında conversion görünmüyor ama Network'te AdsPing'e POST gidiyor | Navigation timing: tarayıcı googletagmanager.com request'i atmadan sayfayı bıraktı. setTimeout(..., 300) ile navigate'i geciktir. |
| Google Ads "Recording conversions" yazıyor ama sayı artmıyor | Trafiğin gclid'i yok (direct traffic) — Google conversion'ı attribute edemez. Reklamdan gelen trafikle test et veya conversion action ayarlarındaki Conversion window'u kontrol et. |
| Customer dropdown'da hesap görünmüyor | OAuth login Google Ads hesabınızla yapılmamış olabilir. Google Ads kartından Disconnect → tekrar Connect Google Ads ile doğru hesabı seçin. |
pbq('track', 'Lead', …) / Contact çağrısı Google Ads conversion'ı kaydeder. gclid attribution otomatik. Server-side CAPI Basic Access onayı geldiğinde aynı kod hiçbir değişiklik yapmadan offline conversion + refund forwarding'i de devreye alır.