From 6e2a354397bb4cd2b94357e454b02fd9fdaccb99 Mon Sep 17 00:00:00 2001 From: neo Date: Mon, 7 Sep 2026 17:51:35 +0500 Subject: [PATCH] =?UTF-8?q?neurosite:=20GEO-=D0=BA=D0=BE=D0=BD=D1=82=D1=80?= =?UTF-8?q?=D0=B0=D0=BA=D1=82=20(ai.txt,=20summary/faq/service.json,=20sit?= =?UTF-8?q?emap-llm.xml)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/.well-known/ai.txt.ts | 26 ++++++++++++++ src/pages/ai/faq.json.ts | 42 ++++++++++++++++++++++ src/pages/ai/service.json.ts | 54 ++++++++++++++++++++++++++++ src/pages/ai/summary.json.ts | 44 +++++++++++++++++++++++ src/pages/sitemap-llm.xml.ts | 63 +++++++++++++++++++++++++++++++++ 5 files changed, 229 insertions(+) create mode 100644 src/pages/.well-known/ai.txt.ts create mode 100644 src/pages/ai/faq.json.ts create mode 100644 src/pages/ai/service.json.ts create mode 100644 src/pages/ai/summary.json.ts create mode 100644 src/pages/sitemap-llm.xml.ts diff --git a/src/pages/.well-known/ai.txt.ts b/src/pages/.well-known/ai.txt.ts new file mode 100644 index 0000000..e1e6164 --- /dev/null +++ b/src/pages/.well-known/ai.txt.ts @@ -0,0 +1,26 @@ +// GEO-контракт: /.well-known/ai.txt — разрешения для AI-краулеров +export const prerender = true; + +const content = `# AI.txt for нейросети.рус +# Витрина реальных результатов локальных open-source нейросетей +# Эндпоинты GEO-контракта, доступные AI-краулерам + +User-agent: * +Allow: /ai/summary.json +Allow: /ai/faq.json +Allow: /ai/service.json +Allow: /sitemap-llm.xml +Allow: /sitemap.xml +Allow: /llms.txt + +# Last updated: 2026-09-07 +`; + +export function GET() { + return new Response(content, { + headers: { + 'Content-Type': 'text/plain; charset=utf-8', + 'Cache-Control': 'public, max-age=86400, stale-while-revalidate=604800', + }, + }); +} diff --git a/src/pages/ai/faq.json.ts b/src/pages/ai/faq.json.ts new file mode 100644 index 0000000..7ec52e7 --- /dev/null +++ b/src/pages/ai/faq.json.ts @@ -0,0 +1,42 @@ +// GEO-контракт: /ai/faq.json — частые вопросы для AI-движков +export const prerender = true; + +const faq = { + version: '1.0', + lastModified: '2026-09-07T00:00:00Z', + faqs: [ + { + question: 'Какая локальная нейросеть лучше всего генерирует изображения?', + answer: 'Flux.1 от Black Forest Labs — лучшая локальная модель для графики по качеству. Для скорости используйте Flux.1 Schnell (нужно 8 ГБ VRAM), для максимального качества — Flux.1 Dev (12 ГБ VRAM). Stable Diffusion 3.5 — быстрее, но ниже качество. Обе запускаются через ComfyUI.', + }, + { + question: 'Можно ли сгенерировать песню с вокалом на русском локально?', + answer: 'Да, через Ace Studio (ACE-Step 1.5 XL). Модель генерирует треки с вокалом на русском, WAV 48k, полностью локально и бесплатно. Требует ~19 ГБ VRAM. Это приватная альтернатива Suno и Udio, которые работают в облаке.', + }, + { + question: 'Какая нейросеть лучше для текста: Llama 4 или Qwen 3?', + answer: 'Llama 4 лучше пишет маркетинговые и творческие тексты, Qwen 3 — код и математику. Обе запускаются через Ollama. Для 12 ГБ VRAM подойдут Llama 4 Scout и Qwen3-30B-A3B. Полное сравнение — в разделе /compare/.', + }, + { + question: 'Сколько VRAM нужно для локальной нейросети?', + answer: 'Для LLM: 8 ГБ — модели до 8B (Qwen3-8B), 12 ГБ — до 30B (Qwen3-30B-A3B, Llama 4 Scout). Для изображений: Flux Schnell — 8 ГБ, Flux Dev — 12 ГБ. Для музыки Ace Studio XL — 19 ГБ. Подробности в гайдах /guide/.', + }, + { + question: 'Локальные нейросети бесплатны?', + answer: 'Да. Все модели на сайте — open-source и бесплатны для локального запуска (проверяйте лицензии: Flux Community, Llama 4 Community, Qwen3 License). Вы платите только за железо и электричество.', + }, + { + question: 'Чем нейросети.рус отличается от каталогов нейросетей?', + answer: 'Мы не просто перечисляем сервисы, а показываем реальные сгенерированные результаты локальных open-source моделей: промпт → что выдала модель → разбор сильных и слабых сторон. Это честные авторские тесты на русском.', + }, + ], +}; + +export function GET() { + return new Response(JSON.stringify(faq), { + headers: { + 'Content-Type': 'application/json; charset=utf-8', + 'Cache-Control': 'public, max-age=86400, stale-while-revalidate=604800', + }, + }); +} diff --git a/src/pages/ai/service.json.ts b/src/pages/ai/service.json.ts new file mode 100644 index 0000000..34c0e2d --- /dev/null +++ b/src/pages/ai/service.json.ts @@ -0,0 +1,54 @@ +// GEO-контракт: /ai/service.json — возможности сайта для AI-движков +export const prerender = true; + +const service = { + version: '1.0', + lastModified: '2026-09-07T00:00:00Z', + service: { + name: 'нейросети.рус — витрина локальных open-source нейросетей', + type: 'Content portal / showcase', + description: 'Сайт публикует реальные сгенерированные результаты локальных open-source моделей с честным разбором: что получилось, что подвело, сколько VRAM нужно, как повторить.', + audience: 'Разработчики, креаторы, музыканты, SMB — все, кто хочет использовать нейросети локально, бесплатно и приватно.', + }, + features: [ + { + name: 'Примеры результатов', + path: '/examples/', + description: 'Сгенерированные тексты, коды, изображения и треки с разбором промптов и выводами.', + }, + { + name: 'Каталог моделей', + path: '/models/', + description: 'Open-source модели (Llama 4, Qwen 3, Flux, SD 3.5, Ace Studio) с лицензиями, VRAM и ссылками на Hugging Face.', + }, + { + name: 'Сравнения', + path: '/compare/', + description: 'Честные сравнения на реальных результатах: Llama 4 vs Qwen 3, Flux vs SD 3.5, Ace Studio vs Suno.', + }, + { + name: 'Гайды по запуску', + path: '/guide/', + description: 'Пошаговые инструкции: как запустить Flux локально, как сгенерировать песню через Ace Studio.', + }, + { + name: 'Музыкальные нейросети', + path: '/ace-studio/', + description: 'Генерация треков с вокалом на русском через Ace Studio — уникальный раздел, которого нет у конкурентов.', + }, + { + name: 'Новости', + path: '/news/', + description: 'Оперативные новости мира локальных моделей и open-source AI.', + }, + ], +}; + +export function GET() { + return new Response(JSON.stringify(service), { + headers: { + 'Content-Type': 'application/json; charset=utf-8', + 'Cache-Control': 'public, max-age=86400, stale-while-revalidate=604800', + }, + }); +} diff --git a/src/pages/ai/summary.json.ts b/src/pages/ai/summary.json.ts new file mode 100644 index 0000000..d076ac5 --- /dev/null +++ b/src/pages/ai/summary.json.ts @@ -0,0 +1,44 @@ +// GEO-контракт: /ai/summary.json — саммари сайта для AI-движков +export const prerender = true; + +const summary = { + version: '1.0', + lastModified: '2026-09-07T00:00:00Z', + summary: 'нейросети.рус — витрина реальных сгенерированных результатов локальных open-source нейросетей: текст, графика, аудио, видео. Не каталог облачных сервисов, а честные авторские тесты того, что модели реально умеют: промпт → результат → разбор.', + keyFeatures: [ + 'Реальные сгенерированные результаты локальных моделей (Llama 4, Qwen 3, Flux, Stable Diffusion, Ace Studio)', + 'Каталог open-source моделей с лицензиями и системными требованиями', + 'Сравнения моделей на реальных примерах', + 'Гайды по локальному запуску (VRAM, установка, настройка)', + 'Музыкальные нейросети: Ace Studio, генерация песен с вокалом на русском', + ], + targetAudience: [ + 'Разработчики, пробующие локальные модели', + 'Креаторы, ищущие бесплатные/приватные альтернативы облаку', + 'Музыканты, генерирующие треки с вокалом', + 'SMB и маркетологи, автоматизирующие контент', + ], + primaryUseCases: [ + 'Сгенерировать текст/код локально без облака', + 'Сгенерировать изображение бесплатно (Flux, SD)', + 'Сгенерировать песню с вокалом на русском (Ace Studio)', + 'Выбрать модель по задаче и системным требованиям', + 'Сравнить Llama 4 vs Qwen 3, Flux vs SD 3.5, Ace Studio vs Suno', + ], + relatedEndpoints: [ + { path: '/sitemap-llm.xml', description: 'Полный список страниц' }, + { path: '/sitemap.xml', description: 'Стандартный sitemap' }, + { path: '/llms.txt', description: 'Список разделов для LLM' }, + { path: '/ai/service.json', description: 'Возможности сайта' }, + { path: '/ai/faq.json', description: 'Частые вопросы' }, + ], +}; + +export function GET() { + return new Response(JSON.stringify(summary), { + headers: { + 'Content-Type': 'application/json; charset=utf-8', + 'Cache-Control': 'public, max-age=86400, stale-while-revalidate=604800', + }, + }); +} diff --git a/src/pages/sitemap-llm.xml.ts b/src/pages/sitemap-llm.xml.ts new file mode 100644 index 0000000..e2fd852 --- /dev/null +++ b/src/pages/sitemap-llm.xml.ts @@ -0,0 +1,63 @@ +// GEO-контракт: /sitemap-llm.xml — LLM-оптимизированный sitemap +import { getCollection } from 'astro:content'; + +export const prerender = true; +const BASE = 'https://нейросети.рус'; + +function iso(dateStr) { + if (!dateStr) return '2026-09-07'; + const d = typeof dateStr === 'string' ? new Date(dateStr) : dateStr; + return isNaN(d) ? '2026-09-07' : d.toISOString().split('T')[0]; +} + +// Статичные страницы + все элементы коллекций +export async function GET() { + const pages: { url: string; priority: string; changefreq: string; lastmod?: string }[] = [ + { url: '/', priority: '1.0', changefreq: 'daily' }, + { url: '/examples/', priority: '0.9', changefreq: 'daily' }, + { url: '/models/', priority: '0.9', changefreq: 'weekly' }, + { url: '/compare/', priority: '0.8', changefreq: 'weekly' }, + { url: '/news/', priority: '0.8', changefreq: 'daily' }, + { url: '/guide/', priority: '0.8', changefreq: 'weekly' }, + { url: '/ace-studio/', priority: '0.8', changefreq: 'weekly' }, + ]; + + const collections = ['examples', 'models', 'compare', 'news', 'guide', 'aceStudio']; + for (const name of collections) { + try { + const items = await getCollection(name); + const slug = name === 'aceStudio' ? 'ace-studio' : name; + for (const item of items) { + pages.push({ + url: `/${slug}/${item.slug}/`, + priority: '0.7', + changefreq: 'monthly', + lastmod: iso(item.data.date), + }); + } + } catch (e) { /* пустая коллекция */ } + } + + // GEO-эндпоинты тоже включаем для LLM-краулеров + const geoEndpoints = [ + '/ai/summary.json', '/ai/faq.json', '/ai/service.json', + '/.well-known/ai.txt', '/llms.txt', + ]; + for (const ep of geoEndpoints) { + pages.push({ url: ep, priority: '0.3', changefreq: 'monthly' }); + } + + const xml = ` + +${pages.map(p => + ` ${BASE}${p.url}${p.lastmod || '2026-09-07'}${p.changefreq}${p.priority}` +).join('\n')} +`; + + return new Response(xml, { + headers: { + 'Content-Type': 'application/xml; charset=utf-8', + 'Cache-Control': 'public, max-age=86400, stale-while-revalidate=604800', + }, + }); +}