Next.js Metadata opdateres ikke? Her er hvorfor
Er du i tvivl om det er din kode eller en cache?
Tjek det gratis med Proovd. Det viser præcis, hvilke metadata din live URL serverer lige nu, uafhængigt af enhver platforms egen cache.
Hurtigt svar
- De fleste tilfælde er Next.jss egen datacache eller en CDN-cache, der serverer gammel HTML, ikke en kodefejl
- generateMetadata i en serverkomponent kører kun igen, når dens underliggende hente-cache genvalideres
- Resten er normalt platformens cache (Facebook, LinkedIn osv.), ikke Next.js. Tjek begge, før du antager enten
Reproducerbart eksempel
Dette ser korrekt ud, men vil fortsætte med at vise forældede metadata efter en indholdsændring:
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-kaldet her cachelagres som standard af Next.jss datacache. Hvis post.title eller post.image ændres i din CMS, vil denne funktion ikke se den nye værdi, før cachen genvalideres. Uden nogen eksplicit strategi kan det betyde, at det ikke er før den næste fulde build.
Hvorfor dine metadata ikke opdateres
Den underliggende hentning er cachelagret
Som standard cachelagres fetch() inde i generateMetadata på ubestemt tid i App-routeren. Ret ved at indstille et eksplicit genvalideringsvindue:
const post = await fetch(url, { next: { revalidate: 60 } }).then(r => r.json());
Eller fravælg helt cachelagring for denne anmodning:
const post = await fetch(url, { cache: "no-store" }).then(r => r.json());
Ruten er statisk genereret
Hvis ruten bruger generateStaticParams uden genvalidering konfigureret, indbygges hele ruten, inklusive metadata, på byggetidspunktet. Tilføjelse af export const revalidate = 3600; på sideniveau fremtvinger periodisk regenerering.
En CDN eller edge cache serverer den gamle HTML
Selvom din build er korrekt, kan Vercel's Edge Network, Cloudflare eller en anden CDN foran din app vise et cachelagret HTML-svar, der går forud for din rettelse. Tjek svaroverskrifter:
curl -I https://yoursite.com/blog/post-slug
Se efter x-vercel-cache: HIT eller en lignende CDN header. Et HIT betyder, at du ser på en cachelagret kopi, ikke din seneste implementering.
opengraph-image.ts opfanger ikke nye data
Hvis du bruger den filbaserede opengraph-image.ts-konvention, genererer Next.js som standard et statisk billede på byggetidspunktet. Dynamisk indhold inde i det er underlagt de samme cacheregler som enhver anden serverkomponent, så tilføj eksplicit genvalidering, hvis det skal forblive frisk.
Det er faktisk platformens cache, ikke din
Den mest almindelige falsk alarm. Din app kan levere helt friske metadata, mens Facebook, LinkedIn eller Slack stadig viser en forhåndsvisning, de cachelagde for dage siden. Bekræft, hvad din server sender, før du trykker på en Next.js-kode. Se vores guide til at rydde OG-cache på hver platform.
Trin-for-trin rettelsesvejledning
- Kør
curl -s https://yoursite.com/page | grep -i "og:"for at se, hvad din server rent faktisk sender - Tjek efter en CDN cache
HITheader medcurl -I https://yoursite.com/page - Tilføj eksplicit
revalidateellercache: "no-store"til hentning inde igenerateMetadata - Tving en ny implementering for at udelukke en forældet build-cache
- Bekræft 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 |
Tjekliste til hurtig rettelse
- Bekræftet rå HTML-output har de korrekte tags (ikke kun browserens DOM)
- Tilføjet eksplicit genvalidering eller cache: "no-store" for at hente inde i generateMetadata
- Kontrollerede CDN/edge cache-headere for et forældet HIT
- Bekræftet, om ruten er fuldstændig statisk uden ISR
- Udelukket den sociale platforms egen cache som den egentlige årsag
- Bekræftet det endelige live output med Proovd
Ofte stillede spørgsmål
Hvorfor opdateres min og:image i browseren, men ikke på Facebook eller LinkedIn?
Din Next.js-app leverer sandsynligvis allerede det korrekte tag. Platformen viser en kopi, den cachelagde før din rettelse. Brug platformens eget cache-opdateringsværktøj i stedet for at ændre mere kode.
Deaktiverer revalidate: 0 caching helt?
Indstilling af revalidate: 0 fremtvinger effektivt dynamisk gengivelse for den hentning på hver anmodning, svarende til cache: "no-store". Brug det sparsomt, da det fjerner ydelsesfordelen ved caching.
Relaterede artikler
Bekræft, hvad din Next.js-app faktisk serverer
Tjek dine live metadata gratis med Proovd. Det viser præcis, hvad der er i din HTML lige nu, uafhængigt af enhver platforms cache.