Штучні індексувачі та агенти дедалі частіше зчитують веб‑контент, але їм не потрібен увесь ваш HTML — навігаційні меню, бандли JavaScript та декоративна розмітка лише заважають. Пакет Spatie Laravel Markdown Response дозволяє вашому Laravel‑додатку виявляти запити від ботів або агентів і повертати чисту версію у markdown.
Ніяких змін у контролерах чи виглядах не потрібно. Пакет працює на рівні middleware: перехоплює відповіді й перетворює HTML на markdown перед відправленням.
# Встановлення
composer require spatie/laravel-markdown-response
Пакет реєструється автоматично. Щоб почати, обгорніть маршрути, які хочете віддавати в markdown, middleware ProvideMarkdownResponse:
use Spatie\MarkdownResponse\Middleware\ProvideMarkdownResponse;
Route::middleware(ProvideMarkdownResponse::class)->group(function () {
Route::get('/blog', [BlogController::class, 'index']);
Route::get('/blog/{article}', [BlogController::class, 'show']);
Route::get('/docs/{page}', [DocsController::class, 'show']);
});
Можна також застосувати middleware глобально, щоб охопити всі маршрути.
# Як працює виявлення
Middleware визначає запити за трьома механізмами:
- HTTP‑заголовок
Accept: text/markdown - Суфікс
.mdв URL (наприклад/blog.md) - Відомі user agents, зокрема GPTBot і ClaudeBot
Якщо в URL використано суфікс .md, пакет реєструє глобальний middleware RewriteMarkdownUrls, який знімає суфікс перед маршрутизацією — тому /blog.md звичайно резолвиться в /blog, а конвертація відбувається на виході.
Також можна використовувати PHP‑атрибути безпосередньо в класі контролера або в методі, щоб керувати конвертацією без middleware. #[ProvideMarkdown] вмикає конвертацію для контролера чи дії, а #[DoNotProvideMarkdown] — явно її відключає.
# Конвертація та кешування
За замовчуванням конвертацію виконує локальний драйвер league/html-to-markdown, але як альтернативу доступний драйвер Cloudflare Workers AI.
Перетворені відповіді кешуються автоматично. TTL за замовчуванням — одна година; поведінку кешування та тривалість можна налаштувати. Щоб опублікувати файл конфігурації:
php artisan vendor:publish --tag="markdown-response-config"
Деякі доступні опції:
| Параметр | За замовчуванням | Опис |
|---|---|---|
enabled |
true |
Увімкнути/вимкнути конвертацію в markdown |
driver |
league |
league або cloudflare |
detect_via_accept_header |
true |
Відповідати на Accept: text/markdown |
detect_via_md_suffix |
true |
Відповідати на URL зі суфіксом .md |
cache.enabled |
true |
Кешувати перетворені відповіді |
cache.ttl |
3600 |
Тривалість кешу в секундах |
# Пряме перетворення
Якщо потрібно перетворити HTML у markdown поза middleware, фасад Markdown дає прямий інтерфейс:
use Spatie\MarkdownResponse\Facades\Markdown;
$markdown = Markdown::convert($html);
Повну документацію дивіться на spatie.be/docs/laravel-markdown-response, а вихідний код — на GitHub.