0Pricing
React Academy · Урок

API метаданных и SEO в App Router

Экспортируйте статические и динамические объекты метаданных, чтобы задавать заголовки и описания страниц, а также теги OG.

«API метаданных и SEO в App Router» — бесплатный урок React Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения React Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс React Academy содержит 4 уроков всего.

Почему важны метаданные

Хорошие метаданные (заголовок, описание, теги OG) улучшают позиции в результатах SEO и предварительный просмотр при публикации в социальных сетях. Маршрутизатор App Next.js предоставляет типобезопасный программный интерфейс метаданных, который создает теги <head> на сервере.

Экспорт статических метаданных

Экспортируйте объект metadata из любого page.tsx или layout.tsx, чтобы задать статические теги для этого сегмента.

import type { Metadata } from 'next';

export const metadata: Metadata = {
  title: 'My App',
  description: 'The best app ever built',
  keywords: ['react', 'nextjs', 'typescript'],
};

export default function Page() { return <main>Hello</main>; }

Шаблоны заголовков

Используйте title.template в макете, чтобы дочерние страницы автоматически получали отформатированный заголовок без повторения имени сайта.

// app/layout.tsx
export const metadata: Metadata = {
  title: {
    template: '%s | My App',
    default: 'My App',
  },
};

// app/about/page.tsx
export const metadata: Metadata = {
  title: 'About', // renders as "About | My App"
};

Динамические метаданные с generateMetadata

Экспортируйте асинхронную функцию generateMetadata для маршрутов, которым нужны теги на основе данных: она получает params и метаданные родительского элемента.

export async function generateMetadata({ params }: { params: { id: string } }): Promise<Metadata> {
  const product = await getProduct(params.id);
  return {
    title: product.name,
    description: product.summary,
    openGraph: {
      title: product.name,
      images: [product.imageUrl],
    },
  };
}

Теги Open Graph

Ключ openGraph задает теги OG для публикации в Facebook, LinkedIn и Slack.

export const metadata: Metadata = {
  openGraph: {
    title: 'My Product',
    description: 'Buy now!',
    url: 'https://example.com/product',
    siteName: 'My App',
    images: [{ url: 'https://example.com/og.png', width: 1200, height: 630 }],
    type: 'website',
    locale: 'en_US',
  },
};

Теги карточек Twitter

Ключ twitter задает специальные для Twitter метаданные карточки, обеспечивающие расширенный предварительный просмотр в твитах.

twitter: {
  card: 'summary_large_image',
  title: 'My Product',
  description: 'Buy now!',
  images: ['https://example.com/twitter.png'],
  creator: '@myhandle',
},

Роботы и канонические URL

Управляйте сканированием с помощью robots и задавайте канонические URL, чтобы избежать санкций за дублирование содержимого.

export const metadata: Metadata = {
  robots: { index: true, follow: true, googleBot: { index: true } },
  alternates: { canonical: 'https://example.com/products' },
};

Фавиконы и значки

Размещайте файлы значков в app/, используя зарезервированные имена (icon.png, apple-icon.png, favicon.ico), или объявляйте их в metadata.icons.

// Convention: place app/icon.png → auto-detected as favicon

// Or declare explicitly:
export const metadata: Metadata = {
  icons: {
    icon: '/icon.png',
    apple: '/apple-icon.png',
    shortcut: '/shortcut-icon.png',
  },
};

Генерация изображений OG с помощью ImageResponse

Используйте ImageResponse из next/og в route.ts, чтобы создавать динамические изображения OG с помощью JSX, отображаемого в PNG.

// app/og/route.ts
import { ImageResponse } from 'next/og';

export async function GET(req: Request) {
  const { searchParams } = new URL(req.url);
  const title = searchParams.get('title') ?? 'Default';
  return new ImageResponse(
    <div style={{ fontSize: 48, background: '#fff', width: '100%', height: '100%' }}>
      {title}
    </div>,
    { width: 1200, height: 630 }
  );
}

Структурированные данные (JSON-LD)

Добавляйте структурированные данные JSON-LD, внедряя тег <script> в JSX страницы. Они не являются частью программного интерфейса метаданных, но работают вместе с ним.

export default function ProductPage({ product }) {
  const jsonLd = {
    '@context': 'https://schema.org',
    '@type': 'Product',
    name: product.name,
    price: product.price,
  };
  return (
    <>
      <script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }} />
      <h1>{product.name}</h1>
    </>
  );
}

Проверка метаданных

Используйте браузерные DevTools (вкладку «Сеть» или просмотр исходного кода HTML) либо такие инструменты, как opengraph.xyz, чтобы проверить корректное отображение метаданных в HTML, отправляемом сервером.

Быстрая проверка

Какая возможность API метаданных Next.js позволяет дочерним страницам наследовать общий суффикс заголовка и настраивать его, например «О нас | Моё приложение»?

Итоги

Экспортируйте metadata для статических тегов или generateMetadata() для динамических. Используйте title.template в макетах для заголовков без дублирования, задавайте openGraph и twitter для предварительного просмотра в социальных сетях, а в обработчике маршрута используйте ImageResponse для выдачи динамических изображений OG.

Часто задаваемые вопросы

Урок «API метаданных и SEO в App Router» бесплатный?

Да — полный текст урока «API метаданных и SEO в App Router» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс React Academy, подпишись на CoddyKit PRO. Курс React Academy содержит 4 уроков всего.

Чему я научусь в уроке «API метаданных и SEO в App Router»?

Экспортируйте статические и динамические объекты метаданных, чтобы задавать заголовки и описания страниц, а также теги OG. Ты практикуешь React Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать React Academy?

Предыдущий опыт не требуется. React Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «API метаданных и SEO в App Router»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке React Academy?

Да. Каждый урок React Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Соглашения об именовании файлов App Router
  2. Серверные и клиентские компоненты в Next.js
  3. Динамические маршруты и группы маршрутов
  4. API метаданных и SEO в App Router
← Назад к React Academy