Çok ajanlı gece vardiyasının çıktıları: analitik (Rybbit) bulguları, SEO/GEO konu planı, marka stratejisi, canlı mail testi, CEO kararları (2 tur), CTO şartnamesi, yazar/yazılımcı raporları, bağımsız kod denetimi ve sabah özeti (yazılı + sesli). Kod değişiklikleri gece/* dallarında. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
204 lines
29 KiB
Markdown
204 lines
29 KiB
Markdown
# 01 — Analitik bulgular (Rybbit, site_id=1)
|
||
|
||
Hazırlayan: Analitik ajanı · 2026-09-21 gece vardiyası · Saat dilimi: Europe/Istanbul
|
||
Pencereler: **7g** = 15–21 Eyl · **30g** = 23 Ağu–21 Eyl · **Tüm zamanlar** = 2 Ağu–21 Eyl · **Organik dönem** = 18 Ağu–21 Eyl (Google trafiğinin başladığı gün; iç test trafiğinden en temiz kesit).
|
||
Yalnızca okuma araçları kullanıldı; Rybbit'te hiçbir şey oluşturulmadı/değiştirilmedi. Kod değiştirilmedi.
|
||
|
||
## Yönetici özeti (5 madde)
|
||
|
||
1. **Gerçek kullanıcıdan ödeme başlatan yok.** Organik dönemdeki 13 `odeme_baslatildi` olayının 13'ü de iç hesaplardan (kurucu + test hesapları). İç kullanıcılar filtrelenince `odeme_baslatildi` = 0, `/paket` görüntüleyen = 2 oturum. `odeme_tamamlandi` tüm zamanlarda 3 olay / 1 oturum (9–15 Ağu haftası; iç test olabilir — sipariş tablosundan doğrulanmalı). Yani bugün "ödeme hunisi" ölçülecek kadar veri üretmiyor; darboğaz daha yukarıda.
|
||
2. **Trafiğin ~%75'i Google organik ve ~%70'i katalog sayfalarına (/universite, /bolum) iniyor; bu sayfalar huniye neredeyse hiç beslemiyor.** /universite girişli 580 oturumun yalnızca 14'ü (%2,4) sıra giriyor; bounce %68. Ana sayfaya inen oturumlarda bu oran ~%10. Buna karşın katalog ziyaretçisi "listeye program ekle"yi seviyor: organik dönemde 91 oturum (%10, %93'ü mobil) `program_eklendi` yaptı — ama bunların sadece 7'si (%7,7) sıra girdi. **En büyük fırsat: katalog sayfasından sihirbaza/kayda köprü.**
|
||
3. **Trafik sezonla birlikte çöktü.** Haftalık oturum: 381 (18–24 Ağu) → 256 → 131 → 70 → 86 (15–21 Eyl). Son 7g: 86 oturum / 79 kullanıcı. Tercih dönemi dışındayız; önümüzdeki aylarda hacim düşük kalacak → şimdi ölçüm + içerik altyapısı zamanı, A/B testi zamanı değil.
|
||
4. **Huninin gerçek düşüş noktası /sonuc → /giris.** Gerçek kullanıcıda (organik dönem, iç hesaplar hariç): sıra girildi 36 → sihirbaz tamam 29 (%81) → /sonuc 24 → /giris 5. Sihirbazın kendisi sağlıklı (adım bazında kayıp %3–11); kayıp giriş duvarında. Örneklem küçük (n=24–36), yön gösterir, oran kesin değil.
|
||
5. **Ölçüm altyapısında 4 somut delik var:** (a) iç trafik dışlanmıyor ve tüm KPI'ları şişiriyor, (b) `kaydet_banner_goruntulendi` ve `tadimlik_goruntulendi` olayları bir hook hatası yüzünden **hiç** atılmıyor (0 kayıt), (c) Web Vitals site ayarında kapalı (0 performans olayı), (d) Google OAuth dönüşü yeni oturum + "Organic Search" olarak sayılıyor, huniyi bölüyor. Ayrıca giriş yapan kullanıcıların e-posta+adı Rybbit'e trait olarak gidiyor, IP takibi açık — KVKK/gizlilik metni açısından CEO kararı gerekir.
|
||
|
||
## Veri güvenilirliği — önce bunu oku
|
||
|
||
- **Örneklem küçük.** Tüm zamanlar 1.220 oturum / 941 kullanıcı; son 7g 86 oturum. Huni adımlarında n çoğu zaman < 40. Aşağıdaki yüzdeler "yön"dür; %5'lik farklara anlam yüklemeyin.
|
||
- **2–17 Ağu dönemi ağırlıklı iç test trafiği.** 296 oturum, 126 kullanıcı, oturum başı 5,9 sayfa, 349 sn, bounce %29; şehir dağılımında İstanbul+Sancaktepe %66 (`get_breakdown city`, 2–17 Ağu). Bu dönem "tüm zamanlar" ortalamasını olduğundan iyi gösteriyor (bounce %60 / 132 sn). Gerçek taban çizgisi organik dönemdir: **925 oturum, 820 kullanıcı, bounce %70, 2,1 sayfa/oturum, 62 sn** (`get_overview` 18 Ağu–21 Eyl).
|
||
- **İç kullanıcılar organik dönemde de veriyi kirletiyor:** bilinen iç cihaz/hesap kimlikleriyle 48 oturum, 136 sayfa görüntüleme (`get_overview` + `user_id` filtresi). Ödeme olaylarının tamamı bunlardan.
|
||
- Bounce eden oturumda "sayfada kalma süresi" tanım gereği 0'dır; rehber yazılarındaki 0–5 sn'lik süreler okuma süresi değil, tek sayfalık oturum oranının yansımasıdır.
|
||
- `/sonuc` sayfa görüntülemeleri şişkin (143 oturumda 1.602 görüntüleme): `trackUrlParams` açık, sonuç sayfasındaki her filtre/URL parametresi değişimi yeni pageview sayılıyor. Sayfa/oturum metriğini yukarı çeker.
|
||
- Araç kısıtları: `get_goals` şema hatasıyla döndü (okunamadı); `analyze_funnel` bir adım 0'a düşünce hata veriyor, bu yüzden huni 3–4 adımlık parçalar halinde ölçüldü. Kayıtlı huni yok (`get_funnels` → boş).
|
||
|
||
## 1. Genel KPI ve trend
|
||
|
||
| Pencere | Oturum | Kullanıcı | Sayfa/oturum | Bounce | Ort. süre |
|
||
|---|---|---|---|---|---|
|
||
| Son 7g (15–21 Eyl) | 86 | 79 | 2,16 | %67,4 | 78 sn |
|
||
| Önceki 7g (8–14 Eyl) | 70 | 63 | 2,31 | %70,0 | 70 sn |
|
||
| Son 30g | 646 | 568 | 2,07 | %69,8 | 64 sn |
|
||
| Organik dönem (18 Ağu+) | 925 | 820 | 2,12 | %70,1 | 62 sn |
|
||
| Tüm zamanlar | 1.220 | 941 | 3,03 | %60,2 | 132 sn |
|
||
|
||
Kaynak: `get_overview` (her pencere ayrı sorgu), `get_overview_timeseries` günlük.
|
||
Haftalık oturum (günlük seriden toplandı): 18–24 Ağu **381** · 25–31 Ağu **256** · 1–7 Eyl **131** · 8–14 Eyl **70** · 15–21 Eyl **86**. Zirve günü 20 Ağu (76 oturum). Düşüşün tercih/ek tercih takvimiyle örtüştüğü varsayılıyor — ÖSYM 2026 takvim tarihleri **doğrulanmalı**.
|
||
|
||
## 2. Trafik kaynakları
|
||
|
||
- Kanal (tüm zamanlar): Organic Search 896 (%73,4) · Direct 316 (%25,9) · AI 6 (%0,5) · Referral 1. 30g: Organic %77,9, Direct %22,0, AI 1 oturum. 7g: Organic 65, Direct 21, AI 0. (`get_breakdown channel`)
|
||
- Referrer (tüm zamanlar): google.com 815 · **accounts.google.com 58** · search.google.com 10 · google.com.tr 7 · **gemini.google.com 5** · Gmail uygulaması 3 · duckduckgo 1 · temp-mail.org 1 (muhtemelen mail QA testi).
|
||
- **AI/LLM referrer'ları:** toplam 6 oturum — gemini.google.com 5 + utm_source=chatgpt.com 1. 5'i 2–17 Ağu döneminde; son 30 günde 1, son 7 günde 0. Perplexity/Copilot yok. İndikleri sayfalar: /, /bolum/bilgisayar-muhendisligi, /rehber/ais-tercih-nasil-yapilir-onaylama, 3 üniversite sayfası. GEO paketi (53eb07b) sonrası etkiyi ölçmek için henüz veri yok; hacim istatistik yapılamayacak kadar düşük.
|
||
- Bir ziyaretçi/bot **`/llm.txt`** istedi (7g, 1 oturum). Repoda `llms.txt`/`llm.txt` rotası yok (`src/app/` altında yalnız `robots.ts`, `sitemap.ts`).
|
||
- UTM: chatgpt.com dışında hiç UTM'li trafik yok → bugüne kadar ölçülebilir hiçbir kampanya/sosyal paylaşım yapılmamış. Bing/Yandex organik de yok (yalnız Google + 1 DuckDuckGo).
|
||
- **Ölçüm hatası:** accounts.google.com referrer'lı 58 oturum "Organic Search" sayılıyor (bounce %8,6). Bunlar Google ile giriş dönüşleri; giriş sayfası dağılımı da bunu doğruluyor (/listem 27, /sonuc 15, /giris 8, /paket 8 oturum giriş sayfası olarak görünüyor). Organik trafiği ~%6 şişiriyor ve OAuth dönüşünde oturumu bölüyor olması kuvvetle muhtemel.
|
||
|
||
## 3. Giriş/çıkış sayfaları ve /rehber performansı
|
||
|
||
Giriş sayfası kırılımı (tüm zamanlar, `get_overview` + `entry_page starts_with`):
|
||
|
||
| Giriş grubu | Oturum | Bounce | Sıra giren oturum | Oran |
|
||
|---|---|---|---|---|
|
||
| /universite/* | 580 (%47,5) | %68,3 | 14 | %2,4 |
|
||
| / (ana sayfa) | 275 (%22,5) | %38,9* | 64 (322 oturumun) | ~%20* / organik dönemde 12/121 ≈ %10 |
|
||
| /bolum/* | 159 (%13,0) | %70,4 | ≤7 | ≤%4,4 |
|
||
| /rehber/* | 127 (%10,4) | %75,6 | 13 | %10,2 |
|
||
|
||
\* İç test trafiğiyle şişkin; 30g'de ana sayfa bounce'u %60,4.
|
||
|
||
- En çok giriş alan tekil sayfalar: / (275), /universite/sabanci-universitesi (38), /listem (27, OAuth dönüşü), /rehber/yerlesemedim-ne-yapmaliyim (19), /universite/selcuk-universitesi/sayfa/5 (19), izmir-kavram-myo (18), manas (18), /rehber/siralama-sartlari-2026 (17), /rehber/tercih-listesi-nasil-yapilir (17), /bolum/hemsirelik (16).
|
||
- **Sayfalama URL'leri Google'dan giriş alıyor:** organik dönemde `/universite/*/sayfa/N` girişli 77 oturum (%8,3), bounce %68,8. Kullanıcı bir üniversitenin 5. sayfasına düşüyor, bağlamı yok.
|
||
- En çok çıkış: / (212), /listem (39), sabanci (36), /sonuc (35), /giris (29), /paket (21). /sonuc + /giris + /paket toplam 85 çıkış = huni içi terk.
|
||
- Niş bölüm sayfaları beklenmedik giriş alıyor: rus-dili-ve-edebiyati (30g: 9, 7g: 5), cagdas-turk-lehceleri, nufus-ve-vatandaslik, farsca-mutercim, uygulamali-ispanyolca — düşük rekabetli uzun kuyruk işliyor.
|
||
- Eski alan adından kalma URL'ler 404'e düşüyor: `/aydin-adnan-menderes-universitesi-2019-taban-puanlari-ve-basari-siralamalari`, `/2017-elektrik-elektronik-muhendisligi-basari-siralamalari-ve-taban-puanlari`, `/blog/2021-tyt-konulari` (1'er oturum). Alan adının eski backlink'leri var demek; hacim küçük ama Search Console'dan tam liste çıkarılmalı.
|
||
- Bozuk gelen URL'ler: `/universiteler:%3EÜniversitelerin` (3 oturum), `/rehber/tercih-robotu-...:J<b>Tercih` (1). Bir dış kaynak/scraper linki bozuk kopyalamış; düşük öncelik.
|
||
|
||
### /rehber yazıları (tüm zamanlar, `get_breakdown pathname starts_with /rehber`; oturum / görüntüleme / bounce)
|
||
|
||
| Durum | Yazı | Oturum | Bounce |
|
||
|---|---|---|---|
|
||
| Çekiyor | tercih-listesi-nasil-yapilir | 27 | %48 |
|
||
| Çekiyor | kac-siralama-ile-hangi-bolume-girebilirim | 23 | %52 |
|
||
| Çekiyor ama tutmuyor | yerlesemedim-ne-yapmaliyim | 23 | %74 (30g girişlerinde %100) |
|
||
| Çekiyor, iyi tutuyor | olu-tercih-nedir | 19 | %26 |
|
||
| Çekiyor ama tutmuyor | siralama-sartlari-2026 | 19 | %74 |
|
||
| Orta | yks-tercih-takvimi-2026 | 12 | %42 |
|
||
| Orta | tercih-robotu-nedir-yok-atlas-nasil-kullanilir | 11 | %55 |
|
||
| Orta | ais-tercih-nasil-yapilir-onaylama | 10 | %80 (ama ort. 127–137 sn okunuyor) |
|
||
| Zayıf | ek-yerlestirme-2026 (7), hazirlik-sinifi (6, %100 bounce), tercih-sonuclari (5), yatay-gecis (5), bolum-mu-universite-mi (4), onlisans-mi-lisans-mi (4), universite-kayit-rehberi (4), merkezi-yerlestirme (3), yurt-burs (3), obp (2), devlet-mi-vakif-mi (1), ozel-kosullu-programlar (1) | | |
|
||
| **Ölü (0 görüntüleme)** | **taban-puan-mi-siralama-mi, taban-siralamalar-nasil-degisir, bolumun-is-imkanini-nasil-arastirirsin, veliler-icin-tercih-rehberi** | 0 | — |
|
||
|
||
24 yazının tamamı 1–7 Ağu arasında yayınlandı (git log); 7 haftada 4'ü hiç görüntülenmedi, 12'si ≤7 oturum aldı. Rehber girişli oturumların sıra girme oranı (%10,2) katalog sayfalarının 4 katı — rehber az trafik çekiyor ama çektiği trafik daha niyetli.
|
||
|
||
## 4. Huni
|
||
|
||
Gerçek rotalar (`src/app`): `/` → (sihirbaz **modal**, ayrı rota yok: `src/features/sihirbaz/components/sihirbaz-modal.tsx`) → `/sonuc` → `/giris` (+`/giris/dogrula`) → `/listem` → `/paket` → `/odeme` → `/odeme/sonuc`. Sihirbaz adımları yalnızca olaylarla ölçülebilir (`sira_girildi`, `sihirbaz_adim{adim}`, `sihirbaz_tamamlandi`).
|
||
|
||
**A. Gerçek kullanıcı hunisi** — organik dönem, iç hesaplar `user_id not_equals` ile dışlandı (`analyze_funnel`):
|
||
|
||
| Adım | Oturum | Önceki adıma göre |
|
||
|---|---|---|
|
||
| sira_girildi | 36 | — |
|
||
| sihirbaz_adim adim=2 | 32 | %89 |
|
||
| sihirbaz_adim adim=3 | 31 | %97 |
|
||
| sihirbaz_tamamlandi | 28–29 | %90 |
|
||
| /sonuc görüntüleme | 24 | %83 (bkz. not) |
|
||
| /giris görüntüleme | 5 | **%21** |
|
||
|
||
Ayrı sorgu (/sonuc'tan başlayan, aynı filtre): /sonuc 30 → /giris 9 (%30) → giris_denendi 5 (%17). Aynı dönemde gerçek kullanıcıda: `giris_denendi` 10 olay, `liste_olusturuldu` 3, `kilit_goruntulendi` 7, `/listem` 8 oturum, `/paket` 2 oturum, `odeme_baslatildi` **0**.
|
||
|
||
Not: sihirbaz_tamamlandi → /sonuc arasındaki %17'lik "kayıp" büyük olasılıkla ölçüm kaynaklı: sihirbaz /sonuc üzerindeki profil kapısından da açılabiliyor (`src/features/liste/components/tercih-profili-kapisi.tsx`), o durumda yeni pageview oluşmuyor ve sıralı huni eşleşmiyor. Gerçek terk olarak yorumlanmamalı.
|
||
|
||
**B. Ana sayfa → sıra girme** (organik dönem): mobil 56 → 5 (%8,9) · masaüstü 65 → 7 (%10,8). Tüm zamanlar: 322 → 64 (%19,9; iç testle şişkin), 7g: 24 → 6. **36 sıra girişinin yalnız 12'si ana sayfadan**; 24'ü katalog/rehber sayfalarındaki formlardan (cta-sira-form / profil kapısı) geliyor.
|
||
|
||
**C. Tüm zamanlar, iç trafik dahil (referans için, karar için kullanmayın):** / 322 → sıra 64 → tamam 55 → /sonuc 43; /sonuc 141 → /giris 53 → giris_denendi 32 → /listem 17; /listem 76 → /paket 20 → odeme_baslatildi 11 oturum. `odeme_baslatildi` 94 olay / 23 oturum / **6 kullanıcı**, hepsi iç hesap veya tanıdık test hesabı (oturum listesinden doğrulandı; son 7g'deki 9 olayın 9'u tek bir kurucu oturumu, 20 Eyl).
|
||
|
||
**D. Katalog tarafı:** `program_eklendi` organik dönemde 128 olay / 91 oturum; bu oturumların 7'si sonradan sıra girdi (%7,7). `netler_goruntulendi` 239 olay — katalogdaki en çok kullanılan etkileşim. `/bolum/hemsirelik → /giris` yolu 8 kez görüldü (`get_journeys`), yani katalogdan giriş duvarına çarpan bir akış var.
|
||
|
||
## 5. JS hataları (`get_errors`, tüm zamanlar — toplam 7 olay, 5 oturum; hacim çok düşük)
|
||
|
||
| Hata | Adet / oturum | Sayfa | Olası kaynak |
|
||
|---|---|---|---|
|
||
| `TypeError: f.getBBox is not a function` | 2 / 2 (ikisi de son 30g) | `/rehber/*` (pathname filtresiyle doğrulandı; /meraklisina'da yok) | `src/features/rehber/components/el-cizimi-sema.tsx:55-74` — `mermaid.render()` çağrısında `.catch` yok. Hata olursa `svg` state'i hiç dolmuyor, kullanıcı sonsuza dek `h-96 animate-pulse` iskeletini görüyor (satır 92-96). 24 rehber yazısının 24'ünde mermaid şeması var. |
|
||
| `HierarchyRequestError: insertBefore … new child contains the parent` | 3 / 1 (30g'den eski) | sayfa tespit edilemedi | Tek oturum; büyük olasılıkla tarayıcı eklentisi/çeviri aracı ya da portal kullanımı (`ViewportPortal`). Tekrarlamadıkça izle. |
|
||
| `ChunkLoadError: Failed to load chunk /_next/static/chunks/…` | 1 / 1 | `/`, `/sonuc` veya `/listem` (Safari/GSA) | Deploy sırasında açık sekme eski chunk'ı istiyor. `src/app/error.tsx` içinde ChunkLoadError'da tek seferlik `location.reload()` yoksa eklenmeli. |
|
||
| `Minified React error #418` (hydration metin uyuşmazlığı) | 1 / 1 | `/universite`, `/bolum` veya `/rehber` altı | Sunucu/istemci farklı metin: tarih/sayı biçimlendirme (`toLocaleString`), "veri tazelik" damgası (GEO paketi 53eb07b) ilk şüpheli. |
|
||
|
||
## 6. Web Vitals
|
||
|
||
**Veri yok.** `get_site` → `webVitals: false`; `get_web_vitals` → `total_performance_events: 0`, tüm yüzdelikler null. LCP/INP/CLS hakkında Rybbit'ten hiçbir şey söylenemez; mobil/masaüstü ayrımı yapılamadı. Trafiğin %79'u mobil ve mobil bounce masaüstünden 12 puan kötü olduğu için bu körlük önemli. Açmak site ayarı değişikliği gerektirir (bu vardiyada yasak) → kullanıcı Rybbit panelinden "Web Vitals"ı açmalı.
|
||
|
||
## 7. Cihaz / tarayıcı / konum
|
||
|
||
- Cihaz (organik dönem): **Mobil 735 (%79,5), bounce %72,5** · Masaüstü 190 (%20,5), bounce %60,5. Tüm zamanlar %71/%29.
|
||
- Tarayıcı (30g): Mobile Chrome %41,4 · Mobile Safari %24,3 · Chrome %21,0 · **GSA (Google uygulaması içi tarayıcı) %9,1** · Samsung Internet %1,7. OS: iOS %39,0, Android %38,3, Windows %15,9, macOS %5,9.
|
||
- Şehir (30g): İstanbul %24, bilinmeyen %14, Ankara %10,7, İzmir %5,7, Bursa %3,4, Kayseri %2,8, Antalya %2,3. Ülke: TR %89,6; US %3,9 + CN %1,6 + SG %1,2 büyük olasılıkla bot/datacenter (blockBots açık olmasına rağmen sızan ~%7).
|
||
- **Mobil huni farkı:** sıra giren oturumların %72'si mobil (26/36) — trafik payıyla (%79) uyumlu, mobilde belirgin bir sihirbaz engeli görünmüyor. `program_eklendi` yapanların %93'ü mobil (85/91). Tüm zamanlar hunisinde mobil /→sıra %15,0, masaüstü %23,1 ama masaüstü iç testle şişkin. Sonuç: eldeki veriyle "mobilde huni bozuk" denemez; n çok küçük.
|
||
|
||
## 8. Retention
|
||
|
||
`get_retention` haftalık (90g): 17 Ağu kohortu 312 kullanıcı → 1. hafta %1,3, 2. hafta %0,3 · 24 Ağu kohortu 258 → %1,2 · 31 Ağu kohortu 104 → %1,9. Son iki kohortta (57 ve 93 kullanıcı) geri dönen yok. Günlük (14g): 15 kohortun 4'ünde tek tük geri dönüş. 3 Ağu kohortundaki %17 iç ekip. **Gerçek geri dönüş ≈ %1–2.** Ürün doğası gereği (yılda bir kullanılan tercih aracı) beklenen bir tablo; ancak giriş yapmayan kullanıcıya geri dönmesi için hiçbir kanca (e-posta, kayıtlı liste hatırlatması) çalışmıyor — kaydet banner'ının gösterilip gösterilmediği bile ölçülemiyor (bkz. CTO-2).
|
||
|
||
## 9. Ölçüm boşlukları
|
||
|
||
Kodda tanımlı olaylar: `src/lib/analitik.ts:14-32` (18 istemci olayı) + `src/lib/analitik-sunucu.ts:17` (`odeme_tamamlandi`, sunucu tarafı).
|
||
|
||
| Olay | Rybbit'te (tüm zamanlar) | Durum |
|
||
|---|---|---|
|
||
| program_eklendi 371 · netler_goruntulendi 300 · sihirbaz_adim 252 · sira_girildi 136 · sihirbaz_tamamlandi 114 · odeme_baslatildi 94 · kilit_goruntulendi 68 · giris_denendi 67 · katalog_arama 22 · hazir_panel_goruntulendi 22 · giris_cta_tiklandi 15 · danisman_sorusu 12 · liste_olusturuldu 10 · kredi_bitti 4 · odeme_tamamlandi 3 | var | çalışıyor |
|
||
| **kaydet_banner_goruntulendi** | **0** | hook hatası (CTO-2) |
|
||
| **tadimlik_goruntulendi** | **0** | hook hatası (CTO-2) |
|
||
| liste_guncellendi, liste_revize | 0 | kullanım yok ya da gerçek kullanıcı o aşamaya gelmiyor; hata kanıtı yok |
|
||
|
||
Huniyi ölçmek için **eksik** olaylar:
|
||
1. `giris_basarili` / `kayit_tamamlandi` (sunucu tarafı, `odeme_tamamlandi` deseniyle). Şu an yalnız "denendi" var; e-posta doğrulama ve OAuth başarısı görünmüyor. /giris → /listem arası kaybın (%47) nedeni bilinemiyor.
|
||
2. `sonuc_goruntulendi` {girisli, havuz_boyutu, sira_kovasi} — /sonuc pageview'ı URL parametreleriyle şişkin ve profil kapısı akışında hiç oluşmuyor; olay tabanlı adım şart.
|
||
3. `liste_uretim_basladi` ve `liste_uretim_hata` {kod} — `src/features/rapor/components/liste-uretici.tsx:55-90` yalnız başarıyı ve kredi bitişini izliyor; AI üretim hatası/timeout görünmez.
|
||
4. `paket_goruntulendi` {kaynak: kilit | kredi_bitti | nav} ve `odeme_hata` / `odeme_iptal` (iyzico callback başarısız dalı, `src/lib/odeme.ts`).
|
||
5. `sihirbaz_acildi` {kaynak} ve `sihirbaz_kapatildi` {adim} — modal terk noktası; `sira_girildi` API başarısına bağlı olduğundan form hatası (`hero-form.tsx:86` catch dalı) görünmüyor → `sira_form_hata`.
|
||
6. Katalog → huni köprüsü: `katalog_cta_tiklandi` / `rehber_cta_tiklandi` {slug} — rehber ve üniversite sayfalarındaki CTA'ların tıklanma oranı bilinmiyor.
|
||
7. `rapor_yazdirildi` (`/rapor/yazdir`) — ücretli değerin tüketildiğinin tek sinyali.
|
||
8. Rybbit tarafı: hedef (goal) ve kayıtlı huni tanımlı değil; Web Vitals kapalı; iç trafik filtresi yok.
|
||
|
||
---
|
||
|
||
## Öncelikli bulgular
|
||
|
||
| # | Bulgu | Kanıt (rakam + sorgu) | Etki | Önerilen aksiyon | Muhatap |
|
||
|---|---|---|---|---|---|
|
||
| 1 | Gerçek kullanıcıdan ödeme başlatan yok; ödeme verisinin tamamı iç trafik | Organik dönem `get_event_names`: odeme_baslatildi 13 → iç `user_id`'ler dışlanınca 0; `get_sessions event_name=odeme_baslatildi`: 23 oturum / 6 kullanıcı, hepsi iç/test; /paket gerçek kullanıcı 2 oturum | Yüksek | Fiyat/paket optimizasyonuna vakit harcamayın; öncelik huni üstü (katalog→sihirbaz, /sonuc→giriş). `odeme_tamamlandi` 3 kaydının gerçek satış olup olmadığını sipariş tablosundan doğrulayın | CEO |
|
||
| 2 | İç trafik dışlanmıyor, tüm KPI ve huni oranlarını şişiriyor | 2–17 Ağu: 296 oturum, 5,9 sayfa/oturum, İstanbul+Sancaktepe %66; organik dönemde iç ID'lerle 48 oturum | Yüksek | Rybbit site ayarından ekip IP'lerini dışla ve/veya ekip tarayıcılarında Rybbit'in opt-out bayrağını kullan (`localStorage` `disable-rybbit` — Rybbit dokümanından **doğrulanmalı**). Raporlamada taban çizgisi 18 Ağu+ alınmalı | CTO |
|
||
| 3 | Katalog sayfaları trafiğin ~%60'ını alıyor ama huniye %2–4 besliyor | /universite girişli 580 oturum → 14 sıra girişi (%2,4), bounce %68; /bolum 159 → ≤7; buna karşın program_eklendi 91 oturum, yalnız 7'si sıra girdi (`analyze_funnel program_eklendi→sira_girildi` %7,7) | Yüksek | Katalog sayfasında "bu programa sıralaman yeter mi?" tarzı sıra girişi köprüsünü öne al; 1. program eklenince sihirbaza/kayda yönlendiren adım. Önce CTA tıklama olayı eklenmeli (ölçmeden değiştirmeyin) | CEO → CTO |
|
||
| 4 | Huni içi en büyük düşüş /sonuc → /giris | Gerçek kullanıcı: /sonuc 24–30 oturum → /giris 5–9 (%21–30) → giris_denendi 5; /sonuc çıkış sayfası 35, /giris 29 | Yüksek (n küçük) | /sonuc'ta girişsiz kullanıcıya gösterilen değer önerisini (tadımlık satır, hazır panel) gözden geçir; ama önce `tadimlik_goruntulendi` düzeltilmeli ki gösterilip gösterilmediği bilinsin | CEO, Marka |
|
||
| 5 | `kaydet_banner_goruntulendi` ve `tadimlik_goruntulendi` hiç atılmıyor | `get_event_names` tüm zamanlar: ikisi de listede yok (0), oysa program_eklendi 371; kod: `use-gorunum-olayi.ts:28-31` ref null iken effect erken dönüyor ve deps değişmediği için bir daha çalışmıyor | Orta | CTO-2'deki düzeltme | CTO |
|
||
| 6 | Web Vitals kapalı | `get_site` webVitals:false; `get_web_vitals` 0 olay | Orta | Rybbit panelinden aç (kullanıcı işlemi). Mobil %79 + bounce %72,5 iken performans körü kalınmamalı | CTO / Bilal |
|
||
| 7 | Google OAuth dönüşü "Organic Search" + yeni oturum sayılıyor | referrer accounts.google.com 58 oturum, bounce %8,6; giriş sayfası /listem 27, /sonuc 15 | Orta | Huni analizini oturum yerine kullanıcı/olay bazlı kur; `giris_basarili` sunucu olayı ekle; Rybbit'te accounts.google.com'u referrer dışlama listesine al (ayar varsa — doğrulanmalı) | CTO |
|
||
| 8 | Trafik 5 haftada %77 düştü (381 → 86 oturum/hafta) | `get_overview_timeseries` günlük, haftalık toplam | Orta | Sezon dışı strateji kararı: evergreen içerik + 2027 tercih dönemi için SEO birikimi; kısa vadede dönüşüm deneyi için trafik yetersiz | CEO, SEO |
|
||
| 9 | 24 rehber yazısının 4'ü sıfır, 12'si ≤7 oturum | `get_breakdown pathname starts_with /rehber` | Orta | SEO başlığına bakın | SEO |
|
||
| 10 | Rehber şemalarında `getBBox` hatası → şema yerine kalıcı gri iskelet | `get_errors pathname starts_with /rehber`: 2 olay / 2 oturum (30g) | Düşük–Orta (hacim küçük ama her rehber yazısını etkileyebilir) | CTO-3 | CTO |
|
||
| 11 | Giriş yapan kullanıcının e-posta + adı Rybbit'e gidiyor, IP takibi açık | `src/components/rybbit-identify.tsx:28-31`; `get_site` trackIp:true; oturum kayıtlarında trait olarak e-posta görünüyor | Orta (hukuki) | Self-host olsa da gizlilik metni/KVKK aydınlatmasıyla tutarlılığı kontrol edin; gerek yoksa trait'leri kaldırıp yalnız kullanıcı ID'si gönderin | CEO → CTO |
|
||
| 12 | AI/LLM trafiği neredeyse yok | kanal AI: 6 oturum tüm zamanlar, son 30g 1, son 7g 0; `/llm.txt` isteği 1 | Düşük (şimdilik) | GEO etkisini aylık izleyin; `llms.txt` rotası değerlendirilsin | SEO/GEO |
|
||
| 13 | Eski alan adı URL'leri 404 | 3 farklı eski URL, 1'er oturum (organik dönem, giriş sayfası regex dışı sorgu) | Düşük | Search Console'dan 404 + backlink listesi; ilgili /universite, /bolum sayfalarına 301 | SEO → CTO |
|
||
|
||
## CTO'ya iletilecek teknik maddeler
|
||
|
||
1. **İç trafik filtresi.** Rybbit site ayarında IP dışlama ve/veya ekip cihazlarında opt-out. Kod tarafında alternatif: `src/app/layout.tsx:129-136`'daki Script'i bir çerez/localStorage bayrağıyla koşullamak. Hangi yöntem seçilirse seçilsin, mail QA / tarayıcı test ajanlarının trafiği de dışlanmalı (referrer'da temp-mail.org göründü).
|
||
2. **Görünüm olayı hook'u koşullu render'da çalışmıyor.** `src/components/use-gorunum-olayi.ts:28-31`: effect yalnız `[ad, anahtarEki]` değişince kuruluyor; bileşen ilk render'da `null` dönüyorsa `ref.current` null → erken return → bir daha hiç gözlemlenmiyor. Etkilenenler: `src/features/liste/components/kaydet-banner.tsx:43-47` (liste < 3 ve `kapali` başlangıçta true) ve `src/features/rapor/components/tadimlik-satiri.tsx:100-104` (`satir` async geliyor). Çalışanlar (`listem-govde.tsx:140,145`, `sihirbaz-cagri-karti.tsx:232`) eleman baştan mount olduğu için etkilenmiyor. Çözüm yönü: callback ref'e geçmek ya da gözlemi, elemanı saran ve yalnız eleman varken mount olan küçük bir alt bileşene taşımak.
|
||
3. **Mermaid render hatası yutulmuyor.** `src/features/rehber/components/el-cizimi-sema.tsx:55-74`: `import("mermaid").then(async …)` zincirinde `catch` yok; `getBBox` hatasında iskelet sonsuza dek kalıyor. En azından hata durumunda iskeleti kaldırıp `ariaLabel` metnini düz yazı olarak göstermek. Hata `/rehber/*`'de görüldü, `/meraklisina`'da görülmedi.
|
||
4. **ChunkLoadError toparlanması.** `src/app/error.tsx`'te ChunkLoadError için tek seferlik yeniden yükleme var mı kontrol edilmeli (1 olay, Safari/GSA).
|
||
5. **Hydration #418.** Katalog/rehber sayfalarında sunucu-istemci metin farkı; ilk şüpheli yerel tarih/sayı biçimlendirmesi ve GEO paketindeki veri tazelik damgası. Tek olay — düşük öncelik, ama yeniden görülürse sayfa bazında daraltın (`get_errors` + pathname filtresi).
|
||
6. **Eksik olaylar** (öncelik sırasıyla): `giris_basarili` (sunucu), `sonuc_goruntulendi`, `liste_uretim_hata`, `paket_goruntulendi{kaynak}`, `odeme_hata`, `sihirbaz_kapatildi{adim}`, `katalog_cta_tiklandi` / `rehber_cta_tiklandi`, `sira_form_hata`. Tip birliği: `src/lib/analitik.ts:14-32`; sunucu olayları: `src/lib/analitik-sunucu.ts:17`.
|
||
7. **/sonuc pageview şişmesi.** `trackUrlParams: true` + /sonuc'taki URL parametre değişimleri → 143 oturumda 1.602 pageview. Maskeleme (`data-mask-patterns`, `layout.tsx:132`) sıralamayı gizliyor ama sayımı engellemiyor. Ya /sonuc'ta parametre değişimlerini `replaceState` ile pageview tetiklemeyecek şekilde yapın ya da raporlamada /sonuc için oturum sayısını kullanın.
|
||
8. **Sayfalama URL'leri.** `/universite/[slug]/sayfa/[no]` sayfaları Google'dan doğrudan giriş alıyor (77 oturum). Teknik karar SEO ile birlikte: canonical'ı 1. sayfaya vermek mi, yoksa sayfalama sayfalarının başlık/H1'ini ("… — sayfa 5") ve üst bağlamını güçlendirmek mi.
|
||
9. **Rybbit paneli (kod değil, ayar — kullanıcı onayıyla):** Web Vitals'ı aç; hedef ve kayıtlı huni tanımla (sira_girildi → sihirbaz_tamamlandi → giris_basarili → liste_olusturuldu → odeme_baslatildi → odeme_tamamlandi). `get_goals` MCP aracı şu an şema hatası veriyor (meta.total string dönüyor) — Rybbit/MCP sürüm uyumsuzluğu, bilgi notu.
|
||
10. **PII.** `src/components/rybbit-identify.tsx:28-31` e-posta ve adı trait olarak gönderiyor; CEO kararına göre kaldırılabilir (yalnız `kullaniciId` yeterli).
|
||
|
||
## SEO/GEO ekibine iletilecek içerik sinyalleri
|
||
|
||
- **Trafiği taşıyan şey rehber değil, programatik katalog.** Girişlerin %47,5'i /universite/*, %13'ü /bolum/*; rehber %10,4. Uzun kuyruk işliyor: vakıf/KKTC/yurt dışı üniversiteleri (Sabancı 38, Manas 18, İzmir Kavram MYO 18, Nevşehir HBV 17, Bayburt 13, Kıbrıs Aydın/İlim, Saraybosna, Ahmet Yesevi) ve niş bölümler (rus dili, çağdaş türk lehçeleri, nüfus ve vatandaşlık, farsça mütercim, uygulamalı ispanyolca). Rekabetin düşük olduğu bu kümelerde katalog sayfalarının üstüne kısa, özgün bir "bu üniversite/bölüm için tercih notu" bloğu en yüksek kaldıraçlı içerik işi olabilir.
|
||
- **Katalog sayfalarının bounce'u %68–70 ve huniye katkısı %2–4.** İçerik tarafında: sayfanın ilk ekranında "sıralamanla bu programlar tutar mı?" sorusuna bağlanan net bir köprü metni.
|
||
- **Niyeti yüksek rehber konuları:** tercih-listesi-nasil-yapilir (27), kac-siralama-ile-hangi-bolume-girebilirim (23), olu-tercih-nedir (19, bounce %26 — en iyi tutan), yks-tercih-takvimi-2026 (12). Rehber girişli oturumlar %10,2 oranında sıra giriyor (katalogun 4 katı). Bu kümeyi derinleştirin.
|
||
- **Trafik çekip tutamayanlar:** yerlesemedim-ne-yapmaliyim (23 oturum, 30g girişlerinde %100 bounce) ve siralama-sartlari-2026 (19, %74–87). Arama niyeti–içerik uyumu ve ilk ekran kontrol edilmeli; "yerleşemedim" okuyucusu ürünün hedef kitlesi değil (tercih bitmiş) — ek yerleştirme/2027 hazırlığına yönlendiren bir sonraki adım gerekir.
|
||
- **Ölü yazılar (0 görüntüleme, 7 hafta):** taban-puan-mi-siralama-mi, taban-siralamalar-nasil-degisir, bolumun-is-imkanini-nasil-arastirirsin, veliler-icin-tercih-rehberi. İndekslenme durumu Search Console'dan kontrol edilmeli; iç link (katalog sayfalarından ve güçlü rehber yazılarından) verilmeli. Yeni yazı üretmeden önce bu 4 + ≤3 oturumlu 5 yazının neden görünmediği anlaşılmalı.
|
||
- **Sezon:** trafik 20 Ağu zirvesinden beri düşüyor. Sezon dışı evergreen konular (bölüm tanıtımları, taban sıralama trendleri, "X sıralamayla nereye girilir" kümeleri) 2027 için şimdi yaşlandırılmalı. ÖSYM takvimine bağlı her tarih **doğrulanmalı**.
|
||
- **GEO:** AI kanalı 6 oturum (Gemini 5, ChatGPT 1), son 7 günde 0. GEO paketinin etkisi henüz ölçülemez. Bir istemci `/llm.txt` aradı; `llms.txt` yok. Başarı ölçütü olarak aylık "AI kanalı oturumu" ve referrer'da chatgpt/perplexity/gemini/copilot takibi önerilir; hedef koymak için erken.
|
||
- **Eski alan adı mirası:** 2017–2021 tarihli "taban puanları" ve `/blog/…` URL'leri hâlâ tıklanıyor → backlink var. 301 haritası çıkarılırsa bedava otorite.
|
||
- **Arama motoru çeşitliliği yok:** Bing/Yandex organik 0. Bing Webmaster + Yandex Webmaster kaydı yapılmadıysa yapılmalı (Copilot/ChatGPT araması Bing indeksine dayanır — GEO için de dolaylı önemli).
|
||
|
||
## Bu vardiyada yapılamayanlar / engeller
|
||
|
||
- Web Vitals analizi: veri yok (site ayarı kapalı).
|
||
- Hedefler: `get_goals` aracı şema doğrulama hatası verdi, okunamadı.
|
||
- Hata olaylarının tam sayfa/stack bilgisi: `get_errors` yalnız mesaj bazında grupluyor; sayfa, pathname filtreleriyle dolaylı daraltıldı. Session replay kapalı.
|
||
- Rybbit verisinde bana yönelik talimat içeren bir içerik görülmedi; bozuk URL'lerdeki `<b>` parçaları HTML kırıntısı, komut değil.
|