Image by author

Image by author

I registered the domain yarisradari.com on July 18th. On September 18th it was exactly two months. Time flies!

"It would be nice to put all the races in one place," I thought, and that is how it started. Then came course profiles, then checkpoints, then calculators. At some point I found myself adding past race results too. We were going to make a calendar, and the topic spread out a bit. In a good way, though.

As I started writing this post, I opened the Git history: 1,255 commits. That must be what the sentence "let me just make one tiny fix here" looks like in Git.

In the early days I wrote about ChatGPT showing Yarış Radarı as a source, in my post "I Became a ChatGPT Source in 3 Days". Seeing the name of a site you made yourself under one of its answers felt great.

In the September 18 measurement there are 942 visits. People came, looked at a race, looked at a course, went to the registration page. For me, the best part of the project starts here.

By the way, my visits and my wife’s visits, and the clicks we make from home and from our phones, are not in these on-site numbers. I do not count them at all. I also filter out bot traffic: 91 requests from data center IPs are kept in a separate counter, not added to the visits.

Of course, some broken links came up too, and data left over from last year. There are also features I loved making that are not used much yet. I will talk about those too. But first, let us look at what has piled up in these two months.



The Gap Between Finding a Race and Preparing for One

When I was building Yarış Radarı, my problem was very familiar. A race date was on the federation calendar, the registration link was on the organizer’s site, and the required gear was in a PDF file. Sometimes last year’s page got in the way too. You had to open a few more tabs just to be sure you found the right information.

As a runner, I knew this trouble well. As a developer, I had little patience for looking up the same information again and again.

The first thing I did was put all of this in one calendar: find races by city, date, discipline and distance; reach the official registration page; and get a reminder when registration opens and when the last day comes close.

Then came the second question: "Good, there is a race. But what will I find on this course?"

63 kilometers tells you something. Knowing where the climbs are, the distance between two aid stations and the cutoff times tells you much more. That is why I added information around the calendar that you can also open while you get ready for a race.

You can see this curiosity in my Git history too. In July I worked on the calendar, the map, the reminders and the API. At the end of August, calculators and GPX analysis became the main work. In September, the technical meeting, past results and the race finder were added.

AI help has a big part in this speed. But deciding which feature is needed, and checking the work that comes out, is still my job. If I left everything to the language model, the result would be a Swiss Army knife that is good for nothing.

Here is where we are on September 18:

Scope

Number

Race/edition records published

295

Race records in Turkey

123

Race records in other countries and regions

172

Discipline

8

Route/distance records linked to published races

702

Routes with GPX link

374

Checkpoint records

2,267

Calculator and selection tool

18

295 records cover the 2026 and 2027 editions and finished races. A few records are kept with a note that they were cancelled. The database also has 26 race records that are not published yet.

For people who want to use the data in other apps, there is also a race API and an open data repository with JSON/CSV files. I did not want someone else who needs race information to open all the same tabs all over again.



There's Also a Scraper Behind the Calendar

When I talk about this many races, you might think I spend all day opening sites and copying dates. A big part of that work is done by a scraper that I spent days writing: a separate program that goes to the source sites and collects race information.

Today it follows 18 sources. Federation calendars, timing companies and race series are among them. There are 373 links that keep which race matches which source. When it finds the same race in two places, it also knows which record to put the information in.

It runs on GitHub Actions on a daily schedule. I do not open 18 sites one by one every morning; the system goes around, collects and compares. What is left for me is the strange matches, the old editions and the places where the sources do not agree. That is the detective part.

That is the good side of automation: I can follow many more sources. And I never have trouble finding a detail to check, thanks to them.



The Section I Worked Hardest On: Technical Meeting

I like looking at the course profile in trail races. But after you look at that small elevation chart for a while, you want to know more. At which kilometer is that climb? Where is the next water point? How much time is left before the cutoff?

I built the technical meeting section for this. On courses with GPX data, the route and the elevation profile are processed. Checkpoints, start times, cutoff times, aid station information and course notes are also put in the same place, as far as I can find sources.

For example, on the Salomon Cappadocia Ultra-Trail page you can reach the course details, the profiles and the checkpoint information we have. A coordinate in one file, a cutoff time in another table, a course note at the bottom of the page… When they all come together, it gets easier to picture the course in your head.

While I was building this section, I often thought, "I would open this when I go to a race." It is still one of the things I feel best about.

Of course, not every race has the same rich data. One has a very good guide, in another you can hardly find the registration link. And when you find a GPX file, you still have to check which year and which distance it is for.

I also added past results: 119 course/season result records for 17 races. Where there is data, you can see how many people started and finished, the drop rates and the time spread. So while you look at a course, the answer to "What happened here last year?" is right there.



"We Thought, Let's Calculate That Too", And Now It's 18 Tools

On the Calculators page there are 18 tools today. They go from pace and race time calculators to split tables, from trail effort distance to cutoff planning. There are also tools for cycling, swimming and HYROX.

The race finder, the newest one, picks races from the calendar by your discipline, distance, climb, date and region choices. The preparation time tool also helps you think about how much time you need to get ready while you look at a race.

I wanted the tools to talk to each other. If we already have the race distance, let us not ask for it again. If the checkpoints are known, let us carry them to the planner. And let us be able to share the result with a link.

I had a lot of fun building these. The prep time calculator is already my favorite. Its first customer is ready: me.

On the usage side we are still at the first steps. The Turkish page of the pace calculator has 23 views, and some tools have a few views. The technical meeting has 16 opens; no star ratings have come yet.

Now I want to see which one will be other people’s favorite. Seeing a tool that people open again and again would be as exciting as adding a nineteenth one to the list.



SEO: Everything Looked Fine on Screen

In my first post I wrote a lot about how search engines and AI tools can read the site. The content being in the first HTML, the canonical addresses being right, the Turkish and English versions knowing each other, the visible information matching the structured data… I kept working on all of this.

I had to go back and fix some of them. There were places where the structured data on the English pages pointed to Turkish addresses. The race name could be used as if it were the organizer name. Turkish descriptions leaked into the English pages. Oh boy, and there was more...

Also, when the name or the year of a race changes, the old links have to keep working. That is why 209 old address mappings have piled up. I want someone who opens a link shared somewhere last month to reach the current page of that race today.

And not everyone comes knowing the name of the race. One person searches for "2026 race calendar," another looks at races in Istanbul, another tries to pick a first half marathon. So I made yearly calendars, city and discipline pages, distance lists and picked lists. I wanted every page to have races and information that really help that search.

This week’s surprise was the sitemap. 462 of the 766 addresses in two languages were saying "I was updated today" every day, even when the content did not change. A trigger in the database was making the update date of the race fresh again even when the same value was written again.

You open the page, nothing looks wrong. But behind it, more than half of the site raises its hand every day. I fixed the trigger so it can tell real changes apart. The date that tells Google which page is new has to be correct too; Google’s sitemap guide asks for this.

These 766 addresses are the total of the published pages. It does not mean Google has indexed all of them. I also looked at how they do in search.



Google: I Compared Two Separate Counters, the Totals Matched

In Google Search Console, for July 18 to September 18, there are 1,462 impressions, 103 clicks and a 7.05% click rate. Among the race pages, Muğla Zafer Koşusu got 10 clicks, Evden Bi Koşu İznik 9 and İsmail Akçay Koşusu 7. You collect the data, you put it on the page, and then you see that someone searched for that race and came. That is the nice part.

On the measurement side I did one more check that I liked. Between August 8 and September 15, Search Console shows 21 clicks and my own counter shows 21 Google visits. For the same date range, the totals of two different systems matched one to one.

Daily rows sometimes slip; the time difference comes in here. GSC cuts the day by Pacific time, my counter by Istanbul time. In this period there are 10 hours between them. A click made at 9:30 in the morning in Istanbul is written to the day before in GSC. You have to think about this when you put the days side by side.

Of the 103 clicks, 79 are from the opening period before my own counter was set up, and three are from an early measurement window that was cleaned up later. So I made the comparison in the period where both have data. Writing the counter is nice; checking it from another source and seeing that it matches is nice in another way.

My average position in Turkey is 7.69. In searches like "Evden Bi Koşu İznik" I show up around 7 to 8. This gave me a clear goal for the third month: get into the top three in these searches where I already show up. I can now see, name by name, which races people search for.



AEO: Sometimes It's All About Two Words

On the AEO side my problem is this: when someone asks a language model "When is this race?", "Is registration open?" or "How many kilometers is this course?", it should find a clear and correct answer on the page.

The questions are simple, but on the data side there are interesting details. A race where registration has not opened yet and a race that is already full are not the same thing. Signing up for a race and applying to a lottery are not the same thing either.

In fact, one of the commits from the morning I was writing this post was about this: on races that give places by lottery, write "lottery application" instead of "registration opens."

While writing about two months of work, I did not think I would stop at such a small phrase. But people should not think they have a place for sure when they apply. You change two words, and at the end of the sentence it says the right thing. It turns out this makes you happy too.

I handle the frequently asked questions the same way. You should give the answer that the information you have can give. Turning something unknown into a nice sentence does not make it known.

When the description, the FAQ and the structured data on a page carry the same correct information, it gets easier both for the person who reads it and for the system that uses it. A big part of the AEO work I did in these two months was tidying up these details.



GEO: People Have Started Coming From That Source Card

On the GEO side, my goal was for Yarış Radarı to be one of the sources used when someone asks about race information. The excitement from the first post goes on here.

Then I shared one more story on Instagram: in the answer to a "2026 race calendar" question asked on an account that is not mine, more than one page from Yarış Radarı was used.

In some AI searches my own two month old site is suggested more than the organizer sites of races we have joined for years. At that point I say with pride, "I made this."

Visits from ChatGPT are about 13.5% of the total. When I look at the last 28 full days, August 22 to September 18, 120 of 529 visits came from ChatGPT; about 22.7%.

Here is the data of the last four full weeks:

Period

Total visits

From search engines

From ChatGPT

Aug 22-28

133

27

11

Aug 29-Sep 4

88

29

20

Sep 5-11

151

52

38

Sep 12-18

157

36

51

The ChatGPT column grows week by week. I feel happy when I open this table. People come to a site that did not exist two months ago, from a link in an AI answer.

The total visits of the last two weeks do not show the same growth yet. But the share of ChatGPT visits inside the total has clearly grown.

The entries did not stay on one race page either. There is the Turkish yearly calendar, the English Istanbul races page, trail lists and race details. In the last 28 full days the yearly calendar got 12 entries from AI and the English Istanbul page got 14. I cannot see what people asked exactly, but I can see that they reach different parts of the site.

Well, how many of us click that tiny source link in ChatGPT’s answer? I count this as a success.



Yandex Surprise, Bing, and English Pages

By the on-site counter, the search engine that sends the most visits is Yandex. Honestly, it was strange to see this.

In the records up to 15:56 on September 19, there are 139 visits from Yandex. That is about 73.2% of the 190 visits from search engines. On the same counter Google shows 24 and Bing 13. While I was looking at Google, Yandex sent quite a lot of people.

In Bing’s own Webmaster report there are 615 impressions and 22 clicks for July 23 to September 16. These are different measurements, so I do not add them to the on-site counter. By Microsoft’s own note, this report covers different search surfaces; it does not measure only AI citations.

I liked the search terms too: Turkey marathon calendar, race results, swimming race start time, HYROX time, pace conversion… Here you can see which needs the content I added next to the calendar answers.

The English pages have 390 views; about 16.8% of the 2,319 page views on the site. In the last 28 full days, August 22 to September 18, 363 of 1,502 views are on English pages; the share goes up to 24.2%.

On Google’s side outside Turkey there is still a distance between being seen and being clicked: 39 impressions from the US, 29 from the Netherlands, 23 from Germany; zero clicks from these three. Of the 103 clicks in GSC, 102 came from Turkey and one from Panama.

So the English pages do get used, and people reach them from other channels too. Reaching the runner abroad through Google is not an area I could grow yet. I added the language option; now I will work to bring those pages to more people.



The Most Meaningful Number for Me (and for the Organizers): 78 Registration Clicks, 99 Official Site Clicks

You make a race calendar. Someone comes, looks at a race and goes to the registration page. That is what I wanted from the very start.

Let me put the whole table of September 19 at 15:56 here:

In-site measurement

Number

Total visits

942

Direct visits

481

Visits from search engines

190

Visits from ChatGPT

127

Mobile visits

564

Desktop visits

378

Registration link clicks

78

Official site link clicks

99

On-site measurement starts on July 28; this table has the records up to September 19 at 15:56. As I said, my own test clicks are not in it. Making an analytics page for myself came to my mind later, what can I do...

The biggest slice in the table is direct traffic with 481 visits; 51.1% of the total. Not all of them typed the address by heart. Records that lost their source information in the early cleanup, and links that carry no information about where they came from, are here too. I do not put a click with an unknown source in the ChatGPT column, but most language models do not send a source either. Who knows how many of those home page landings came from Gemini, Copilot, Claude or Perplexity.

Another common result came from mobile. My own counter has 564 mobile and 378 desktop visits; about 59.9% mobile. In the July 18 to September 18 report of GSC there are 59 mobile and 44 desktop clicks; the mobile share is 57.3%. The periods are different, but in both sources most people come from a phone. Being able to look at the course, the calendar and the calculator easily on a phone is a big part of the daily use of this site. I worked hard on the mobile fit too.

These visits do not show how many different people came, or how many times AI used me as a source; I cannot measure the ChatGPT answers where the source is shown but not clicked. And ChatGPT does not give me a counter that says, "I showed you as a source in this many answers." Clicking a registration link is not the same as signing up for the race; the result of that stays with the organizer. Here is what I can see:

People went to the registration page and to the official site. I could help someone find the race they were looking for. That is why, in the whole table, I keep looking at these two numbers the most.

There are also 26 confirmed subscriptions for email reminders. People who trust the system and sign up so they do not miss the date of the next race. The project is slowly meeting its own users.



The Things I Did Not Do Well in These Two Months

I kept putting off the promotion work, saying "let me finish this feature first." When that feature is done, the next one is already waiting. I need to give some of my coding time to reaching runners, telling them what I do and listening to them. I will print a t-shirt and run in it. It is on the way!

I wish I had set up the analytics well from the first day. I fixed the bot filters and the source split later. On September 17 I brought the race view numbers, which were too high, down to the filtered page views. If you see higher numbers in old screenshots, that is why. So the counter goes to maintenance too.

I also took the data update work too lightly. 3,085 records have piled up in the change history. There are 79 change records for the date information of 27 races and 100 for the registration deadline of 25 races. Roughly one in ten of the 295 published records had its date changed. So it does not end when I add a race; the calendar itself needs to be followed too. I learned that later as well.



SEO, AEO and GEO: What They Left Me

At the start these three looked like separate jobs. As I worked on the project, I saw how much they touch each other. A well made city page helps both the runner coming from Google and the person who opens the link in ChatGPT.

Google also explains in its own guide that no special file and no special schema is needed for AI Overviews and AI Mode. Content that is easy to reach and useful, and structured data that matches the visible information, still matter. On the OpenAI side, the search bot OAI-SearchBot and the training bot GPTBot have different purposes.

I like the technical side; I enjoy playing with all of this. But I see the return of my work most easily when someone opens the page and finds the answer they looked for. A registration date, a cutoff time, a race that fits them. The work I do to give that answer well is also the base for search and AI visibility.



What Am I After in the Third Month?

The list of new ideas keeps getting longer. Do not worry, there is no slow down in the "let me add this too" part.

But in the third month I want to listen to runners a bit more. What helps them in the technical meeting? Which tool do they open again? What do they look for and cannot find? I will also talk a bit about what I do. Getting into the top three in the race searches where I show up around 7 to 8 on Google, and turning the impressions of the English pages abroad into clicks, are my clear goals too.

Let a runner not miss a registration date. Let another one find a race that fits with less work. Let someone who goes around ten tabs while getting ready for a race read the few things they look for in one place.

At the end of two months I have a product that can do this. And I still have a lot of fun while I build it.

Today I am happy about the visits that came, the moves to the registration page, and the pages that were opened and used. And about a small two word fix that now says "lottery application."

A lot has happened in two months to that domain I bought on July 18th. I am glad I bought it.

* * *

If you want your own site to show up higher in Google and in AI answers, you can write to me. Tell me about your site and what you want to achieve; let us look at its technical structure, its content and its measurement together.