tekeliogluemlak.com — llms.txt & GEO score
A good map behind a closed door
tekeliogluemlak.com publishes a curated llms.txt — 85 links across 6 sections, 36 KB in all.
It also disallows ccbot and bytespider in robots.txt. Publishing a map for assistants while the assistants are blocked at the door is the one contradiction this checklist cannot score around.
The clearest gap is points at clean markdown copies. Right now: 0 of 85 end in .md or .txt (0%, detected by file extension). Closing it is worth 10 points.
What it does well
- Every link carries a description 83 of 85 described (98%)
- Descriptions add to the title No description merely repeats its title
- Link titles are descriptive 2 weak titles (bare URLs, “here”, one-word labels)
- List items are markdown links All 85 list items are links
What is missing
- Points at clean markdown copies +10 0 of 85 end in .md or .txt (0%, detected by file extension)
- AI crawlers are not blocked +6 robots.txt blocks ccbot, bytespider from the site root
- Publishes llms-full.txt +3 No llms-full.txt alongside the index
- Skippable links marked Optional +3 Nothing is marked as skippable
Among the 22 sites measured here so far, tekeliogluemlak.com ranks 13th, against a median of 71. That comparison moves as new sites are scanned — it is a snapshot of this list, not of the web.
What tekeliogluemlak.com tells an assistant
Tekelioğlu Gayrimenkul: Gölbaşı, İncek, Beytepe, Oran ve Ahlatlıbel'de villa, daire, arsa ve ticari gayrimenkul danışmanlığı. Bölgenin güvenilir ve şeffaf emlak ofisi Tekelioğlu Gayrimenkul.
Content & links
Can a model pick the right page, first time?
7 of 11 checks pass. What is left: descriptions say something concrete, points at clean markdown copies, a workable number of links and skippable links marked Optional.
-
Every link carries a description 83 of 85 described (98%)10/10
-
Descriptions say something concrete Average 269 characters across 83 described links6/7
-
Descriptions add to the title No description merely repeats its title4/4
-
Points at clean markdown copies 0 of 85 end in .md or .txt (0%, detected by file extension)0/10
-
Link titles are descriptive 2 weak titles (bare URLs, “here”, one-word labels)4/4
-
A workable number of links 85 links — past ~50 without clean targets each resource gets diluted3/4
-
Skippable links marked Optional Nothing is marked as skippable0/3
-
No duplicate links All 85 URLs are distinct2/2
-
List items are markdown links All 85 list items are links4/4
-
Enough written detail per link 43 words per link across 3,696 words3/3
-
Links are absolute URLs All 85 links are absolute URLs1/1
Structure
Does it follow the llms.txt shape?
5 of 7 checks pass. What is left: summary directly under the title and grouped into balanced sections.
-
Exactly one H1 project title “Tekelioğlu Gayrimenkul: Gölbaşı, İncek, Beytepe, Oran ve Ahlatlıbel�”3/3
-
Summary directly under the title An opening paragraph is there, but not as a "> " blockquote — clients that look for the quoted summary will miss it1/3
-
Summary is a usable length 116 characters (from the opening paragraph)3/3
-
Concrete language, not marketing filler No marketing filler detected3/3
-
Grouped into balanced sections 6 H2 sections, largest group holds 50 of 85 links3/4
-
Conforms to the published grammar Markdown only, headings used as the spec defines them2/2
-
Section names say what is inside All 6 headings are descriptive2/2
Discovery & access
Can an assistant reach it, and is it allowed to?
4 of 5 checks pass. What is left: AI crawlers are not blocked.
-
At the root of the domain you typed Found at the standard /llms.txt path2/2
-
Sent as plain text Content-Type: text/plain; charset=utf-81/1
-
robots.txt exists 481 B of crawler rules1/1
-
AI crawlers are not blocked robots.txt blocks ccbot, bytespider from the site root0/6
-
robots.txt points at a sitemap A Sitemap: line is declared1/1
Search-engine basics
What a crawler reads from your homepage today
5 of 6 checks pass. What is left: social card image.
-
Homepage title is the right length 59 characters, from title2/2
-
Title is not padded or repetitive No repeated terms1/1
-
Homepage has a meta description 156 characters, from meta description2/2
-
Canonical URL declared https://tekeliogluemlak.com/1/1
-
Language declared lang="tr"1/1
-
Social card image No og:image — shares render as a bare link0/1
Depth & upkeep
Is there more than the index, and is it current?
1 of 5 checks pass. What is left: publishes llms-full.txt, the index points at the full file, server reports when it last changed and the index is kept current.
-
Publishes llms-full.txt No llms-full.txt alongside the index0/3
-
The index points at the full file No llms-full.txt exists to link to0/1
-
Index is a sensible size 36 KB2/2
-
Server reports when it last changed No Last-Modified header — clients cannot tell when this changed0/1
-
The index is kept current Cannot be confirmed — the server sends no Last-Modified header0/2
What tekeliogluemlak.com should fix next
Ordered by what each one is worth. Open a row for the steps.
-
Right now: 0 of 85 end in .md or .txt (0%, detected by file extension)
Publish a .md version of each page and link to that. The single biggest win here: the model reads your content instead of your navigation and footer.
Where: Your CMS or docs build — this is the biggest single win here
- Publish a .md version of each page you link to, at a predictable URL (page.md next to page).
- Point the llms.txt links at the .md copies, not at the HTML pages.
- Strip navigation, cookie banners and footers from the markdown — that is the whole point: the model reads your content instead of your chrome.
- Declare the pair in your HTML with a link relation so clients can find it without guessing.
In your file
line 9- [Gölbaşında Evimi Kaça Satabilirim](https://tekeliogluemlak.com/golbasinda-evimi-kaca-satabilirim/): Gölbaşı'nda evimi kaça satabilirim sorusu, mülk sahiplerinin bize en sık ilettiği sorulardan biri. Bu sorunun cevabı hem mahallenden hem de taşınmazının özelliklerinden geçiyor — Gölbaşı, tek tip bir piyasa değil. Seğmenler'deki bir 3+1 ile İncek Hacılar'daki aynı büyüklükteki dairenin fiyatı arasında ciddi farklar oluşuyor.
- [Gölbaşında Evimi Kaça Satabilirim](https://tekeliogluemlak.com/golbasinda-evimi-kaca-satabilirim.md): Gölbaşı'nda evimi kaça satabilirim sorusu, mülk sahiplerinin bize en sık ilettiği sorulardan biri. Bu sorunun cevabı hem mahallenden hem de taşınmazının özelliklerinden geçiyor — Gölbaşı, tek tip bir piyasa değil. Seğmenler'deki bir 3+1 ile İncek Hacılar'daki aynı büyüklükteki dairenin fiyatı arasında ciddi farklar oluşuyor.
line 10- [TÜİK Ağustos 2026 Konut Satış İstatistikleri Açıklandı: Ankara’da Konut Piyasası Nasıl Etkilendi?](https://tekeliogluemlak.com/ankara-konut-piyasasi-agustos-2026/): TÜİK Ağustos 2026 Konut Satışları: Ankara Analizi
- [TÜİK Ağustos 2026 Konut Satış İstatistikleri Açıklandı: Ankara’da Konut Piyasası Nasıl Etkilendi?](https://tekeliogluemlak.com/ankara-konut-piyasasi-agustos-2026.md): TÜİK Ağustos 2026 Konut Satışları: Ankara Analizi
line 11- [2026 Gayrimenkul Fiyatları Düşecek mi? Ankara Analizi](https://tekeliogluemlak.com/2026-gayrimenkul-fiyatlari-dusecek-mi-ankara-golbasi/): Bir tarafta ilan sitelerinde yüksek rakamlar görüyoruz. Diğer tarafta alıcıların daha seçici davrandığını, pazarlıkların sertleştiğini ve bazı taşınmazların ilan fiyatının belirgin altında el değiştirdiğini gözlemliyoruz. Dünyada ise "18 yıllık gayrimenkul döngüsü" yeniden tartışılmaya başlandı.
- [2026 Gayrimenkul Fiyatları Düşecek mi? Ankara Analizi](https://tekeliogluemlak.com/2026-gayrimenkul-fiyatlari-dusecek-mi-ankara-golbasi.md): Bir tarafta ilan sitelerinde yüksek rakamlar görüyoruz. Diğer tarafta alıcıların daha seçici davrandığını, pazarlıkların sertleştiğini ve bazı taşınmazların ilan fiyatının belirgin altında el değiştirdiğini gözlemliyoruz. Dünyada ise "18 yıllık gayrimenkul döngüsü" yeniden tartışılmaya başlandı.
Placeholders in { } are yours to write — we do not invent text about your pages.
-
Right now: robots.txt blocks ccbot, bytespider from the site root
Publishing llms.txt while robots.txt blocks the assistants cancels itself out — open the door you just documented.
Where: /robots.txt — and it is worth a decision, not just an edit
- Find the User-agent blocks naming GPTBot, ClaudeBot, Google-Extended, PerplexityBot or CCBot.
- Decide deliberately: publishing an llms.txt while those agents are disallowed cancels itself out.
- If you want the visibility, remove the Disallow for the agents you want reading you.
- If you do not, that is a legitimate choice — but then the llms.txt is decoration, and this score will not reflect the trade-off you actually made.
Instead ofUser-agent: GPTBot Disallow: / User-agent: ClaudeBot Disallow: /
Do thisUser-agent: GPTBot Allow: / User-agent: ClaudeBot Allow: /
-
Right now: No llms-full.txt alongside the index
Generate an llms-full.txt that inlines every linked page. Community convention rather than spec, but assistants with a large context window take the whole thing in one request.
Where: Your docs build, output at /llms-full.txt
- Concatenate the markdown of every page listed in llms.txt into one file.
- Keep the heading structure: a client uses those headings to navigate a multi-megabyte file.
- Regenerate it in the same build step that publishes the docs, so it cannot drift.
- Note that llms-full.txt is a community convention, not part of the proposal — useful, but optional.
-
Right now: Nothing is marked as skippable
Move the nice-to-haves under ## Optional so a model on a tight budget knows what to drop first.
Where: A new "## Optional" section at the end of llms.txt
- Move the nice-to-have links — history, press, careers — under "## Optional".
- By convention a client may skip that whole section when context is tight.
- This is you deciding what gets dropped first, instead of the model guessing.
Do this## Optional - [Company history](https://acme.example/about.md): Background, not needed to answer product questions
-
Right now: An opening paragraph is there, but not as a "> " blockquote — clients that look for the quoted summary will miss it
Put the opening line in a > blockquote. The spec calls it optional, but it is the first thing a model reads and often the only thing it quotes back.
Where: The line directly under the H1
- Add a single line starting with "> ".
- Answer three things in it: what you do, for whom, and what makes it specific.
- This is the sentence a model is most likely to quote back, so write it last, after the rest of the file.
Instead of> We are an innovative company delivering world-class solutions.
Do this> Industrial spare parts for food processing lines, shipped across Europe with same-week dispatch.
-
Right now: Cannot be confirmed — the server sends no Last-Modified header
Regenerate llms.txt when the docs change. A year-old index quietly points models at pages that have moved.
Where: Your build pipeline
- Regenerate llms.txt in the same step that publishes content, so it cannot go stale silently.
- Treat it as a build artifact, not a hand-edited file — hand-edited indexes drift within a quarter.
- An llms.txt with discontinued products is worse than none: a model will repeat the wrong facts confidently.
-
Right now: 85 links — past ~50 without clean targets each resource gets diluted
Either curate to roughly 10–40 links, or go the other way and map everything to .md copies. The costly middle is a long list of HTML links with no descriptions.
Where: The link lists in llms.txt
- Aim for roughly 10–40 curated links.
- Above about fifty, a model has to read the whole file before it can choose, and every entry gets diluted.
- If you generated the file from a sitemap, delete most of it: curation is the entire value of the format.
- Below ten, add the pages you would send a new customer to first.
-
Right now: Average 269 characters across 83 described links
Write 60+ characters that add information the title does not: numbers, limits, formats, names.
Where: The text after ": " on each link
- Write 60 characters or more, and make them add information the title does not.
- Cover every link: this is measured per LINK, not per description, so an undescribed line counts as zero.
- Name the concrete things on the page: numbers, limits, formats, model names.
- If the description could be pasted under any other link, it is not a description yet.
In your file
line 14- [Ticari Elektronik İleti Gönderimine İlişkin Açık Rıza ve Onay Metni](https://tekeliogluemlak.com/ticari-elektronik-ileti-onayi/): Son güncelleme: 22 Ağustos 2026
- [Ticari Elektronik İleti Gönderimine İlişkin Açık Rıza ve Onay Metni](https: {what is on the page — numbers, limits, formats}line 37- [30 Yıl Önce Alınan Bir AVM Hissesi Bugün Neden Servet Değerinde?](https://tekeliogluemlak.com/avm-hissesi-uzun-vadeli-gayrimenkul-yatirimi/): Uzun Vadeli Gayrimenkul Yatırımı
- [30 Yıl Önce Alınan Bir AVM Hissesi Bugün Neden Servet Değerinde?](https: {what is on the page — numbers, limits, formats}line 93- [Header](https://tekeliogluemlak.com/wpestate-studio-templates/arsami-satmak-istiyorum/): 0505 434 7859
- [Header](https: {what is on the page — numbers, limits, formats}Placeholders in { } are yours to write — we do not invent text about your pages.
-
Right now: 6 H2 sections, largest group holds 50 of 85 links
Group links under headings a reader would look for, and spread them — one group holding most of the file is the same as no grouping.
Where: The "## " headings in llms.txt
- Split the link list into at least five "## " groups by what a reader would be looking for.
- Typical split: Docs, API, Guides, Product, Company, Optional.
- Grouping is what lets a model skip nine tenths of the file and still find the right page.
Instead of## Links - [A](...) - [B](...) - [C](...)
Do this## Docs - [A](...) ## API - [B](...) ## Optional - [C](...)
-
Right now: No Last-Modified header — clients cannot tell when this changed
Let the server send Last-Modified on llms.txt. Without it a client has to re-download the whole file to notice a change.
Where: Your web server configuration
- Serve llms.txt as a real file on disk so the server can derive Last-Modified from its mtime.
- If it is generated by an application route, set the header yourself from the generation time.
- Without it a client has to re-download the whole file to notice a change, and cannot answer "is this current?".
Instead ofHTTP/1.1 200 OK\nContent-Type: text/plain
Do thisHTTP/1.1 200 OK\nContent-Type: text/plain\nLast-Modified: Wed, 10 Sep 2026 08:14:00 GMT
-
Right now: No og:image — shares render as a bare link
Add an og:image. One tag, and it is the difference between a link and a card wherever you are shared.
Where: The <head> of your homepage
- Add an og:image pointing at a 1200×630 PNG or JPG, with an absolute URL.
- Add og:title and og:description alongside it so the card is not assembled from guesses.
- Without it, every share of your link renders as bare text.
Do this<meta property="og:image" content="https://acme.example/og.png"> <meta property="og:image:width" content="1200"> <meta property="og:image:height" content="630">
-
Right now: No llms-full.txt exists to link to
Mention llms-full.txt inside llms.txt. Guessing the filename works often enough to be tempting and not often enough to rely on.
Where: Inside llms.txt
- Mention the full file in llms.txt itself, as a link or a line of context.
- Guessing the filename works often enough to be tempting and not often enough to rely on.
Do thisFull inlined text: https://acme.example/llms-full.txt
This score is Devsly’s own heuristic, not an official standard — llms.txt has no scoring body. It measures how well a file serves an AI assistant, and it does not predict whether any assistant will cite the site. The reading is a snapshot from 21 September 2026; run it again for the current state, or check a different site.
Other recently scored sites
Every scan that finds an llms.txt gets a score card. Cards link back to the full report here, not out to the site.