← Blog

Next.js Oppdateres ikke metadata? Her er hvorfor

Du oppdaterer generateMetadata, omplasserer, og den gamle tittelen eller bildet vises fortsatt når du deler koblingen. Slik finner du ut om det er et hurtigbufferlag eller en kodefeil.

Er du usikker på om det er koden din eller en cache?

Sjekk det gratis med Proovd. Den viser nøyaktig hvilke metadata din live URL serverer akkurat nå, uavhengig av hvilken som helst plattforms egen cache.

Rask svar

  • De fleste tilfeller er Next.jss egen databuffer eller en CDN-cache som serverer gammel HTML, ikke en kodefeil
  • generateMetadata i en serverkomponent kjøres bare på nytt når dens underliggende hentebuffer revalideres
  • Resten er vanligvis plattformens cache (Facebook, LinkedIn, etc.), ikke Next.js. Sjekk begge før du antar enten

Reproduserbart eksempel

Dette ser riktig ut, men vil fortsette å vise foreldede metadata etter en innholdsendring:

export async function generateMetadata({ params }) {
  const post = await fetch(`https://api.example.com/posts/${params.slug}`).then(r => r.json());

  return {
    title: post.title,
    openGraph: {
      images: [post.image],
    },
  };
}

fetch-kallet her bufres av Next.jss databuffer som standard. Hvis post.title eller post.image endres i CMS, vil ikke denne funksjonen se den nye verdien før hurtigbufferen valideres på nytt. Uten noen eksplisitt strategi kan det bety ikke før neste fullbygg.

Hvorfor metadataene dine ikke oppdateres

Den underliggende hentingen bufres

Som standard er fetch() inne i generateMetadata bufret på ubestemt tid i App-ruteren. Rett opp ved å angi et eksplisitt revalideringsvindu:

const post = await fetch(url, { next: { revalidate: 60 } }).then(r => r.json());

Eller velg bort bufring helt for den forespørselen:

const post = await fetch(url, { cache: "no-store" }).then(r => r.json());

Ruten er statisk generert

Hvis ruten bruker generateStaticParams uten revalidering konfigurert, blir hele ruten, inkludert metadata, bakt inn på byggetidspunktet. Å legge til export const revalidate = 3600; på sidenivå fremtvinger periodisk regenerering.

En CDN eller kantbuffer serverer den gamle HTML-koden

Selv om konstruksjonen din er riktig, kan Vercels Edge Network, Cloudflare eller en annen CDN foran appen din vise et bufret HTML-svar som er før reparasjonen din. Sjekk svaroverskrifter:

curl -I https://yoursite.com/blog/post-slug

Se etter x-vercel-cache: HIT eller en lignende CDN overskrift. En HIT betyr at du ser på en bufret kopi, ikke din siste distribusjon.

opengraph-image.ts plukker ikke opp nye data

Hvis du bruker den filbaserte opengraph-image.ts-konvensjonen, genererer Next.js et statisk bilde på byggetidspunktet som standard. Dynamisk innhold inne i den er underlagt de samme bufringsreglene som enhver annen serverkomponent, så legg til eksplisitt revalidering hvis den trenger å holde seg oppdatert.

Det er faktisk plattformens cache, ikke din

Den vanligste falske alarmen. Appen din kan levere helt ferske metadata mens Facebook, LinkedIn eller Slack fortsatt viser en forhåndsvisning de bufret for dager siden. Bekreft hva serveren din sender før du berører en Next.js-kode. Se vår veiledning for å tømme OG-cache på hver plattform.

Trinn-for-trinn-rettingsveiledning

  1. Kjør curl -s https://yoursite.com/page | grep -i "og:" for å se hva serveren din faktisk sender
  2. Se etter en CDN cache HIT header med curl -I https://yoursite.com/page
  3. Legg til eksplisitt revalidate eller cache: "no-store" for henting inne i generateMetadata
  4. Tving en ny distribusjon for å utelukke en foreldet build-cache
  5. Bekreft liveresultatet med Proovd

Next.js vs. andre rammer

Framework Common cause Fix pattern
Next.js (App Router) Cached fetch inside generateMetadata, or static build with no ISR revalidate option or cache: "no-store"
Astro Client-only meta tag injection instead of static frontmatter/SSR Move tags into the page's static output
SvelteKit Meta tags set only client-side, not in the server load function Load meta values server-side, pass to the head

Quick Fix Sjekkliste

  1. Bekreftet rå HTML-utdata har de riktige kodene (ikke bare nettleserens DOM)
  2. Lagt til eksplisitt revalidate eller cache: "no-store" for henting i generateMetadata
  3. Sjekket CDN/edge cache-overskrifter for en foreldet HIT
  4. Bekreftet om ruten er helt statisk uten ISR
  5. Utelukket den sosiale plattformens egen cache som den egentlige årsaken
  6. Verifisert den endelige live-utgangen med Proovd

Ofte stilte spørsmål

Hvorfor oppdateres og:image i nettleseren, men ikke på Facebook eller LinkedIn?

Next.js-appen din leverer sannsynligvis allerede den riktige taggen. Plattformen viser en kopi som den ble bufret før reparasjonen. Bruk den plattformens eget hurtigbufferoppdateringsverktøy i stedet for å endre mer kode.

Deaktiverer revalidate: 0 caching helt?

Innstilling revalidate: 0 tvinger effektivt frem dynamisk gjengivelse for den hentingen på hver forespørsel, lik cache: "no-store". Bruk den sparsomt siden den fjerner ytelsesfordelen ved caching.

Bekreft hva Next.js-appen din faktisk serverer

Sjekk live metadata gratis med Proovd. Den viser nøyaktig hva som er i HTML-en din akkurat nå, uavhengig av hvilken som helst plattforms cache.