<Devsly/>
NotebookLM Watermark Remover
Remove the NotebookLM watermark from PDF slide exports — free, unlimited, and 100% in your browser.
View
NotebookLM Video Watermark Remover
Remove the NotebookLM watermark from every frame of your MP4 and auto-trim the end card — free and unlimited.
View
Gemini Watermark Remover
Remove the Gemini (Veo) sparkle watermark from every frame of your AI-generated MP4 — free and unlimited.
View
MCP https://devsly.io/mcp MCP Tools API Docs

Keyboard Shortcuts

Navigation

Quick Search
/ Ctrl + K
Toggle Dark Mode
/ Ctrl + D
Close Dialogs
Esc

Tool Actions

Execute / Process
/ Ctrl + Enter
Clear Input
/ Ctrl + Shift + C
Copy Output
/ Ctrl + Shift + X

Editor

Select All
/ Ctrl + A
Undo
/ Ctrl + Z
Redo
/ Ctrl + Shift + Z
Questions or ideas? Reach us on LinkedIn — we reply. Connect

bortomcoffee.com — llms.txt & GEO score

Re-scan this site
44 /100 E · 44 of 100 points

Comprehensive, and paying for it

bortomcoffee.com publishes an unusually large llms.txt: 118 links across 4 sections, 8.6 KB in all. Past roughly fifty entries a model has to read the whole file before it can choose, so breadth starts working against precision.

The clearest gap is every link carries a description. Right now: 0 of 118 described (0%). Closing it is worth 10 points.

Barely usable as an index. Start from the top recommendation below. Scanned 19 September 2026 against 34 checks — 18 passed, 2 partial, 14 missing.

bortomcoffee.com GEO score card: 44 out of 100, with the score broken down across content, structure, discovery, search-engine basics and depth.
bortomcoffee.com scored 44/100 on 19 September 2026. Source file: https://bortomcoffee.com/llms.txt.
44/100geo score
118links
4sections
8.6 KBsize

What it does well

  • List items are markdown links 2 of 120 list items are plain text, not links
  • AI crawlers are not blocked No AI user-agent is disallowed at the root

What is missing

  • Every link carries a description +10 0 of 118 described (0%)
  • Points at clean markdown copies +10 0 of 118 end in .md or .txt (0%, detected by file extension)
  • Descriptions say something concrete +7 No descriptions at all
  • Descriptions add to the title +4 No descriptions to compare against their titles

Among the 22 sites measured here so far, bortomcoffee.com ranks 18th, 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 bortomcoffee.com tells an assistant

Bortom Coffee

Bortom Coffee, kahveyi yalnızca bir içecek değil, günün en keyifli anlarından biri olarak görüyor. Özenle seçilen kahve çekirdekleri, doğru demleme teknikleri ve her fincanda aynı kaliteyi sunma tutkusu Bortom Coffee’nin temelini oluşturuyor. Güçlü aromalardan yumuşak içimlere kadar farklı damak zevklerine hitap eden seçeneklerimizle, kahve deneyimini herkes için özel hale getiriyoruz. İster güne enerjik bir başlangıç, ister yoğunluğun arasında kısa bir mola, ister dostlarla uzun bir sohbet… Bortom Coffee, güzel anların kahvesi. İyi kahve. İyi his. Bortom Coffee.

Content & links

Can a model pick the right page, first time?

10/52

3 of 11 checks pass. What is left: every link carries a description, descriptions say something concrete, descriptions add to the title, points at clean markdown copies, link titles are descriptive, a workable number of links, skippable links marked Optional and enough written detail per link.

  • Every link carries a description 0 of 118 described (0%)
    0/10
  • Descriptions say something concrete No descriptions at all
    0/7
  • Descriptions add to the title No descriptions to compare against their titles
    0/4
  • Points at clean markdown copies 0 of 118 end in .md or .txt (0%, detected by file extension)
    0/10
  • Link titles are descriptive 17 weak titles (bare URLs, “here”, one-word labels)
    2/4
  • A workable number of links 118 links — past ~50 without clean targets each resource gets diluted
    1/4
  • Skippable links marked Optional Nothing is marked as skippable
    0/3
  • No duplicate links All 118 URLs are distinct
    2/2
  • List items are markdown links 2 of 120 list items are plain text, not links
    4/4
  • Enough written detail per link 4 words per link across 491 words
    0/3
  • Links are absolute URLs All 118 links are absolute URLs
    1/1

Structure

Does it follow the llms.txt shape?

16/20

5 of 7 checks pass. What is left: summary is a usable length and grouped into balanced sections.

  • Exactly one H1 project title “Bortom Coffee”
    3/3
  • Summary directly under the title Present as a blockquote
    3/3
  • Summary is a usable length 569 characters — too long
    1/3
  • Concrete language, not marketing filler No marketing filler detected
    3/3
  • Grouped into balanced sections 4 H2 sections, largest group holds 107 of 118 links
    2/4
  • Conforms to the published grammar Markdown only, headings used as the spec defines them
    2/2
  • Section names say what is inside All 4 headings are descriptive
    2/2

Discovery & access

Can an assistant reach it, and is it allowed to?

11/11

All 5 checks pass in this group.

  • At the root of the domain you typed Found at the standard /llms.txt path
    2/2
  • Sent as plain text Content-Type: text/plain; charset=utf-8
    1/1
  • robots.txt exists 86 B of crawler rules
    1/1
  • AI crawlers are not blocked No AI user-agent is disallowed at the root
    6/6
  • robots.txt points at a sitemap A Sitemap: line is declared
    1/1

Search-engine basics

What a crawler reads from your homepage today

5/8

4 of 6 checks pass. What is left: homepage has a meta description and social card image.

  • Homepage title is the right length 38 characters, from title
    2/2
  • Title is not padded or repetitive No repeated terms
    1/1
  • Homepage has a meta description 400 characters, from meta description — Google will truncate it
    0/2
  • Canonical URL declared https://bortomcoffee.com/
    1/1
  • Language declared lang="tr"
    1/1
  • Social card image No og:image — shares render as a bare link
    0/1

Depth & upkeep

Is there more than the index, and is it current?

2/9

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 index
    0/3
  • The index points at the full file No llms-full.txt exists to link to
    0/1
  • Index is a sensible size 8.6 KB
    2/2
  • Server reports when it last changed No Last-Modified header — clients cannot tell when this changed
    0/1
  • The index is kept current Cannot be confirmed — the server sends no Last-Modified header
    0/2

What bortomcoffee.com should fix next

Ordered by what each one is worth. Open a row for the steps.

+56 pts
  • Right now: 0 of 118 described (0%)

    Add ": " and one short line after every link. An undescribed link is a coin flip — the model has to open it to find out what it is.

    Where: Each "- [Title](url)" line

    1. Add ": " and one short line after every link — not most of them, every one.
    2. Describe what the page answers, not what it is called.
    3. An undescribed link is a coin flip: the model has to open it to find out.

    In your file

    line 9
    - [Ana Sayfa](https://bortomcoffee.com/)
    - [Ana Sayfa](https://bortomcoffee.com/): {one line on what this page covers}
    line 10
    - [Menü](https://bortomcoffee.com/menu)
    - [Menü](https://bortomcoffee.com/menu): {one line on what this page covers}
    line 11
    - [Fiyat Listesi](https://bortomcoffee.com/fiyat-listesi)
    - [Fiyat Listesi](https://bortomcoffee.com/fiyat-listesi): {one line on what this page covers}

    Placeholders in { } are yours to write — we do not invent text about your pages.

  • Right now: 0 of 118 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

    1. Publish a .md version of each page you link to, at a predictable URL (page.md next to page).
    2. Point the llms.txt links at the .md copies, not at the HTML pages.
    3. Strip navigation, cookie banners and footers from the markdown — that is the whole point: the model reads your content instead of your chrome.
    4. Declare the pair in your HTML with a link relation so clients can find it without guessing.

    In your file

    line 10
    - [Menü](https://bortomcoffee.com/menu)
    - [Menü](https://bortomcoffee.com/menu.md)
    line 11
    - [Fiyat Listesi](https://bortomcoffee.com/fiyat-listesi)
    - [Fiyat Listesi](https://bortomcoffee.com/fiyat-listesi.md)
    line 12
    - [Misafirlerimiz](https://bortomcoffee.com/misafirlerimiz)
    - [Misafirlerimiz](https://bortomcoffee.com/misafirlerimiz.md)

    Placeholders in { } are yours to write — we do not invent text about your pages.

  • Right now: No descriptions at all

    Write 60+ characters that add information the title does not: numbers, limits, formats, names.

    Where: The text after ": " on each link

    1. Write 60 characters or more, and make them add information the title does not.
    2. Cover every link: this is measured per LINK, not per description, so an undescribed line counts as zero.
    3. Name the concrete things on the page: numbers, limits, formats, model names.
    4. If the description could be pasted under any other link, it is not a description yet.
    Instead of
    - [API](https://acme.example/api.md): API documentation
    Do this
    - [API](https://acme.example/api.md): REST endpoints, auth with bearer tokens, rate limits and pagination
  • Right now: No descriptions to compare against their titles

    A description that echoes the title costs context and adds nothing. Say what is on the page, not what it is called.

    Where: The text after ": " on each link

    1. Find the descriptions that just repeat the link title and rewrite them.
    2. Say what is ON the page — the numbers, limits, formats or names a reader would come for.
    3. If the description and the title carry the same information, one of them is wasted context.
    Instead of
    - [Shipping](https://acme.example/shipping.md): Shipping
    Do this
    - [Shipping](https://acme.example/shipping.md): Delivery times by country, free over €50, returns within 30 days
  • Right now: 118 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

    1. Aim for roughly 10–40 curated links.
    2. Above about fifty, a model has to read the whole file before it can choose, and every entry gets diluted.
    3. If you generated the file from a sitemap, delete most of it: curation is the entire value of the format.
    4. Below ten, add the pages you would send a new customer to first.
  • Right now: 4 words per link across 491 words

    A list of names is not documentation. Aim for 30+ words per link across the file — summary, section context and descriptions together. For an exhaustive map what matters instead is that the list is grouped so a model can skip whole branches.

    Where: The descriptions and section context in llms.txt

    1. Count the words in your file against the number of links — aim for 30 or more per link.
    2. A list of page names is an index, not documentation; the descriptions are what a model actually reads.
    3. Add a line of context under each "## " heading saying what that group covers.
  • 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

    1. Concatenate the markdown of every page listed in llms.txt into one file.
    2. Keep the heading structure: a client uses those headings to navigate a multi-megabyte file.
    3. Regenerate it in the same build step that publishes the docs, so it cannot drift.
    4. 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

    1. Move the nice-to-have links — history, press, careers — under "## Optional".
    2. By convention a client may skip that whole section when context is tight.
    3. 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: 4 H2 sections, largest group holds 107 of 118 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

    1. Split the link list into at least five "## " groups by what a reader would be looking for.
    2. Typical split: Docs, API, Guides, Product, Company, Optional.
    3. 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: 400 characters, from meta description — Google will truncate it

    Add a 70–160 character meta description. It is the snippet under your result, and assistants reuse it verbatim.

    Where: The <meta name="description"> tag on your homepage

    1. Target 70–160 characters; beyond that Google truncates it mid-sentence.
    2. Write it as the sentence you would want quoted, because assistants reuse it verbatim.
    Instead of
    <meta name="description" content="Welcome to our website.">
    Do this
    <meta name="description" content="Industrial spare parts for food processing lines, shipped across Europe with same-week dispatch and two-year warranty.">
  • Right now: 17 weak titles (bare URLs, “here”, one-word labels)

    Replace bare URLs and “click here” with the page’s real name — the title is half the signal.

    Where: The "[Title]" part of each link

    1. Replace bare URLs, "here", "click here" and one-word labels with the page’s real name.
    2. The title is half the signal — a model reads it before it reads your description.

    In your file

    line 10
    - [Menü](https://bortomcoffee.com/menu)
    - [{the page’s real name}](https://bortomcoffee.com/menu)
    line 13
    - [Galeri](https://bortomcoffee.com/galeri)
    - [{the page’s real name}](https://bortomcoffee.com/galeri)
    line 42
    - [BROWNIE](https://bortomcoffee.com/menu/brownie)
    - [{the page’s real name}](https://bortomcoffee.com/menu/brownie)

    Placeholders in { } are yours to write — we do not invent text about your pages.

  • Right now: 569 characters — too long

    Aim for 80–350 characters: one or two sentences that make sense read aloud on their own.

    Where: The "> " line in llms.txt

    1. Aim for 80–350 characters: one or two sentences that stand on their own when read aloud.
    2. Under 80 and it says nothing specific; over 350 and a model summarises your summary.
    3. Cut adjectives first — they are the part that carries no information.
  • 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

    1. Regenerate llms.txt in the same step that publishes content, so it cannot go stale silently.
    2. Treat it as a build artifact, not a hand-edited file — hand-edited indexes drift within a quarter.
    3. An llms.txt with discontinued products is worse than none: a model will repeat the wrong facts confidently.
  • 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

    1. Serve llms.txt as a real file on disk so the server can derive Last-Modified from its mtime.
    2. If it is generated by an application route, set the header yourself from the generation time.
    3. Without it a client has to re-download the whole file to notice a change, and cannot answer "is this current?".
    Instead of
    HTTP/1.1 200 OK\nContent-Type: text/plain
    Do this
    HTTP/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

    1. Add an og:image pointing at a 1200×630 PNG or JPG, with an absolute URL.
    2. Add og:title and og:description alongside it so the card is not assembled from guesses.
    3. 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

    1. Mention the full file in llms.txt itself, as a link or a line of context.
    2. Guessing the filename works often enough to be tempting and not often enough to rely on.
    Do this
    Full 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 19 September 2026; run it again for the current state, or check a different site.