Next.js Lýsigögn eru ekki uppfærð? Hér er hvers vegna
Ertu ekki viss um hvort þetta sé kóðinn þinn eða skyndiminni?
Athugaðu það ókeypis með Proovd. Það sýnir nákvæmlega hvaða lýsigögn lifandi vefslóð þín er að þjóna núna, óháð eigin skyndiminni hvers vettvangs.
Fljótt svar
- Flest tilvik eru eigin skyndiminni Next.js eða CDN skyndiminni sem þjónar gömlu HTML, ekki kóða villu
- generateMetadata í miðlarahluti keyrir aðeins aftur þegar undirliggjandi skyndiminni til að sækja hann endurgildist
- Restin er venjulega skyndiminni pallsins (Facebook, LinkedIn, osfrv.), ekki Next.js. Athugaðu hvort tveggja áður en þú gerir ráð fyrir annað hvort
Endurtakanlegt dæmi
Þetta lítur rétt út en mun halda áfram að birta gömul lýsigögn eftir efnisbreytingu:
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 símtalið hér er sjálfgefið í skyndiminni af gagnaskyndiminni Next.js. Ef post.title eða post.image breytist í CMS mun þessi aðgerð ekki sjá nýja gildið fyrr en skyndiminni hefur endurgilt. Með enga skýra stefnu getur það þýtt ekki fyrr en í næstu fullri byggingu.
Af hverju lýsigögn þín eru ekki uppfærð
Undirliggjandi niðurhal er í skyndiminni
Sjálfgefið er að fetch() inni í generateMetadata er ótímabundið í skyndiminni í App Router. Lagfærðu með því að setja skýran endurfullgildingarglugga:
const post = await fetch(url, { next: { revalidate: 60 } }).then(r => r.json());
Eða afþakkaðu skyndiminni algjörlega fyrir þá beiðni:
const post = await fetch(url, { cache: "no-store" }).then(r => r.json());
Leiðin er statísk mynduð
Ef leiðin notar generateStaticParams án endurfullgildingar stillt, er öll leiðin, lýsigögn innifalin, bakuð inn á byggingartíma. Að bæta við export const revalidate = 3600; á síðustigi þvingar fram reglubundna endurnýjun.
CDN eða brún skyndiminni er að þjóna gamla HTML
Jafnvel þó að smíðin þín sé rétt, getur Vercel's Edge Network, Cloudflare, eða annað CDN fyrir framan appið þitt þjónað HTML-svar í skyndiminni sem er á undan lagfæringunni þinni. Athugaðu svarhausa:
curl -I https://yoursite.com/blog/post-slug
Leitaðu að x-vercel-cache: HIT eða svipuðum CDN haus. HIT þýðir að þú ert að skoða afrit í skyndiminni, ekki nýjustu dreifinguna þína.
opengraph-image.ts er ekki að taka upp ný gögn
Ef þú ert að nota skráabyggða opengraph-image.ts venjuna, býr Next.js sjálfgefið til kyrrstæða mynd á byggingartíma. Kvikt efni inni í því er háð sömu skyndiminnisreglum og hver annar miðlarahluti, svo bættu við skýrri endurfullgildingu ef það þarf að vera ferskt.
Það er í raun skyndiminni pallsins, ekki þitt
Algengasta falska viðvörunin. Forritið þitt getur þjónað fullkomlega ferskum lýsigögnum á meðan Facebook, LinkedIn eða Slack eru enn að sýna forskoðun sem þau komu í skyndiminni fyrir dögum síðan. Staðfestu hvað þjónninn þinn er að senda áður en þú snertir einhvern Next.js kóða. Sjá leiðbeiningar okkar um að hreinsa OG skyndiminni á hverjum vettvangi.
Skref-fyrir-skref lagfæringarleiðbeiningar
- Hlaupa
curl -s https://yoursite.com/page | grep -i "og:"til að sjá hvað þjónninn þinn sendir í raun og veru - Athugaðu hvort CDN skyndiminni
HIThaus meðcurl -I https://yoursite.com/page - Bættu við berum orðum
revalidateeðaskyndiminni: "ekki verslun"til að sækja inni ígenerateMetadata - Þvingaðu nýja dreifingu til að útiloka gamaldags skyndiminni
- Staðfestu niðurstöðuna í beinni með Proovd
Next.js á móti öðrum ramma
| 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 |
Gátlisti til fljótlegra laga
- Staðfest hrátt HTML úttak hefur rétt merki (ekki bara DOM vafrans)
- Bætt við skýrri endurgildingu eða skyndiminni: „engin verslun“ til að sækja inni generateMetadata
- Athugaði CDN/edge skyndiminnihausa fyrir gamaldags HIT
- Staðfest hvort leiðin sé alveg kyrrstæð án ISR
- Útilokað er að eigin skyndiminni samfélagsvettvangsins sé raunveruleg orsök
- Staðfesti lokaúttakið í beinni með Proovd
Algengar spurningar
Af hverju uppfærist og:image minn í vafranum en ekki á Facebook eða LinkedIn?
Next.js appið þitt er líklega þegar að þjóna réttu merki. Vettvangurinn sýnir afrit sem hann var í skyndiminni áður en þú lagfærði þig. Notaðu eigin skyndiminnisuppfærsluverkfæri þess vettvangs frekar en að breyta meiri kóða.
Gerir endurgilda: 0 algjörlega óvirka skyndiminni?
Stilling revalidate: 0 þvingar í raun fram kraftmikla flutning fyrir þá söfnun fyrir hverja beiðni, svipað og skyndiminni: „ekki geyma“. Notaðu það sparlega þar sem það fjarlægir frammistöðuávinninginn af skyndiminni.
Tengdar greinar
Staðfestu hvað Next.js appið þitt þjónar í raun
Athugaðu lifandi lýsigögn þín ókeypis með Proovd. Það sýnir nákvæmlega hvað er í HTML þínum núna, óháð skyndiminni hvers vettvangs.