# Markdown-версії сторінок і виявлення файлу

> Друга половина специфікації llms.txt: чисті .md-версії сторінок, rel="alternate" type="text/markdown" та rel="describedby", HTTP-заголовок Link.

Джерело: https://llms.com.ua/markdown-pages/ · оновлено 2026-08-12 · llms.com.ua

---

Про `llms.txt` говорять постійно, а про другу половину тієї самої пропозиції — майже ніколи.
Тим часом саме вона відповідає на питання «а як агент узагалі знайде цей файл» і «звідки він візьме чистий
текст сторінки». Без неї llms.txt лишається списком посилань на ті самі важкі HTML-сторінки.

## Markdown-версії сторінок

Специфікація формулює другу пропозицію так:

> «We furthermore propose that pages with information that agents might need provide a clean markdown version
> of those pages at the same URL as the original page, either with `.md` appended
> (`page.html.md`) or with the extension replaced by `.md` (`page.md`).»
> «Ми також пропонуємо, щоб сторінки з інформацією, яка може знадобитися агентам, надавали чисту
> Markdown-версію за тією ж адресою, що й оригінальна сторінка: або з доданим `.md`
> (`page.html.md`), або із заміною розширення на `.md` (`page.md`).»
> [llmstxt.org](https://llmstxt.org/)

Для адрес без імені файлу передбачено `index.html.md` або `index.md`.

| Оригінальна адреса | Варіант із доданим .md | Варіант із заміною |
| --- | --- | --- |
| /docs/api.html | /docs/api.html.md | /docs/api.md |
| /docs/api/ | /docs/api/index.html.md | /docs/api/index.md |
| /blog/post | /blog/post.md | /blog/post.md |

**У v1 дозволявся лише перший варіант**Версія v1 вимагала саме додавання `.md` до повної адреси сторінки. Оскільки частина інструментів публікації натомість замінює розширення, v2 узаконила обидва варіанти. Якщо ви бачите валідатор, який вважає `page.md` помилкою, — він перевіряє застарілу редакцію.

## Виявлення: link relations

Головна претензія практиків до v1 звучала так: припустімо, агент відкрив сторінку. Як йому дізнатися, що
поруч є Markdown-версія, і що десь вище лежить llms.txt, який її описує — не вгадуючи адреси?
Відповідь v2 — стандартні відношення посилань.

| Відношення | На що вказує |
| --- | --- |
| rel="alternate" type="text/markdown" | Markdown-версія цієї самої сторінки |
| rel="describedby" | Файл llms.txt, який покриває цю сторінку |

Це можна оголосити двома способами. Перший — елементи `<link>` у HTML:

_У <head> сторінки_

```
<link rel="alternate" type="text/markdown" href="/docs/page.html.md">
<link rel="describedby" href="/docs/llms.txt">
```

Другий — HTTP-заголовок `Link:`. Специфікація наводить його дослівно і пояснює перевагу:
заголовок працює й для не-HTML ресурсів (зокрема для самих Markdown-файлів) і додається в конфігурації
вебсервера чи CDN без правки сторінок.

_Приклад із тексту специфікації_

```
Link: </docs/page.html.md>; rel="alternate"; type="text/markdown", </docs/llms.txt>; rel="describedby"
```

### Як віддати такий заголовок на звичайному PHP-хостингу

Через `.htaccess`, якщо доступний `mod_headers`:

_.htaccess_

```
<IfModule mod_headers.c>
    <FilesMatch "\.html$">
        Header set Link "</llms.txt>; rel=\"describedby\""
    </FilesMatch>
</IfModule>
```

Або безпосередньо з PHP, якщо сторінки генеруються скриптом:

_До будь-якого виводу_

```
<?php
$md   = '/docs/page.md';
$llms = '/docs/llms.txt';
header('Link: <' . $md . '>; rel="alternate"; type="text/markdown", '
     . '<' . $llms . '>; rel="describedby"');
```

**Що перевіряють інструменти станом на сьогодні**Ми перевірили публічні валідатори llms.txt: жоден із них не перевіряє наявність link relations. Це означає, що «100 балів» у типовому чекері не гарантує виконання специфікації v2 — перевірено лише її першу половину.

**Цей сайт виконує обидві половини специфікації**Перевірте самі: додайте `.md` до адреси будь-якої сторінки — наприклад
[/markdown-pages.md](https://llms.com.ua/markdown-pages.md) — і отримаєте чистий Markdown без навігації.
HTML-сторінки віддають цю адресу і через `<link rel="alternate" type="text/markdown">`,
і через HTTP-заголовок `Link:`, а сам [llms.txt](https://llms.com.ua/llms.txt) оголошений
через `rel="describedby"`. Заголовки можна побачити командою
`curl -I https://llms.com.ua/specification/`.

## Content-Type і кодування

Специфікація не встановлює обовʼязкового MIME-типу для самого `llms.txt`, але практика однозначна:
файл має віддаватися як `text/plain` або `text/markdown`. Найпоширеніша реальна помилка —
сервер віддає `text/html`, і це майже завжди означає, що файлу насправді немає, а ви бачите шаблон
сторінки помилки з кодом 200.

Для Apache MIME-тип для `.md` додається одним рядком:

_.htaccess_

```
AddType text/markdown .md
AddDefaultCharset UTF-8
```

**Кирилиця**Якщо ваш llms.txt українською, обовʼязково переконайтеся, що файл збережений у UTF-8 _без_ подвійного перекодування. Класична ознака проблеми — послідовності на кшталт `Ð¿Ñ€Ð¾` у відповіді сервера. Наш [валідатор](https://llms.com.ua/checker/) перевіряє це окремо.

## Як агент має цим користуватися

Версія v2 прямо описує очікуваний сценарій, чого не було у v1:

> «Agents are expected to view or search `llms.txt` to find the information they need, then follow
> the relevant links. […] The file itself stays small enough to fit in context. The detail lives behind the
> links, and is fetched only when needed.»
> «Очікується, що агенти переглядають або шукають у `llms.txt` потрібну інформацію, а потім
> переходять за релевантними посиланнями. […] Сам файл лишається достатньо малим, щоб вміститися в контекст.
> Деталі живуть за посиланнями й завантажуються лише за потреби.»
> [llmstxt.org](https://llmstxt.org/)

Звідси випливає головна вимога до змісту: **посилання мають вести на матеріали, зручні для моделі**.
Список із двадцяти посилань на важкі HTML-сторінки формально валідний, але суперечить призначенню файлу.

[НазадСпецифікація llms.txt](https://llms.com.ua/specification/)
[Даліllms-full.txt: що це насправді](https://llms.com.ua/llms-full-txt/)
[ПрикладиРеальні файли великих компаній](https://llms.com.ua/examples/)
