Next.js Metagegevens worden niet bijgewerkt? Hier is waarom
Weet je niet zeker of het jouw code of een cache is?
Controleer het gratis met Proovd. Het laat precies zien welke metadata uw live URL momenteel weergeeft, onafhankelijk van de eigen cache van welk platform dan ook.
Snel antwoord
- De meeste gevallen zijn de eigen gegevenscache van Next.js of een CDN-cache die verouderde HTML serveert, en geen codefout
- generateMetadata in een servercomponent wordt alleen opnieuw uitgevoerd als de onderliggende ophaalcache opnieuw wordt gevalideerd
- De rest is meestal de cache van het platform (Facebook, LinkedIn, enz.), niet Next.js. Controleer beide voordat u een van beide aanneemt
Reproduceerbaar voorbeeld
Dit ziet er correct uit, maar blijft verouderde metadata weergeven na een inhoudswijziging:
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],
},
};
}
De aanroep fetch hier wordt standaard in de cache opgeslagen door de gegevenscache van Next.js. Als post.title of post.image verandert in uw CMS, zal deze functie de nieuwe waarde pas zien als de cache opnieuw wordt gevalideerd. Zonder expliciete strategie kan dat betekenen dat het pas bij de volgende volledige build zal zijn.
Waarom uw metadata niet worden bijgewerkt
De onderliggende ophaalactie wordt in de cache opgeslagen
Standaard wordt fetch() binnen generateMetadata voor onbepaalde tijd in de App Router opgeslagen. Oplossing door een expliciete hervalidatieperiode in te stellen:
const post = await fetch(url, { next: { revalidate: 60 } }).then(r => r.json());
Of u kunt zich volledig afmelden voor caching voor dat verzoek:
const post = await fetch(url, { cache: "no-store" }).then(r => r.json());
De route wordt statisch gegenereerd
Als de route generateStaticParams gebruikt en er geen hervalidatie is geconfigureerd, wordt de volledige route, inclusief metagegevens, tijdens het bouwen ingebakken. Het toevoegen van export const revalidate = 3600; op paginaniveau dwingt periodieke regeneratie af.
Een CDN of edge cache bedient de oude HTML
Zelfs als uw build correct is, kan Vercel's Edge Network, Cloudflare of een andere CDN vóór uw app een in de cache opgeslagen HTML-antwoord weergeven dat ouder is dan uw oplossing. Controleer de antwoordheaders:
curl -I https://yoursite.com/blog/post-slug
Zoek naar x-vercel-cache: HIT of een soortgelijke CDN header. Een HIT betekent dat u naar een in de cache opgeslagen kopie kijkt, en niet naar uw laatste implementatie.
opengraph-image.ts haalt geen nieuwe gegevens op
Als u de op bestanden gebaseerde conventie opengraph-image.ts gebruikt, genereert Next.js standaard een statische afbeelding tijdens het bouwen. Dynamische inhoud daarin is onderworpen aan dezelfde cachingregels als elke andere servercomponent, dus voeg expliciete hervalidatie toe als deze nieuw moet blijven.
Het is eigenlijk de cache van het platform, niet die van jou
Het meest voorkomende valse alarm. Uw app kan perfect nieuwe metadata weergeven terwijl Facebook, LinkedIn of Slack nog steeds een voorbeeld toont dat ze dagen geleden in de cache hebben opgeslagen. Bevestig wat uw server verzendt voordat u een Next.js-code aanraakt. Zie onze gids voor het wissen van de OG-cache op elk platform.
Stap-voor-stap oplossingsgids
- Voer
curl -s https://yoursite.com/page | uit grep -i "og:"om te zien wat uw server daadwerkelijk verzendt - Controleer op een CDN cache
HITheader metcurl -I https://yoursite.com/page - Voeg expliciet
revalidateofcache: "no-store"toe om binnengenerateMetadataop te halen - Forceer een nieuwe implementatie om een verouderde build-cache uit te sluiten
- Controleer het live resultaat met Proovd
Next.js versus andere raamwerken
| 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 |
Controlelijst voor snelle reparatie
- Bevestigde onbewerkte HTML-uitvoer heeft de juiste tags (niet alleen de browser-DOM)
- Expliciete hervalidatie of cache toegevoegd: "no-store" om binnen generateMetadata op te halen
- CDN/edge cache headers gecontroleerd op een verouderde HIT
- Bevestigd of de route volledig statisch is zonder ISR
- Sluit de eigen cache van het sociale platform uit als de echte oorzaak
- De uiteindelijke live-uitvoer geverifieerd met Proovd
Veelgestelde vragen
Waarom wordt mijn og:image bijgewerkt in de browser, maar niet op Facebook of LinkedIn?
Uw Next.js-app gebruikt waarschijnlijk al de juiste tag. Het platform toont een kopie die vóór uw oplossing in de cache is opgeslagen. Gebruik de eigen cache-vernieuwingstool van dat platform in plaats van nog meer code te wijzigen.
Schakelt revalidate: 0 caching volledig uit?
Het instellen van revalidate: 0 forceert effectief dynamische weergave voor die ophaalactie bij elk verzoek, vergelijkbaar met cache: "no-store". Gebruik het spaarzaam, omdat het de prestatievoordelen van caching wegneemt.
Gerelateerde artikelen
Bevestig wat uw Next.js app daadwerkelijk serveert
Controleer uw live metadata gratis met Proovd. Het laat precies zien wat er momenteel in uw HTML staat, onafhankelijk van de cache van welk platform dan ook.