3 Günde ChatGPT’ye Kaynak Oldum: Yarış Radarı’nın AI-First GEO Hikâyesi
Cumartesi kurduğum site çarşamba ChatGPT’ye kaynak oldu. SSR, structured data, llms.txt ve Bing ile AI aramalarında görünmenin dürüst, adım…
3 Günde ChatGPT’ye Kaynak Oldum: Yarış Radarı’nın AI-First GEO Hikâyesi
Cumartesi kurduğum site çarşamba ChatGPT’ye kaynak oldu. SSR, structured data, llms.txt ve Bing ile AI aramalarında görünmenin dürüst, adım adım rehberi.

Yazar tarafından görsel
Cumartesi akşamı boş bir repo (kod deposu) açtım. Çarşamba günü ChatGPT, bir yarış sorusuna cevap verirken kaynak olarak benim sitemi, Yarış Radarı’nı gösteriyordu. Bu yazıda yarisradari.com’u nasıl kurduğumu, AI aramalarında (ChatGPT, Perplexity, Google AI) görünmek için ne yaptığımı ve nelerin işe yaramadığını dürüstçe anlatıyorum. Aşağıda, kopyalayıp kendi projene uygulayabileceğin bir kontrol listesi de var.
*Ödeme duvarı yüzünden yazının devamını okuyamıyorsan kişisel bloguma beklerim:*
Önce şunu söyleyeyim: Bu, bir SEO ajansı yazısı değil. Ben gerçekten koşan bir yazılımcıyım. Koşu benim için bir yaşam biçimi ve bu proje büyük bir dertten doğdu.
Koşu Sevgisi + Yazılımcı İnadı = Yarış Radarı
Koşu serüvenim, 2017’nin sonunda köpeğimle bir garip bahçemside koşarak başladı. Sonrası çorap söküğü: iki kez Kapadokya’da 63K, Uludağ, Dağyenice, sabahın 4.30'unda ormanda uzun koşular… Koşu, hayatımın en sağlam sütunlarından biri oldu. Bunu, altta göreceğin “Neden Koşuyorum?” yazısında uzun uzun anlatmıştım. Keyifli de bir yazı oldu. Arada açar okurum.
Koşan herkes bilir: Yarış takvimi muhabbeti, grup koşularının değişmez konusudur. Sorular uzar gider: “Şu yarışa geliyor musun? Kayıtlar açılmış mı? Son gün neymiş?” Türkiye’de ise bu soruların cevaplarını tek bir yerde bulamıyorsun. Federasyon takvimi bir yerde, organizatörün Instagram hesabı başka yerde, zamanlama şirketlerinin listeleri ayrı bir dünyada, triatlon federasyonunun tam takvimi ise PDF’in içinde. Yarışı duyduğunda kayıtlar kapanmış bile olabiliyor. Son kayıt tarihini kaçırdığın için giremediğin yarışın acısını bilen bilir. (Ben bilirim.) Yıllarca “Biri şunu derli toplu bir yere koysa.” diye söylendim. Bunun örnekleri tabii ki vardı ama hiçbiri tatmin edici değildi. Sonra aynaya baktım: Ben yazılımcıyım. Problem + klavye = proje.
Cumartesi akşamı boş repoyu açtım, alan adını satın aldım (Salı günü marka tescil başvurumu da yaptım): yarisradari.com; Türkiye’deki koşu, patika, bisiklet, yüzme ve triatlon yarışlarının ücretsiz, reklamsız takvimi.
Üstelik takvime bakmayı unutsan bile o seni unutmuyor: Abone oluyorsun, kayıtlar kapanmadan sana mail atıyor. Yazıyı yayımlamadan önce, daha sitenin üçüncü gününde ilk e-posta abonemi Google üzerinden kazanmıştım bile. Tam olarak ne arayarak geldiğini bilmiyorum. Detaylı analytics verisi için KVKK, çerezler ve bir sürü yasal gereklilikle uğraşmam gerekiyor. Merakımı yendim. Bunun projenin doğasına aykırı olduğunu ve her sayfada çalışan bu tip araçların projeyi hantallaştıracağını düşündüm. Bu yüzden gerçekten ne aranarak gelindiğini şu an bilmiyorum.
Kopyalanabilir Kontrol Listesi (Checklist)
Kendi projene uygulamak istersen sırasıyla:
- SSR kullan. İçerik, JavaScript çalışmadan HTML’de olsun. curl testi yap.
- Kimsenin tutmadığı veriyi bul ve yapılandırılmış tut. Baş sorgu savaşına girme, uzun kuyruğun tek kaynağı ol.
- Schema.org işaretlemesi ekle (alanına uygun tip + FAQPage [SSS]) ama sadece gerçek veriden üret.
- Structured datayı görünür içerikle eşle. Hayalet markup cezalık.
- Her sayfaya kaynak ve son güncelleme tarihi koy.
llms.txtekle ama ondan mucize bekleme.- Bing Webmaster Tools’a kaydol. ChatGPT oradan besleniyor.
- Cloudflare’in AI bot engelini kontrol et: curl -A
GPTBotile test. robots.txt'te AI crawler’lara açıkça izin ver (GPTBot, ClaudeBot, PerplexityBot, OAI-SearchBot).- Ölç: Bing AI Performance raporunu kontrol et, arada bir de ChatGPT’ye gerçek kullanıcı gibi soru sor.
Şimdi detaylara geçeliim.
Cumartesi Boş Repo, Çarşamba ChatGPT Kaynak Gösteriyor
Projenin hedefini ilk günden tek cümleyle yazdım: Birisi bir yarışı sorduğunda, AI cevabı benim sitemden alsın ve beni kaynak göstersin.
Çarşamba günü test ettim. Tarayıcıda kullandığım ChatGPT versiyonuyla bu konu hakkında hiç konuşmamıştım. Yepyeni bir yarış duyuru web sitesi geliştirdiğimi bilmiyor adam. Web araması açıkken ChatGPT’ye sıradan bir kullanıcı gibi sordum: “Davraz Sky Run ne zaman?” Cevap geldi: tarih, yer, parkurlar. Ve kaynak kartında: Yarış Radarı. Başlık ve açıklama benim sayfamın metalarından geliyordu.

Yazar tarafından ekran görüntüsü
O an hissettiğim şeyi koşucular iyi anlar: bitiş çizgisini görmek gibi. Daha yarış bitmedi ama artık biteceğini biliyorsun. “Başardım! Aylarca bunun için antrenman yaptım, çalıştım ve sonunda bitirdim!” diyorsun da gülümsüyorsun ya, aynen öyleydim. Sınav sonucun açıklandığında hedeflediğin yeri kazanmışsın gibi…
Efektif 3 gün. Sıfır yaşında bir domain, sıfır backlink. Aha, şimdi bu yazı üzerinden kendi siteme link koyacam. Sıfır tanıtım. Kimseye henüz link göndermedim “Hele destek verin, tıklayın bakam biyo.” demedim…
Bu hıza dürüst bir dipnot: Geliştirmenin büyük kısmını Claude Code ile yaptım; scraper, site, SEO ve GEO katmanları normalde haftalar sürecekken günlere sıkıştı. Ama hız, işin daha küçük kısmı. Asıl mesele hangi kararların verildiğiydi; çünkü aynı siteyi “önce görsel şov, sonra SEO bakarız” diye kursam bu yazı olmazdı.
Peki ne yaptım?
GEO ve AEO Nedir? Google’a Değil, Cevap Motoruna Optimize Etmek
Klasik SEO, mavi linkler listesinde üste çıkma oyunuydu. Google’ın bile tıklarının azaldığını duymuşsundur. AI modunu niye yaptılar sanıyorsun? Artık iki kısaltma daha var: AEO (Answer Engine Optimization: soruya doğrudan cevap veren motorlara optimize etmek) ve GEO (Generative Engine Optimization: ChatGPT, Perplexity, Google AI gibi üretken motorların seni kaynak göstermesi).
Aradaki farkı bir örnekle anlatayım. Klasik SEO’da hedef, “Davraz Sky Run” araması yapan kişinin senin linkine Google’da tıklaması. GEO’da ise kullanıcı belki sitene hiç gelmeyecek; ChatGPT cevabı verecek, altına yukarıdaki ekran görüntüsünde gördüğün gibi küçük bir kaynak kartı koyacak. Kazancın tık değil, isim. Marka olarak “yarış bilgisinin geldiği yer” olmak.
Kulağa üç ayrı disiplin gibi geliyor ama pratikte hepsi aynı kapıya çıkıyor: makinelerin okuyabileceği, güvenebileceği ve alıntılayabileceği içerik üret. Ben siteyi baştan bu önceliğe göre kurdum. Tasarım kararlarında bile öncelik sırası hep aynıydı: önce crawler, sonra göz zevki.
Her sayfa SSR: JavaScript’in Arkasına Sakladığın İçerik AI İçin Yok
En kritik teknik karar buydu. Sitenin tamamı sunucuda render ediliyor (Next.js, Cloudflare Workers üzerinde). Ana sayfadaki takvim sıfır JavaScript ile çalışıyor; mobilde bir güne dokununca açılan panel bile CSS ile yapılmış durumda.
Neden bu kadar takıntılıyım? Çünkü AI crawler’larının çoğu JavaScript çalıştırmıyor ya da çalıştırsa bile güvenmiyor. curl ile sayfanı çek, gördüğün HTML’de içeriğin yoksa ChatGPT için de yoksun.
Basit test:
curl -s https://siten.com/ilgili-sayfa | grep "aradığın içerik"
curl -s https://yarisradari.com/yaris/davraz-sky-run-2026 | grep Davraz
Boş dönüyorsa AI görünürlüğün diye bir şey yok demektir. Benimki dolu. 😎
Kimsenin Tutmadığı Veriyi Tut: Uzun Kuyruğun Sahibi Ol
Gerçekçi olalım: “İstanbul Maratonu” diye arayan birine AI resmî siteyi öncelikli gösterebilir. Göstermeli de. Tek başıma bi zahmet İBB’nin reklamlı yarış sitelerinin de üstüne çıkmayayım yani. O savaşa girmek boşuna.
Ama şu soruların derli toplu cevabı hiçbir yerde yoktu: “X yarışının son kayıt tarihi ne zaman? Kayıt ücreti ne kadar? Zorunlu malzeme listesi ne? Sağlık raporu isteniyor mu? Parkurun yükseklik kazanımı kaç metre?” Ben de scraper’ı tam bunlar için yazdım. Python ile yazılmış sistem her sabah 8 kaynağı tarıyor: federasyon takvimleri, zamanlama şirketleri, UTMB, majör maratonlar, HYROX. Sadece tarihi ve ismi değil; son kayıt tarihini, ücreti, zorunlu malzemeyi, parkur mesafelerini ve tırmanış verilerini de çekiyor.
Otomasyonun yetmediği yerde ise elle giriyorum. Triatlon federasyonunun PDF-only takvimindeki yarışlar, HYROX etkinlikleri, kaynağı olmayan yerel koşular: Hepsi admin panelinden tek tek eklendi. Elle düzelttiğim kayda scraper bir daha dokunmuyor, yani insan emeği robotun altında ezilmiyor.
Bu verinin bir de kullanıcıya dokunan hâli var: e-posta alarmı. Branşını seçip mailini bırakıyorsun. Son kayıt tarihi yaklaşan yarışları sana ben hatırlatıyorum: 7 gün kala bir, 2 gün kala bir daha. Son kayıt tarihi bilinmeyen yarışlarda da yarış gününe göre aynı hatırlatma gidiyor. Yazının başındaki “yarışı duyduğumda kayıtlar kapanmıştı” derdinin ilacı tam olarak bu.
Bu yazıyı toparlarken yukarıda bahsettiğim gibi sitenin ilk gerçek abonesi geldi. Tanımıyorum, tanıtım da yapmadım. Kullanıcı bazında takip tutmuyorum; ama Cloudflare’in gizlilik dostu istatistiklerine göre o gün organik trafiğin tamamına yakını Google’dandı ve ziyaretler “Muğla Zafer Koşusu”, “Ultra Abant” gibi uzun kuyruk aramalarından yarış sayfalarına gelmişti. Yani abonem büyük ihtimalle siteyi Google’dan buldu. Şunu ise kesin biliyorum: Abone olduğu gün, seçtiği branşlarda son kayıt tarihi yaklaşan iki yarış için hatırlatma maili aldı. Sistem, ilk gerçek kullanıcısı için daha ilk gününde işe yaradı. Bundan iyi lansman olmaz.
Sonuç: Bu soruların yapılandırılmış cevabını tutan tek Türkçe kaynak benim. AI bir “uzun kuyruk” soru aldığında gidebileceği başka yer yok. İlk citation örneğinin küçük bir dağ yarışından gelmesi tesadüf değil; strateji tam olarak buydu.
Structured Data: SportsEvent + FAQPage, Ama Görünür İçerikle Birebir
Her yarış sayfasında schema.org işaretlemesi var: SportsEvent (tarih, yer, parkurlar, kayıt pencereleri), BreadcrumbList ve resmî siteye sameAs linki.
Asıl eğlenceli kısım sık sorulan sorular. Her yarış sayfası elimdeki veriden otomatik olarak “Ne zaman? Nerede? Kaç km? Kayıt ücreti ne kadar? Sağlık raporu gerekli mi?” gibi soru-cevaplar üretiyor. Şu an yaklaşık 150 sayfada 3.400'den fazla soru-cevap var ve tek satırını elle yazmadım. Şablon × veri. Scraper yeni bir bilgi bulduğunda ilgili soru kendiliğinden doğuyor.
İki önemli kural:
- Uydurma yok. Veri yoksa soru da yok. Ücret bilgisi çekilememişse “Ücret ne kadar?” sorusu o sayfada hiç oluşmuyor. AI’ın güveni, senin dürüstlüğün kadar.
- Görünürlük şart. Google’ın kuralı net: Structured data, sayfada görünür içeriği yansıtmalı. Sadece JSON-LD’ye gömülmüş hayalet SSS ceza sebebi. Bu yüzden her soru sayfada tek satırlık, tıklayınca açılan bir akordeon olarak da duruyor. Yine sıfır JavaScript: <details> etiketi, tarayıcının 20 yıllık özelliği.
Somut örnek: Kaçkar by UTMB sayfasında şu an 27 soru-cevap var. Ne zaman koşulacağından hangi parkurun kaç metre tırmanışı olduğuna, UTMB puanından “Kayıtlar açık mı?” sorusuna kadar. Hepsi veriden türedi, hepsi sayfada görünür, hepsi makine tarafından okunabilir.
Kaynak Göster, Tarih Göster: AI’ın Güven Sinyalleri
AI motorları alıntılayacakları kaynağı seçerken güven sinyali arıyor. Ben iki tanesini her sayfaya koydum:
- Her yarış sayfasının altında bir künye satırı var: “Veri kaynakları: … · Son kontrol: [tarih]”. Verinin nereden derlendiği ve en son ne zaman doğrulandığı açıkça yazıyor. Bu hem kullanıcıya hem makineye “Bu bilgi bakımlı.” diyor.
- Bir de
llms.txtekledim: sitenin kökünde, AI crawler'ları için hazırlanmış düz metin bir özet. Yaklaşan tüm yarışlar tarihleriyle, parkurlarıyla, kayıt bilgileriyle tek dosyada.
Dürüstlük parantezi: Google, llms.txt’yi umursamadığını açıkça söylüyor. ChatGPT ve Claude tarafı için tutuyorum; maliyeti sıfır, potansiyel faydası var. Ama sitenin kaderini buna bağlama.
ChatGPT’nin Arkasında Bing Var: Google Search Console Yetmez
Herkes Google Search Console’u biliyor. Ama ChatGPT’nin web araması Bing’in endeksinden besleniyor. GSC’de birinci sırada görünsen bile Bing seni endekslemediyse ChatGPT için görünmezsin.
Yapılacaklar basit: Bing Webmaster Tools’a siteni ekle (GSC’den tek tıkla import var, doğrulama bile istemiyor), sitemap’ini gönder, önemli sayfalar için “Request Indexing” kullan. İçeriğin sık değişiyorsa IndexNow protokolüne de bak: Yeni ve güncellenen URL’leri beklemeden Bing’e itebiliyorsun.
Bonus:
Bing’in yeni AI Performance raporu, sitenin Copilot ve partner AI cevaplarında kaç kez kaynak gösterildiğini sayıyor. AI görünürlüğünü tahminle değil, sayıyla takip edebildiğin ilk yer burası. (Bu blogun bile 23 citation biriktirdiğini oradan öğrendim; haberim bile yoktu.)

Yazar tarafından ekran görüntüsü
Bir de tuzak: Cloudflare kullanıyorsan AI crawler’larını varsayılan olarak engelliyor olabilir (2025'ten beri yeni hesaplarda bu kural açık geliyor). robots.txt dosyanda GPTBot’a izin vermen yetmez; edge katmanında 403 yiyorsa bütün emek boş. Testi şöyle yap:
curl -A "GPTBot" https://yarisradari.com
200 dönmüyorsa önce Cloudflare panelindeki AI Crawl Control ayarına bak.
Dürüst Bilanço: Neyde Çıkıyoruz, Neyde Çıkamıyoruz?
Abartmayayım, tablo şu:
- Çıkıyoruz: Küçük ve orta ölçekli yarışlar + spesifik veri soruları. “Davraz Sky Run ne zaman?”, “Kaçkar by UTMB kaç km?” tipi sorgular. Rakipsiz olduğumuz alan burası.
- Çıkamıyoruz (şimdilik): “İstanbul Maratonu”, “UTMB” gibi çok güçlü baş sorgular.
Zayıf noktam: dış otorite. Bana link veren üçüncü taraf neredeyse yok. AI motorları zamanla “bu siteye başkaları da güveniyor mu?” diye bakıyor; orada henüz sınıfta kalıyorum. Organik büyüsün diye bekliyorum, kapı kapı link dilenmeye niyetim yok.
Bir de sabır: Google’ın AI Overviews tarafı aylar ister; orası normal organik sıralamayla paralel yürüyor. 3 günde olan şey zafer ilanı değil, mekanizmanın çalıştığının kanıtı.
Bir de beklentiyi doğru kurmak lazım: Bu taktiklerin hiçbiri kötü içeriği kurtarmaz. Elimde gerçekten faydalı, başka yerde bulunmayan bir veri seti olmasaydı dünyanın en temiz schema işaretlemesi de beni kaynak yapmazdı. Teknik katman megafon; sesin güzel değilse megafon sadece rezilliği büyütür.
Vizyon: Sadece Bir Site Değil, Türkiye’nin Yarış Verisi Altyapısı
Bu noktada bir itiraf: Yarış Radarı’nı sadece bir takvim sitesi olarak görmüyorum. Asıl kurduğum şey Türkiye’nin yapılandırılmış yarış verisi. O yüzden işin bir de geliştirici tarafı var: read-only JSON formatında bir uç nokta (API endpoint).
GET /api/v1/races
ile tüm takvimi şehir, branş, tarih ve mesafe filtreleriyle çekebiliyorsun; her yarış, parkurları ve kayıt bilgileriyle birlikte geliyor. Kendi projelerim olan mixletics.com ve Runarchy mobil uygulamasında da aynı API’yi kullanıyorum (eveett, onları da ben yaptım); yani site ile üçüncü taraflar aynı kapıdan besleniyor.
Site kullanıcıya sonsuza kadar ücretsiz; API öyle değil. Anahtarlar benden: Yarış verisine ihtiyaç duyan bir ürünün varsa iletişim sayfasından yaz, konuşalım. (Self-servis yok, Stripe yok. Butik çalışıyoruz.)
Kapanış
Cumartesi günü yarisradari.com yoktu, tarlaydı. Bugün bir koşucu ChatGPT’ye yarış sorduğunda cevap benim veritabanımdan geliyor. Çok yakında Google’da ve AI aramalarında pek çok yarışın resmî sitelerinden daha üstte çıkacak, demedi demeyin.
Uzun vadede nereye gider bilmiyorum. Hayalim: Bir koşucu yarışı nerede ararsa arasın -Google’da, ChatGPT’de veya bir antrenman uygulamasında- cevabın geldiği veri katmanı Yarış Radarı olsun. AI aramalarında kaynak olmak bu vizyonun ilk kanıtıydı, son adımı değil. Belki bir gün Ahotu ve Find a Race gibi devlerle aynı cümlede anılırız, belki Türkiye’nin yarış takvimi olarak kalırız. İkisi de olur. Çünkü:
Bu proje para kazanmak için değil, koşucuların yarış kaçırmaması ve benim “keşke olsa” dediğim şeyi yapmış olmanın keyfi için var.
Yarış takvimi artık yarisradari.com’da ve güncel.
Koşmaya devam!
메타데이터
- post_id
- a940bdeed07a
- slug
- 3-günde-chatgptye-kaynak-oldum-yarış-radarı-nın-ai-first-geo-hikâyesi-a940bdeed07a
- url
- https://turkiyeyayini.com/3-g%C3%BCnde-chatgptye-kaynak-oldum-yar%C4%B1%C5%9F-radar%C4%B1-n%C4%B1n-ai-first-geo-hik%C3%A2yesi-a940bdeed07a
- canonical_url
- https://turkiyeyayini.com/3-g%C3%BCnde-chatgptye-kaynak-oldum-yar%C4%B1%C5%9F-radar%C4%B1-n%C4%B1n-ai-first-geo-hik%C3%A2yesi-a940bdeed07a
- author_url
- https://medium.com/@develioglualparslan
- status
- ok
- fetched_at
- 2026-08-17 17:47:59