Next.js Oppdateres ikke metadata? Her er hvorfor
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
- Kjør
curl -s https://yoursite.com/page | grep -i "og:"for å se hva serveren din faktisk sender - Se etter en CDN cache
HITheader medcurl -I https://yoursite.com/page - Legg til eksplisitt
revalidateellercache: "no-store"for henting inne igenerateMetadata - Tving en ny distribusjon for å utelukke en foreldet build-cache
- 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
- Bekreftet rå HTML-utdata har de riktige kodene (ikke bare nettleserens DOM)
- Lagt til eksplisitt revalidate eller cache: "no-store" for henting i generateMetadata
- Sjekket CDN/edge cache-overskrifter for en foreldet HIT
- Bekreftet om ruten er helt statisk uten ISR
- Utelukket den sosiale plattformens egen cache som den egentlige årsaken
- 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.
Relaterte artikler
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.