Next.js מטא נתונים לא מתעדכנים? הנה למה
לא בטוח אם זה הקוד שלך או מטמון?
בדוק את זה בחינם עם Proovd. זה מראה בדיוק אילו מטא נתונים כתובת האתר החיה שלך מגישה כעת, ללא תלות במטמון של כל פלטפורמה עצמה.
תשובה מהירה
- רוב המקרים הם מטמון הנתונים של Next.js עצמו או מטמון CDN המגיש HTML מיושן, לא באג קוד
- generateMetadata ברכיב שרת פועל מחדש רק כאשר מטמון האחזור הבסיסי שלו מקבל תוקף מחדש
- השאר הם בדרך כלל המטמון של הפלטפורמה (Facebook, LinkedIn וכו'), לא Next.js. בדוק את שניהם לפני שאתה מניח שאחד מהם
דוגמה ניתנת לשחזור
זה נראה נכון אבל ימשיך להגיש מטא נתונים מיושנים לאחר שינוי תוכן:
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 כאן נשמרת על ידי מטמון הנתונים של Next.js כברירת מחדל. אם post.title או post.image משתנה ב-CMS שלך, פונקציה זו לא תראה את הערך החדש עד שהמטמון יתוקף מחדש. ללא אסטרטגיה מפורשת, זה יכול להיות לא עד הבנייה המלאה הבאה.
מדוע המטא נתונים שלך לא מתעדכנים
האחזור הבסיסי נשמר במטמון
כברירת מחדל, fetch() בתוך generateMetadata מאוחסן במטמון ללא הגבלת זמן בנתב האפליקציות. תקן על ידי הגדרת חלון אימות מפורש:
const post = await fetch(url, { next: { revalidate: 60 } }).then(r => r.json());
או בטל את הסכמתך לשמירת מטמון לחלוטין עבור בקשה זו:
const post = await fetch(url, { cache: "no-store" }).then(r => r.json());
המסלול נוצר באופן סטטי
אם המסלול משתמש ב-generateStaticParams ללא תצורת אימות מחדש, המסלול כולו, כולל מטא-נתונים, נקלט בזמן הבנייה. הוספת export const revalidate = 3600; ברמת העמוד מאלצת חידוש תקופתי.
מטמון CDN או edge משרת את ה-HTML הישן
גם אם המבנה שלך נכון, רשת Edge של Vercel, Cloudflare, או CDN אחר מול האפליקציה שלך יכולה להגיש תגובת HTML שמורה במטמון שקודמת לתיקון שלך. בדוק את כותרות התגובה:
curl -I https://yoursite.com/blog/post-slug
חפש x-vercel-cache: HIT או כותרת דומה של CDN. HIT אומר שאתה מסתכל על עותק שמור, לא בפריסה האחרונה שלך.
opengraph-image.ts אינו קולט נתונים חדשים
אם אתה משתמש במוסכמה מבוססת הקבצים opengraph-image.ts, Next.js יוצר תמונה סטטית בזמן הבנייה כברירת מחדל. תוכן דינמי בתוכו כפוף לאותם כללי אחסון במטמון כמו כל רכיב שרת אחר, אז הוסף אימות מפורש אם הוא צריך להישאר טרי.
זה למעשה המטמון של הפלטפורמה, לא שלך
אזעקת השווא הנפוצה ביותר. האפליקציה שלך יכולה להגיש מטא נתונים טריים לחלוטין בזמן ש-Facebook, LinkedIn, או Slack עדיין מציגים תצוגה מקדימה שהם שמרו לפני ימים במטמון. אשר את מה שהשרת שלך שולח לפני נגיעה בקוד Next.js כלשהו. עיין במדריך שלנו לניקוי מטמון OG בכל פלטפורמה.
מדריך תיקון שלב אחר שלב
- הפעל
curl -s https://yoursite.com/page | grep -i "og:"כדי לראות מה השרת שלך באמת שולח - בדוק אם יש כותרת CDN מטמון
HITעםcurl -I https://yoursite.com/page - הוסף מטמון
revalidateאו: "no-store"לאחזורים בתוךgenerateMetadata - כפה על פריסה חדשה כדי לשלול מטמון בנייה מיושן
- אמת את התוצאה החיה עם Proovd
Next.js לעומת מסגרות אחרות
| 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 |
רשימת רשימת תיקון מהירה
- פלט HTML גולמי שאושר כולל את התגים הנכונים (לא רק DOM של הדפדפן)
- נוסף אימות מפורש או מטמון: "ללא חנות" לאחזורים בתוך generateMetadata
- בדק את כותרות המטמון CDN/edge עבור HIT מעופש
- אושר אם המסלול סטטי לחלוטין ללא ISR
- שלל את המטמון של הפלטפורמה החברתית עצמה כגורם האמיתי
- אימת את הפלט החי הסופי עם Proovd
שאלות נפוצות
מדוע og:image שלי מתעדכן בדפדפן אבל לא בFacebook או LinkedIn?
סביר להניח שהאפליקציה Next.js שלך כבר מציגה את התג הנכון. הפלטפורמה מציגה עותק שנשמר במטמון לפני התיקון שלך. השתמש בכלי לרענון המטמון של אותה פלטפורמה במקום לשנות קוד נוסף.
האם תוקף מחדש: 0 משבית לחלוטין את השמירה במטמון?
הגדרה revalidate: 0 מאלצת למעשה רינדור דינמי עבור האחזור הזה בכל בקשה, בדומה ל-cache: "no-store". השתמש בו במשורה מכיוון שהוא מסיר את יתרון הביצועים של שמירה במטמון.
מאמרים קשורים
אשר מה האפליקציה שלך Next.js באמת מגישה
בדוק את המטא נתונים החיים שלך בחינם עם Proovd. זה מראה בדיוק מה יש ב-HTML שלך עכשיו, ללא תלות במטמון של כל פלטפורמה.