Часть 2 из 22

Metadata API: тайтлы, описания и паттерн с шаблоном

App Router заменил next/head на типизированный Metadata API. Два способа: статический экспорт для фиксированных страниц и generateMetadata для динамических:

// app/layout.tsx — общие настройки сайта с шаблоном тайтла
import type { Metadata } from "next";

export const metadata: Metadata = {
  metadataBase: new URL("https://example.com"),
  title: {
    template: "%s | Acme",
    default: "Acme — студия веб-разработки",
  },
  description: "Описание по умолчанию, если страница не задала своё.",
};
// app/blog/[slug]/page.tsx — динамические метаданные для поста
export async function generateMetadata({ params }): Promise<Metadata> {
  const post = await getPost(params.slug);
  if (!post) return { title: "Пост не найден" };

  return {
    title: post.title, // станет «Заголовок поста | Acme» через шаблон
    description: post.excerpt,
  };
}

Практические правила, которые реально влияют на позиции:

  • Title: ~50–60 символов, главный ключ ближе к началу, уникальный для каждой страницы. Google переписывает плохие тайтлы — не давайте ему повода.
  • Description: ~150–160 символов. Напрямую на ранжирование не влияет, но это ваш рекламный текст в выдаче — от него зависит CTR.
  • metadataBase обязателен — без него относительные URL OG-картинок и canonical ломаются в проде.
  • Дедуплицируйте запрос между generateMetadata и компонентом страницы через React cache() — иначе будете ходить в CMS дважды на каждый запрос.
import { cache } from "react";

export const getPost = cache(async (slug: string) => {
  return fetchPostFromCMS(slug);
});

Чеклист:

  • metadataBase задан в корневом layout
  • Шаблон тайтла определён один раз, страницы задают только свою часть
  • У каждой страницы уникальные title и description
  • Страницы из CMS используют generateMetadata с fetch, обёрнутым в cache()
  • Есть fallback-метаданные для 404 и отсутствующего контента

01—22

Все темы гайда

  1. 01Стратегия рендеринга: что на самом деле видит краулер?
  2. 02Metadata API: тайтлы, описания и паттерн с шаблоном
  3. 03Canonical и hreflang: одна страница — один адрес
  4. 04Open Graph и динамические OG-картинки
  5. 05sitemap.ts и robots.ts: файловые конвенции вместо рукописного XML
  6. 06Структурированные данные: JSON-LD, который приносит rich results
  7. 07Картинки, шрифты и скрипты: классическое трио производительности
  8. 08Core Web Vitals: три числа, которые измеряет Google
  9. 09Редиректы, 404 и коды ответов
  10. 10Кеширование и свежесть контента
  11. 11AEO/GEO: как попасть в ответы ChatGPT, Perplexity и Google AI Overviews
  12. 12Мониторинг: SEO — это цикл, а не задача на запуск
  13. 13Траст и E-E-A-T: как сделать сайт заслуживающим доверия
  14. 14Image SEO: как превратить картинки в трафик
  15. 15Внутренняя перелинковка и архитектура сайта
  16. 16Поисковые интенты: страницы под то, что люди реально ищут
  17. 17Programmatic SEO в Next.js: страницы в масштабе без спама
  18. 18SEO-миграция: переезд на Next.js без потери трафика
  19. 19Пагинация и фасетная навигация без раздувания индекса
  20. 20Доступность и SEO: одна работа — две награды
  21. 21Угасание контента: обновить, склеить или удалить
  22. 22Off-page для разработчиков: ссылки, которые не покупают

Нужно, чтобы это сделали за вас?

Я провожу аудит и чиню техническое SEO на сайтах Next.js — индексация, скорость, hreflang и видимость в AI.

Услуга «Техническое SEO»