0Pricing
React Academy · Lezione

API Metadata e SEO nell'App Router

Esporti oggetti metadata statici e dinamici per impostare titoli, descrizioni e tag OG delle pagine.

API Metadata e SEO nell'App Router è una lezione React Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento React Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso React Academy include 4 lezioni in totale.

Perché i metadati sono importanti

Metadati efficaci (titolo, descrizione e tag OG) migliorano il posizionamento SEO e le anteprime quando i contenuti vengono condivisi sui social. L'App Router di Next.js fornisce una Metadata API tipizzata che genera i tag <head> lato server.

Esportazione di metadati statici

Esporti un oggetto metadata da qualsiasi page.tsx o layout.tsx per impostare i tag statici di quel segmento.

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

Template dei titoli

Usi title.template in un layout affinché le pagine figlie ricevano automaticamente un titolo formattato, senza ripetere il nome del sito.

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

Metadati dinamici con generateMetadata

Esporti una funzione asincrona generateMetadata per le route che richiedono tag basati sui dati: la funzione riceve params e i metadati del genitore.

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

Tag Open Graph

La chiave openGraph imposta i tag OG per la condivisione sui social network Facebook, LinkedIn e 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',
  },
};

Tag Twitter Card

La chiave twitter imposta i metadati specifici delle Twitter Card per ottenere anteprime avanzate nei tweet.

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

Robots e URL canonici

Controlli il crawling con robots e imposti URL canonici per evitare penalizzazioni dovute a contenuti duplicati.

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

Favicon e icone

Inserisca i file delle icone in app/ usando nomi riservati (icon.png, apple-icon.png, favicon.ico) oppure li dichiari in 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',
  },
};

Generare immagini OG con ImageResponse

Usi ImageResponse da next/og in un route.ts per generare immagini OG dinamiche con JSX renderizzato in 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 }
  );
}

Dati strutturati (JSON-LD)

Aggiunga dati strutturati JSON-LD inserendo un tag <script> nel JSX della pagina: non fanno parte della Metadata API, ma funzionano insieme a essa.

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

Verificare i metadati

Usi gli strumenti per sviluppatori del browser (scheda Network o visualizzazione del codice sorgente HTML) oppure strumenti come opengraph.xyz per verificare che i metadati vengano renderizzati correttamente nell'HTML del server.

Verifica rapida

Quale funzionalità della Metadata API di Next.js consente alle pagine figlie di ereditare e personalizzare un suffisso condiviso del titolo, come 'About | My App'?

Riepilogo

Esporti metadata per i tag statici o generateMetadata() per quelli dinamici. Usi title.template nei layout per mantenere i titoli DRY, imposti openGraph e twitter per le anteprime sui social e usi ImageResponse in un route handler per fornire immagini OG dinamiche.

Domande Frequenti

La lezione «API Metadata e SEO nell'App Router» è gratuita?

Sì — il testo completo di «API Metadata e SEO nell'App Router» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso React Academy, passa a CoddyKit PRO. Il corso React Academy include 4 lezioni in totale.

Cosa imparerò in «API Metadata e SEO nell'App Router»?

Esporti oggetti metadata statici e dinamici per impostare titoli, descrizioni e tag OG delle pagine. Eserciti React Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare React Academy?

Non è richiesta alcuna esperienza precedente. React Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «API Metadata e SEO nell'App Router»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione React Academy?

Sì. Ogni lezione React Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Convenzioni dei file dell'App Router
  2. Componenti server e client in Next.js
  3. Route dinamiche e gruppi di route
  4. API Metadata e SEO nell'App Router
← Torna a React Academy