0Pricing
React Academy · Lekcja

Metadata API i SEO w App Router

Eksportowanie statycznych i dynamicznych obiektów metadanych w celu ustawiania tytułów stron, opisów i tagów OG.

Metadata API i SEO w App Router to bezpłatna lekcja React Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej React Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs React Academy zawiera 4 lekcji w sumie.

Dlaczego metadane są ważne

Dobre metadane (tytuł, opis i tagi OG) poprawiają pozycję w wynikach SEO oraz podgląd treści udostępnianych w mediach społecznościowych. App Router Next.js udostępnia bezpieczne typowo API metadanych, które generuje tagi <head> po stronie serwera.

Eksport statycznych metadanych

Eksportuj obiekt metadata z dowolnego pliku page.tsx lub layout.tsx, aby ustawić statyczne tagi dla tego segmentu.

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>; }

Szablony tytułów

Użyj title.template w layoucie, aby strony podrzędne automatycznie otrzymywały sformatowany tytuł bez powtarzania nazwy witryny.

// 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"
};

Dynamiczne metadane z użyciem generateMetadata

Eksportuj asynchroniczną funkcję generateMetadata dla tras, które wymagają tagów zależnych od danych — funkcja otrzymuje params oraz metadane rodzica.

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],
    },
  };
}

Tagi Open Graph

Klucz openGraph ustawia tagi OG używane podczas udostępniania treści w serwisach Facebook, LinkedIn i 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',
  },
};

Tagi kart Twittera

Klucz twitter ustawia metadane kart specyficzne dla Twittera, zapewniając rozbudowane podglądy w tweetach.

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

Robots i adres kanoniczny

Kontroluj indeksowanie za pomocą robots i ustawiaj kanoniczne adresy URL, aby uniknąć kar za zduplikowaną treść.

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

Favicony i ikony

Umieść pliki ikon w katalogu app/, używając zarezerwowanych nazw (icon.png, apple-icon.png, favicon.ico), albo zadeklaruj je w 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',
  },
};

Generowanie obrazów OG za pomocą ImageResponse

Użyj ImageResponse z next/og w pliku route.ts, aby generować dynamiczne obrazy OG z JSX renderowanym do 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 }
  );
}

Dane strukturalne (JSON-LD)

Dodaj dane strukturalne JSON-LD, wstrzykując tag <script> do JSX strony — nie jest to część API metadanych, ale działa razem z nim.

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>
    </>
  );
}

Weryfikowanie metadanych

Użyj narzędzi deweloperskich przeglądarki (karty Network lub wyświetlenia źródła HTML) albo narzędzi takich jak opengraph.xyz, aby sprawdzić, czy metadane są poprawnie renderowane w kodzie HTML wysyłanym przez serwer.

Szybkie sprawdzenie

Która funkcja API metadanych Next.js pozwala stronom podrzędnym dziedziczyć wspólny sufiks tytułu i dostosowywać go, na przykład w postaci „O nas | My App”?

Podsumowanie

Eksportuj metadata dla statycznych tagów lub generateMetadata() dla dynamicznych. Używaj title.template w layoutach, aby tworzyć tytuły zgodnie z zasadą DRY, ustawiaj openGraph i twitter dla podglądów w mediach społecznościowych oraz używaj ImageResponse w handlerze trasy do udostępniania dynamicznych obrazów OG.

Często zadawane pytania

Czy lekcja „Metadata API i SEO w App Router” jest bezpłatna?

Tak — pełny tekst „Metadata API i SEO w App Router” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu React Academy, przejdź na CoddyKit PRO. Kurs React Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Metadata API i SEO w App Router”?

Eksportowanie statycznych i dynamicznych obiektów metadanych w celu ustawiania tytułów stron, opisów i tagów OG. Ćwiczysz React Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć React Academy?

Nie wymagamy żadnego doświadczenia. React Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Metadata API i SEO w App Router”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji React Academy?

Tak. Każda lekcja React Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Konwencje plików App Router
  2. Komponenty serwerowe a klienckie w Next.js
  3. Dynamiczne trasy i grupy tras
  4. Metadata API i SEO w App Router
← Powrót do React Academy