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

wp-emoji טוען 13KB JS render-blocking בכל דף - לחלוטין מיותר במכשירים מודרניים. הסרה בטוחה ומהירה.

החל מ-WordPress 4.2 (2015), הליבה מטמיעה אוטומטית בכל דף סקריפט JavaScript ו-CSS שמתפקדים כ-polyfill לאמוג'י: הם מזהים אם הדפדפן יודע להציג אמוג'י נטיב, ואם לא - טוענים גרפיקה חלופית מ-twemoji.maxcdn.com. ב-2015 זה היה הגיוני. ב-2026, כל מכשיר מודרני (iOS, Android, Windows 10+, macOS, Linux desktop) מציג אמוג'י נטיבית. הסקריפט נשאר אבל ערכו לגולשים אפס.

למה זה משנה

הסקריפט מוסיף לכל דף: 13KB של JavaScript שנטען ב-wp_head כ-render-blocking; קוד inline ב-HTML שמבצע feature detection דרך Canvas API (פעולה יקרה במונחי INP); בקשת DNS חיצונית ל-s.w.org ו-twemoji.maxcdn.com שגוזרת 100-300ms מ-FCP. בסך הכל, ההסרה חוסכת 50-150ms ב-FCP במכשירי נייד עם רשת בינונית, ומשפרת את ציון Lighthouse ב-2-5 נקודות.

ההסרה לא משפיעה על הצגת אמוג'י: דפדפן Safari, Chrome, Firefox, Edge - כולם יציגו 😀 בכל גרסה אחרי 2017. רק מערכות עתיקות מאוד (IE11 על XP, Android 4.x) ידרשו את ה-fallback, ובאתר ייצור 2026 מדובר ב-0.01% מהתנועה. גם משם, הטקסט המקורי יוצג, רק לא בצבע.

איך לזהות

פתח View Source על דף הבית וחפש wp-emoji או twemoji. אם מופיע - הסקריפט פעיל. בדוק גם ב-F12 > Network - אמור להופיע בקשה ל-wp-emoji-release.min.js. כלי נוסף: PageSpeed Insights בקטגוריית "Reduce unused JavaScript" יציג את הקובץ הזה כמועמד להסרה.

איך לתקן

שלוש שיטות, מהקלה לידנית:

שיטה 1: תוסף RankPlus. בעמוד אופטימיזציית הסריקה הפעל "Disable Emojis". זו הדרך המומלצת אם RankPlus כבר מותקן.

שיטה 2: תוסף ייעודי. התקן "Disable Emojis (תקנות הגנת מידע Friendly)" של Ryan Hellyer - תוסף קטן ויעיל בלי הגדרות.

שיטה 3: ידנית ב-functions.php של תבנית ילד:

remove_action('wp_head', 'print_emoji_detection_script', 7);
remove_action('wp_print_styles', 'print_emoji_styles');
remove_action('admin_print_scripts', 'print_emoji_detection_script');
remove_action('admin_print_styles', 'print_emoji_styles');
remove_filter('the_content_feed', 'wp_staticize_emoji');
remove_filter('comment_text_rss', 'wp_staticize_emoji');
remove_filter('wp_mail', 'wp_staticize_emoji_for_email');

add_filter('tiny_mce_plugins', function ($plugins) {
    return array_diff($plugins, ['wpemoji']);
});

add_filter('wp_resource_hints', function ($urls, $relation_type) {
    if ('dns-prefetch' === $relation_type) {
        $urls = array_filter($urls, function ($url) {
            return strpos($url, 's.w.org') === false;
        });
    }
    return $urls;
}, 10, 2);

אחרי כל שיטה, נקה page cache (WP Rocket, LiteSpeed Cache, W3 Total Cache) - דפים מקושיים שכוללים את הסקריפט יישלחו עם הסקריפט עד שה-cache יתחדש.

טעויות נפוצות

הטעות הראשונה: להוריד רק את print_emoji_detection_script ולשכוח את שאר ההוקים - DNS prefetch ל-s.w.org נשאר, וגם ה-emoji בעורכי הקלאסי. הטעות השנייה: להוסיף את הקוד ב-functions.php של תבנית ה-parent ולא של ה-child - שדרוג של התבנית ימחק את השינוי. הטעות השלישית: להניח שגוגל ימשיך לאנדקס נכון אחרי ההסרה - ה-feature detection לא קשור ל-SEO, אבל אם תוכן הפוסט מכיל אמוג'י כטקסט (לא תמונה), Googlebot ממילא קורא אותם נכון בלי הסקריפט.

בדיקה לאחר תיקון

טען מחדש את האתר ב-incognito ובדוק View Source - wp-emoji או twemoji לא צריכים להופיע. ב-F12 > Network, סנן emoji - אמור להיות 0 בקשות. הרץ PageSpeed Insights - הציון הכללי צריך לעלות ב-2-5 נקודות, וקטגוריית "Reduce unused JavaScript" צריכה לרדת. בדוק שאמוג'י בפוסטים עדיין מוצגים: 🚀 ❤️ 🎉 - אמורים להיראות נורמלי.

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