מטמון אתרים: למה השינויים באתר לא מופיעים ואיך מנקים כל שכבה
תקלות וורדפרס

מטמון אתרים: למה השינויים באתר לא מופיעים ואיך מנקים כל שכבה

שמרת שינוי בוורדפרס, רענן את העמוד, והגרסה הישנה עדיין שם. ברוב המקרים השינוי נשמר בסדר גמור, ומה שאתה רואה הוא עותק ישן ששמור באחת משכבות מטמון אתרים: הדפדפן שלך, תוסף המטמון, השרת או רשת ה-CDN. כל שכבה שומרת עותק משלה, וכל עוד שכבה אחת לא נוקתה, היא ממשיכה להגיש את הגרסה הישנה.

הפתרון הוא לעבור על השכבות לפי הסדר, מהקרובה אליך ועד הרחוקה, ולנקות כל אחת. במדריך הזה הסברתי לכל שכבה איך מגלים שהיא זו שתקועה ואיך מנקים אותה, כולל מקרה אמיתי שבו השכבה האחרונה לא נוקתה אף פעם.

הטבלה מסכמת איך מזהים איזו שכבה מחזיקה את הגרסה הישנה:

מה רואיםאיזו שכבה תקועהאיפה לחפש
בחלון גלישה בסתר מופיעה הגרסה החדשה, והדפדפן הרגיל מראה את הישנההדפדפן שלךDelete browsing data, ובו Cached images and files
בחלון גלישה בסתר, בלי להיות מחובר, עדיין רואים את הגרסה הישנה, ועם ?nowprocket השינוי מופיעתוסף המטמוןSettings > WP Rocket, בלשונית Dashboard
ניקית את תוסף המטמון, ובחלון גלישה בסתר השינוי עדיין לא מופיעמטמון השרת והאחסוןכותרות התגובה בלשונית Network, ולוח הבקרה של האחסון
בכותרות התגובה של העמוד CF-Cache-Status הוא HITה-CDN (Cloudflare)Cache Rules, ו-Purge Cache בלוח הבקרה של Cloudflare
גם אחרי ניקוי של כל השכבות השינוי לא מופיעהבעיה בשמירה ולא במטמוןהעמוד בעורך, ו-wp-content/debug.log

לפני שמשנים הגדרות מטמון או נוגעים בקבצי שרת, כדאי לקחת גיבוי מלא של הקבצים ושל מסד הנתונים. ניקוי מטמון עצמו לא מוחק תוכן, אבל שינוי הגדרות כן יכול לשבור דברים.

איך עובד מטמון אתרים: ארבע השכבות

מטמון הוא עותק שמור של תוכן, כדי שלא יצטרכו לבנות או להוריד אותו מחדש בכל ביקור. באתר וורדפרס טיפוסי יש עד ארבע שכבות:

  • הדפדפן: שומר במחשב של הגולש קבצים כמו תמונות, CSS ו-JavaScript, לפי כותרות כמו Cache-Control ו-Expires שהשרת שולח.
  • תוסף המטמון: תוספים כמו WP Rocket, WP Super Cache או W3 Total Cache שומרים את העמודים כקבצים סטטיים ומגישים אותם בלי להריץ את וורדפרס מחדש.
  • השרת: מטמון ברמת השרת, למשל Varnish שיושב לפני האתר, או מטמון אובייקטים כמו Redis או Memcached ששומר נתונים שנשלפו ממסד הנתונים.
  • CDN: רשת כמו Cloudflare ששומרת עותקים בשרתים שלה ומגישה אותם לגולשים ממקום קרוב אליהם.

מי שקובע כמה זמן כל עותק נשאר הוא בעיקר השרת, דרך כותרות HTTP. לפי התיעוד של וורדפרס, כותרות כמו Cache-Control (ובתוכה max-age) ו-Expires אומרות לדפדפן לשמור קבצים שלא משתנים, ולבדוק מול השרת אם הם השתנו במקום להוריד אותם שוב. גם Cloudflare מתנהג לפי אותן כותרות: הוא לא שומר תגובה כש-Cache-Control מוגדר כ-private, no-store, no-cache או max-age=0, או כשהתגובה כוללת Set-Cookie. זו אחת הסיבות שקשה לנחש מה קורה במטמון אתרים: אותו עמוד יכול להישמר בשכבה אחת ולא להישמר בשכבה אחרת.

כשהשינויים באתר לא מופיעים, השאלה היא איזו מהשכבות מחזיקה עותק ישן. מתחילים מהדפדפן, כי זו הבדיקה הכי מהירה.

שכבה 1: מטמון אתרים בדפדפן שלך

הבדיקה הראשונה היא לפתוח את העמוד בחלון גלישה בסתר או בדפדפן אחר. אם שם מופיעה הגרסה החדשה, והדפדפן הרגיל מראה את הישנה, הבעיה אצלך בלבד, והגולשים שלך לא בהכרח רואים את מה שאתה רואה.

במקרה כזה מנקים את המטמון של הדפדפן. בכרום לוחצים על תפריט More בפינה הימנית העליונה, בוחרים Delete browsing data, בוחרים טווח זמן, מסמנים את Cached images and files ומאשרים ב-Delete data. אחרי ניקוי כזה אתרים מסוימים ייטענו קצת לאט יותר בפעם הראשונה, כי התמונות יורדות מחדש.

שכבה 2: תוסף המטמון בוורדפרס

תוסף מטמון שומר עמודים מוכנים. אם הוא לא ניקה את העותק אחרי השינוי שלך, גם גולש חדש יקבל את הגרסה הישנה. ב-WP Rocket, לפי התיעוד שלו, המטמון מתנקה אוטומטית ברוב המצבים הנפוצים, אבל לא בכולם.

אם בחלון גלישה בסתר, בלי להיות מחובר, אתה עדיין רואה את הגרסה הישנה, התוסף הוא חשוד מרכזי. ב-WP Rocket אפשר להוסיף לסוף הכתובת ?nowprocket, שעוקף את האופטימיזציות של התוסף. אם בגרסה הזו השינוי מופיע, המטמון של התוסף תקוע. רק אל תשתמש בטריק הזה כדי למדוד מהירות. פעם מדדתי ככה, והמספרים יצאו חסרי ערך, כי התוסף פשוט לא מאיץ כתובות עם תוספת כזו.

כדי לנקות אותו ב-WP Rocket נכנסים ל-Settings > WP Rocket, ובלשונית Dashboard לוחצים על Clear and preload cache. אפשר גם דרך התפריט של התוסף בסרגל הניהול העליון, ולעמוד בודד דרך הקישור Clear this cache ברשימת העמודים. בתוספים אחרים יש כפתור מקביל, בדרך כלל בהגדרות התוסף או בסרגל הניהול.

שכבה 3: מטמון השרת והאחסון

הרבה חברות אחסון מפעילות מטמון משלהן, מחוץ לוורדפרס. התיעוד של וורדפרס מתאר שרתי מטמון שיושבים "לפני" שרת האתר, כמו Varnish, ומטמון אובייקטים כמו Redis או Memcached.

החשד עובר לשכבה הזו כשניקית את תוסף המטמון, ובחלון גלישה בסתר השינוי עדיין לא מופיע. כדי לבדוק, פותחים את כלי המפתחים בדפדפן (Developer Tools), עוברים ללשונית Network, מרעננים את העמוד ולוחצים על הבקשה הראשונה. בכותרות התגובה (Response Headers) מחפשים כותרות שקשורות למטמון. השמות משתנים בין חברות אחסון, ואם לא ברור מה אתה רואה, אפשר לשאול את התמיכה שלהם אם יש מטמון בשרת ואיך מנקים אותו.

את הניקוי עושים מלוח הבקרה של האחסון, באפשרות שנקראת בדרך כלל Purge או Flush, או דרך התמיכה שלהם. אם יש מטמון אובייקטים, מנקים גם אותו. מבחינת וורדפרס זה בטוח: לפי התיעוד, נתונים במטמון אובייקטים אמורים להיבנות מחדש מעצמם, ולא הולך לאיבוד מידע.

שכבה 4: ה-CDN, ומקרה שבו אף אחד לא ניקה את המטמון

אם אתה לא בטוח מה זה בדיוק CDN, זו בקצרה רשת שרתים שמפזרת עותקים של האתר קרוב לגולש. ב-Cloudflare, לפי התיעוד שלהם, קבצי HTML לא נשמרים במטמון כברירת מחדל, ונשמרים רק קבצים לפי סיומת, כמו CSS, JS ותמונות. אבל אם מישהו הגדיר חוק מטמון שהופך את כל האתר לזכאי למטמון, שנקרא Cache Everything, גם העמודים עצמם נשמרים בשרתים של Cloudflare. מאותו רגע Cloudflare מגיש את העותק שלו, ומה שקורה בוורדפרס לא משפיע עליו עד שמנקים אותו.

מקרה אמיתי מהעבודה שלי: אתר שהיה מאחורי Cloudflare במצב Cache Everything, ושום דבר לא ניקה את המטמון בקצה, ולכן שינויים לא הופיעו לגולשים.

כדי לבדוק אם זה המצב אצלך, מחפשים בלשונית Network, בכותרות התגובה של העמוד, את CF-Cache-Status. אם הערך הוא HIT, העמוד הגיע מהמטמון של Cloudflare ולא מהשרת שלך. וב-Cloudflare, תחת Cache Rules, כדאי לבדוק אם יש חוק שמגדיר Eligible for cache לכל האתר.

הניקוי נעשה בלוח הבקרה של Cloudflare: נכנסים לעמוד Configuration, ותחת Purge Cache בוחרים Purge Everything ומאשרים (ההוראות הרשמיות). אחרי זה הבקשה הבאה לכל עמוד תחזיר ל-CF-Cache-Status את הערך MISS, כלומר Cloudflare משך מהשרת את הגרסה העדכנית. Cloudflare עצמם ממליצים לנקות לפי כתובת בודדת כשאפשר, במקום לנקות הכול. אם אתה עובד על האתר כמה שעות, יש גם Development Mode, שעוקף את המטמון בקצה למשך שלוש שעות, אבל לא מוחק אותו.

כדאי לדעת גם כמה זמן העותק נשמר: לפי Cloudflare, כשהשרת לא שולח Cache-Control או Expires, תגובות עם קוד 200 נשמרות בקצה כברירת מחדל ל-120 דקות. ובטווח הארוך, אם אתה משאיר את Cache Everything פעיל, חייב להיות משהו שמנקה את שכבת מטמון אתרים הזו ב-Cloudflare אחרי כל עדכון, אחרת הבעיה תחזור. ואם אחרי כל זה עדיין יש התנהגות מוזרה מול Cloudflare, יש מדריך נפרד לתקלות Cloudflare.

ניקוי מטמון באתר: הסדר הנכון

כשאתה לא יודע איזו שכבה תקועה, מנקים מהפנים החוצה: קודם תוסף המטמון, אחר כך מטמון השרת, אחר כך ה-CDN, ובסוף הדפדפן שלך. הסדר חשוב, כי אם תנקה את Cloudflare לפני תוסף המטמון, Cloudflare עלול למשוך מהשרת את אותו עותק ישן שהתוסף עוד מחזיק ולשמור אותו מחדש. אחרי כל ניקוי כדאי לבדוק בחלון גלישה בסתר, ואם יש לך Cloudflare, להסתכל גם על CF-Cache-Status. ניקוי מטמון הוא חלק קבוע מתחזוקת אתרים שוטפת, לצד עדכוני ליבה, תוספים וגיבוי.

אם גם אחרי ניקוי של כל השכבות השינוי לא מופיע, צריך לוודא שהוא באמת נשמר, כלומר לפתוח את העמוד בעורך ולראות שהתוכן החדש שם. אם הוא לא שם, הבעיה בשמירה ולא במטמון, ואז כדאי להפעיל את WP_DEBUG ו-WP_DEBUG_LOG ב-wp-config.php ולבדוק את קובץ wp-content/debug.log, או לבקש מהאחסון את לוג השגיאות של השרת.

מתי לא לגעת לבד בהגדרות המטמון

יש מצבים שבהם עדיף לעצור: אין לך גישה ל-Cloudflare או ללוח הבקרה של האחסון, אתה לא בטוח מי הגדיר את חוקי המטמון ולמה, יש באתר עגלת קניות או אזור אישי שעלולים להיפגע משינוי בהגדרות המטמון, או שניקית הכול והשינויים עדיין לא מופיעים. אם זה המצב, אני מטפל בזה: ממפה את כל שכבות המטמון באתר ומוודא שכל שינוי מגיע לגולשים.

שאלות נפוצות

האם ניקוי מטמון מוחק תוכן מהאתר?

לא. ניקוי מטמון מוחק רק עותקים שמורים, והם נבנים מחדש מהתוכן המקורי בבקשה הבאה. האתר עלול להיטען מעט לאט יותר בפעם הראשונה אחרי הניקוי.

יש לך פרויקט ששווה לדבר עליו?

השיחה ללא עלות ובלי התחייבות 😊