שגיאה 500 באתר וורדפרס: איך מוצאים את הסיבה ומתקנים
תקלות וורדפרס

שגיאה 500 באתר וורדפרס: איך מוצאים את הסיבה ומתקנים

שגיאה 500, או בשמה המלא Internal Server Error, אומרת שהשרת קיבל את הבקשה ולא הצליח להחזיר עמוד. הבעיה נמצאת בצד של האתר או של השרת ולא אצל הגולש, ולכן רענון או ניקוי מטמון בדפדפן בדרך כלל לא יעזרו. אתה עלול להיתקל גם בהודעת 503 Service Unavailable, שבדרך כלל מצביעה על שרת עמוס מדי או בתחזוקה ולא על קוד שנשבר, ולכן גם הבדיקה שם שונה.

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

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

מה המשמעות של קוד שגיאה 500 ולמה לטפל בו מהר

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

מבחינת גוגל, זו שגיאת שרת. לפי התיעוד של Google Search Central, שגיאות 5xx גורמות לסורק להאט את קצב הסריקה של האתר, ביחס למספר הכתובות שמחזירות שגיאה. עמודים שכבר באינדקס נשמרים בהתחלה, אבל אם השגיאה נמשכת הם יוצאים ממנו בסופו של דבר. ב-Search Console עמודים כאלה מופיעים בדוח ההוספה לאינדקס עם הסיבה Server error (5xx). אם אתה רוצה להבין את התמונה הרחבה, כתבתי על זה במדריך למה האתר שלי לא מופיע בגוגל.

יש גם הודעה אחרת שכדאי להכיר: "There has been a critical error on this website", שבעברית מוצגת כ"באתר זה אירעה שגיאה קריטית". זו ההודעה שוורדפרס מציגה כשהיא תופסת שגיאה קטלנית של PHP, והיא מוחזרת עם קוד 500. אם זה מה שאתה רואה, כדאי להסתכל במייל של מנהל האתר. וורדפרס שולחת לשם קישור למצב שחזור (Recovery Mode), שמאפשר להיכנס ללוח הבקרה כשהתוסף או התבנית הבעייתיים מושהים.

שלב 1: להפעיל את הלוג של וורדפרס

כשיש לוג, אין צורך לנחש. הוא מראה איזה קובץ ואיזו שורה גרמו לתקלה.

כדי להפעיל אותו, נכנסים לקבצי האתר ב-FTP או במנהל הקבצים של האחסון, פותחים את wp-config.php ומוסיפים את השורות האלה לפני השורה /* That's all, stop editing! Happy blogging. */:

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 0 );

אם כבר קיימת שורה של WP_DEBUG, משנים אותה ולא מוסיפים שורה כפולה. אחר כך טוענים שוב את העמוד ופותחים את wp-content/debug.log. אם יש שם שורה עם Fatal error, הנתיב שמופיע בה מצביע על האשם. תיקייה בתוך wp-content/plugins היא תוסף, ותיקייה בתוך wp-content/themes היא תבנית.

התיעוד של וורדפרס לא ממליץ להשאיר את WP_DEBUG פעיל באתר חי, ו-Site Health מתריע שקובץ הלוג עלול להיות נגיש לכל אחד. לכן כשמסיימים, מחזירים את הערך ל-false ומוחקים את הקובץ. ואם הלוג ריק, סביר שהשגיאה קורית לפני שוורדפרס נטענת, ואז הקובץ הבא לבדוק הוא .htaccess.

שלב 2: קובץ .htaccess פגום

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

כך בודקים ומתקנים:

  1. ב-FTP נכנסים לתיקייה הראשית של האתר ומשנים את שם הקובץ .htaccess ל-.htaccess_old. קבצים שמתחילים בנקודה מוסתרים בהרבה תוכנות FTP, ולפעמים צריך להפעיל הצגה של קבצים מוסתרים.
  2. טוענים את האתר. אם הוא עלה, הקובץ היה הבעיה.
  3. נכנסים ללוח הבקרה, ל-Settings > Permalinks, ולוחצים על Save Changes. וורדפרס תיצור קובץ חדש. אם מופיעה ההודעה "Permalink structure updated." הכול בסדר. אם מופיעה "You should update your .htaccess now." צריך להעתיק ידנית לקובץ את הכללים שמופיעים בתחתית המסך.

הבלוק הבסיסי של וורדפרס בקובץ נראה כך:

# BEGIN WordPress
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress

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

שלב 3: תוסף או תבנית שנשברו

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

  • תוסף אחד: ב-wp-content/plugins משנים את שם התיקייה של התוסף החשוד. וורדפרס לא תמצא אותו ותשבית אותו.
  • כל התוספים: משנים את שם התיקייה plugins ל-plugins.hold, נכנסים ל-/wp-admin/plugins.php, ואז מחזירים את השם ל-plugins. התוספים יישארו כבויים, וההגדרות שלהם נשמרות. אחר כך מפעילים אותם אחד אחד עד שהשגיאה חוזרת.
  • התבנית: מחליפים זמנית לתבנית ברירת מחדל של וורדפרס. אם הבעיה בקוד שנוסף ידנית ל-functions.php, מתקנים או מסירים את השורה הזו.

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

מי שעובד עם phpMyAdmin יכול גם להשבית את כל התוספים ממסד הנתונים: בטבלה wp_options, בשורה active_plugins, משנים את הערך ל-a:0:{}. אם אתה לא מכיר את הכלי, עדיף להישאר עם שיטת התיקייה.

שלב 4: מגבלת הזיכרון וגרסת ה-PHP

כאן הסימן הוא שגיאה בלוג על מיצוי הזיכרון (memory exhausted), או תקלה שהתחילה אחרי שינוי גרסת PHP בפאנל האחסון.

את מגבלת הזיכרון אפשר להעלות ב-wp-config.php, לפני שורת "That's all, stop editing!". הערך בדוגמה לקוח מהתיעוד של וורדפרס:

define( 'WP_MEMORY_LIMIT', '96M' );

חלק מחברות האחסון לא מאפשרות להעלות את הזיכרון מתוך וורדפרס, ואז צריך לפנות אליהן. התיעוד מזכיר גם שהעלאת זיכרון יכולה להסתיר בעיה אחרת, כך שכדאי לבדוק מה צורך אותו. אם השגיאה התחילה אחרי מעבר לגרסת PHP חדשה, את הגרסה הנוכחית רואים ב-Tools > Site Health > Info, בחלק Server. לפי דף הדרישות של וורדפרס הגרסה המומלצת היא PHP 8.3 ומעלה, אבל תוסף או תבנית ישנים עלולים לא לעבוד איתה. במקרה כזה מאתרים ומעדכנים אותם לפי שלב 3.

שלב 5: קבצי ליבה פגומים, שרת ו-Cloudflare

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

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

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

מתי לעצור ולקרוא למומחה

יש מצבים שבהם כדאי לעצור לפני שממשיכים לבד:

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

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

שאלות נפוצות

מה זה שגיאה 500?

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

האם שגיאה 500 פוגעת בדירוג בגוגל?

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

הגולשים רואים את השגיאה ואני לא. למה?

ייתכן שאתה רואה עותק שמור בדפדפן או במטמון. תבדוק בחלון גלישה פרטית, ותבדוק ב-Search Console אם עמודים מופיעים עם הסיבה Server error (5xx).

שיניתי את השם של .htaccess והאתר עלה, אבל הקישורים לא עובדים. מה עושים?

נכנס ל-Settings > Permalinks ולוחץ על Save Changes. וורדפרס תיצור קובץ חדש עם הכללים הנכונים. אם הקובץ לא ניתן לכתיבה, היא תציג את הכללים בתחתית המסך ותצטרך להעתיק אותם ידנית.

האם התקלה מוחקת את התוכן של האתר?

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

מה ההבדל בין שגיאה 500 לשגיאה 403?

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

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

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