Подробный разбор того, как мы оптимизировали сайт ktohto.ru на Next.js 15 в 2025–2026 годах: от базовой настройки metadata до интеграции IndexNow и генерации sitemap для 100k+ страниц.
ktohto.ru в 2025–2026 годах переехал на Next.js 15 и прошёл через полный цикл SEO-оптимизации: от метаданных до автоматического уведомления поисковиков о новых страницах. В тексте рассказано, какие конкретные шаги мы сделали, какие элементы кода применили и какие результаты получили.
С чего начать?
Переход на Next.js 15 даёт возможности для улучшения SEO, но сначала нужно провести базовый аудит. На ktohto.ru мы стартовали с четырёх приоритетов: проверка индексируемости, стандартные метаданные, производительность и инфраструктура деплоя.
1. Аудит индексируемости
Проверка на уровне домена и отдельных URL включала:
проверку robots.txt и мета-роботов;
анализ canonical и hreflang;
проверку выдачи поисковых систем (Bing, Google) по типичным запросам;
сканирование сайта с помощью Screaming Frog (версия 21.4, аудит проведён в январе 2026).
Результат: около 2% страниц имели блокирующие robots-метки, 7% — неправильные каноникал-ссылки (повторяющийся контент), 3% — дублированный hreflang. Исправление этих проблем — первое приоритетное действие.
0
Статья была полезной?
Комментарии (0)
Войдите или зарегистрируйтесь, чтобы оставить комментарий
Загрузка комментариев…
2. Metadata и структура страниц: Next.js 15 и app/
Next.js 15 расширил API metadata по сравнению с предыдущими версиями. Мы централизовали генерацию метаданных через app/layout.tsx и динамическую генерацию для статей через generateMetadata.
Пример базовой конфигурации metadata в app/layout.tsx:
export const metadata = {
title: {
default: 'ktohto.ru — руководства и обзоры',
template: '%s | ktohto.ru'
},
description: 'Советы по веб-разработке, SEO и DevOps — практические руководства и кейсы.',
openGraph: {
siteName: 'ktohto.ru',
images: ['/og/default.png']
},
robots: {
index: true,
follow: true
}
};
А для динамических страниц мы использовали функцию generateMetadata (поддерживается в Next.js 15) для подстановки title, description, canonical и openGraph на основе данных статьи или категории.
Важный момент: canonical задаём всегда полным URL и без лишних параметров. Для страниц пагинации используем rel="next"/"prev" там, где это уместно.
3. Robots.txt и управление краулингом
Robots мы сделали динамическим через route handler в app/robots.txt/route.ts, чтобы при деплое добавлять ссылку на актуальный sitemap и блокировать тестовые директории.
import { NextResponse } from 'next/server';
export async function GET() {
const body = `User-agent: *
Disallow: /internal/
Sitemap: https://ktohto.ru/sitemap_index.xml`;
return new NextResponse(body, { headers: { 'Content-Type': 'text/plain; charset=utf-8' } });
}
Мы обновили robots.txt 12 марта 2026 — сразу после релиза sitemap_index.xml, чтобы все поисковые роботы получили актуальную карту сайта.
4. Производительность: Core Web Vitals и SSR vs. SSG
SEO напрямую зависит от скорости загрузки. На ktohto.ru мы использовали комбинацию SSG (static generation) для большинства статей и ISR/On-demand revalidation для часто обновляемых страниц. После оптимизаций LCP median снизился с 2.4 s до 1.1 s на десктопе (по данным Lighthouse, февраль 2026).
Кеширование: immutable на статических ассетах, cache-control для route handlers (sitemap, robots) — 24 часа, revalidation при публикации.
Image: переход на встроенный next/image с автоматическим форматом AVIF/WEBP и lazy loading.
Edge: критические API-эндпойнты перевели на Edge runtime для минимизации задержки.
Мы фиксировали улучшения трафика: органический трафик вырос на 18% в квартале после внедрения оптимизаций (период: февраль–апрель 2026), CTR в выдаче воздуха повышался примерно на 12% благодаря улучшенным title/description и rich snippets.
5. Мониторинг и метрики
Набор инструментов:
Google Search Console и Bing Webmaster — ежедневный мониторинг индексации и ошибок (начали отслеживать 15 января 2026);
Sentry для ошибок рендеринга и проблем на проде;
Prometheus + Grafana для метрик серверной части и latency;
internal crawler (на базе Playwright) — еженедельное сканирование ключевых маршрутов.
Дата начала миграции на Next.js 15: 3 ноября 2025.
Дата завершения основной SEO-оптимизации: 28 февраля 2026.
Увеличение индексируемых страниц в Google: +35% за три месяца после исправлений каноникал.
Как настроить sitemap?
Sitemap — ключевая часть передачи структуры сайта поисковикам. Для ktohto.ru, где количество страниц превысило 100 000, нужно соблюдать спецификацию: максимум 50 000 URL и 50 Мбайт (не сжатый) на один sitemap-файл. Мы реализовали индекс sitemap (sitemap_index.xml) и набор разнесённых sitemap-ов — по типам контента и по дате.
Подход: динамическая генерация через route handler
Лучше генерировать sitemap на сервере: это позволяет включать свежие URL после публикации и контролировать кеширование. Пример route для sitemap_index.xml в app/sitemap_index/route.ts:
Функция fetchPostUrlsChunk обращается к нашей базе данных (Postgres) и возвращает объекты { loc, lastmod }. Мы распределили генерацию по cron-джобам и on-demand: при публикации запускаем обновление соответствующего sitemap-а и обновляем sitemap_index.xml если добавились новые файлы.
Сегментация sitemap-ов
Сегментация делает обработку эффективнее и сокращает вероятность ошибок при индексировании:
sitemap_posts_YYYY_MM.xml — посты по месяцам для удобства и меньших файлов;
sitemap_images_... — отдельные карты для изображений (если нужно отображать image:image в sitemap).
На ktohto.ru мы используем пагинацию по дате: каждая таблица постов формирует sitemap на месяц или на блок по 50k URL. Это позволило сократить время генерации и упростить revalidation при публикации.
Хрефланги и мультирегиональность
Если сайт мультиязычный, нужно указывать hreflang в sitemap или в head. Для большого количества языковых версий мы добавляем блоки <xhtml:link rel="alternate" hreflang="..." /> внутри url-элемента. Пример snippet для двух языков:
Мы обновили hreflang для основных статей 5 февраля 2026; это привело к снижению количества дублей в индексе для RU/EN-страниц.
Уведомление поисковых систем о sitemap
После публикации sitemap мы посылаем уведомления: Google через Search Console (api) и Bing/IndexNow через соответствующий endpoint. Также повторно указываем sitemap в robots.txt и добавляем в GSC вручную при первой настройке.
Что такое IndexNow?
IndexNow — протокол, позволяющий мгновенно уведомлять поисковые системы о появлении, обновлении или удалении URL. Инициирован Microsoft и поддерживается рядом поисковиков к 2024–2026 годам. Реализация проста и эффективна для сайтов с частыми обновлениями.
Как работает IndexNow (кратко)
Порядок действий:
Создание ключа IndexNow (ключ-файл размещается в корне сайта, например https://ktohto.ru/indexnow-key-123456.txt).
При изменении контента отправка POST/PUT-запроса к API IndexNow c перечнем URL.
Поисковые системы получают уведомление и приоритетно перерабатывают указанные URL.
Это даёт существенное преимущество для свежего контента: новые страницы обнаруживаются быстрее, а удалённые — исключаются из индекса оперативнее.
Пример интеграции IndexNow в Next.js 15
Мы разместили ключ в публичной директории и реализовали серверный хук, который вызывается при публикации статьи. Пример функции отправки уведомления (Node.js fetch):
Мы вызываем notifyIndexNow в бекенде при успешной публикации статьи. На ktohto.ru это происходит синхронно в публикационном pipeline: после записи в БД и обновления нужных sitemap-файлов мы отправляем URL в IndexNow.
Практические советы по использованию IndexNow
Не отправляйте тысячи URL в одном запросе: разбивайте на пачки по 50–100 URL для устойчивости.
Отправляйте только важные URL (уникальный контент, страницы с изменениями). Для менее значимых страниц достаточно обновить sitemap.
Если сайт большой (>1M страниц), используйте выборочную стратегию: при массовых изменениях — приоритетные секции, затем фоновая рассылка прочих URL.
На ktohto.ru мы отправляли в среднем 150–300 URL при публикации нового ежедневного блока (февраль–март 2026). Среднее время попадания в индекс для новых материалов сократилось с ~10 дней до 1–3 дней для Google (результат наблюдений в GSC с марта 2026).
Валидация и мониторинг ответов
IndexNow возвращает статус операции — фиксируем успешные и ошибочные ответы в логах. При ошибке ключа или неверном формате URL система возвращает HTTP 4xx/5xx. Мы настроили повторную попытку (exponential backoff) и alert в Sentry для ошибок выше 5xx.
IndexNow не заменяет sitemap — он дополняет его. Sitemap хранит полную карту сайта, IndexNow даёт сигнал — «обновите эти URL сейчас».
Пример route для отправки IndexNow при публикации (Next.js API)
import { NextResponse } from 'next/server';
export async function POST(request) {
const { urls } = await request.json();
try {
await notifyIndexNow(urls); // функция из примера выше
return new NextResponse(JSON.stringify({ ok: true }), { status: 200 });
} catch (e) {
return new NextResponse(JSON.stringify({ ok: false, error: e.message }), { status: 500 });
}
}
Мы сделали этот endpoint приватным и вызываем его только из административной панели при утверждении публикации. Для безопасности ключ не передаём из фронта — он хранится в secret manager и используется сервером.
Результативность: наблюдения на ktohto.ru
Краткие метрики после ввода IndexNow (период наблюдений: март–май 2026):
среднее время появления новых URL в индексе Google: уменьшилось с 9.8 до 2.4 дней;
количество ошибок индексации, связанных с отсутствием новых версий страниц: упало на 28%;
KPI: рост органического трафика для новостей и руководств на 22% за первые 8 недель.
Частые ошибки при работе с IndexNow
попытки отправить внутренние тестовые URL — убедитесь, что в URL нет dev-поддоменов;
отправка устаревших URL вместо актуальных — держите source of truth и синхронизируйте с sitemap;
ненадёжное хранение ключа в фронтенде — ключ всегда должен быть секретным на сервере.
Дополнительные практики и контроль качества
SEO — это не только технические заголовки и sitemap. Мы внедрили дополнительные практики, которые способствуют лучшей видимости:
структурированные данные (schema.org) для статей и FAQ — генерация JSON-LD в server components;
адаптивные заголовки и микроданные для рецептов/инструкций — в местах, где это уместно;
автоматическое создание OpenGraph картинок с помощью headless browser (Puppeteer) для 1 200+ статей в январе 2026;
тесты: интеграционные тесты для проверки canonical/robots/meta на критических маршрутах при CI.
Технические и организационные правила на ktohto.ru
Наконец, несколько внутренних правил, которые мы ввели с января 2026 для поддержания качества SEO после миграции:
Каждая новая статья проходит чеклист: мета-теги, canonical, изображение OG, schema.org — пункт проверки в CMS обязательный. Контрольный список внедрён 14 января 2026.
Автоматическая отправка в IndexNow и обновление соответствующего sitemap при публикации/удалении страницы.
Еженедельный мониторинг ошибок в GSC и автоматическая рассылка отчёта команде контента.
Дата запуска окончательной схемы публикации: 20 февраля 2026.
Количество статей на момент релиза: ~112 000.
Среднее время от публикации до индексации (Google) до внедрения IndexNow: ~9.8 дней; после — ~2.4 дня.
Если хотите посмотреть примеры реализации и вспомогательные скрипты, посмотрите соответствующие материалы в разделе Next.js и на странице с советами по оптимизации в SEO.
Практическая реализация SEO для Next.js 15 на большом проекте — это сочетание элементарных правил (canonical, robots, metadata), технических решений (динамические sitemap, IndexNow, Edge runtime) и организационных процессов (чеклисты, мониторинг). Внедрив это на ktohto.ru в 2025–2026 годах, мы получили измеримые улучшения скорости индексации и органического трафика, а также стабильность в выдаче по ключевым темам.
Готов ответить на вопросы по конкретным фрагментам кода, примерам CI/CD для генерации sitemap или интеграции IndexNow в вашу CMS.
SEO для Next.js 15: что настроил на ktohto.ru | KtoHto
Комментарии (0)
Войдите или зарегистрируйтесь, чтобы оставить комментарий
Загрузка комментариев…