Next.js Metatiedot eivät päivity? Tässä on miksi
Etkö ole varma, onko se sinun koodisi vai välimuisti?
Tarkista se ilmaiseksi käyttämällä Proovd. Se näyttää tarkalleen, mitä metatietoja live-URL-osoitteesi palvelee juuri nyt, riippumatta alustan omasta välimuistista.
Pikavastaus
- Useimmat tapaukset ovat Next.js:n omaa datavälimuistia tai CDN-välimuistia, joka palvelee vanhentunutta HTML-koodia, ei koodivirhettä
- generateMetadata palvelinkomponentissa suoritetaan uudelleen vain, kun sen taustalla oleva hakuvälimuisti vahvistetaan uudelleen
- Loput ovat yleensä alustan välimuistia (Facebook, LinkedIn jne.), eivät Next.js. Tarkista molemmat ennen kuin otat jommankumman
Toistettava esimerkki
Tämä näyttää oikealta, mutta jatkaa vanhentuneiden metatietojen näyttämistä sisällön muutoksen jälkeen:
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-kutsu tässä välimuistissa on Next.js:n datavälimuisti oletusarvoisesti. Jos post.title tai post.image muuttuu kohdassa CMS, tämä toiminto ei näe uutta arvoa ennen kuin välimuisti on tarkistettu. Ilman nimenomaista strategiaa se voi tarkoittaa vasta seuraavaa täyttä versiota.
Miksi metatietosi eivät päivity
Taustalla oleva haku on välimuistissa
Oletusarvoisesti fetch(), joka sijaitsee tunnuksen generateMetadata sisällä, on välimuistissa rajoituksetta App Routerissa. Korjaa asettamalla eksplisiittinen vahvistusikkuna:
const post = await fetch(url, { next: { revalidate: 60 } }).then(r => r.json());
Tai lopeta välimuistin tallentaminen kokonaan kyseiselle pyynnölle:
const post = await fetch(url, { cache: "no-store" }).then(r => r.json());
Reitti luodaan staattisesti
Jos reitti käyttää parametria generateStaticParams ilman uudelleenvalidointia, koko reitti metatiedot mukaan lukien luodaan rakennusvaiheessa. export const revalidate = 3600; lisääminen sivutasolle pakottaa säännöllisen uudelleenmuodostuksen.
CDN tai reunavälimuisti palvelee vanhaa HTML-koodia
Vaikka koontiversiosi olisi oikea, Vercel's Edge Network, Cloudflare tai jokin muu CDN sovelluksesi edessä voi näyttää välimuistissa olevan HTML-vastauksen, joka on ennen korjaustasi. Tarkista vastausotsikot:
curl -I https://yoursite.com/blog/post-slug
Etsi x-vercel-cache: HIT tai vastaava CDN-otsikko. HIT tarkoittaa, että katsot välimuistissa olevaa kopiota, et viimeisintä käyttöönottoasi.
opengraph-image.ts ei poimi uutta tietoa
Jos käytät tiedostopohjaista käytäntöä opengraph-image.ts, Next.js luo oletuksena staattisen kuvan rakennusaikana. Sen sisällä olevaan dynaamiseen sisältöön sovelletaan samoja välimuistisääntöjä kuin mihin tahansa muuhun palvelinkomponenttiin, joten lisää nimenomainen uudelleentarkistus, jos sen on pysyttävä tuoreena.
Se on itse asiassa alustan välimuisti, ei sinun
Yleisin väärä hälytys. Sovelluksesi voi näyttää täysin tuoreita metatietoja, kun Facebook, LinkedIn tai Slack näyttävät edelleen esikatselun, jonka ne ovat tallentaneet välimuistiin päiviä sitten. Varmista, mitä palvelimesi lähettää, ennen kuin kosketat mitään Next.js-koodia. Katso opas OG-välimuistin tyhjentämiseen kaikilla alustoilla.
Vaiheittainen korjausopas
- Suorita
curl -s https://yoursite.com/page | grep -i "og:"nähdäksesi, mitä palvelimesi todella lähettää - Tarkista CDN välimuisti
HITotsikkocurl -I https://yoursite.com/page - Lisää eksplisiittinen
revalidatetaicache: "no-store"hauillegenerateMetadata - Pakota uusi käyttöönotto sulkeaksesi pois vanhentuneen koontivälimuistin
- Vahvista reaaliaikainen tulos käyttämällä Proovd
Next.js vs. muut kehykset
| 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 |
Pikakorjauksen tarkistuslista
- Vahvistetussa raaka-HTML-tulosteessa on oikeat tagit (ei vain selaimen DOM)
- Lisätty eksplisiittinen uudelleentarkistus tai välimuisti: "no-store" noutamiseen generateMetadata sisällä
- Tarkistettiin CDN/edge-välimuistin otsikot vanhentuneen HIT:n varalta
- Vahvistettiin, onko reitti täysin staattinen ilman ISR
- Suljettu pois sosiaalisen alustan oman välimuistin todellisena syynä
- Vahvistettiin lopullinen live-ulostulo numerolla Proovd
Usein kysytyt kysymykset
Miksi og:image päivittyy selaimessa, mutta ei Facebook tai LinkedIn?
Sovelluksesi Next.js näyttää jo todennäköisesti oikean tunnisteen. Alusta näyttää kopion, joka on tallennettu välimuistiin ennen korjausta. Käytä kyseisen alustan omaa välimuistin päivitystyökalua koodin muuttamisen sijaan.
Poistaako revalidating: 0 välimuistin tallennuksen kokonaan käytöstä?
Asetus revalidate: 0 pakottaa tehokkaasti dynaamisen hahmontamisen kyseiselle haulle jokaisessa pyynnössä, kuten cache: "no-store". Käytä sitä säästeliäästi, koska se poistaa välimuistin suorituskykyedun.
Aiheeseen liittyvät artikkelit
Varmista, mitä Next.js sovelluksesi todella palvelee
Tarkista live-metatietosi ilmaiseksi käyttämällä Proovd. Se näyttää tarkalleen, mitä HTML-koodissasi on juuri nyt, riippumatta alustan välimuistista.