feat: чистые URL без .html
All checks were successful
CI/CD Pipeline / docker (push) Successful in 46s
CI/CD Pipeline / deploy (push) Successful in 7s

- VitePress: включён cleanUrls
- Caddyfile: try_files пробует .html для запросов без расширения
- Caddyfile: 301-редирект /foo.html → /foo для совместимости
- sitemap.xml: канонические URL без .html
This commit is contained in:
2026-04-27 10:12:30 +03:00
parent ef58a02609
commit 74cbd43a23
3 changed files with 17 additions and 4 deletions

View File

@@ -127,6 +127,10 @@ export default defineConfig({
title: 'NextJS Style Guide',
description: 'Стандарты разработки на Next.js + TypeScript с архитектурой SLM',
// Чистые URL без `.html` — канон для индексации.
// Серверная поддержка реализована в Caddyfile (try_files + редирект).
cleanUrls: true,
// Дублируем указатель на llms.txt в <head> — для агентов,
// которые читают HTML, но не парсят полный DOM/href.
head: [

View File

@@ -7,6 +7,15 @@
redir /docs/llms.txt /llms.txt 301
redir /docs/llms-full.txt /llms-full.txt 301
# Чистые URL: запросы вида `/docs/foo.html` редиректим на `/docs/foo`.
# Канон сайта — без `.html` (cleanUrls в VitePress).
# Не трогаем index.html в корне — он не имеет смысловой пары без расширения.
@legacyHtml {
path_regexp legacyHtml ^(/.+)\.html$
not path /index.html
}
redir @legacyHtml {re.legacyHtml.1} 301
# Подсказка агентам, где лежит карта документации (RFC 8288).
# Позволяет найти llms.txt без парсинга DOM — по HTTP-заголовку.
header Link "</llms.txt>; rel=\"llms\""
@@ -30,5 +39,6 @@
respond @missingText 404
file_server
try_files {path} {path}/ /index.html
# cleanUrls: пробуем точное совпадение → +.html → каталог → SPA-фолбэк.
try_files {path} {path}.html {path}/ /index.html
}

View File

@@ -527,9 +527,8 @@ const buildSitemap = (): void => {
for (const entry of entries) {
const link = entry.link;
// VitePress отдаёт страницы как HTML; для index — каталог со слешем.
const url = link.endsWith('/') ? `${SITE_URL}${link}` : `${SITE_URL}${link}.html`;
urls.add(url);
// cleanUrls: канон без `.html`. Index-страницы — каталог со слешем.
urls.add(`${SITE_URL}${link}`);
}
const today = BUILD_DATE.slice(0, 10);